aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--HOWTO/INSTALL.md48
-rw-r--r--configure.in3
-rw-r--r--erts/configure.in41
-rw-r--r--erts/doc/src/erl.xml48
-rw-r--r--erts/doc/src/erl_driver.xml28
-rw-r--r--erts/doc/src/erl_nif.xml122
-rw-r--r--erts/doc/src/erlang.xml100
-rw-r--r--erts/doc/src/notes.xml2
-rw-r--r--erts/emulator/Makefile.in1
-rw-r--r--erts/emulator/beam/beam_emu.c9
-rw-r--r--erts/emulator/beam/beam_load.h1
-rw-r--r--erts/emulator/beam/big.c9
-rw-r--r--erts/emulator/beam/big.h4
-rw-r--r--erts/emulator/beam/erl_alloc.c3
-rw-r--r--erts/emulator/beam/erl_async.c22
-rwxr-xr-xerts/emulator/beam/erl_bif_info.c35
-rw-r--r--erts/emulator/beam/erl_db_util.c4
-rw-r--r--erts/emulator/beam/erl_driver.h10
-rw-r--r--erts/emulator/beam/erl_gc.c2
-rw-r--r--erts/emulator/beam/erl_init.c304
-rw-r--r--erts/emulator/beam/erl_lock_check.c3
-rw-r--r--erts/emulator/beam/erl_nif.c151
-rw-r--r--erts/emulator/beam/erl_nif.h17
-rw-r--r--erts/emulator/beam/erl_nif_api_funcs.h14
-rw-r--r--erts/emulator/beam/erl_port_task.c5
-rw-r--r--erts/emulator/beam/erl_process.c626
-rw-r--r--erts/emulator/beam/erl_process.h104
-rw-r--r--erts/emulator/beam/erl_term.h3
-rw-r--r--erts/emulator/beam/erl_vm.h3
-rwxr-xr-xerts/emulator/beam/global.h14
-rw-r--r--erts/emulator/beam/utils.c21
-rw-r--r--erts/emulator/drivers/common/efile_drv.c33
-rw-r--r--erts/emulator/drivers/common/inet_drv.c23
-rw-r--r--erts/emulator/sys/unix/sys.c2
-rw-r--r--erts/emulator/sys/win32/erl_win_dyn_driver.h4
-rw-r--r--erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c4
-rw-r--r--erts/emulator/test/driver_SUITE_data/otp_9302_drv.c2
-rw-r--r--erts/emulator/test/driver_SUITE_data/sys_info_base_drv.c4
-rw-r--r--erts/emulator/test/driver_SUITE_data/sys_info_prev_drv.c4
-rw-r--r--erts/emulator/test/match_spec_SUITE.erl9
-rw-r--r--erts/emulator/test/nif_SUITE.erl19
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_SUITE.c47
-rw-r--r--erts/etc/common/erlexec.c12
-rw-r--r--erts/etc/unix/cerl.src7
-rw-r--r--erts/include/erl_native_features_config.h.in21
-rw-r--r--erts/lib_src/Makefile.in1
-rw-r--r--erts/preloaded/ebin/erlang.beambin97916 -> 98008 bytes
-rw-r--r--erts/preloaded/ebin/prim_file.beambin44612 -> 44880 bytes
-rw-r--r--erts/preloaded/src/erlang.erl7
-rw-r--r--erts/preloaded/src/prim_file.erl17
-rw-r--r--erts/test/z_SUITE.erl4
-rw-r--r--erts/vsn.mk2
-rw-r--r--lib/asn1/doc/src/asn1_ug.xml90
-rw-r--r--lib/asn1/doc/src/asn1ct.xml25
-rw-r--r--lib/asn1/src/asn1ct.erl29
-rw-r--r--lib/asn1/src/asn1ct_check.erl45
-rw-r--r--lib/asn1/src/asn1ct_constructed_per.erl68
-rw-r--r--lib/asn1/src/asn1ct_gen.erl7
-rw-r--r--lib/asn1/src/asn1ct_gen_ber_bin_v2.erl122
-rw-r--r--lib/asn1/src/asn1ct_gen_per.erl22
-rw-r--r--lib/asn1/src/asn1ct_imm.erl47
-rw-r--r--lib/asn1/src/asn1ct_value.erl6
-rw-r--r--lib/asn1/src/asn1rtt_ber.erl65
-rw-r--r--lib/asn1/src/asn1rtt_ext.erl2
-rw-r--r--lib/asn1/src/asn1rtt_per_common.erl37
-rw-r--r--lib/asn1/test/asn1_SUITE.erl44
-rw-r--r--lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl36
-rw-r--r--lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl4
-rw-r--r--lib/asn1/test/h323test.erl14
-rw-r--r--lib/asn1/test/testChoExtension.erl4
-rw-r--r--lib/asn1/test/testChoExternal.erl20
-rw-r--r--lib/asn1/test/testChoOptional.erl12
-rw-r--r--lib/asn1/test/testChoRecursive.erl4
-rw-r--r--lib/asn1/test/testChoTypeRefCho.erl2
-rw-r--r--lib/asn1/test/testChoTypeRefPrim.erl22
-rw-r--r--lib/asn1/test/testChoTypeRefSeq.erl27
-rw-r--r--lib/asn1/test/testChoTypeRefSet.erl27
-rw-r--r--lib/asn1/test/testConstraints.erl8
-rw-r--r--lib/asn1/test/testFragmented.erl4
-rw-r--r--lib/asn1/test/testInfObj.erl8
-rw-r--r--lib/asn1/test/testMergeCompile.erl44
-rw-r--r--lib/asn1/test/testParameterizedInfObj.erl78
-rw-r--r--lib/asn1/test/testPrimExternal.erl2
-rw-r--r--lib/asn1/test/testPrimStrings.erl317
-rw-r--r--lib/asn1/test/testSeqExtension.erl4
-rw-r--r--lib/asn1/test/testSeqExternal.erl18
-rw-r--r--lib/asn1/test/testSeqOf.erl26
-rw-r--r--lib/asn1/test/testSeqOfExternal.erl63
-rw-r--r--lib/asn1/test/testSeqOfTag.erl72
-rw-r--r--lib/asn1/test/testSeqPrim.erl6
-rw-r--r--lib/asn1/test/testSeqSetDefaultVal.erl15
-rw-r--r--lib/asn1/test/testSeqTag.erl36
-rw-r--r--lib/asn1/test/testSeqTypeRefCho.erl8
-rw-r--r--lib/asn1/test/testSeqTypeRefPrim.erl18
-rw-r--r--lib/asn1/test/testSeqTypeRefSeq.erl18
-rw-r--r--lib/asn1/test/testSeqTypeRefSet.erl18
-rw-r--r--lib/asn1/test/testSetExternal.erl18
-rw-r--r--lib/asn1/test/testSetOf.erl6
-rw-r--r--lib/asn1/test/testSetOfExternal.erl54
-rw-r--r--lib/asn1/test/testSetOfTag.erl72
-rw-r--r--lib/asn1/test/testSetTag.erl36
-rw-r--r--lib/asn1/test/testSetTypeRefCho.erl8
-rw-r--r--lib/asn1/test/testSetTypeRefPrim.erl18
-rw-r--r--lib/asn1/test/testSetTypeRefSeq.erl18
-rw-r--r--lib/asn1/test/testSetTypeRefSet.erl18
-rw-r--r--lib/asn1/test/testTimer.erl242
-rw-r--r--lib/asn1/test/testTypeValueNotation.erl2
-rw-r--r--lib/common_test/doc/src/run_test_chapter.xml2
-rw-r--r--lib/crypto/src/Makefile7
-rw-r--r--lib/crypto/src/crypto.app.src14
-rw-r--r--lib/crypto/src/crypto_app.erl39
-rw-r--r--lib/crypto/src/crypto_server.erl68
-rw-r--r--lib/crypto/src/crypto_sup.erl39
-rw-r--r--lib/debugger/priv/erlang_bug.pngbin2632 -> 4723 bytes
-rw-r--r--lib/dialyzer/src/dialyzer.erl15
-rw-r--r--lib/dialyzer/src/dialyzer_cl.erl8
-rw-r--r--lib/dialyzer/src/dialyzer_contracts.erl90
-rw-r--r--lib/dialyzer/src/dialyzer_dataflow.erl1058
-rw-r--r--lib/dialyzer/src/dialyzer_dep.erl3
-rw-r--r--lib/dialyzer/src/dialyzer_succ_typings.erl82
-rw-r--r--lib/dialyzer/src/dialyzer_typesig.erl355
-rw-r--r--lib/dialyzer/test/Makefile1
-rw-r--r--lib/dialyzer/test/dialyzer.cover3
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/crash2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/ets1
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/ewgi2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/inf_loop12
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/inf_loop25
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/int4
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/modules3
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/my_queue2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/opaque1
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/queue1
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/simple87
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/wings2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl10
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/inf_loop2.erl175
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl655
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl1300
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_adt.erl17
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl60
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl65
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_adt.erl28
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl77
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_adt.erl138
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl571
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/simple2_api.erl125
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl9
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/zoltan_adt.erl5
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl4
-rw-r--r--lib/dialyzer/vsn.mk2
-rwxr-xr-xlib/diameter/bin/diameterc4
-rw-r--r--lib/diameter/doc/src/diameter.xml7
-rw-r--r--lib/diameter/doc/src/diameter_make.xml18
-rw-r--r--lib/diameter/doc/src/diameter_sctp.xml36
-rw-r--r--lib/diameter/doc/src/seealso.ent3
-rw-r--r--lib/diameter/src/base/diameter_peer_fsm.erl10
-rw-r--r--lib/diameter/src/base/diameter_service.erl5
-rw-r--r--lib/diameter/src/base/diameter_stats.erl5
-rw-r--r--lib/diameter/src/base/diameter_traffic.erl14
-rw-r--r--lib/diameter/src/base/diameter_watchdog.erl21
-rw-r--r--lib/diameter/src/compiler/diameter_dict_util.erl37
-rw-r--r--lib/diameter/src/compiler/diameter_make.erl14
-rw-r--r--lib/diameter/src/diameter.appup.src83
-rw-r--r--lib/diameter/src/transport/diameter_sctp.erl27
-rw-r--r--lib/diameter/test/diameter_compiler_SUITE.erl9
-rw-r--r--lib/diameter/vsn.mk4
-rw-r--r--lib/hipe/cerl/erl_bif_types.erl1793
-rw-r--r--lib/hipe/cerl/erl_types.erl2025
-rw-r--r--lib/kernel/doc/src/file.xml16
-rw-r--r--lib/kernel/src/file.erl15
-rw-r--r--lib/kernel/test/kernel_SUITE.erl80
-rw-r--r--lib/kernel/test/sendfile_SUITE.erl90
-rw-r--r--lib/megaco/doc/src/notes.xml59
-rw-r--r--lib/megaco/src/app/megaco.appup.src13
-rw-r--r--lib/megaco/src/binary/depend.mk2
-rw-r--r--lib/megaco/vsn.mk4
-rw-r--r--lib/observer/doc/src/Makefile13
-rw-r--r--lib/observer/doc/src/cdv.xml60
-rw-r--r--lib/observer/doc/src/crashdump.xml23
-rw-r--r--lib/observer/doc/src/crashdump_help.html307
-rw-r--r--lib/observer/doc/src/crashdump_ug.xml427
-rw-r--r--lib/observer/doc/src/ref_man.xml1
-rw-r--r--lib/observer/priv/erlang_observer.pngbin2679 -> 3698 bytes
-rw-r--r--lib/observer/src/Makefile24
-rw-r--r--lib/observer/src/cdv_atom_cb.erl48
-rw-r--r--lib/observer/src/cdv_bin_cb.erl82
-rw-r--r--lib/observer/src/cdv_detail_wx.erl158
-rw-r--r--lib/observer/src/cdv_dist_cb.erl91
-rw-r--r--lib/observer/src/cdv_ets_cb.erl67
-rw-r--r--lib/observer/src/cdv_fun_cb.erl58
-rw-r--r--lib/observer/src/cdv_gen_cb.erl45
-rw-r--r--lib/observer/src/cdv_html_wx.erl128
-rw-r--r--lib/observer/src/cdv_info_wx.erl128
-rw-r--r--lib/observer/src/cdv_int_tab_cb.erl86
-rw-r--r--lib/observer/src/cdv_mem_cb.erl84
-rw-r--r--lib/observer/src/cdv_mod_cb.erl102
-rw-r--r--lib/observer/src/cdv_multi_wx.erl188
-rw-r--r--lib/observer/src/cdv_port_cb.erl103
-rw-r--r--lib/observer/src/cdv_proc_cb.erl156
-rw-r--r--lib/observer/src/cdv_table_wx.erl106
-rw-r--r--lib/observer/src/cdv_term_cb.erl75
-rw-r--r--lib/observer/src/cdv_timer_cb.erl51
-rw-r--r--lib/observer/src/cdv_virtual_list_wx.erl414
-rw-r--r--lib/observer/src/cdv_wx.erl462
-rw-r--r--lib/observer/src/crashdump_viewer.erl2129
-rw-r--r--lib/observer/src/crashdump_viewer.hrl168
-rw-r--r--lib/observer/src/crashdump_viewer_html.erl1440
-rw-r--r--lib/observer/src/etop_tr.erl38
-rw-r--r--lib/observer/src/observer.app.src22
-rw-r--r--lib/observer/src/observer_app_wx.erl27
-rw-r--r--lib/observer/src/observer_defs.hrl11
-rw-r--r--lib/observer/src/observer_html_lib.erl388
-rw-r--r--lib/observer/src/observer_lib.erl395
-rw-r--r--lib/observer/src/observer_perf_wx.erl29
-rw-r--r--lib/observer/src/observer_pro_wx.erl107
-rw-r--r--lib/observer/src/observer_procinfo.erl235
-rw-r--r--lib/observer/src/observer_sys_wx.erl24
-rw-r--r--lib/observer/src/observer_trace_wx.erl7
-rw-r--r--lib/observer/src/observer_tv_table.erl123
-rw-r--r--lib/observer/src/observer_wx.erl48
-rw-r--r--lib/observer/test/crashdump_helper.erl62
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE.erl742
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms13135
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms13285
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms13085
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms13035
-rw-r--r--lib/odbc/configure.in2
-rw-r--r--lib/public_key/doc/src/public_key.xml49
-rw-r--r--lib/public_key/include/public_key.hrl3
-rw-r--r--lib/runtime_tools/c_src/Makefile.in30
-rw-r--r--lib/runtime_tools/c_src/dyntrace.c3
-rw-r--r--lib/runtime_tools/src/observer_backend.erl15
-rw-r--r--lib/sasl/test/sasl_SUITE.erl93
-rw-r--r--lib/snmp/doc/src/notes.xml76
-rw-r--r--lib/snmp/src/app/snmp.appup.src12
-rw-r--r--lib/snmp/vsn.mk4
-rw-r--r--lib/ssh/doc/src/ssh.xml2
-rw-r--r--lib/ssh/src/ssh.erl4
-rw-r--r--lib/ssh/src/ssh_cli.erl15
-rw-r--r--lib/ssl/doc/src/ssl.xml4
-rw-r--r--lib/ssl/src/ssl.erl26
-rw-r--r--lib/ssl/src/ssl_connection.hrl2
-rw-r--r--lib/ssl/src/ssl_handshake.erl16
-rw-r--r--lib/ssl/src/ssl_internal.hrl6
-rw-r--r--lib/ssl/test/ssl_basic_SUITE.erl50
-rw-r--r--lib/ssl/test/ssl_test_lib.erl20
-rw-r--r--lib/ssl/test/ssl_to_openssl_SUITE.erl10
-rw-r--r--lib/stdlib/src/erl_lint.erl13
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl10
-rw-r--r--lib/stdlib/test/stdlib_SUITE.erl80
-rw-r--r--lib/syntax_tools/src/erl_syntax.erl6
-rw-r--r--lib/syntax_tools/src/erl_tidy.erl23
-rw-r--r--lib/wx/api_gen/gen_util.erl10
-rw-r--r--lib/wx/api_gen/wx_gen_cpp.erl14
-rw-r--r--lib/wx/api_gen/wxapi.conf4
-rw-r--r--lib/wx/c_src/Makefile.in7
-rw-r--r--lib/wx/c_src/gen/wxe_events.cpp10
-rw-r--r--lib/wx/c_src/gen/wxe_funcs.cpp13
-rw-r--r--lib/wx/c_src/wxe_callback_impl.cpp (renamed from lib/wx/c_src/wxePrintout.cpp)71
-rw-r--r--lib/wx/c_src/wxe_callback_impl.h75
-rw-r--r--lib/wx/c_src/wxe_driver.c4
-rw-r--r--lib/wx/c_src/wxe_driver.h3
-rw-r--r--lib/wx/c_src/wxe_events.h14
-rw-r--r--lib/wx/c_src/wxe_gl.cpp17
-rw-r--r--lib/wx/c_src/wxe_gl.h25
-rw-r--r--lib/wx/c_src/wxe_helpers.cpp95
-rw-r--r--lib/wx/c_src/wxe_helpers.h122
-rw-r--r--lib/wx/c_src/wxe_impl.cpp461
-rw-r--r--lib/wx/c_src/wxe_impl.h218
-rw-r--r--lib/wx/c_src/wxe_main.cpp163
-rw-r--r--lib/wx/c_src/wxe_memory.h61
-rw-r--r--lib/wx/include/wx.hrl10
-rw-r--r--lib/wx/priv/erlang-logo128.pngbin0 -> 6268 bytes
-rw-r--r--lib/wx/priv/erlang-logo32.pngbin1608 -> 1291 bytes
-rw-r--r--lib/wx/priv/erlang-logo64.pngbin4149 -> 2647 bytes
-rw-r--r--lib/wx/src/gen/wxInitDialogEvent.erl64
-rw-r--r--lib/wx/test/wx_basic_SUITE.erl16
-rw-r--r--lib/wx/test/wx_event_SUITE.erl40
-rw-r--r--system/doc/getting_started/seq_prog.xml4
-rw-r--r--system/doc/reference_manual/code_loading.xml7
-rw-r--r--system/doc/reference_manual/distributed.xml2
-rw-r--r--xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf1
285 files changed, 16369 insertions, 61308 deletions
diff --git a/HOWTO/INSTALL.md b/HOWTO/INSTALL.md
index 92d6737278..702c949297 100644
--- a/HOWTO/INSTALL.md
+++ b/HOWTO/INSTALL.md
@@ -315,6 +315,11 @@ Some of the available `configure` options are:
no automatic dependency handling inbetween applications. So if you disable
an application that another depends on, you also have to disable the
dependant application.
+* `--enable-dirty-schedulers` - Enable the **experimental** dirty schedulers
+ functionality. Note that the dirty schedulers functionality is experimental,
+ and **not supported**. This functionality **will** be subject to backward
+ incompatible changes. Note that you should **not** enable the dirty scheduler
+ functionality on production systems. It is only provided for testing.
If you or your system has special requirements please read the `Makefile` for
additional configuration information.
@@ -680,39 +685,11 @@ If you develop linked-in drivers (shared library) you need to link using
include `-fno-common` in `CFLAGS` when compiling. Use `.so` as the library
suffix.
-Use the `--enable-darwin-64bit` configure flag to build a 64-bit
-binaries on Mac OS X.
+Install `Xcode` from the `AppStore` if it is not already installed.
-Building a fast Erlang VM on Mac OS Lion
-----------------------------------------
-
-Starting with Xcode 4.2, Apple no longer includes a "real" `gcc`
-compiler (not based on the LLVM). Building with `llvm-gcc` or `clang`
-will work, but the performance of the Erlang run-time system will not
-be the best possible.
-
-Note that if you have `gcc-4.2` installed and included in `PATH`
-(from a previous version of Xcode), `configure` will automatically
-make sure that `gcc-4.2` will be used to compile `beam_emu.c`
-(the source file most in need of `gcc`).
-
-If you don't have `gcc-4.2.` and want to build a run-time system with
-the best possible performance, do like this:
-
-Install Xcode from the AppStore if it is not already installed.
-
-If you have Xcode 4.3, or later, you will also need to download
+If you have Xcode 4.3, or later, you will also need to download
"Command Line Tools" via the Downloads preference pane in Xcode.
-Some tools may still be lacking or out-of-date, we recommend using
-[Homebrew](https://github.com/mxcl/homebrew/wiki/installation) or
-Macports to update those tools.
-
-Install MacPorts (<http://www.macports.org/>). Then:
-
- $ sudo port selfupdate
- $ sudo port install gcc45 +universal
-
### Building with wxErlang ###
If you want to build the `wx` application, you will need to get wxWidgets-3.0 (or later)
@@ -720,13 +697,14 @@ If you want to build the `wx` application, you will need to get wxWidgets-3.0 (o
or get it from github:
$ git clone [email protected]:wxWidgets/wxWidgets.git
-Be aware that the wxWidgets-3.0 is a new release of wxWidgets, it is not as matured
+Be aware that the wxWidgets-3.0 is a new release of wxWidgets, it is not as matured
as the old releases and the MacOsX port still lags behind the other ports.
-Configure and build wxWidgets:
+Configure and build wxWidgets (on Mavericks - 10.9):
- $ ./configure --with-cocoa --prefix=/usr/local
- % Optional version and static libs: --with-macosx-version-min=10.9 --disable-shared
+ $ ./configure --with-cocoa --prefix=/usr/local
+ or without support for old versions and with static libs
+ $ ./configure --with-cocoa --prefix=/usr/local --with-macosx-version-min=10.9 --disable-shared
$ make
$ sudo make install
$ export PATH=/usr/local/bin:$PATH
@@ -791,7 +769,7 @@ Copyright and License
%CopyrightBegin%
-Copyright Ericsson AB 1998-2013. All Rights Reserved.
+Copyright Ericsson AB 1998-2014. 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
diff --git a/configure.in b/configure.in
index d33e8bf125..88fd847030 100644
--- a/configure.in
+++ b/configure.in
@@ -196,6 +196,9 @@ AC_ARG_ENABLE(threads,
AS_HELP_STRING([--enable-threads], [enable async thread support])
AS_HELP_STRING([--disable-threads], [disable async thread support]))
+AC_ARG_ENABLE(dirty-schedulers,
+AS_HELP_STRING([--enable-dirty-schedulers], [enable dirty scheduler support]))
+
AC_ARG_ENABLE(halfword-emulator,
AS_HELP_STRING([--enable-halfword-emulator],
[enable halfword emulator (only for 64bit builds)]))
diff --git a/erts/configure.in b/erts/configure.in
index c992fb5bd9..8d245252b5 100644
--- a/erts/configure.in
+++ b/erts/configure.in
@@ -101,7 +101,7 @@ ERL_XCOMP_SYSROOT_INIT
AC_ISC_POSIX
-AC_CONFIG_HEADER($host/config.h:config.h.in include/internal/$host/ethread_header_config.h:include/internal/ethread_header_config.h.in include/$host/erl_int_sizes_config.h:include/erl_int_sizes_config.h.in)
+AC_CONFIG_HEADER($host/config.h:config.h.in include/internal/$host/ethread_header_config.h:include/internal/ethread_header_config.h.in include/$host/erl_int_sizes_config.h:include/erl_int_sizes_config.h.in include/$host/erl_native_features_config.h:include/erl_native_features_config.h.in)
dnl ----------------------------------------------------------------------
dnl Optional features.
dnl ----------------------------------------------------------------------
@@ -123,6 +123,7 @@ AS_HELP_STRING([--enable-bootstrap-only],
with_ssl_zlib=no
enable_hipe=no
enable_sctp=no
+ enable_dirty_schedulers=no
fi
])
@@ -134,6 +135,13 @@ AS_HELP_STRING([--disable-threads], [disable async thread support]),
*) enable_threads=yes ;;
esac ], enable_threads=unknown)
+AC_ARG_ENABLE(dirty-schedulers,
+AS_HELP_STRING([--enable-dirty-schedulers], [enable dirty scheduler support]),
+[ case "$enableval" in
+ no) enable_dirty_schedulers=no ;;
+ *) enable_dirty_schedulers=yes ;;
+ esac ], enable_dirty_schedulers=no)
+
AC_ARG_ENABLE(halfword-emulator,
AS_HELP_STRING([--enable-halfword-emulator],
[enable halfword emulator (only for 64bit builds)]),
@@ -1222,6 +1230,13 @@ esac
if test $emu_threads != yes; then
enable_lock_check=no
enable_lock_count=no
+ AC_MSG_CHECKING(whether dirty schedulers should be enabled)
+ if test "x$enable_dirty_schedulers" != "xno"; then
+ AC_DEFINE(ERL_NIF_DIRTY_SCHEDULER_SUPPORT, 1, [Dirty scheduler support])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
else
# Threads enabled for emulator
EMU_THR_LIB_NAME=$ETHR_LIB_NAME
@@ -1240,7 +1255,17 @@ else
if test "x$enable_lock_count" != "xno"; then
EMU_THR_DEFS="$EMU_THR_DEFS -DERTS_ENABLE_LOCK_COUNT"
fi
-
+
+ AC_MSG_CHECKING(whether dirty schedulers should be enabled)
+ if test "x$enable_dirty_schedulers" != "xno"; then
+ EMU_THR_DEFS="$EMU_THR_DEFS -DERTS_DIRTY_SCHEDULERS"
+ AC_DEFINE(ERTS_DIRTY_SCHEDULERS, 1, [Define if the emulator supports dirty schedulers])
+ AC_DEFINE(ERL_NIF_DIRTY_SCHEDULER_SUPPORT, 1, [Dirty scheduler support])
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+
disable_child_waiter_thread=no
case $host_os in
solaris*)
@@ -3827,10 +3852,16 @@ if test "$enable_dtrace_test" = "yes" ; then
if ! dtrace -h $DTRACE_CPP -Iemulator/beam -o ./foo-dtrace.h -s emulator/beam/erlang_dtrace.d; then
AC_MSG_ERROR([Could not precompile erlang_dtrace.d: dtrace -h failed])
fi
- rm -f foo-dtrace.h
+
+ $RM -f dtest.{o,c}
+ cat > dtest.c <<_DTEST
+ #include "foo-dtrace.h"
+ int main(void) { ERLANG_DIST_PORT_BUSY_ENABLED(); return 0; }
+_DTEST
+ $CC $CFLAGS -c -o dtest.o dtest.c
$RM -f $DTRACE_2STEP_TEST
- if dtrace -G $DTRACE_CPP $DTRACE_BITS_FLAG -Iemulator/beam -o $DTRACE_2STEP_TEST -s emulator/beam/erlang_dtrace.d 2> /dev/null && \
+ if dtrace -G $DTRACE_CPP $DTRACE_BITS_FLAG -Iemulator/beam -o $DTRACE_2STEP_TEST -s emulator/beam/erlang_dtrace.d dtest.o && \
test -f $DTRACE_2STEP_TEST ; then
rm $DTRACE_2STEP_TEST
DTRACE_ENABLED_2STEP=yes
@@ -3838,6 +3869,8 @@ if test "$enable_dtrace_test" = "yes" ; then
else
AC_MSG_NOTICE([dtrace precompilation for 1-stage DTrace successful])
fi
+ $RM -f dtest.{o,c} foo-dtrace.h
+
DTRACE_ENABLED=yes
case $OPSYS in
linux)
diff --git a/erts/doc/src/erl.xml b/erts/doc/src/erl.xml
index 6428a24209..4aa3033f40 100644
--- a/erts/doc/src/erl.xml
+++ b/erts/doc/src/erl.xml
@@ -800,6 +800,54 @@
SMP support enabled (see the <seealso marker="#smp">-smp</seealso>
flag).</p>
</item>
+ <tag><marker id="+SDcpu"><c><![CDATA[+SDcpu DirtyCPUSchedulers:DirtyCPUSchedulersOnline]]></c></marker></tag>
+ <item>
+ <p>Sets the number of dirty CPU scheduler threads to create and dirty
+ CPU scheduler threads to set online when threading support has been
+ enabled. The maximum for both values is 1024, and each value is further
+ limited by the settings for normal schedulers: the number of dirty CPU
+ scheduler threads created cannot exceed the number of normal scheduler
+ threads created, and the number of dirty CPU scheduler threads online
+ cannot exceed the number of normal scheduler threads online (see the
+ <seealso marker="#+S">+S</seealso> and <seealso marker="#+SP">+SP</seealso>
+ flags for more details). By default, the number of dirty CPU scheduler
+ threads created equals the number of normal scheduler threads created,
+ and the number of dirty CPU scheduler threads online equals the number
+ of normal scheduler threads online. <c>DirtyCPUSchedulers</c> may be
+ omitted if <c>:DirtyCPUSchedulersOnline</c> is not and vice versa. The
+ number of dirty CPU schedulers online can be changed at run time via
+ <seealso marker="erlang#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>.
+ </p>
+ <p>This option is ignored if the emulator doesn't have threading support
+ enabled. Currently, <em>this option is experimental</em> and is supported only
+ if the emulator was configured and built with support for dirty schedulers
+ enabled (it's disabled by default).
+ </p>
+ </item>
+ <tag><marker id="+SDPcpu"><c><![CDATA[+SDPcpu DirtyCPUSchedulersPercentage:DirtyCPUSchedulersOnlinePercentage]]></c></marker></tag>
+ <item>
+ <p>Similar to <seealso marker="#+SDcpu">+SDcpu</seealso> but uses percentages to set the
+ number of dirty CPU scheduler threads to create and number of dirty CPU scheduler threads
+ to set online when threading support has been enabled. Specified values must be greater
+ than 0. For example, <c>+SDPcpu 50:25</c> sets the number of dirty CPU scheduler threads
+ to 50% of the logical processors configured and the number of dirty CPU scheduler threads
+ online to 25% of the logical processors available. <c>DirtyCPUSchedulersPercentage</c> may
+ be omitted if <c>:DirtyCPUSchedulersOnlinePercentage</c> is not and vice versa. The
+ number of dirty CPU schedulers online can be changed at run time via
+ <seealso marker="erlang#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>.
+ </p>
+ <p>This option interacts with <seealso marker="#+SDcpu">+SDcpu</seealso> settings.
+ For example, on a system with 8 logical cores configured and 8 logical cores available,
+ the combination of the options <c>+SDcpu 4:4 +SDPcpu 50:25</c> (in either order) results
+ in 2 dirty CPU scheduler threads (50% of 4) and 1 dirty CPU scheduler thread online (25% of 4).
+ </p>
+ <p>This option is ignored if the emulator doesn't have threading support
+ enabled. Currently, <em>this option is experimental</em> and is supported only
+ if the emulator was configured and built with support for dirty schedulers
+ enabled (it's disabled by default).
+ </p>
+ </item>
+ <tag><marker id="+SDio"><c><![CDATA[+SDio IOSchedulers]]></c></marker></tag>
<tag><c><![CDATA[+sFlag Value]]></c></tag>
<item>
<p>Scheduling specific flags.</p>
diff --git a/erts/doc/src/erl_driver.xml b/erts/doc/src/erl_driver.xml
index b453a4861e..c2f7fa4588 100644
--- a/erts/doc/src/erl_driver.xml
+++ b/erts/doc/src/erl_driver.xml
@@ -745,7 +745,7 @@ typedef struct ErlIOVec {
created and decrement it once when the port associated with
the lock terminates. The emulator will also increment the
reference count when an async job is enqueued and decrement
- it after an async job has been invoked, or canceled. Besides
+ it after an async job has been invoked. Besides
this, it is the responsibility of the driver to ensure that
the reference count does not reach zero before the last use
of the lock by the driver has been made. The reference count
@@ -1995,14 +1995,12 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
<c>async_invoke</c> and <c>async_free</c>. It's typically a
pointer to a structure that contains a pipe or event that
can be used to signal that the async operation completed.
- The data should be freed in <c>async_free</c>, because it's
- called if <c>driver_async_cancel</c> is called.</p>
+ The data should be freed in <c>async_free</c>.</p>
<p>When the async operation is done, <seealso marker="driver_entry#ready_async">ready_async</seealso> driver
entry function is called. If <c>ready_async</c> is null in
the driver entry, the <c>async_free</c> function is called
instead.</p>
- <p>The return value is a handle to the asynchronous task, which
- can be used as argument to <c>driver_async_cancel</c>.</p>
+ <p>The return value is a handle to the asynchronous task.</p>
<note>
<p>As of erts version 5.5.4.3 the default stack size for
threads in the async-thread pool is 16 kilowords,
@@ -2040,26 +2038,6 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>driver_async_cancel(long id)</nametext></name>
- <fsummary>Cancel an asynchronous call</fsummary>
- <desc>
- <marker id="driver_async_cancel"></marker>
- <p>This function used to cancel a scheduled asynchronous operation,
- if it was still in the queue. It returned 1 if it succeeded, and
- 0 if it failed.</p>
- <p>Since it could not guarantee success, it was more or less useless.
- The user had to implement synchronization of cancellation anyway.
- It also unnecessarily complicated the implementation. Therefore,
- as of OTP-R15B <c>driver_async_cancel()</c> is deprecated, and
- scheduled for removal in OTP-R17. It will currently always fail,
- and return 0.</p>
- <warning><p><c>driver_async_cancel()</c> is deprecated and will
- be removed in the OTP-R17 release.</p>
- </warning>
-
- </desc>
- </func>
- <func>
<name><ret>int</ret><nametext>driver_lock_driver(ErlDrvPort port)</nametext></name>
<fsummary>Make sure the driver is never unloaded</fsummary>
<desc>
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 7ac8181d47..8b19725c02 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -181,7 +181,11 @@ ok
to dispatch the work to another thread, return
from the native function, and wait for the result. The thread can send
the result back to the calling thread using message passing. Information
- about thread primitives can be found below.</p>
+ about thread primitives can be found below. If you have built your system
+ with <em>the currently experimental</em> support for dirty schedulers,
+ you may want to try out this functionality by dispatching the work to a
+ <seealso marker="#dirty_nifs">dirty NIF</seealso>,
+ which does not have the same duration restriction as a normal NIF.</p>
</description>
<section>
<title>FUNCTIONALITY</title>
@@ -312,6 +316,38 @@ ok
<p>The library initialization callbacks <c>load</c>, <c>reload</c> and
<c>upgrade</c> are all thread-safe even for shared state data.</p>
</item>
+ <tag>Dirty NIFs</tag>
+ <item><p><marker id="dirty_nifs"/><em>Note that the dirty NIF functionality
+ is experimental</em> and that you have to enable support for dirty
+ schedulers when building OTP in order to try the functionality out. Native functions
+ <seealso marker="#lengthy_work">
+ must normally run quickly</seealso>, as explained earlier in this document. They
+ generally should execute for no more than a millisecond. But not all native functions
+ can execute so quickly; for example, functions that encrypt large blocks of data or
+ perform lengthy file system operations can often run for tens of seconds or more.</p>
+ <p>A NIF that cannot execute in a millisecond or less is called a "dirty NIF" since
+ it performs work that the Erlang runtime cannot handle cleanly. Applications
+ that make use of such functions must indicate to the runtime that the functions are
+ dirty so they can be handled specially. To schedule a dirty NIF for execution, the
+ application calls <seealso marker="#enif_schedule_dirty_nif">enif_schedule_dirty_nif</seealso>,
+ passing to it a pointer to the dirty NIF to be executed and indicating with a flag
+ argument whether it expects the operation to be CPU-bound or I/O-bound.</p>
+ <p>All dirty NIFs must ultimately invoke the <seealso marker="#enif_schedule_dirty_nif_finalizer">
+ enif_schedule_dirty_nif_finalizer</seealso> as their final action, passing to it the
+ result they wish to return to the original caller. A finalizer function can either
+ receive the result and return it directly, or it can return a different value instead.
+ For convenience, the NIF API provides the <seealso marker="#enif_dirty_nif_finalizer">
+ enif_dirty_nif_finalizer</seealso> function that applications can use as a finalizer;
+ it simply returns its result argument.</p>
+ <note><p>Dirty NIF support is available only when the emulator is configured with dirty
+ schedulers enabled. This feature is currently disabled by default. To determine whether
+ the dirty NIF API is available, native code can check to see if the C preprocessor macro
+ <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> is defined. Also, if the Erlang runtime was built
+ without threading support, dirty schedulers are disabled. To check at runtime for the presence
+ of dirty scheduler threads, code can call the <seealso marker="#enif_have_dirty_schedulers"><c>
+ enif_have_dirty_schedulers()</c></seealso> API function, which returns true if dirty
+ scheduler threads are present, false otherwise.</p></note>
+ </item>
</taglist>
</section>
<section>
@@ -610,6 +646,18 @@ typedef enum {
See also the <seealso marker="#WARNING">warning</seealso> text at the beginning of this document.</p>
</desc>
</func>
+ <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_dirty_nif_finalizer(ErlNifEnv* env, ERL_NIF_TERM result)</nametext></name>
+ <fsummary>Simple dirty NIF result finalizer</fsummary>
+ <desc>
+ <p>A convenience function that a dirty NIF can use as a finalizer that simply
+ return its <c>result</c> argument as its return value. This function is provided
+ for dirty NIFs with results that should be returned directly to the original caller.</p>
+ <note><p>This function is available only when the emulator is configured with dirty
+ schedulers enabled. This feature is currently disabled by default. To determine whether
+ the dirty NIF API is available, native code can check to see if the C preprocessor macro
+ <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> is defined.</p></note>
+ </desc>
+ </func>
<func><name><ret>int</ret><nametext>enif_equal_tids(ErlNifTid tid1, ErlNifTid tid2)</nametext></name>
<fsummary></fsummary>
<desc><p>Same as <seealso marker="erl_driver#erl_drv_equal_tids">erl_drv_equal_tids</seealso>.
@@ -730,6 +778,22 @@ typedef enum {
and return true, or return false if <c>term</c> is not an unsigned integer or is
outside the bounds of type <c>unsigned long</c>.</p></desc>
</func>
+ <func><name><ret>int</ret><nametext>enif_have_dirty_schedulers()</nametext></name>
+ <fsummary>Runtime check for the presence of dirty scheduler threads</fsummary>
+ <desc>
+ <p>Check at runtime for the presence of dirty scheduler threads. If the emulator is
+ built with threading support, dirty scheduler threads are available and
+ <c>enif_have_dirty_schedulers()</c> returns true. If the emulator was built without
+ threading support, <c>enif_have_dirty_schedulers()</c> returns false.</p>
+ <p>If dirty scheduler threads are not available in the emulator, calls to
+ <c>enif_schedule_dirty_nif</c> and <c>enif_schedule_dirty_nif_finalizer</c> result in
+ the NIF and finalizer functions being called directly within the calling thread.</p>
+ <note><p>This function is available only when the emulator is configured with dirty
+ schedulers enabled. This feature is currently disabled by default. To determine whether
+ the dirty NIF API is available, native code can check to see if the C preprocessor macro
+ <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> is defined.</p></note>
+ </desc>
+ </func>
<func><name><ret>int</ret><nametext>enif_inspect_binary(ErlNifEnv* env, ERL_NIF_TERM bin_term, ErlNifBinary* bin)</nametext></name>
<fsummary>Inspect the content of a binary</fsummary>
<desc><p>Initialize the structure pointed to by <c>bin</c> with
@@ -777,6 +841,20 @@ typedef enum {
Erlang operators <c>=:=</c> and
<c>=/=</c>.</p></desc>
</func>
+ <func><name><ret>int</ret><nametext>enif_is_on_dirty_scheduler(ErlNifEnv* env)</nametext></name>
+ <fsummary>Check to see if executing on a dirty scheduler thread</fsummary>
+ <desc>
+ <p>Check to see if the current NIF is executing on a dirty scheduler thread. If the
+ emulator is built with threading support, calling <c>enif_is_on_dirty_scheduler</c>
+ from within a dirty NIF returns true. It returns false when the calling NIF is a regular
+ NIF or a NIF finalizer, both of which run on normal scheduler threads, or when the emulator
+ is built without threading support.</p>
+ <note><p>This function is available only when the emulator is configured with dirty
+ schedulers enabled. This feature is currently disabled by default. To determine whether
+ the dirty NIF API is available, native code can check to see if the C preprocessor macro
+ <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> is defined.</p></note>
+ </desc>
+ </func>
<func><name><ret>int</ret><nametext>enif_is_pid(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
<fsummary>Determine if a term is a pid</fsummary>
<desc><p>Return true if <c>term</c> is a pid.</p></desc>
@@ -1141,6 +1219,48 @@ typedef enum {
<desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_tryrwlock">erl_drv_rwlock_tryrwlock</seealso>.
</p></desc>
</func>
+ <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_schedule_dirty_nif(ErlNifEnv* env, int flags, ERL_NIF_TERM (*fp)(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]), int argc, const ERL_NIF_TERM argv[])</nametext></name>
+ <fsummary>Schedule a dirty NIF for execution</fsummary>
+ <desc>
+ <p>Schedule dirty NIF <c>fp</c> to execute a long-running operation. The <c>flags</c>
+ argument must be set to either <c>ERL_NIF_DIRTY_JOB_CPU_BOUND</c> if the job is expected to
+ be primarily CPU-bound, or <c>ERL_NIF_DIRTY_JOB_IO_BOUND</c> for jobs that will be
+ I/O-bound. The <c>argc</c> and <c>argv</c> arguments can either be the originals passed
+ into the calling NIF, or they can be values created by the calling NIF. The calling
+ NIF must use the return value of <c>enif_schedule_dirty_nif</c> as its own return value.</p>
+ <p>Be aware that <c>enif_schedule_dirty_nif</c>, as its name implies, only schedules the
+ dirty NIF for future execution. The calling NIF does not block waiting for the dirty NIF to
+ execute and return, which means that the calling NIF can't expect to receive the dirty NIF
+ return value and use it for further operations.</p>
+ <p>A dirty NIF may not invoke the <seealso marker="#enif_make_badarg">enif_make_badarg</seealso>
+ to raise an exception. If it wishes to return an exception, the dirty NIF should pass a
+ regular result indicating the exception details to its finalizer, and allow the finalizer
+ to raise the exception on its behalf.</p>
+ <note><p>This function is available only when the emulator is configured with dirty schedulers
+ enabled. This feature is currently disabled by default. To determine whether the dirty NIF API
+ is available, native code can check to see if the C preprocessor macro
+ <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> is defined.</p></note>
+ </desc>
+ </func>
+ <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_schedule_dirty_nif_finalizer(ErlNifEnv* env, ERL_NIF_TERM result, ERL_NIF_TERM (*fp)(ErlNifEnv* env, ERL_NIF_TERM result))</nametext></name>
+ <fsummary>Schedule a dirty NIF finalizer</fsummary>
+ <desc>
+ <p>When a dirty NIF finishes executing, it must schedule a finalizer function to return
+ its result to the original NIF caller. The dirty NIF passes <c>result</c> as the value it
+ wants the finalizer to use as the return value. The <c>fp</c> argument is a pointer to the
+ finalizer function. The NIF API provides the <seealso marker="#enif_dirty_nif_finalizer">
+ enif_dirty_nif_finalizer</seealso> function that can be used as a finalizer that simply
+ returns its <c>result</c> argument. You are also free to write your own custom finalizer
+ that uses <c>result</c> to derive a different return value, or ignores <c>result</c>
+ entirely and returns a completely different value.</p>
+ <p>Without exception, all dirty NIFs must invoke <c>enif_schedule_dirty_nif_finalizer</c>
+ to complete their execution.</p>
+ <note><p>This function is available only when the emulator is configured with dirty
+ schedulers enabled. This feature is currently disabled by default. To determine whether
+ the dirty NIF API is available, native code can check to see if the C preprocessor macro
+ <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> is defined.</p></note>
+ </desc>
+ </func>
<func><name><ret>ErlNifPid *</ret><nametext>enif_self(ErlNifEnv* caller_env, ErlNifPid* pid)</nametext></name>
<fsummary>Get the pid of the calling process.</fsummary>
<desc><p>Initialize the pid variable <c>*pid</c> to represent the
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index ea753cfaaf..4cf5631727 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.xml
@@ -5194,6 +5194,27 @@ ok
</func>
<func>
<name name="system_flag" arity="2" clause_i="3"/>
+ <fsummary>Set system flag dirty CPU schedulers online</fsummary>
+ <desc>
+ <p><marker id="system_flag_dirty_cpu_schedulers_online"></marker>
+ Sets the amount of dirty CPU schedulers online. Valid range is
+ <![CDATA[1 <= DirtyCPUSchedulersOnline <= N]]> where <c>N</c> is the
+ lesser of the return values of <c>erlang:system_info(dirty_cpu_schedulers)</c> and
+ <c>erlang:system_info(schedulers_online)</c>.
+ </p>
+ <p>Returns the old value of the flag.</p>
+ <p><em>Note that the dirty schedulers functionality is experimental</em>, and
+ that you have to enable support for dirty schedulers when building OTP in
+ order to try the functionality out.</p>
+ <p>For more information see
+ <seealso marker="#system_info_dirty_cpu_schedulers">erlang:system_info(dirty_cpu_schedulers)</seealso>
+ and
+ <seealso marker="#system_info_dirty_cpu_schedulers_online">erlang:system_info(dirty_cpu_schedulers_online)</seealso>.
+ </p>
+ </desc>
+ </func>
+ <func>
+ <name name="system_flag" arity="2" clause_i="4"/>
<fsummary>Set system flag fullsweep_after</fsummary>
<desc>
<p><c><anno>Number</anno></c> is a non-negative integer which indicates
@@ -5211,7 +5232,7 @@ ok
</desc>
</func>
<func>
- <name name="system_flag" arity="2" clause_i="4"/>
+ <name name="system_flag" arity="2" clause_i="5"/>
<fsummary>Set system flag min_heap_size</fsummary>
<desc>
<p>Sets the default minimum heap size for processes. The
@@ -5226,7 +5247,7 @@ ok
</desc>
</func>
<func>
- <name name="system_flag" arity="2" clause_i="5"/>
+ <name name="system_flag" arity="2" clause_i="6"/>
<fsummary>Set system flag min_bin_vheap_size</fsummary>
<desc>
<p>Sets the default minimum binary virtual heap size for processes. The
@@ -5241,7 +5262,7 @@ ok
</desc>
</func>
<func>
- <name name="system_flag" arity="2" clause_i="6"/>
+ <name name="system_flag" arity="2" clause_i="7"/>
<fsummary>Set system flag multi_scheduling</fsummary>
<desc>
<p><marker id="system_flag_multi_scheduling"></marker>
@@ -5279,7 +5300,7 @@ ok
</desc>
</func>
<func>
- <name name="system_flag" arity="2" clause_i="7"/>
+ <name name="system_flag" arity="2" clause_i="8"/>
<type name="scheduler_bind_type"/>
<fsummary>Set system flag scheduler_bind_type</fsummary>
<desc>
@@ -5399,7 +5420,7 @@ ok
</desc>
</func>
<func>
- <name name="system_flag" arity="2" clause_i="8"/>
+ <name name="system_flag" arity="2" clause_i="9"/>
<fsummary>Set system flag scheduler_wall_time</fsummary>
<desc><p><marker id="system_flag_scheduler_wall_time"></marker>
Turns on/off scheduler wall time measurements. </p>
@@ -5409,7 +5430,7 @@ ok
</desc>
</func>
<func>
- <name name="system_flag" arity="2" clause_i="9"/>
+ <name name="system_flag" arity="2" clause_i="10"/>
<fsummary>Set system flag schedulers_online</fsummary>
<desc>
<p><marker id="system_flag_schedulers_online"></marker>
@@ -5425,7 +5446,7 @@ ok
</desc>
</func>
<func>
- <name name="system_flag" arity="2" clause_i="10"/>
+ <name name="system_flag" arity="2" clause_i="11"/>
<fsummary>Set system flag trace_control_word</fsummary>
<desc>
<p>Sets the value of the node's trace control word to
@@ -5785,6 +5806,71 @@ ok
compiled; otherwise, <c>false</c>.
</p>
</item>
+ <tag><marker id="system_info_dirty_cpu_schedulers"><c>dirty_cpu_schedulers</c></marker></tag>
+ <item>
+ <p>Returns the number of dirty CPU scheduler threads used by
+ the emulator. Dirty CPU schedulers execute CPU-bound
+ native functions such as NIFs, linked-in driver code, and BIFs
+ that cannot be managed cleanly by the emulator's normal schedulers.
+ </p>
+ <p>The number of dirty CPU scheduler threads is determined at emulator
+ boot time and cannot be changed after that. The number of dirty CPU
+ scheduler threads online can however be changed at any time. The number of
+ dirty CPU schedulers can be set on startup by passing
+ the <seealso marker="erts:erl#+SDcpu">+SDcpu</seealso> command line flag, see
+ <seealso marker="erts:erl#+SDcpu">erl(1)</seealso>.
+ </p>
+ <p><em>Note that the dirty schedulers functionality is experimental</em>, and
+ that you have to enable support for dirty schedulers when building OTP in
+ order to try the functionality out.</p>
+ <p>See also <seealso marker="#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>,
+ <seealso marker="#system_info_dirty_cpu_schedulers_online">erlang:system_info(dirty_cpu_schedulers_online)</seealso>,
+ <seealso marker="#system_info_dirty_io_schedulers">erlang:system_info(dirty_io_schedulers)</seealso>,
+ <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>,
+ <seealso marker="#system_info_schedulers_online">erlang:system_info(schedulers_online)</seealso>, and
+ <seealso marker="#system_flag_schedulers_online">erlang:system_flag(schedulers_online, SchedulersOnline)</seealso>.</p>
+ </item>
+ <tag><marker id="system_info_dirty_cpu_schedulers_online"><c>dirty_cpu_schedulers_online</c></marker></tag>
+ <item>
+ <p>Returns the number of dirty CPU schedulers online. The return value
+ satisfies the following relationship:
+ <c><![CDATA[1 <= DirtyCPUSchedulersOnline <= N]]></c>, where <c>N</c> is
+ the lesser of the return values of <c>erlang:system_info(dirty_cpu_schedulers)</c> and
+ <c>erlang:system_info(schedulers_online)</c>.
+ </p>
+ <p>The number of dirty CPU schedulers online can be set on startup by passing
+ the <seealso marker="erts:erl#+SDcpu">+SDcpu</seealso> command line flag, see
+ <seealso marker="erts:erl#+SDcpu">erl(1)</seealso>.
+ </p>
+ <p><em>Note that the dirty schedulers functionality is experimental</em>, and
+ that you have to enable support for dirty schedulers when building OTP in
+ order to try the functionality out.</p>
+ <p>For more information, see
+ <seealso marker="#system_info_dirty_cpu_schedulers">erlang:system_info(dirty_cpu_schedulers)</seealso>,
+ <seealso marker="#system_info_dirty_io_schedulers">erlang:system_info(dirty_io_schedulers)</seealso>,
+ <seealso marker="#system_info_schedulers_online">erlang:system_info(schedulers_online)</seealso>, and
+ <seealso marker="#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>.
+ </p>
+ </item>
+ <tag><marker id="system_info_dirty_io_schedulers"><c>dirty_io_schedulers</c></marker></tag>
+ <item>
+ <p>Returns the number of dirty I/O schedulers as an integer. Dirty I/O schedulers
+ execute I/O-bound native functions such as NIFs and linked-in driver code that
+ cannot be managed cleanly by the emulator's normal schedulers.
+ </p>
+ <p>This value can be set on startup by passing
+ the <seealso marker="erts:erl#+SDio">+SDio</seealso> command line flag, see
+ <seealso marker="erts:erl#+SDio">erl(1)</seealso>.
+ </p>
+ <p><em>Note that the dirty schedulers functionality is experimental</em>, and
+ that you have to enable support for dirty schedulers when building OTP in
+ order to try the functionality out.</p>
+ <p>For more information, see
+ <seealso marker="#system_info_dirty_cpu_schedulers">erlang:system_info(dirty_cpu_schedulers)</seealso>,
+ <seealso marker="#system_info_dirty_cpu_schedulers_online">erlang:system_info(dirty_cpu_schedulers_online)</seealso>, and
+ <seealso marker="#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>.
+ </p>
+ </item>
<tag><c>dist</c></tag>
<item>
<p>Returns a binary containing a string of distribution
diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml
index 8c008c493e..b4ebef72f4 100644
--- a/erts/doc/src/notes.xml
+++ b/erts/doc/src/notes.xml
@@ -257,7 +257,7 @@
processes before the BIF returns, or fail with an
exception due to the port not being open. </p><p> The
synchronous port BIFs are: </p> <list> <item><seealso
- marker="erlang#port_close/1/"><c>port_close/1</c></seealso></item>
+ marker="erlang#port_close/1"><c>port_close/1</c></seealso></item>
<item><seealso
marker="erlang#port_command/2"><c>port_command/2</c></seealso></item>
<item><seealso
diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
index b270099566..9125a8024f 100644
--- a/erts/emulator/Makefile.in
+++ b/erts/emulator/Makefile.in
@@ -665,7 +665,6 @@ endif
ifneq ($(filter tile-%,$(TARGET)),)
$(OBJDIR)/beam_emu.o: beam/beam_emu.c
$(V_CC) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) \
- -OPT:Olimit=0 -WOPT:lpre=off:spre=off:epre=off \
$(INCLUDES) -c $< -o $@
else
# Usually the same as the default rule, but certain platforms (e.g. win32) mix
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index b413f0e859..7fecdd5c5f 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -217,6 +217,7 @@ BeamInstr beam_continue_exit[1];
BeamInstr* em_call_error_handler;
BeamInstr* em_apply_bif;
+BeamInstr* em_call_nif;
/* NOTE These should be the only variables containing trace instructions.
@@ -3323,6 +3324,13 @@ void process_main(void)
reg[0] = r(0);
nif_bif_result = (*fp)(&env, bif_nif_arity, reg);
erts_post_nif(&env);
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (is_non_value(nif_bif_result) && c_p->freason == TRAP) {
+ Export* ep = (Export*) c_p->psd->data[ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT];
+ ep->code[0] = I[-3];
+ ep->code[1] = I[-2];
+ }
+#endif
}
ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(nif_bif_result));
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -4964,6 +4972,7 @@ void process_main(void)
em_call_error_handler = OpCode(call_error_handler);
em_apply_bif = OpCode(apply_bif);
+ em_call_nif = OpCode(call_nif);
beam_apply[0] = (BeamInstr) OpCode(i_apply);
beam_apply[1] = (BeamInstr) OpCode(normal_exit);
diff --git a/erts/emulator/beam/beam_load.h b/erts/emulator/beam/beam_load.h
index 65a8f26d7c..bd22b0c4de 100644
--- a/erts/emulator/beam/beam_load.h
+++ b/erts/emulator/beam/beam_load.h
@@ -49,6 +49,7 @@ extern void** beam_ops;
extern BeamInstr beam_debug_apply[];
extern BeamInstr* em_call_error_handler;
extern BeamInstr* em_apply_bif;
+extern BeamInstr* em_call_nif;
/*
* The following variables keep a sorted list of address ranges for
diff --git a/erts/emulator/beam/big.c b/erts/emulator/beam/big.c
index 2b27b111d8..41a041eba6 100644
--- a/erts/emulator/beam/big.c
+++ b/erts/emulator/beam/big.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2014. 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
@@ -1603,9 +1603,11 @@ big_to_double(Wterm x, double* resp)
/*
* Logic has been copied from erl_bif_guard.c and slightly
* modified to use a static instead of dynamic heap
+ *
+ * HALFWORD: Return relative term with 'heap' as base.
*/
Eterm
-double_to_big(double x, Eterm *heap)
+double_to_big(double x, Eterm *heap, Uint hsz)
{
int is_negative;
int ds;
@@ -1633,9 +1635,10 @@ double_to_big(double x, Eterm *heap)
sz = BIG_NEED_SIZE(ds); /* number of words including arity */
hp = heap;
- res = make_big(hp);
+ res = make_big_rel(hp, heap);
xp = (ErtsDigit*) (hp + 1);
+ ASSERT(ds < hsz);
for (i = ds - 1; i >= 0; i--) {
ErtsDigit d;
diff --git a/erts/emulator/beam/big.h b/erts/emulator/beam/big.h
index 1a7b14170f..d80111822e 100644
--- a/erts/emulator/beam/big.h
+++ b/erts/emulator/beam/big.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2014. 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
@@ -141,7 +141,7 @@ Eterm big_lshift(Eterm, Sint, Eterm*);
int big_comp (Wterm, Wterm);
int big_ucomp (Eterm, Eterm);
int big_to_double(Wterm x, double* resp);
-Eterm double_to_big(double, Eterm*);
+Eterm double_to_big(double, Eterm*, Uint hsz);
Eterm small_to_big(Sint, Eterm*);
Eterm uint_to_big(Uint, Eterm*);
Eterm uword_to_big(UWord, Eterm*);
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index 8094c6ee2e..c6b324dc15 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -1754,6 +1754,9 @@ erts_alloc_register_scheduler(void *vesdp)
int ix = (int) esdp->no;
int aix;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+#endif
for (aix = ERTS_ALC_A_MIN; aix <= ERTS_ALC_A_MAX; aix++) {
ErtsAllocatorThrSpec_t *tspec = &erts_allctr_thr_spec[aix];
esdp->alloc_data.deallctr[aix] = NULL;
diff --git a/erts/emulator/beam/erl_async.c b/erts/emulator/beam/erl_async.c
index e6d72f569b..f0cec1c53c 100644
--- a/erts/emulator/beam/erl_async.c
+++ b/erts/emulator/beam/erl_async.c
@@ -602,7 +602,7 @@ unsigned int driver_async_port_key(ErlDrvPort port)
** return values:
** 0 completed
** -1 error
-** N handle value (used with async_cancel)
+** N handle value
** arguments:
** ix driver index
** key pointer to secedule queue (NULL means round robin)
@@ -687,23 +687,3 @@ long driver_async(ErlDrvPort ix, unsigned int* key,
return id;
}
-
-int driver_async_cancel(unsigned int id)
-{
- /*
- * Not supported anymore. Always fail (which is backward
- * compatible).
- *
- * This functionality could be implemented again. However,
- * it is (and always has been) completely useless since
- * it doesn't give you any guarantees whatsoever. The user
- * needs to (and always have had to) synchronize in his/her
- * own code in order to get any guarantees.
- */
- return 0;
-}
-
-
-
-
-
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index e0b654cb22..f25b4dbae5 100755
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -90,6 +90,9 @@ static char erts_system_version[] = ("Erlang/OTP " ERLANG_OTP_RELEASE
" [smp:%beu:%beu]"
#endif
#ifdef USE_THREADS
+#ifdef ERTS_DIRTY_SCHEDULERS
+ " [ds:%beu:%beu:%beu]"
+#endif
" [async-threads:%d]"
#endif
#ifdef HIPE
@@ -312,7 +315,13 @@ erts_print_system_version(int to, void *arg, Process *c_p)
char *ocp = otp_correction_package;
#ifdef ERTS_SMP
Uint total, online, active;
- (void) erts_schedulers_state(&total, &online, &active, 0);
+#ifdef ERTS_DIRTY_SCHEDULERS
+ Uint dirty_cpu, dirty_cpu_onln, dirty_io;
+
+ (void) erts_schedulers_state(&total, &online, &active, &dirty_cpu, &dirty_cpu_onln, &dirty_io, 0);
+#else
+ (void) erts_schedulers_state(&total, &online, &active, NULL, NULL, NULL, 0);
+#endif
#endif
for (i = 0; i < sizeof(otp_correction_package)-4; i++) {
if (ocp[i] == '-' && ocp[i+1] == 'r' && ocp[i+2] == 'c')
@@ -330,6 +339,9 @@ erts_print_system_version(int to, void *arg, Process *c_p)
rc_str
#ifdef ERTS_SMP
, total, online
+#ifdef ERTS_DIRTY_SCHEDULERS
+ , dirty_cpu, dirty_cpu_onln, dirty_io
+#endif
#endif
#ifdef USE_THREADS
, erts_async_max_threads
@@ -2477,6 +2489,9 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
switch (erts_schedulers_state(&total,
&online,
&active,
+ NULL,
+ NULL,
+ NULL,
1)) {
case ERTS_SCHDLR_SSPND_DONE: {
Eterm *hp = HAlloc(BIF_P, 4);
@@ -2500,7 +2515,7 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
BIF_RET(make_small(1));
#else
Uint total, online, active;
- switch (erts_schedulers_state(&total, &online, &active, 1)) {
+ switch (erts_schedulers_state(&total, &online, &active, NULL, NULL, NULL, 1)) {
case ERTS_SCHDLR_SSPND_DONE:
BIF_RET(make_small(online));
case ERTS_SCHDLR_SSPND_YIELD_RESTART:
@@ -2517,7 +2532,7 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
BIF_RET(make_small(1));
#else
Uint total, online, active;
- switch (erts_schedulers_state(&total, &online, &active, 1)) {
+ switch (erts_schedulers_state(&total, &online, &active, NULL, NULL, NULL, 1)) {
case ERTS_SCHDLR_SSPND_DONE:
BIF_RET(make_small(active));
case ERTS_SCHDLR_SSPND_YIELD_RESTART:
@@ -2529,6 +2544,20 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
BIF_ERROR(BIF_P, EXC_INTERNAL_ERROR);
}
#endif
+#if defined(ERTS_SMP) && defined(ERTS_DIRTY_SCHEDULERS)
+ } else if (ERTS_IS_ATOM_STR("dirty_cpu_schedulers", BIF_ARG_1)) {
+ Uint dirty_cpu;
+ erts_schedulers_state(NULL, NULL, NULL, &dirty_cpu, NULL, NULL, 1);
+ BIF_RET(make_small(dirty_cpu));
+ } else if (ERTS_IS_ATOM_STR("dirty_cpu_schedulers_online", BIF_ARG_1)) {
+ Uint dirty_cpu_onln;
+ erts_schedulers_state(NULL, NULL, NULL, NULL, &dirty_cpu_onln, NULL, 1);
+ BIF_RET(make_small(dirty_cpu_onln));
+ } else if (ERTS_IS_ATOM_STR("dirty_io_schedulers", BIF_ARG_1)) {
+ Uint dirty_io;
+ erts_schedulers_state(NULL, NULL, NULL, NULL, NULL, &dirty_io, 1);
+ BIF_RET(make_small(dirty_io));
+#endif
} else if (ERTS_IS_ATOM_STR("run_queues", BIF_ARG_1)) {
res = make_small(erts_no_run_queues);
BIF_RET(res);
diff --git a/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c
index ef3749a2c4..a358ecf326 100644
--- a/erts/emulator/beam/erl_db_util.c
+++ b/erts/emulator/beam/erl_db_util.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1998-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1998-2014. 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
@@ -1838,7 +1838,7 @@ restart:
ep = termp;
break;
case matchArrayBind: /* When the array size is unknown. */
- ASSERT(termp);
+ ASSERT(termp || arity==0);
n = *pc++;
variables[n].term = dpm_array_to_list(psp, termp, arity);
break;
diff --git a/erts/emulator/beam/erl_driver.h b/erts/emulator/beam/erl_driver.h
index 5cffae92be..2bd3181bdc 100644
--- a/erts/emulator/beam/erl_driver.h
+++ b/erts/emulator/beam/erl_driver.h
@@ -132,8 +132,8 @@ typedef struct {
#define DO_WRITE ERL_DRV_WRITE
#define ERL_DRV_EXTENDED_MARKER (0xfeeeeeed)
-#define ERL_DRV_EXTENDED_MAJOR_VERSION 2
-#define ERL_DRV_EXTENDED_MINOR_VERSION 2
+#define ERL_DRV_EXTENDED_MAJOR_VERSION 3
+#define ERL_DRV_EXTENDED_MINOR_VERSION 0
/*
* The emulator will refuse to load a driver with different major
@@ -657,12 +657,6 @@ EXTERN long driver_async(ErlDrvPort ix,
void* async_data,
void (*async_free)(void*));
-/*
- * driver_async_cancel() is deprecated. It is scheduled for removal
- * in OTP-R16. For more information see the erl_driver(3) documentation.
- */
-EXTERN int driver_async_cancel(unsigned int key) ERL_DRV_DEPRECATED_FUNC;
-
/* Locks the driver in the machine "forever", there is
no unlock function. Note that this is almost never useful, as an open
port towards the driver locks it until the port is closed, why unexpected
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index 8ff6f9a3b9..ab8448e8a1 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -1157,7 +1157,7 @@ do_minor(Process *p, Uint new_sz, Eterm* objv, int nobj)
old_htop = sweep_one_area(OLD_HTOP(p), old_htop, heap, heap_size);
}
OLD_HTOP(p) = old_htop;
- HIGH_WATER(p) = (HEAP_START(p) != HIGH_WATER(p)) ? n_heap : n_htop;
+ HIGH_WATER(p) = n_htop;
if (MSO(p).first) {
sweep_off_heap(p, 0);
diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c
index 19088fd913..c17256f466 100644
--- a/erts/emulator/beam/erl_init.c
+++ b/erts/emulator/beam/erl_init.c
@@ -484,98 +484,107 @@ void erts_usage(void)
/* erts_fprintf(stderr, "-# number set the number of items to be used in traces etc\n"); */
- erts_fprintf(stderr, "-a size suggested stack size in kilo words for threads\n");
- erts_fprintf(stderr, " in the async-thread pool, valid range is [%d-%d]\n",
+ erts_fprintf(stderr, "-a size suggested stack size in kilo words for threads\n");
+ erts_fprintf(stderr, " in the async-thread pool, valid range is [%d-%d]\n",
ERTS_ASYNC_THREAD_MIN_STACK_SIZE,
ERTS_ASYNC_THREAD_MAX_STACK_SIZE);
- erts_fprintf(stderr, "-A number set number of threads in async thread pool,\n");
- erts_fprintf(stderr, " valid range is [0-%d]\n",
+ erts_fprintf(stderr, "-A number set number of threads in async thread pool,\n");
+ erts_fprintf(stderr, " valid range is [0-%d]\n",
ERTS_MAX_NO_OF_ASYNC_THREADS);
- erts_fprintf(stderr, "-B[c|d|i] c to have Ctrl-c interrupt the Erlang shell,\n");
- erts_fprintf(stderr, " d (or no extra option) to disable the break\n");
- erts_fprintf(stderr, " handler, i to ignore break signals\n");
+ erts_fprintf(stderr, "-B[c|d|i] c to have Ctrl-c interrupt the Erlang shell,\n");
+ erts_fprintf(stderr, " d (or no extra option) to disable the break\n");
+ erts_fprintf(stderr, " handler, i to ignore break signals\n");
/* erts_fprintf(stderr, "-b func set the boot function (default boot)\n"); */
- erts_fprintf(stderr, "-c disable continuous date/time correction with\n");
- erts_fprintf(stderr, " respect to uptime\n");
+ erts_fprintf(stderr, "-c disable continuous date/time correction with\n");
+ erts_fprintf(stderr, " respect to uptime\n");
- erts_fprintf(stderr, "-d don't write a crash dump for internally detected errors\n");
- erts_fprintf(stderr, " (halt(String) will still produce a crash dump)\n");
- erts_fprintf(stderr, "-fn[u|a|l] Control how filenames are interpreted\n");
- erts_fprintf(stderr, "-hms size set minimum heap size in words (default %d)\n",
+ erts_fprintf(stderr, "-d don't write a crash dump for internally detected errors\n");
+ erts_fprintf(stderr, " (halt(String) will still produce a crash dump)\n");
+ erts_fprintf(stderr, "-fn[u|a|l] Control how filenames are interpreted\n");
+ erts_fprintf(stderr, "-hms size set minimum heap size in words (default %d)\n",
H_DEFAULT_SIZE);
- erts_fprintf(stderr, "-hmbs size set minimum binary virtual heap size in words (default %d)\n",
+ erts_fprintf(stderr, "-hmbs size set minimum binary virtual heap size in words (default %d)\n",
VH_DEFAULT_SIZE);
/* erts_fprintf(stderr, "-i module set the boot module (default init)\n"); */
- erts_fprintf(stderr, "-K boolean enable or disable kernel poll\n");
- erts_fprintf(stderr, "-n[s|a|d] Control behavior of signals to ports\n");
- erts_fprintf(stderr, " Note that this flag is deprecated!\n");
- erts_fprintf(stderr, "-M<X> <Y> memory allocator switches,\n");
- erts_fprintf(stderr, " see the erts_alloc(3) documentation for more info.\n");
- erts_fprintf(stderr, "-pc <set> Control what characters are considered printable (default latin1)\n");
- erts_fprintf(stderr, "-P number set maximum number of processes on this node,\n");
- erts_fprintf(stderr, " valid range is [%d-%d]\n",
+ erts_fprintf(stderr, "-K boolean enable or disable kernel poll\n");
+ erts_fprintf(stderr, "-n[s|a|d] Control behavior of signals to ports\n");
+ erts_fprintf(stderr, " Note that this flag is deprecated!\n");
+ erts_fprintf(stderr, "-M<X> <Y> memory allocator switches,\n");
+ erts_fprintf(stderr, " see the erts_alloc(3) documentation for more info.\n");
+ erts_fprintf(stderr, "-pc <set> Control what characters are considered printable (default latin1)\n");
+ erts_fprintf(stderr, "-P number set maximum number of processes on this node,\n");
+ erts_fprintf(stderr, " valid range is [%d-%d]\n",
ERTS_MIN_PROCESSES, ERTS_MAX_PROCESSES);
- erts_fprintf(stderr, "-Q number set maximum number of ports on this node,\n");
- erts_fprintf(stderr, " valid range is [%d-%d]\n",
+ erts_fprintf(stderr, "-Q number set maximum number of ports on this node,\n");
+ erts_fprintf(stderr, " valid range is [%d-%d]\n",
ERTS_MIN_PORTS, ERTS_MAX_PORTS);
- erts_fprintf(stderr, "-R number set compatibility release number,\n");
- erts_fprintf(stderr, " valid range [%d-%d]\n",
+ erts_fprintf(stderr, "-R number set compatibility release number,\n");
+ erts_fprintf(stderr, " valid range [%d-%d]\n",
this_rel-2, this_rel);
- erts_fprintf(stderr, "-r force ets memory block to be moved on realloc\n");
- erts_fprintf(stderr, "-rg amount set reader groups limit\n");
- erts_fprintf(stderr, "-sbt type set scheduler bind type, valid types are:\n");
- erts_fprintf(stderr, "-stbt type u|ns|ts|ps|s|nnts|nnps|tnnps|db\n");
- erts_fprintf(stderr, "-sbwt val set scheduler busy wait threshold, valid values are:\n");
- erts_fprintf(stderr, " none|very_short|short|medium|long|very_long.\n");
- erts_fprintf(stderr, "-scl bool enable/disable compaction of scheduler load,\n");
- erts_fprintf(stderr, " see the erl(1) documentation for more info.\n");
- erts_fprintf(stderr, "-sct cput set cpu topology,\n");
- erts_fprintf(stderr, " see the erl(1) documentation for more info.\n");
+ erts_fprintf(stderr, "-r force ets memory block to be moved on realloc\n");
+ erts_fprintf(stderr, "-rg amount set reader groups limit\n");
+ erts_fprintf(stderr, "-sbt type set scheduler bind type, valid types are:\n");
+ erts_fprintf(stderr, "-stbt type u|ns|ts|ps|s|nnts|nnps|tnnps|db\n");
+ erts_fprintf(stderr, "-sbwt val set scheduler busy wait threshold, valid values are:\n");
+ erts_fprintf(stderr, " none|very_short|short|medium|long|very_long.\n");
+ erts_fprintf(stderr, "-scl bool enable/disable compaction of scheduler load,\n");
+ erts_fprintf(stderr, " see the erl(1) documentation for more info.\n");
+ erts_fprintf(stderr, "-sct cput set cpu topology,\n");
+ erts_fprintf(stderr, " see the erl(1) documentation for more info.\n");
#if ERTS_HAVE_SCHED_UTIL_BALANCING_SUPPORT_OPT
- erts_fprintf(stderr, "-sub bool enable/disable scheduler utilization balancing,\n");
+ erts_fprintf(stderr, "-sub bool enable/disable scheduler utilization balancing,\n");
#else
- erts_fprintf(stderr, "-sub false disable scheduler utilization balancing,\n");
+ erts_fprintf(stderr, "-sub false disable scheduler utilization balancing,\n");
#endif
- erts_fprintf(stderr, " see the erl(1) documentation for more info.\n");
- erts_fprintf(stderr, "-sws val set scheduler wakeup strategy, valid values are:\n");
- erts_fprintf(stderr, " default|legacy.\n");
- erts_fprintf(stderr, "-swct val set scheduler wake cleanup threshold, valid values are:\n");
- erts_fprintf(stderr, " very_lazy|lazy|medium|eager|very_eager.\n");
- erts_fprintf(stderr, "-swt val set scheduler wakeup threshold, valid values are:\n");
- erts_fprintf(stderr, " very_low|low|medium|high|very_high.\n");
- erts_fprintf(stderr, "-sss size suggested stack size in kilo words for scheduler threads,\n");
- erts_fprintf(stderr, " valid range is [%d-%d]\n",
+ erts_fprintf(stderr, " see the erl(1) documentation for more info.\n");
+ erts_fprintf(stderr, "-sws val set scheduler wakeup strategy, valid values are:\n");
+ erts_fprintf(stderr, " default|legacy.\n");
+ erts_fprintf(stderr, "-swct val set scheduler wake cleanup threshold, valid values are:\n");
+ erts_fprintf(stderr, " very_lazy|lazy|medium|eager|very_eager.\n");
+ erts_fprintf(stderr, "-swt val set scheduler wakeup threshold, valid values are:\n");
+ erts_fprintf(stderr, " very_low|low|medium|high|very_high.\n");
+ erts_fprintf(stderr, "-sss size suggested stack size in kilo words for scheduler threads,\n");
+ erts_fprintf(stderr, " valid range is [%d-%d]\n",
ERTS_SCHED_THREAD_MIN_STACK_SIZE,
ERTS_SCHED_THREAD_MAX_STACK_SIZE);
- erts_fprintf(stderr, "-spp Bool set port parallelism scheduling hint\n");
- erts_fprintf(stderr, "-S n1:n2 set number of schedulers (n1), and number of\n");
- erts_fprintf(stderr, " schedulers online (n2), maximum for both\n");
- erts_fprintf(stderr, " numbers is %d\n",
+ erts_fprintf(stderr, "-spp Bool set port parallelism scheduling hint\n");
+ erts_fprintf(stderr, "-S n1:n2 set number of schedulers (n1), and number of\n");
+ erts_fprintf(stderr, " schedulers online (n2), maximum for both\n");
+ erts_fprintf(stderr, " numbers is %d\n",
ERTS_MAX_NO_OF_SCHEDULERS);
- erts_fprintf(stderr, "-SP p1:p2 specify schedulers (p1) and schedulers online (p2)\n");
- erts_fprintf(stderr, " as percentages of logical processors configured and logical\n");
- erts_fprintf(stderr, " processors available, respectively\n");
- erts_fprintf(stderr, "-t size set the maximum number of atoms the "
- "emulator can handle\n");
- erts_fprintf(stderr, " valid range is [%d-%d]\n",
+ erts_fprintf(stderr, "-SP p1:p2 specify schedulers (p1) and schedulers online (p2)\n");
+ erts_fprintf(stderr, " as percentages of logical processors configured and logical\n");
+ erts_fprintf(stderr, " processors available, respectively\n");
+#ifdef ERTS_DIRTY_SCHEDULERS
+ erts_fprintf(stderr, "-SDcpu n1:n2 set number of dirty CPU schedulers (n1), and number of\n");
+ erts_fprintf(stderr, " dirty CPU schedulers online (n2), valid range for both\n");
+ erts_fprintf(stderr, " numbers is [1-%d], and n2 must be less than or equal to n1\n",
+ ERTS_MAX_NO_OF_DIRTY_CPU_SCHEDULERS);
+ erts_fprintf(stderr, "-SDPcpu p1:p2 specify dirty CPU schedulers (p1) and dirty CPU schedulers\n");
+ erts_fprintf(stderr, " online (p2) as percentages of logical processors configured\n");
+ erts_fprintf(stderr, " and logical processors available, respectively\n");
+ erts_fprintf(stderr, "-SDio n set number of dirty I/O schedulers, valid range is [0-%d]\n",
+ ERTS_MAX_NO_OF_DIRTY_IO_SCHEDULERS);
+#endif
+ erts_fprintf(stderr, "-t size set the maximum number of atoms the emulator can handle\n");
+ erts_fprintf(stderr, " valid range is [%d-%d]\n",
MIN_ATOM_TABLE_SIZE, MAX_ATOM_TABLE_SIZE);
- erts_fprintf(stderr, "-T number set modified timing level,\n");
- erts_fprintf(stderr, " valid range is [0-%d]\n",
+ erts_fprintf(stderr, "-T number set modified timing level, valid range is [0-%d]\n",
ERTS_MODIFIED_TIMING_LEVELS-1);
- erts_fprintf(stderr, "-V print Erlang version\n");
+ erts_fprintf(stderr, "-V print Erlang version\n");
- erts_fprintf(stderr, "-v turn on chatty mode (GCs will be reported etc)\n");
+ erts_fprintf(stderr, "-v turn on chatty mode (GCs will be reported etc)\n");
- erts_fprintf(stderr, "-W<i|w> set error logger warnings mapping,\n");
- erts_fprintf(stderr, " see error_logger documentation for details\n");
- erts_fprintf(stderr, "-zdbbl size set the distribution buffer busy limit in kilobytes\n");
- erts_fprintf(stderr, " valid range is [1-%d]\n", INT_MAX/1024);
+ erts_fprintf(stderr, "-W<i|w> set error logger warnings mapping,\n");
+ erts_fprintf(stderr, " see error_logger documentation for details\n");
+ erts_fprintf(stderr, "-zdbbl size set the distribution buffer busy limit in kilobytes\n");
+ erts_fprintf(stderr, " valid range is [1-%d]\n", INT_MAX/1024);
erts_fprintf(stderr, "\n");
erts_fprintf(stderr, "Note that if the emulator is started with erlexec (typically\n");
erts_fprintf(stderr, "from the erl script), these flags should be specified with +.\n");
@@ -643,6 +652,13 @@ early_init(int *argc, char **argv) /*
int schdlrs_percentage = 100;
int schdlrs_onln_percentage = 100;
int max_main_threads;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ int dirty_cpu_scheds;
+ int dirty_cpu_scheds_online;
+ int dirty_cpu_scheds_pctg = 100;
+ int dirty_cpu_scheds_onln_pctg = 100;
+ int dirty_io_scheds;
+#endif
int max_reader_groups;
int reader_groups;
char envbuf[21]; /* enough for any 64-bit integer */
@@ -718,6 +734,12 @@ early_init(int *argc, char **argv) /*
schdlrs = no_schedulers;
schdlrs_onln = no_schedulers_online;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ dirty_cpu_scheds = no_schedulers;
+ dirty_cpu_scheds_online = no_schedulers_online;
+ dirty_io_scheds = 10;
+#endif
+
envbufsz = sizeof(envbuf);
/* erts_sys_getenv(_raw)() not initialized yet; need erts_sys_getenv__() */
@@ -808,7 +830,121 @@ early_init(int *argc, char **argv) /*
VERBOSE(DEBUG_SYSTEM,
("using %d:%d scheduler percentages\n",
schdlrs_percentage, schdlrs_onln_percentage));
- } else {
+ }
+#ifdef ERTS_DIRTY_SCHEDULERS
+ else if (argv[i][2] == 'D') {
+ char *arg;
+ char *type = argv[i]+3;
+ if (strcmp(type, "Pcpu") == 0) {
+ int ptot, ponln;
+ arg = get_arg(argv[i]+7, argv[i+1], &i);
+ switch (sscanf(arg, "%d:%d", &ptot, &ponln)) {
+ case 0:
+ switch (sscanf(arg, ":%d", &ponln)) {
+ case 1:
+ if (ponln < 0)
+ goto bad_SDPcpu;
+ ptot = 100;
+ goto chk_SDPcpu;
+ default:
+ goto bad_SDPcpu;
+ }
+ case 1:
+ if (ptot < 0)
+ goto bad_SDPcpu;
+ ponln = ptot < 100 ? ptot : 100;
+ goto chk_SDPcpu;
+ case 2:
+ if (ptot < 0 || ponln < 0)
+ goto bad_SDPcpu;
+ chk_SDPcpu:
+ dirty_cpu_scheds_pctg = ptot;
+ dirty_cpu_scheds_onln_pctg = ponln;
+ break;
+ default:
+ bad_SDPcpu:
+ erts_fprintf(stderr,
+ "bad dirty CPU schedulers percentage specifier %s\n",
+ arg);
+ erts_usage();
+ break;
+ }
+ VERBOSE(DEBUG_SYSTEM,
+ ("using %d:%d dirty CPU scheduler percentages\n",
+ dirty_cpu_scheds_pctg, dirty_cpu_scheds_onln_pctg));
+ } else if (strcmp(type, "cpu") == 0) {
+ int tot, onln;
+ arg = get_arg(argv[i]+6, argv[i+1], &i);
+ switch (sscanf(arg, "%d:%d", &tot, &onln)) {
+ case 0:
+ switch (sscanf(arg, ":%d", &onln)) {
+ case 1:
+ tot = no_schedulers;
+ goto chk_SDcpu;
+ default:
+ goto bad_SDcpu;
+ }
+ case 1:
+ onln = tot < dirty_cpu_scheds_online ?
+ tot : dirty_cpu_scheds_online;
+ case 2:
+ chk_SDcpu:
+ if (tot > 0)
+ dirty_cpu_scheds = tot;
+ else
+ dirty_cpu_scheds = no_schedulers + tot;
+ if (onln > 0)
+ dirty_cpu_scheds_online = onln;
+ else
+ dirty_cpu_scheds_online = no_schedulers_online + onln;
+ if (dirty_cpu_scheds < 1 ||
+ ERTS_MAX_NO_OF_DIRTY_CPU_SCHEDULERS < dirty_cpu_scheds) {
+ erts_fprintf(stderr,
+ "bad amount of dirty CPU schedulers %d\n",
+ tot);
+ erts_usage();
+ }
+ if (dirty_cpu_scheds_online < 1 ||
+ dirty_cpu_scheds < dirty_cpu_scheds_online) {
+ erts_fprintf(stderr,
+ "bad amount of dirty CPU schedulers online %d "
+ "(total amount of dirty CPU schedulers %d)\n",
+ dirty_cpu_scheds_online, dirty_cpu_scheds);
+ erts_usage();
+ }
+ break;
+ default:
+ bad_SDcpu:
+ erts_fprintf(stderr,
+ "bad amount of dirty CPU schedulers %s\n",
+ arg);
+ erts_usage();
+ break;
+ }
+ VERBOSE(DEBUG_SYSTEM,
+ ("using %d:%d dirty CPU scheduler(s)\n", tot, onln));
+ } else if (strcmp(type, "io") == 0) {
+ arg = get_arg(argv[i]+5, argv[i+1], &i);
+ dirty_io_scheds = atoi(arg);
+ if (dirty_io_scheds < 0 ||
+ dirty_io_scheds > ERTS_MAX_NO_OF_DIRTY_IO_SCHEDULERS) {
+ erts_fprintf(stderr,
+ "bad number of dirty I/O schedulers %s\n",
+ arg);
+ erts_usage();
+ }
+ VERBOSE(DEBUG_SYSTEM,
+ ("using %d dirty I/O scheduler(s)\n", dirty_io_scheds));
+ } else {
+ erts_fprintf(stderr,
+ "bad or missing dirty scheduler specifier: %s\n",
+ argv[i]);
+ erts_usage();
+ break;
+ }
+ }
+#endif
+ else {
int tot, onln;
char *arg = get_arg(argv[i]+2, argv[i+1], &i);
switch (sscanf(arg, "%d:%d", &tot, &onln)) {
@@ -895,6 +1031,17 @@ early_init(int *argc, char **argv) /*
(void)schdlrs_percentage;
(void)schdlrs_onln_percentage;
#endif
+#ifdef ERTS_DIRTY_SCHEDULERS
+ /* apply any dirty scheduler precentages */
+ if (dirty_cpu_scheds_pctg != 100 || dirty_cpu_scheds_onln_pctg != 100) {
+ dirty_cpu_scheds = dirty_cpu_scheds * dirty_cpu_scheds_pctg / 100;
+ dirty_cpu_scheds_online = dirty_cpu_scheds_online * dirty_cpu_scheds_onln_pctg / 100;
+ }
+ if (dirty_cpu_scheds > schdlrs)
+ dirty_cpu_scheds = schdlrs;
+ if (dirty_cpu_scheds_online > schdlrs_onln)
+ dirty_cpu_scheds_online = schdlrs_onln;
+#endif
}
#ifndef USE_THREADS
@@ -907,6 +1054,11 @@ early_init(int *argc, char **argv) /*
erts_no_schedulers = (Uint) no_schedulers;
#endif
+#ifdef ERTS_DIRTY_SCHEDULERS
+ erts_no_dirty_cpu_schedulers = dirty_cpu_scheds;
+ erts_no_dirty_cpu_schedulers_online = dirty_cpu_scheds_online;
+ erts_no_dirty_io_schedulers = dirty_io_scheds;
+#endif
erts_early_init_scheduling(no_schedulers);
alloc_opts.ncpu = ncpu;
@@ -924,10 +1076,18 @@ early_init(int *argc, char **argv) /*
*
* * Unmanaged threads that need to register:
* ** Async threads (see erl_async.c)
+ * ** Dirty scheduler threads
*/
erts_thr_progress_init(no_schedulers,
no_schedulers+2,
- erts_async_max_threads);
+#ifndef ERTS_DIRTY_SCHEDULERS
+ erts_async_max_threads
+#else
+ erts_async_max_threads +
+ erts_no_dirty_cpu_schedulers +
+ erts_no_dirty_io_schedulers
+#endif
+ );
#endif
erts_thr_q_init();
erts_init_utils();
@@ -1392,7 +1552,15 @@ erl_start(int argc, char **argv)
break;
case 'S' : /* Was handled in early_init() just read past it */
- if (argv[i][2] == 'P')
+ if (argv[i][2] == 'D') {
+ char* type = argv[i]+3;
+ if (strcmp(type, "Pcpu") == 0)
+ (void) get_arg(argv[i]+7, argv[i+1], &i);
+ if (strcmp(type, "cpu") == 0)
+ (void) get_arg(argv[i]+6, argv[i+1], &i);
+ else if (strcmp(type, "io") == 0)
+ (void) get_arg(argv[i]+5, argv[i+1], &i);
+ } else if (argv[i][2] == 'P')
(void) get_arg(argv[i]+3, argv[i+1], &i);
else
(void) get_arg(argv[i]+2, argv[i+1], &i);
diff --git a/erts/emulator/beam/erl_lock_check.c b/erts/emulator/beam/erl_lock_check.c
index 0dd83fa6ed..a8ff94ac89 100644
--- a/erts/emulator/beam/erl_lock_check.c
+++ b/erts/emulator/beam/erl_lock_check.c
@@ -123,6 +123,9 @@ static erts_lc_lock_order_t erts_lock_order[] = {
{ "schdlr_sspnd", NULL },
{ "migration_info_update", NULL },
{ "run_queue", "address" },
+#ifdef ERTS_DIRTY_SCHEDULERS
+ { "dirty_run_queue_sleep_list", "address" },
+#endif
{ "process_table", NULL },
{ "cpu_info", NULL },
{ "pollset", "address" },
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index dc285b3cf7..e1e213c4eb 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -34,6 +34,7 @@
#include "beam_bp.h"
#include "erl_thr_progress.h"
#include "dtrace-wrapper.h"
+#include "erl_process.h"
#if defined(USE_DYNAMIC_TRACE) && (defined(USE_DTRACE) || defined(USE_SYSTEMTAP))
#define HAVE_USE_DTRACE 1
#endif
@@ -1451,6 +1452,156 @@ int enif_consume_timeslice(ErlNifEnv* env, int percent)
return ERTS_BIF_REDS_LEFT(env->proc) == 0;
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+
+static void
+alloc_proc_psd(Process* proc, Export **ep)
+{
+ int i;
+ if (!*ep) {
+ *ep = erts_alloc(ERTS_ALC_T_PSD, sizeof(Export));
+ sys_memset((void*) *ep, 0, sizeof(Export));
+ for (i=0; i<ERTS_NUM_CODE_IX; i++) {
+ (*ep)->addressv[i] = &(*ep)->code[3];
+ }
+ (*ep)->code[3] = (BeamInstr) em_call_nif;
+ }
+ (void) ERTS_PROC_SET_DIRTY_SCHED_TRAP_EXPORT(proc, ERTS_PROC_LOCK_MAIN, *ep);
+}
+
+static ERL_NIF_TERM
+execute_dirty_nif_finalizer(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ Eterm* reg = ERTS_PROC_GET_SCHDATA(env->proc)->x_reg_array;
+ ERL_NIF_TERM result = (ERL_NIF_TERM) reg[0];
+ typedef ERL_NIF_TERM (*FinalizerFP)(ErlNifEnv*, ERL_NIF_TERM);
+ FinalizerFP fp;
+#if HAVE_INT64 && SIZEOF_LONG != 8
+ ASSERT(sizeof(fp) <= sizeof(ErlNifUInt64));
+ enif_get_uint64(env, reg[1], (ErlNifUInt64 *) &fp);
+#else
+ ASSERT(sizeof(fp) <= sizeof(unsigned long));
+ enif_get_ulong(env, reg[1], (unsigned long *) &fp);
+#endif
+ return (*fp)(env, result);
+}
+
+#endif /* ERTS_DIRTY_SCHEDULERS */
+
+#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
+
+ERL_NIF_TERM
+enif_schedule_dirty_nif(ErlNifEnv* env, int flags,
+ ERL_NIF_TERM (*fp)(ErlNifEnv*, int, const ERL_NIF_TERM[]),
+ int argc, const ERL_NIF_TERM argv[])
+{
+#ifdef USE_THREADS
+ erts_aint32_t state, n, a;
+ Process* proc = env->proc;
+ Eterm* reg = ERTS_PROC_GET_SCHDATA(proc)->x_reg_array;
+ Export* ep = NULL;
+ int i;
+
+ int chkflgs = (flags & (ERL_NIF_DIRTY_JOB_IO_BOUND|ERL_NIF_DIRTY_JOB_CPU_BOUND));
+ if (chkflgs != ERL_NIF_DIRTY_JOB_IO_BOUND && chkflgs != ERL_NIF_DIRTY_JOB_CPU_BOUND)
+ return enif_make_badarg(env);
+
+ a = erts_smp_atomic32_read_acqb(&proc->state);
+ while (1) {
+ n = state = a;
+ if (chkflgs == ERL_NIF_DIRTY_JOB_CPU_BOUND)
+ n |= ERTS_PSFLG_DIRTY_CPU_PROC;
+ else
+ n |= ERTS_PSFLG_DIRTY_IO_PROC;
+ a = erts_smp_atomic32_cmpxchg_mb(&proc->state, n, state);
+ if (a == state)
+ break;
+ }
+ if (!(ep = ERTS_PROC_GET_DIRTY_SCHED_TRAP_EXPORT(proc)))
+ alloc_proc_psd(proc, &ep);
+ ERTS_VBUMP_ALL_REDS(proc);
+ ep->code[2] = argc;
+ for (i = 0; i < argc; i++) {
+ reg[i] = (Eterm) argv[i];
+ }
+ proc->i = (BeamInstr*) ep->addressv[0];
+ ep->code[4] = (BeamInstr) fp;
+ proc->freason = TRAP;
+
+ return THE_NON_VALUE;
+#else
+ return (*fp)(env, argc, argv);
+#endif
+}
+
+ERL_NIF_TERM
+enif_schedule_dirty_nif_finalizer(ErlNifEnv* env, ERL_NIF_TERM result,
+ ERL_NIF_TERM (*fp)(ErlNifEnv*, ERL_NIF_TERM))
+{
+#ifdef USE_THREADS
+ erts_aint32_t state, n, a;
+ Process* proc = env->proc;
+ Eterm* reg = ERTS_PROC_GET_SCHDATA(proc)->x_reg_array;
+ Export* ep;
+
+ a = erts_smp_atomic32_read_acqb(&proc->state);
+ while (1) {
+ n = state = a;
+ if (!(n & (ERTS_PSFLG_DIRTY_CPU_PROC_IN_Q|ERTS_PSFLG_DIRTY_IO_PROC_IN_Q)))
+ break;
+ n &= ~(ERTS_PSFLG_DIRTY_CPU_PROC|ERTS_PSFLG_DIRTY_IO_PROC
+ |ERTS_PSFLG_DIRTY_CPU_PROC_IN_Q|ERTS_PSFLG_DIRTY_IO_PROC_IN_Q);
+ a = erts_smp_atomic32_cmpxchg_mb(&proc->state, n, state);
+ if (a == state)
+ break;
+ }
+ if (!(ep = ERTS_PROC_GET_DIRTY_SCHED_TRAP_EXPORT(proc)))
+ alloc_proc_psd(proc, &ep);
+ ERTS_VBUMP_ALL_REDS(proc);
+ ep->code[2] = 2;
+ reg[0] = (Eterm) result;
+#if HAVE_INT64 && SIZEOF_LONG != 8
+ ASSERT(sizeof(fp) <= sizeof(ErlNifUInt64));
+ reg[1] = (Eterm) enif_make_uint64(env, (ErlNifUInt64) fp);
+#else
+ ASSERT(sizeof(fp) <= sizeof(unsigned long));
+ reg[1] = (Eterm) enif_make_ulong(env, (unsigned long) fp);
+#endif
+ proc->i = (BeamInstr*) ep->addressv[0];
+ ep->code[4] = (BeamInstr) execute_dirty_nif_finalizer;
+ proc->freason = TRAP;
+
+ return THE_NON_VALUE;
+#else
+ return (*fp)(env, result);
+#endif
+}
+
+/* A simple finalizer that just returns its result argument */
+ERL_NIF_TERM
+enif_dirty_nif_finalizer(ErlNifEnv* env, ERL_NIF_TERM result)
+{
+ return result;
+}
+
+int
+enif_is_on_dirty_scheduler(ErlNifEnv* env)
+{
+ return ERTS_SCHEDULER_IS_DIRTY(env->proc->scheduler_data);
+}
+
+int
+enif_have_dirty_schedulers()
+{
+#ifdef USE_THREADS
+ return 1;
+#else
+ return 0;
+#endif
+}
+
+#endif /* ERL_NIF_DIRTY_SCHEDULER_SUPPORT */
+
/***************************************************************************
** load_nif/2 **
***************************************************************************/
diff --git a/erts/emulator/beam/erl_nif.h b/erts/emulator/beam/erl_nif.h
index 5f4dc21d5c..fb3c359ec9 100644
--- a/erts/emulator/beam/erl_nif.h
+++ b/erts/emulator/beam/erl_nif.h
@@ -23,7 +23,11 @@
#ifndef __ERL_NIF_H__
#define __ERL_NIF_H__
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+#include "erl_native_features_config.h"
#include "erl_drv_nif.h"
/* Version history:
@@ -34,9 +38,14 @@
** 2.2: R14B03 enif_is_exception
** 2.3: R15 enif_make_reverse_list, enif_is_number
** 2.4: R16 enif_consume_timeslice
+** 2.5: R17 dirty schedulers
*/
#define ERL_NIF_MAJOR_VERSION 2
+#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
+#define ERL_NIF_MINOR_VERSION 5
+#else
#define ERL_NIF_MINOR_VERSION 4
+#endif
#include <stdlib.h>
@@ -159,6 +168,14 @@ typedef int ErlNifTSDKey;
typedef ErlDrvThreadOpts ErlNifThreadOpts;
+#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
+typedef enum
+{
+ ERL_NIF_DIRTY_JOB_CPU_BOUND = 1,
+ ERL_NIF_DIRTY_JOB_IO_BOUND = 2
+}ErlNifDirtyTaskFlags;
+#endif
+
#if (defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_))
# define ERL_NIF_API_FUNC_DECL(RET_TYPE, NAME, ARGS) RET_TYPE (*NAME) ARGS
typedef struct {
diff --git a/erts/emulator/beam/erl_nif_api_funcs.h b/erts/emulator/beam/erl_nif_api_funcs.h
index 2f841645e1..f5b27dfdfa 100644
--- a/erts/emulator/beam/erl_nif_api_funcs.h
+++ b/erts/emulator/beam/erl_nif_api_funcs.h
@@ -141,6 +141,13 @@ ERL_NIF_API_FUNC_DECL(int,enif_is_number,(ErlNifEnv*, ERL_NIF_TERM term));
ERL_NIF_API_FUNC_DECL(void*,enif_dlopen,(const char* lib, void (*err_handler)(void*,const char*), void* err_arg));
ERL_NIF_API_FUNC_DECL(void*,enif_dlsym,(void* handle, const char* symbol, void (*err_handler)(void*,const char*), void* err_arg));
ERL_NIF_API_FUNC_DECL(int,enif_consume_timeslice,(ErlNifEnv*, int percent));
+#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
+ERL_NIF_API_FUNC_DECL(ERL_NIF_TERM,enif_schedule_dirty_nif,(ErlNifEnv*,int,ERL_NIF_TERM (*)(ErlNifEnv*,int,const ERL_NIF_TERM[]),int,const ERL_NIF_TERM[]));
+ERL_NIF_API_FUNC_DECL(ERL_NIF_TERM,enif_schedule_dirty_nif_finalizer,(ErlNifEnv*,ERL_NIF_TERM,ERL_NIF_TERM (*)(ErlNifEnv*,ERL_NIF_TERM)));
+ERL_NIF_API_FUNC_DECL(ERL_NIF_TERM,enif_dirty_nif_finalizer,(ErlNifEnv*,ERL_NIF_TERM));
+ERL_NIF_API_FUNC_DECL(int,enif_is_on_dirty_scheduler,(ErlNifEnv*));
+ERL_NIF_API_FUNC_DECL(int,enif_have_dirty_schedulers,(void));
+#endif
/*
** Add new entries here to keep compatibility on Windows!!!
@@ -266,6 +273,13 @@ ERL_NIF_API_FUNC_DECL(int,enif_consume_timeslice,(ErlNifEnv*, int percent));
# define enif_dlopen ERL_NIF_API_FUNC_MACRO(enif_dlopen)
# define enif_dlsym ERL_NIF_API_FUNC_MACRO(enif_dlsym)
# define enif_consume_timeslice ERL_NIF_API_FUNC_MACRO(enif_consume_timeslice)
+#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
+# define enif_schedule_dirty_nif ERL_NIF_API_FUNC_MACRO(enif_schedule_dirty_nif)
+# define enif_schedule_dirty_nif_finalizer ERL_NIF_API_FUNC_MACRO(enif_schedule_dirty_nif_finalizer)
+# define enif_dirty_nif_finalizer ERL_NIF_API_FUNC_MACRO(enif_dirty_nif_finalizer)
+# define enif_is_on_dirty_scheduler ERL_NIF_API_FUNC_MACRO(enif_is_on_dirty_scheduler)
+# define enif_have_dirty_schedulers ERL_NIF_API_FUNC_MACRO(enif_have_dirty_schedulers)
+#endif
/*
** Add new entries here
diff --git a/erts/emulator/beam/erl_port_task.c b/erts/emulator/beam/erl_port_task.c
index 547a42beb2..d4108067d0 100644
--- a/erts/emulator/beam/erl_port_task.c
+++ b/erts/emulator/beam/erl_port_task.c
@@ -877,6 +877,11 @@ enqueue_port(ErtsRunQueue *runq, Port *pp)
ASSERT(runq->ports.start && runq->ports.end);
erts_smp_inc_runq_len(runq, &runq->ports.info, ERTS_PORT_PRIO_LEVEL);
+
+#ifdef ERTS_SMP
+ if (runq->halt_in_progress)
+ erts_non_empty_runq(runq);
+#endif
}
static ERTS_INLINE Port *
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 2f383f4c01..937881212a 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -146,6 +146,11 @@ extern BeamInstr beam_continue_exit[];
int erts_sched_compact_load;
int erts_sched_balance_util = 0;
Uint erts_no_schedulers;
+#ifdef ERTS_DIRTY_SCHEDULERS
+Uint erts_no_dirty_cpu_schedulers;
+Uint erts_no_dirty_cpu_schedulers_online;
+Uint erts_no_dirty_io_schedulers;
+#endif
#define ERTS_THR_PRGR_LATER_CLEANUP_OP_THRESHOLD_VERY_LAZY (4*1024*1024)
#define ERTS_THR_PRGR_LATER_CLEANUP_OP_THRESHOLD_LAZY (512*1024)
@@ -259,6 +264,10 @@ ErtsAlignedRunQueue *erts_aligned_run_queues;
Uint erts_no_run_queues;
ErtsAlignedSchedulerData *erts_aligned_scheduler_data;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ErtsAlignedSchedulerData *erts_aligned_dirty_cpu_scheduler_data;
+ErtsAlignedSchedulerData *erts_aligned_dirty_io_scheduler_data;
+#endif
typedef union {
ErtsSchedulerSleepInfo ssi;
@@ -266,6 +275,12 @@ typedef union {
} ErtsAlignedSchedulerSleepInfo;
static ErtsAlignedSchedulerSleepInfo *aligned_sched_sleep_info;
+#ifdef ERTS_DIRTY_SCHEDULERS
+#ifdef ERTS_SMP
+static ErtsAlignedSchedulerSleepInfo *aligned_dirty_cpu_sched_sleep_info;
+static ErtsAlignedSchedulerSleepInfo *aligned_dirty_io_sched_sleep_info;
+#endif
+#endif
static Uint last_reductions;
static Uint last_exact_reductions;
@@ -332,6 +347,16 @@ ERTS_SCHED_PREF_QUICK_ALLOC_IMPL(proclist,
(ASSERT(-1 <= ((int) (IX)) \
&& ((int) (IX)) < ((int) erts_no_schedulers)), \
&aligned_sched_sleep_info[(IX)].ssi)
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(IX) \
+ (ASSERT(0 <= ((int) (IX)) \
+ && ((int) (IX)) < ((int) erts_no_dirty_cpu_schedulers)), \
+ &aligned_dirty_cpu_sched_sleep_info[(IX)].ssi)
+#define ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(IX) \
+ (ASSERT(0 <= ((int) (IX)) \
+ && ((int) (IX)) < ((int) erts_no_dirty_io_schedulers)), \
+ &aligned_dirty_io_sched_sleep_info[(IX)].ssi)
+#endif
#define ERTS_FOREACH_RUNQ(RQVAR, DO) \
do { \
@@ -519,6 +544,13 @@ erts_pre_init_process(void)
erts_psd_required_locks[ERTS_PSD_DELAYED_GC_TASK_QS].set_locks
= ERTS_PSD_DELAYED_GC_TASK_QS_SET_LOCKS;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ erts_psd_required_locks[ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT].get_locks
+ = ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT_GET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT].set_locks
+ = ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT_SET_LOCKS;
+#endif
+
/* Check that we have locks for all entries */
for (ix = 0; ix < ERTS_PSD_SIZE; ix++) {
ERTS_SMP_LC_ASSERT(erts_psd_required_locks[ix].get_locks);
@@ -931,7 +963,9 @@ reply_sched_wall_time(void *vswtrp)
ErlHeapFragment *bp = NULL;
ASSERT(esdp);
-
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+#endif
if (swtrp->set) {
if (!swtrp->enable && esdp->sched_wall_time.enabled) {
esdp->sched_wall_time.need = erts_sched_balance_util;
@@ -1015,6 +1049,9 @@ erts_sched_wall_time_request(Process *c_p, int set, int enable)
if (!set && !esdp->sched_wall_time.enabled)
return THE_NON_VALUE;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+#endif
swtrp = swtreq_alloc();
ref = erts_make_ref(c_p);
@@ -1492,6 +1529,9 @@ erts_schedule_multi_misc_aux_work(int ignore_self,
if (ignore_self) {
ErtsSchedulerData *esdp = erts_get_scheduler_data();
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+#endif
if (esdp)
self = (int) esdp->no;
}
@@ -1601,7 +1641,7 @@ void
erts_alloc_notify_delayed_dealloc(int ix)
{
ErtsSchedulerData *esdp = erts_get_scheduler_data();
- if (esdp)
+ if (esdp && !ERTS_SCHEDULER_IS_DIRTY(esdp))
schedule_aux_work_wakeup(&esdp->aux_work_data,
ix,
ERTS_SSI_AUX_WORK_DD);
@@ -1615,6 +1655,10 @@ erts_alloc_ensure_handle_delayed_dealloc_call(int ix)
{
#ifdef DEBUG
ErtsSchedulerData *esdp = erts_get_scheduler_data();
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (esdp && ERTS_SCHEDULER_IS_DIRTY(esdp))
+ return;
+#endif
ASSERT(!esdp || ix == (int) esdp->no);
#endif
set_aux_work_flags_wakeup_nob(ERTS_SCHED_SLEEP_INFO_IX(ix-1),
@@ -2220,6 +2264,9 @@ static ERTS_INLINE void
sched_active_sys(Uint no, ErtsRunQueue *rq)
{
ERTS_SMP_LC_ASSERT(erts_smp_lc_runq_is_locked(rq));
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_RUNQ_IX_IS_DIRTY(rq->ix));
+#endif
ASSERT(rq->waiting < 0);
rq->waiting *= -1;
rq->waiting--;
@@ -2276,6 +2323,9 @@ static ERTS_INLINE void
sched_change_waiting_sys_to_waiting(Uint no, ErtsRunQueue *rq)
{
ERTS_SMP_LC_ASSERT(erts_smp_lc_runq_is_locked(rq));
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_RUNQ_IX_IS_DIRTY(rq->ix));
+#endif
ASSERT(rq->waiting < 0);
rq->waiting *= -1;
}
@@ -2291,7 +2341,7 @@ sched_waiting(Uint no, ErtsRunQueue *rq)
else
rq->waiting++;
rq->woken = 0;
- if (erts_system_profile_flags.scheduler)
+ if (!ERTS_RUNQ_IX_IS_DIRTY(rq->ix) && erts_system_profile_flags.scheduler)
profile_scheduler(make_small(no), am_inactive);
}
@@ -2303,7 +2353,7 @@ sched_active(Uint no, ErtsRunQueue *rq)
rq->waiting++;
else
rq->waiting--;
- if (erts_system_profile_flags.scheduler)
+ if (!ERTS_RUNQ_IX_IS_DIRTY(rq->ix) && erts_system_profile_flags.scheduler)
profile_scheduler(make_small(no), am_active);
}
@@ -2317,7 +2367,7 @@ ongoing_multi_scheduling_block(void)
static ERTS_INLINE void
empty_runq_aux(ErtsRunQueue *rq, Uint32 old_flags)
{
- if (old_flags & ERTS_RUNQ_FLG_NONEMPTY) {
+ if (!ERTS_RUNQ_IX_IS_DIRTY(rq->ix) && old_flags & ERTS_RUNQ_FLG_NONEMPTY) {
#ifdef DEBUG
erts_aint32_t empty = erts_smp_atomic32_read_nob(&no_empty_run_queues);
/*
@@ -2357,7 +2407,7 @@ static ERTS_INLINE void
non_empty_runq(ErtsRunQueue *rq)
{
Uint32 old_flags = ERTS_RUNQ_FLGS_SET(rq, ERTS_RUNQ_FLG_NONEMPTY);
- if (!(old_flags & ERTS_RUNQ_FLG_NONEMPTY)) {
+ if (!ERTS_RUNQ_IX_IS_DIRTY(rq->ix) && (!(old_flags & ERTS_RUNQ_FLG_NONEMPTY))) {
#ifdef DEBUG
erts_aint32_t empty = erts_smp_atomic32_read_nob(&no_empty_run_queues);
/*
@@ -2602,18 +2652,37 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
ERTS_SMP_LC_ASSERT(erts_smp_lc_runq_is_locked(rq));
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (ERTS_RUNQ_IX_IS_DIRTY(rq->ix))
+ erts_smp_spin_lock(&rq->sleepers.lock);
+#endif
flgs = sched_prep_spin_wait(ssi);
if (flgs & ERTS_SSI_FLG_SUSPENDED) {
/* Go suspend instead... */
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (ERTS_RUNQ_IX_IS_DIRTY(rq->ix))
+ erts_smp_spin_unlock(&rq->sleepers.lock);
+#endif
return;
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (ERTS_RUNQ_IX_IS_DIRTY(rq->ix)) {
+ ssi->prev = NULL;
+ ssi->next = rq->sleepers.list;
+ if (rq->sleepers.list)
+ rq->sleepers.list->prev = ssi;
+ rq->sleepers.list = ssi;
+ erts_smp_spin_unlock(&rq->sleepers.lock);
+ }
+#endif
+
/*
* If all schedulers are waiting, one of them *should*
* be waiting in erl_sys_schedule()
*/
- if (!prepare_for_sys_schedule()) {
+ if (ERTS_SCHEDULER_IS_DIRTY(esdp) || !prepare_for_sys_schedule()) {
sched_waiting(esdp->no, rq);
@@ -2623,12 +2692,13 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
tse_wait:
- if (thr_prgr_active != working)
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp) && thr_prgr_active != working)
sched_wall_time_change(esdp, thr_prgr_active);
while (1) {
- aux_work = erts_atomic32_read_acqb(&ssi->aux_work);
+ aux_work = ERTS_SCHEDULER_IS_DIRTY(esdp) ? 0 :
+ erts_atomic32_read_acqb(&ssi->aux_work);
if (aux_work) {
if (!thr_prgr_active) {
erts_thr_progress_active(esdp, thr_prgr_active = 1);
@@ -2642,11 +2712,13 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
if (aux_work)
flgs = erts_smp_atomic32_read_acqb(&ssi->flags);
else {
- if (thr_prgr_active) {
- erts_thr_progress_active(esdp, thr_prgr_active = 0);
- sched_wall_time_change(esdp, 0);
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ if (thr_prgr_active) {
+ erts_thr_progress_active(esdp, thr_prgr_active = 0);
+ sched_wall_time_change(esdp, 0);
+ }
+ erts_thr_progress_prepare_wait(esdp);
}
- erts_thr_progress_prepare_wait(esdp);
flgs = sched_spin_wait(ssi, spincount);
if (flgs & ERTS_SSI_FLG_SLEEPING) {
@@ -2661,7 +2733,8 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
} while (res == EINTR);
}
}
- erts_thr_progress_finalize_wait(esdp);
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
+ erts_thr_progress_finalize_wait(esdp);
}
if (!(flgs & ERTS_SSI_FLG_WAITING)) {
@@ -2682,7 +2755,7 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
if (flgs & ~ERTS_SSI_FLG_SUSPENDED)
erts_smp_atomic32_read_band_nob(&ssi->flags, ERTS_SSI_FLG_SUSPENDED);
- if (!thr_prgr_active) {
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp) && !thr_prgr_active) {
erts_thr_progress_active(esdp, thr_prgr_active = 1);
sched_wall_time_change(esdp, 1);
}
@@ -2699,6 +2772,9 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
erts_smp_atomic32_set_relb(&function_calls, 0);
*fcalls = 0;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+#endif
sched_waiting_sys(esdp->no, rq);
@@ -2912,6 +2988,34 @@ wake_scheduler(ErtsRunQueue *rq)
erts_sched_finish_poke(ssi, flgs);
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+static void
+wake_dirty_scheduler(ErtsRunQueue *rq)
+{
+ ErtsSchedulerSleepInfo *ssi;
+ ErtsSchedulerSleepList *sl;
+
+ ASSERT(ERTS_RUNQ_IX_IS_DIRTY(rq->ix));
+
+ sl = &rq->sleepers;
+ erts_smp_spin_lock(&sl->lock);
+ ssi = sl->list;
+ if (!ssi)
+ erts_smp_spin_unlock(&sl->lock);
+ else {
+ sl->list = NULL;
+ erts_smp_spin_unlock(&sl->lock);
+
+ ERTS_THR_MEMORY_BARRIER;
+ do {
+ ErtsSchedulerSleepInfo *wake_ssi = ssi;
+ ssi = ssi->next;
+ erts_sched_finish_poke(wake_ssi, ssi_flags_set_wake(wake_ssi));
+ } while (ssi);
+ }
+}
+#endif
+
#define ERTS_NO_USED_RUNQS_SHIFT 16
#define ERTS_NO_RUNQS_MASK 0xffff
@@ -3047,8 +3151,14 @@ static ERTS_INLINE void
smp_notify_inc_runq(ErtsRunQueue *runq)
{
#ifdef ERTS_SMP
- if (runq)
- wake_scheduler(runq);
+ if (runq) {
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (ERTS_RUNQ_IX_IS_DIRTY(runq->ix))
+ wake_dirty_scheduler(runq);
+ else
+#endif
+ wake_scheduler(runq);
+ }
#endif
}
@@ -4899,7 +5009,10 @@ erts_sched_set_wake_cleanup_threshold(char *str)
static void
init_aux_work_data(ErtsAuxWorkData *awdp, ErtsSchedulerData *esdp, char *dawwp)
{
- awdp->sched_id = esdp ? (int) esdp->no : 0;
+ if (!esdp || ERTS_SCHEDULER_IS_DIRTY(esdp))
+ awdp->sched_id = 0;
+ else
+ awdp->sched_id = (int) esdp->no;
awdp->esdp = esdp;
awdp->ssi = esdp ? esdp->ssi : NULL;
#ifdef ERTS_SMP
@@ -4939,14 +5052,71 @@ init_aux_work_data(ErtsAuxWorkData *awdp, ErtsSchedulerData *esdp, char *dawwp)
#endif
}
+static void
+init_scheduler_data(ErtsSchedulerData* esdp, int num,
+ ErtsSchedulerSleepInfo* ssi,
+ ErtsRunQueue* runq,
+ char** daww_ptr, size_t daww_sz)
+{
+#ifdef ERTS_SMP
+ erts_bits_init_state(&esdp->erl_bits_state);
+ esdp->match_pseudo_process = NULL;
+ esdp->free_process = NULL;
+#endif
+ esdp->x_reg_array =
+ erts_alloc_permanent_cache_aligned(ERTS_ALC_T_BEAM_REGISTER,
+ ERTS_X_REGS_ALLOCATED *
+ sizeof(Eterm));
+ esdp->f_reg_array =
+ erts_alloc_permanent_cache_aligned(ERTS_ALC_T_BEAM_REGISTER,
+ MAX_REG * sizeof(FloatDef));
+#if !HEAP_ON_C_STACK
+ esdp->num_tmp_heap_used = 0;
+#endif
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (ERTS_RUNQ_IX_IS_DIRTY(runq->ix)) {
+ esdp->no = 0;
+ esdp->dirty_no = (Uint) num;
+ }
+ else {
+ esdp->no = (Uint) num;
+ esdp->dirty_no = 0;
+ }
+#else
+ esdp->no = (Uint) num;
+#endif
+ esdp->ssi = ssi;
+ esdp->current_process = NULL;
+ esdp->current_port = NULL;
+
+ esdp->virtual_reds = 0;
+ esdp->cpu_id = -1;
+
+ erts_init_atom_cache_map(&esdp->atom_cache_map);
+
+ esdp->run_queue = runq;
+ esdp->run_queue->scheduler = esdp;
+
+ if (daww_ptr) {
+ init_aux_work_data(&esdp->aux_work_data, esdp, *daww_ptr);
+#ifdef ERTS_SMP
+ *daww_ptr += daww_sz;
+#endif
+ }
+
+ esdp->reductions = 0;
+
+ init_sched_wall_time(&esdp->sched_wall_time);
+ erts_port_task_handle_init(&esdp->nosuspend_port_task_handle);
+}
+
void
erts_init_scheduling(int no_schedulers, int no_schedulers_online)
{
int ix, n, no_ssi;
char *daww_ptr;
-#ifdef ERTS_SMP
size_t daww_sz;
-#endif
+ size_t size_runqs;
init_misc_op_list_alloc();
init_proc_sys_task_queues_alloc();
@@ -4967,19 +5137,26 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online)
/* Create and initialize run queues */
n = no_schedulers;
-
- erts_aligned_run_queues =
- erts_alloc_permanent_cache_aligned(ERTS_ALC_T_RUNQS,
- sizeof(ErtsAlignedRunQueue) * n);
+ size_runqs = sizeof(ErtsAlignedRunQueue) * (n + ERTS_NUM_DIRTY_RUNQS);
+ erts_aligned_run_queues =
+ erts_alloc_permanent_cache_aligned(ERTS_ALC_T_RUNQS, size_runqs);
#ifdef ERTS_SMP
+#ifdef ERTS_DIRTY_SCHEDULERS
+ erts_aligned_run_queues += ERTS_NUM_DIRTY_RUNQS;
+#endif
erts_smp_atomic32_init_nob(&no_empty_run_queues, 0);
#endif
erts_no_run_queues = n;
- for (ix = 0; ix < n; ix++) {
+ for (ix = -(ERTS_NUM_DIRTY_RUNQS); ix < n; ix++) {
int pix, rix;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ErtsRunQueue *rq = ERTS_RUNQ_IX_IS_DIRTY(ix) ?
+ ERTS_DIRTY_RUNQ_IX(ix) : ERTS_RUNQ_IX(ix);
+#else
ErtsRunQueue *rq = ERTS_RUNQ_IX(ix);
+#endif
rq->ix = ix;
@@ -4990,6 +5167,15 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online)
erts_smp_mtx_init_x(&rq->mtx, "run_queue", make_small(ix + 1));
erts_smp_cnd_init(&rq->cnd);
+#ifdef ERTS_DIRTY_SCHEDULERS
+#ifdef ERTS_SMP
+ if (ERTS_RUNQ_IX_IS_DIRTY(ix)) {
+ erts_smp_spinlock_init(&rq->sleepers.lock, "dirty_run_queue_sleep_list");
+ rq->sleepers.list = NULL;
+ }
+#endif
+#endif
+
rq->waiting = 0;
rq->woken = 0;
ERTS_RUNQ_FLGS_INIT(rq, ERTS_RUNQ_FLG_NONEMPTY);
@@ -5076,6 +5262,29 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online)
#ifdef ERTS_SMP
aligned_sched_sleep_info++;
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+ aligned_dirty_cpu_sched_sleep_info =
+ erts_alloc_permanent_cache_aligned(
+ ERTS_ALC_T_SCHDLR_SLP_INFO,
+ erts_no_dirty_cpu_schedulers*sizeof(ErtsAlignedSchedulerSleepInfo));
+ for (ix = 0; ix < erts_no_dirty_cpu_schedulers; ix++) {
+ ErtsSchedulerSleepInfo *ssi = &aligned_dirty_cpu_sched_sleep_info[ix].ssi;
+ erts_smp_atomic32_init_nob(&ssi->flags, 0);
+ ssi->event = NULL; /* initialized in sched_thread_func */
+ erts_atomic32_init_nob(&ssi->aux_work, 0);
+ }
+ aligned_dirty_io_sched_sleep_info =
+ erts_alloc_permanent_cache_aligned(
+ ERTS_ALC_T_SCHDLR_SLP_INFO,
+ erts_no_dirty_io_schedulers*sizeof(ErtsAlignedSchedulerSleepInfo));
+ for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
+ ErtsSchedulerSleepInfo *ssi = &aligned_dirty_io_sched_sleep_info[ix].ssi;
+ erts_smp_atomic32_init_nob(&ssi->flags, 0);
+ ssi->event = NULL; /* initialized in sched_thread_func */
+ erts_atomic32_init_nob(&ssi->aux_work, 0);
+ }
+#endif
#endif
/* Create and initialize scheduler specific data */
@@ -5086,6 +5295,7 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online)
daww_ptr = erts_alloc_permanent_cache_aligned(ERTS_ALC_T_SCHDLR_DATA,
daww_sz*n);
#else
+ daww_sz = 0;
daww_ptr = NULL;
#endif
@@ -5095,46 +5305,32 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online)
for (ix = 0; ix < n; ix++) {
ErtsSchedulerData *esdp = ERTS_SCHEDULER_IX(ix);
-#ifdef ERTS_SMP
- erts_bits_init_state(&esdp->erl_bits_state);
- esdp->match_pseudo_process = NULL;
- esdp->free_process = NULL;
-#endif
- esdp->x_reg_array =
- erts_alloc_permanent_cache_aligned(ERTS_ALC_T_BEAM_REGISTER,
- ERTS_X_REGS_ALLOCATED *
- sizeof(Eterm));
- esdp->f_reg_array =
- erts_alloc_permanent_cache_aligned(ERTS_ALC_T_BEAM_REGISTER,
- MAX_REG * sizeof(FloatDef));
-#if !HEAP_ON_C_STACK
- esdp->num_tmp_heap_used = 0;
-#endif
- esdp->no = (Uint) ix+1;
- esdp->ssi = ERTS_SCHED_SLEEP_INFO_IX(ix);
- esdp->current_process = NULL;
- esdp->current_port = NULL;
-
- esdp->virtual_reds = 0;
- esdp->cpu_id = -1;
-
- erts_init_atom_cache_map(&esdp->atom_cache_map);
-
- esdp->run_queue = ERTS_RUNQ_IX(ix);
- esdp->run_queue->scheduler = esdp;
+ init_scheduler_data(esdp, ix+1, ERTS_SCHED_SLEEP_INFO_IX(ix),
+ ERTS_RUNQ_IX(ix), &daww_ptr, daww_sz);
+ }
- init_aux_work_data(&esdp->aux_work_data, esdp, daww_ptr);
+#ifdef ERTS_DIRTY_SCHEDULERS
#ifdef ERTS_SMP
- daww_ptr += daww_sz;
-#endif
-
- esdp->reductions = 0;
-
- init_sched_wall_time(&esdp->sched_wall_time);
-
- erts_port_task_handle_init(&esdp->nosuspend_port_task_handle);
-
+ erts_aligned_dirty_cpu_scheduler_data =
+ erts_alloc_permanent_cache_aligned(
+ ERTS_ALC_T_SCHDLR_DATA,
+ erts_no_dirty_cpu_schedulers*sizeof(ErtsAlignedSchedulerData));
+ for (ix = 0; ix < erts_no_dirty_cpu_schedulers; ix++) {
+ ErtsSchedulerData *esdp = ERTS_DIRTY_CPU_SCHEDULER_IX(ix);
+ init_scheduler_data(esdp, ix+1, ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix),
+ ERTS_DIRTY_CPU_RUNQ, NULL, 0);
+ }
+ erts_aligned_dirty_io_scheduler_data =
+ erts_alloc_permanent_cache_aligned(
+ ERTS_ALC_T_SCHDLR_DATA,
+ erts_no_dirty_io_schedulers*sizeof(ErtsAlignedSchedulerData));
+ for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
+ ErtsSchedulerData *esdp = ERTS_DIRTY_IO_SCHEDULER_IX(ix);
+ init_scheduler_data(esdp, ix+1, ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(ix),
+ ERTS_DIRTY_IO_RUNQ, NULL, 0);
}
+#endif
+#endif
init_misc_aux_work();
#if !HALFWORD_HEAP
@@ -5198,6 +5394,10 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online)
#endif
}
erts_no_schedulers = 1;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ erts_no_dirty_cpu_schedulers = 0;
+ erts_no_dirty_io_schedulers = 0;
+#endif
#endif
erts_smp_atomic32_init_nob(&function_calls, 0);
@@ -5310,28 +5510,39 @@ check_enqueue_in_prio_queue(erts_aint32_t *prq_prio_p,
*prq_prio_p = aprio;
- max_qbit = (actual >> ERTS_PSFLGS_IN_PRQ_MASK_OFFSET) & ERTS_PSFLGS_QMASK;
- max_qbit |= 1 << ERTS_PSFLGS_QMASK_BITS;
- max_qbit &= -max_qbit;
- /*
- * max_qbit now either contain bit set for highest prio queue or a bit
- * out of range (which will have a value larger than valid range).
- */
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (!(actual & (ERTS_PSFLG_DIRTY_CPU_PROC|ERTS_PSFLG_DIRTY_IO_PROC))) {
+#endif
+ max_qbit = (actual >> ERTS_PSFLGS_IN_PRQ_MASK_OFFSET) & ERTS_PSFLGS_QMASK;
+ max_qbit |= 1 << ERTS_PSFLGS_QMASK_BITS;
+ max_qbit &= -max_qbit;
+ /*
+ * max_qbit now either contain bit set for highest prio queue or a bit
+ * out of range (which will have a value larger than valid range).
+ */
- if (qbit >= max_qbit)
- return 0; /* Already queued in higher or equal prio */
+ if (qbit >= max_qbit)
+ return 0; /* Already queued in higher or equal prio */
- /* Need to enqueue (if already enqueued, it is in lower prio) */
- *newp |= qbit << ERTS_PSFLGS_IN_PRQ_MASK_OFFSET;
+ /* Need to enqueue (if already enqueued, it is in lower prio) */
+ *newp |= qbit << ERTS_PSFLGS_IN_PRQ_MASK_OFFSET;
- if ((actual & (ERTS_PSFLG_IN_RUNQ|ERTS_PSFLGS_USR_PRIO_MASK))
- != (aprio << ERTS_PSFLGS_USR_PRIO_OFFSET)) {
- /*
- * Process struct already enqueued, or actual prio not
- * equal to user prio, i.e., enqueue using proxy.
- */
- return -1;
+ if ((actual & (ERTS_PSFLG_IN_RUNQ|ERTS_PSFLGS_USR_PRIO_MASK))
+ != (aprio << ERTS_PSFLGS_USR_PRIO_OFFSET)) {
+ /*
+ * Process struct already enqueued, or actual prio not
+ * equal to user prio, i.e., enqueue using proxy.
+ */
+ return -1;
+ }
+#ifdef ERTS_DIRTY_SCHEDULERS
+ } else {
+ if (actual & ERTS_PSFLG_DIRTY_CPU_PROC)
+ *newp |= ERTS_PSFLG_DIRTY_CPU_PROC_IN_Q;
+ else
+ *newp |= ERTS_PSFLG_DIRTY_IO_PROC_IN_Q;
}
+#endif
/*
* Enqueue using process struct.
@@ -5387,10 +5598,21 @@ schedule_out_process(ErtsRunQueue *c_rq, erts_aint32_t state, Process *p, Proces
}
else {
Process *sched_p;
- ErtsRunQueue *runq = erts_get_runq_proc(p);
+ ErtsRunQueue *runq;
ASSERT(!(n & ERTS_PSFLG_SUSPENDED) || (n & ERTS_PSFLG_ACTIVE_SYS));
+#ifdef ERTS_DIRTY_SCHEDULERS
+#ifdef ERTS_SMP
+ if (ERTS_PSFLG_DIRTY_CPU_PROC & a)
+ runq = ERTS_DIRTY_CPU_RUNQ;
+ else if (ERTS_PSFLG_DIRTY_IO_PROC & a)
+ runq = ERTS_DIRTY_IO_RUNQ;
+ else
+#endif
+#endif
+ runq = erts_get_runq_proc(p);
+
if (enqueue < 0)
sched_p = make_proxy_proc(proxy, p, enq_prio);
else {
@@ -5400,7 +5622,11 @@ schedule_out_process(ErtsRunQueue *c_rq, erts_aint32_t state, Process *p, Proces
}
#ifdef ERTS_SMP
- if (!(ERTS_PSFLG_BOUND & n)) {
+ if (!(ERTS_PSFLG_BOUND & n)
+#ifdef ERTS_DIRTY_SCHEDULERS
+ && !(n & (ERTS_PSFLG_DIRTY_CPU_PROC_IN_Q|ERTS_PSFLG_DIRTY_IO_PROC_IN_Q))
+#endif
+ ) {
ErtsRunQueue *new_runq = erts_check_emigration_need(runq, enq_prio);
if (new_runq) {
RUNQ_SET_RQ(&sched_p->run_queue, new_runq);
@@ -5827,6 +6053,9 @@ suspend_scheduler(ErtsSchedulerData *esdp)
* Regardless of why a scheduler is suspended, it ends up here.
*/
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+#endif
ASSERT(no != 1);
evacuate_run_queue(esdp->run_queue, &sbp);
@@ -5994,22 +6223,44 @@ ErtsSchedSuspendResult
erts_schedulers_state(Uint *total,
Uint *online,
Uint *active,
+ Uint *dirty_cpu,
+ Uint *dirty_cpu_online,
+ Uint *dirty_io,
int yield_allowed)
{
- int res;
+ int res = ERTS_SCHDLR_SSPND_EINVAL;
erts_aint32_t changing;
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
- if (yield_allowed && (changing & ~ERTS_SCHDLR_SSPND_CHNG_WAITER))
- res = ERTS_SCHDLR_SSPND_YIELD_RESTART;
- else {
- *active = *online = schdlr_sspnd.online;
- if (ongoing_multi_scheduling_block())
- *active = 1;
- res = ERTS_SCHDLR_SSPND_DONE;
+ if (total) {
+ ASSERT(online);
+ ASSERT(active);
+ erts_smp_mtx_lock(&schdlr_sspnd.mtx);
+ changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
+ if (yield_allowed && (changing & ~ERTS_SCHDLR_SSPND_CHNG_WAITER))
+ res = ERTS_SCHDLR_SSPND_YIELD_RESTART;
+ else {
+ *active = *online = schdlr_sspnd.online;
+ if (ongoing_multi_scheduling_block())
+ *active = 1;
+ res = ERTS_SCHDLR_SSPND_DONE;
+ }
+ erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+ *total = erts_no_schedulers;
}
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
- *total = erts_no_schedulers;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (dirty_cpu)
+ *dirty_cpu = erts_no_dirty_cpu_schedulers;
+ if (dirty_cpu_online)
+ *dirty_cpu_online = erts_no_dirty_cpu_schedulers_online;
+ if (dirty_io)
+ *dirty_io = erts_no_dirty_io_schedulers;
+#else
+ if (dirty_cpu)
+ *dirty_cpu = 0;
+ if (dirty_cpu_online)
+ *dirty_cpu_online = 0;
+ if (dirty_io)
+ *dirty_io = 0;
+#endif
return res;
}
@@ -6101,6 +6352,10 @@ erts_set_schedulers_online(Process *p,
ErtsRunQueue *rq = ERTS_RUNQ_IX(ix);
wake_scheduler(rq);
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+ wake_dirty_scheduler(ERTS_DIRTY_CPU_RUNQ);
+ wake_dirty_scheduler(ERTS_DIRTY_IO_RUNQ);
+#endif
}
}
@@ -6448,6 +6703,92 @@ sched_thread_func(void *vesdp)
return NULL;
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+#ifdef ERTS_SMP
+static void*
+sched_dirty_cpu_thread_func(void *vesdp)
+{
+ ErtsThrPrgrCallbacks callbacks;
+ ErtsSchedulerData *esdp = vesdp;
+ Uint no = esdp->dirty_no;
+ ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(no-1)->event = erts_tse_fetch();
+ callbacks.arg = (void *) esdp->ssi;
+ callbacks.wakeup = thr_prgr_wakeup;
+ callbacks.prepare_wait = NULL;
+ callbacks.wait = NULL;
+ callbacks.finalize_wait = NULL;
+
+ erts_thr_progress_register_unmanaged_thread(&callbacks);
+#ifdef ERTS_ENABLE_LOCK_CHECK
+ {
+ char buf[31];
+ erts_snprintf(&buf[0], 31, "dirty cpu scheduler %beu", no);
+ erts_lc_set_thread_name(&buf[0]);
+ }
+#endif
+ erts_tsd_set(sched_data_key, vesdp);
+#if ERTS_USE_ASYNC_READY_Q
+ esdp->aux_work_data.async_ready.queue = NULL;
+#endif
+
+ erts_proc_lock_prepare_proc_lock_waiter();
+
+#ifdef HIPE
+ hipe_thread_signal_init();
+#endif
+ erts_thread_init_float();
+
+ process_main();
+ /* No schedulers should *ever* terminate */
+ erl_exit(ERTS_ABORT_EXIT,
+ "Dirty CPU scheduler thread number %beu terminated\n",
+ no);
+ return NULL;
+}
+
+static void*
+sched_dirty_io_thread_func(void *vesdp)
+{
+ ErtsThrPrgrCallbacks callbacks;
+ ErtsSchedulerData *esdp = vesdp;
+ Uint no = esdp->dirty_no;
+ ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(no-1)->event = erts_tse_fetch();
+ callbacks.arg = (void *) esdp->ssi;
+ callbacks.wakeup = thr_prgr_wakeup;
+ callbacks.prepare_wait = NULL;
+ callbacks.wait = NULL;
+ callbacks.finalize_wait = NULL;
+
+ erts_thr_progress_register_unmanaged_thread(&callbacks);
+#ifdef ERTS_ENABLE_LOCK_CHECK
+ {
+ char buf[31];
+ erts_snprintf(&buf[0], 31, "dirty io scheduler %beu", no);
+ erts_lc_set_thread_name(&buf[0]);
+ }
+#endif
+ erts_tsd_set(sched_data_key, vesdp);
+#if ERTS_USE_ASYNC_READY_Q
+ esdp->aux_work_data.async_ready.queue = NULL;
+#endif
+
+ erts_proc_lock_prepare_proc_lock_waiter();
+
+#ifdef HIPE
+ hipe_thread_signal_init();
+#endif
+ erts_thread_init_float();
+
+ process_main();
+ /* No schedulers should *ever* terminate */
+ erl_exit(ERTS_ABORT_EXIT,
+ "Dirty I/O scheduler thread number %beu terminated\n",
+ no);
+ return NULL;
+}
+#endif
+#endif
+
static ethr_tid aux_tid;
void
@@ -6498,6 +6839,26 @@ erts_start_schedulers(void)
erts_no_schedulers = actual;
+#ifdef ERTS_DIRTY_SCHEDULERS
+#ifdef ERTS_SMP
+ {
+ int ix;
+ for (ix = 0; ix < erts_no_dirty_cpu_schedulers; ix++) {
+ ErtsSchedulerData *esdp = ERTS_DIRTY_CPU_SCHEDULER_IX(ix);
+ res = ethr_thr_create(&esdp->tid,sched_dirty_cpu_thread_func,(void*)esdp,&opts);
+ if (res != 0)
+ erl_exit(1, "Failed to create dirty cpu scheduler thread %d\n", ix);
+ }
+ for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
+ ErtsSchedulerData *esdp = ERTS_DIRTY_IO_SCHEDULER_IX(ix);
+ res = ethr_thr_create(&esdp->tid,sched_dirty_io_thread_func,(void*)esdp,&opts);
+ if (res != 0)
+ erl_exit(1, "Failed to create dirty io scheduler thread %d\n", ix);
+ }
+ }
+#endif
+#endif
+
ERTS_THR_MEMORY_BARRIER;
res = ethr_thr_create(&aux_tid, aux_thread, NULL, &opts);
@@ -7486,7 +7847,8 @@ Process *schedule(Process *p, int calls)
input_reductions = INPUT_REDUCTIONS;
}
- ERTS_SMP_LC_ASSERT(!erts_thr_progress_is_blocking());
+ ERTS_SMP_LC_ASSERT(ERTS_SCHEDULER_IS_DIRTY(erts_get_scheduler_data())
+ || !erts_thr_progress_is_blocking());
/*
* Clean up after the process being scheduled out.
@@ -7597,42 +7959,40 @@ Process *schedule(Process *p, int calls)
}
- ERTS_SMP_LC_ASSERT(!erts_thr_progress_is_blocking());
+ ERTS_SMP_LC_ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp)
+ || !erts_thr_progress_is_blocking());
check_activities_to_run: {
#ifdef ERTS_SMP
ErtsMigrationPaths *mps;
ErtsMigrationPath *mp;
-
-#ifdef ERTS_SMP
- {
- ErtsProcList *pnd_xtrs = rq->procs.pending_exiters;
- if (erts_proclist_fetch(&pnd_xtrs, NULL)) {
- rq->procs.pending_exiters = NULL;
- erts_smp_runq_unlock(rq);
- handle_pending_exiters(pnd_xtrs);
- erts_smp_runq_lock(rq);
- }
-
+ ErtsProcList *pnd_xtrs = rq->procs.pending_exiters;
+ if (erts_proclist_fetch(&pnd_xtrs, NULL)) {
+ rq->procs.pending_exiters = NULL;
+ erts_smp_runq_unlock(rq);
+ handle_pending_exiters(pnd_xtrs);
+ erts_smp_runq_lock(rq);
}
-#endif
- if (rq->check_balance_reds <= 0)
- check_balance(rq);
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ if (rq->check_balance_reds <= 0)
+ check_balance(rq);
- ERTS_SMP_LC_ASSERT(!erts_thr_progress_is_blocking());
- ERTS_SMP_LC_ASSERT(erts_smp_lc_runq_is_locked(rq));
+ ERTS_SMP_LC_ASSERT(!erts_thr_progress_is_blocking());
- mps = erts_get_migration_paths_managed();
- mp = &mps->mpath[rq->ix];
+ mps = erts_get_migration_paths_managed();
+ mp = &mps->mpath[rq->ix];
- if (mp->flags & ERTS_RUNQ_FLGS_IMMIGRATE_QMASK)
- immigrate(rq, mp);
+ if (mp->flags & ERTS_RUNQ_FLGS_IMMIGRATE_QMASK)
+ immigrate(rq, mp);
+ }
+ ERTS_SMP_LC_ASSERT(erts_smp_lc_runq_is_locked(rq));
continue_check_activities_to_run:
flags = ERTS_RUNQ_FLGS_GET_NOB(rq);
continue_check_activities_to_run_known_flags:
- ASSERT(flags & ERTS_RUNQ_FLG_NONEMPTY);
+ ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp)
+ || flags & ERTS_RUNQ_FLG_NONEMPTY);
if (flags & (ERTS_RUNQ_FLG_CHK_CPU_BIND|ERTS_RUNQ_FLG_SUSPENDED)) {
@@ -7647,7 +8007,7 @@ Process *schedule(Process *p, int calls)
}
}
- {
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
erts_aint32_t aux_work;
int leader_update = erts_thr_progress_update(esdp);
aux_work = erts_atomic32_read_acqb(&esdp->ssi->aux_work);
@@ -7659,9 +8019,9 @@ Process *schedule(Process *p, int calls)
handle_aux_work(&esdp->aux_work_data, aux_work, 0);
erts_smp_runq_lock(rq);
}
- }
- ERTS_SMP_LC_ASSERT(!erts_thr_progress_is_blocking());
+ ERTS_SMP_LC_ASSERT(!erts_thr_progress_is_blocking());
+ }
ERTS_SMP_LC_ASSERT(erts_smp_lc_runq_is_locked(rq));
#else /* ERTS_SMP */
@@ -7690,7 +8050,7 @@ Process *schedule(Process *p, int calls)
if (flags & ERTS_RUNQ_FLG_INACTIVE)
empty_runq(rq);
else {
- if (try_steal_task(rq))
+ if (!ERTS_RUNQ_IX_IS_DIRTY(rq->ix) && try_steal_task(rq))
goto continue_check_activities_to_run;
empty_runq(rq);
@@ -7702,6 +8062,7 @@ Process *schedule(Process *p, int calls)
flags = ERTS_RUNQ_FLGS_GET_NOB(rq);
if (flags & ERTS_RUNQ_FLG_SUSPENDED) {
non_empty_runq(rq);
+ flags |= ERTS_RUNQ_FLG_NONEMPTY;
goto continue_check_activities_to_run_known_flags;
}
}
@@ -7715,7 +8076,8 @@ Process *schedule(Process *p, int calls)
goto check_activities_to_run;
}
- else if (fcalls > input_reductions && prepare_for_sys_schedule()) {
+ else if (!ERTS_SCHEDULER_IS_DIRTY(esdp) &&
+ (fcalls > input_reductions && prepare_for_sys_schedule())) {
/*
* Schedule system-level activities.
*/
@@ -7819,6 +8181,14 @@ Process *schedule(Process *p, int calls)
psflg_band_mask = ~(((erts_aint32_t) 1) << (ERTS_PSFLGS_GET_PRQ_PRIO(state)
+ ERTS_PSFLGS_IN_PRQ_MASK_OFFSET));
+#ifdef ERTS_DIRTY_SCHEDULERS
+ /* if a non-dirty scheduler picks up a process marked as already being
+ in a dirty run queue, just drop it and go get another process */
+ if (state & (ERTS_PSFLG_DIRTY_CPU_PROC_IN_Q|ERTS_PSFLG_DIRTY_IO_PROC_IN_Q) &&
+ !ERTS_SCHEDULER_IS_DIRTY(esdp))
+ goto pick_next_process;
+#endif
+
if (!(state & ERTS_PSFLG_PROXY))
psflg_band_mask &= ~ERTS_PSFLG_IN_RUNQ;
else {
@@ -7901,6 +8271,10 @@ Process *schedule(Process *p, int calls)
(UWord) esdp->no);
int migrated = old && old != esdp->no;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+#endif
+
prio = (int) ERTS_PSFLGS_GET_USR_PRIO(state);
erts_smp_spin_lock(&erts_sched_stat.lock);
@@ -9711,8 +10085,12 @@ save_pending_exiter(Process *p)
non_empty_runq(rq);
erts_smp_runq_unlock(rq);
-
- wake_scheduler(rq);
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (ERTS_RUNQ_IX_IS_DIRTY(rq->ix))
+ wake_dirty_scheduler(rq);
+ else
+#endif
+ wake_scheduler(rq);
}
#endif
diff --git a/erts/emulator/beam/erl_process.h b/erts/emulator/beam/erl_process.h
index 6155f99b85..dcb9251d0d 100644
--- a/erts/emulator/beam/erl_process.h
+++ b/erts/emulator/beam/erl_process.h
@@ -74,6 +74,10 @@ struct ErtsNodesMonitor_;
#define ERTS_HAVE_SCHED_UTIL_BALANCING_SUPPORT 0
#define ERTS_MAX_NO_OF_SCHEDULERS 1024
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_MAX_NO_OF_DIRTY_CPU_SCHEDULERS ERTS_MAX_NO_OF_SCHEDULERS
+#define ERTS_MAX_NO_OF_DIRTY_IO_SCHEDULERS ERTS_MAX_NO_OF_SCHEDULERS
+#endif
#define ERTS_DEFAULT_MAX_PROCESSES (1 << 18)
@@ -103,6 +107,11 @@ extern Export exp_send, exp_receive, exp_timeout;
extern int erts_sched_compact_load;
extern int erts_sched_balance_util;
extern Uint erts_no_schedulers;
+#ifdef ERTS_DIRTY_SCHEDULERS
+extern Uint erts_no_dirty_cpu_schedulers;
+extern Uint erts_no_dirty_cpu_schedulers_online;
+extern Uint erts_no_dirty_io_schedulers;
+#endif
extern Uint erts_no_run_queues;
extern int erts_sched_thread_suggested_stack_size;
#define ERTS_SCHED_THREAD_MIN_STACK_SIZE 4 /* Kilo words */
@@ -275,6 +284,13 @@ typedef enum {
typedef struct ErtsSchedulerSleepInfo_ ErtsSchedulerSleepInfo;
+#ifdef ERTS_DIRTY_SCHEDULERS
+typedef struct {
+ erts_smp_spinlock_t lock;
+ ErtsSchedulerSleepInfo *list;
+} ErtsSchedulerSleepList;
+#endif
+
struct ErtsSchedulerSleepInfo_ {
#ifdef ERTS_SMP
ErtsSchedulerSleepInfo *next;
@@ -387,6 +403,12 @@ struct ErtsRunQueue_ {
erts_smp_mtx_t mtx;
erts_smp_cnd_t cnd;
+#ifdef ERTS_DIRTY_SCHEDULERS
+#ifdef ERTS_SMP
+ ErtsSchedulerSleepList sleepers;
+#endif
+#endif
+
ErtsSchedulerData *scheduler;
int waiting; /* < 0 in sys schedule; > 0 on cnd variable */
int woken;
@@ -542,12 +564,14 @@ struct ErtsSchedulerData_ {
Eterm tmp_heap[TMP_HEAP_SIZE];
int num_tmp_heap_used;
Eterm beam_emu_tmp_heap[BEAM_EMU_TMP_HEAP_SIZE];
- Eterm cmp_tmp_heap[CMP_TMP_HEAP_SIZE];
Eterm erl_arith_tmp_heap[ERL_ARITH_TMP_HEAP_SIZE];
#endif
ErtsSchedulerSleepInfo *ssi;
Process *current_process;
- Uint no; /* Scheduler number */
+ Uint no; /* Scheduler number for normal schedulers */
+#ifdef ERTS_DIRTY_SCHEDULERS
+ Uint dirty_no; /* Scheduler number for dirty schedulers */
+#endif
Port *current_port;
ErtsRunQueue *run_queue;
int virtual_reds;
@@ -574,6 +598,10 @@ typedef union {
} ErtsAlignedSchedulerData;
extern ErtsAlignedSchedulerData *erts_aligned_scheduler_data;
+#ifdef ERTS_DIRTY_SCHEDULERS
+extern ErtsAlignedSchedulerData *erts_aligned_dirty_cpu_scheduler_data;
+extern ErtsAlignedSchedulerData *erts_aligned_dirty_io_scheduler_data;
+#endif
#ifndef ERTS_SMP
extern ErtsSchedulerData *erts_scheduler_data;
@@ -685,8 +713,13 @@ erts_smp_reset_max_len(ErtsRunQueue *rq, ErtsRunQueueInfo *rqi)
#define ERTS_PSD_DIST_ENTRY 3
#define ERTS_PSD_CALL_TIME_BP 4
#define ERTS_PSD_DELAYED_GC_TASK_QS 5
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT 6
+#define ERTS_PSD_SIZE 7
+#else
#define ERTS_PSD_SIZE 6
+#endif
typedef struct {
void *data[ERTS_PSD_SIZE];
@@ -713,6 +746,11 @@ typedef struct {
#define ERTS_PSD_DELAYED_GC_TASK_QS_GET_LOCKS ERTS_PROC_LOCK_MAIN
#define ERTS_PSD_DELAYED_GC_TASK_QS_SET_LOCKS ERTS_PROC_LOCK_MAIN
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT_GET_LOCKS ERTS_PROC_LOCK_MAIN
+#define ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT_SET_LOCKS ERTS_PROC_LOCK_MAIN
+#endif
+
typedef struct {
ErtsProcLocks get_locks;
ErtsProcLocks set_locks;
@@ -1026,6 +1064,12 @@ void erts_check_for_holes(Process* p);
#define ERTS_PSFLG_RUNNING_SYS ERTS_PSFLG_BIT(15)
#define ERTS_PSFLG_PROXY ERTS_PSFLG_BIT(16)
#define ERTS_PSFLG_DELAYED_SYS ERTS_PSFLG_BIT(17)
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_PSFLG_DIRTY_CPU_PROC ERTS_PSFLG_BIT(18)
+#define ERTS_PSFLG_DIRTY_IO_PROC ERTS_PSFLG_BIT(19)
+#define ERTS_PSFLG_DIRTY_CPU_PROC_IN_Q ERTS_PSFLG_BIT(20)
+#define ERTS_PSFLG_DIRTY_IO_PROC_IN_Q ERTS_PSFLG_BIT(21)
+#endif
#define ERTS_PSFLGS_IN_PRQ_MASK (ERTS_PSFLG_IN_PRQ_MAX \
| ERTS_PSFLG_IN_PRQ_HIGH \
@@ -1231,12 +1275,46 @@ extern struct erts_system_profile_flags_t erts_system_profile_flags;
(p)->flags &= ~F_TIMO; \
} while (0)
+#if defined(ERTS_DIRTY_SCHEDULERS) && defined(ERTS_SMP)
+#define ERTS_NUM_DIRTY_RUNQS 2
+#else
+#define ERTS_NUM_DIRTY_RUNQS 0
+#endif
+
#define ERTS_RUNQ_IX(IX) \
(ASSERT(0 <= (IX) && (IX) < erts_no_run_queues), \
&erts_aligned_run_queues[(IX)].runq)
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_RUNQ_IX_IS_DIRTY(IX) \
+ (-(ERTS_NUM_DIRTY_RUNQS) <= (IX) && (IX) < 0)
+#define ERTS_DIRTY_RUNQ_IX(IX) \
+ (ASSERT(ERTS_RUNQ_IX_IS_DIRTY(IX)), \
+ &erts_aligned_run_queues[(IX)].runq)
+#define ERTS_DIRTY_CPU_RUNQ (&erts_aligned_run_queues[-1].runq)
+#define ERTS_DIRTY_IO_RUNQ (&erts_aligned_run_queues[-2].runq)
+#else
+#define ERTS_RUNQ_IX_IS_DIRTY(IX) 0
+#endif
#define ERTS_SCHEDULER_IX(IX) \
(ASSERT(0 <= (IX) && (IX) < erts_no_schedulers), \
&erts_aligned_scheduler_data[(IX)].esd)
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_DIRTY_CPU_SCHEDULER_IX(IX) \
+ (ASSERT(0 <= (IX) && (IX) < erts_no_dirty_cpu_schedulers), \
+ &erts_aligned_dirty_cpu_scheduler_data[(IX)].esd)
+#define ERTS_DIRTY_IO_SCHEDULER_IX(IX) \
+ (ASSERT(0 <= (IX) && (IX) < erts_no_dirty_io_schedulers), \
+ &erts_aligned_dirty_io_scheduler_data[(IX)].esd)
+#ifdef ERTS_SMP
+#define ERTS_SCHEDULER_IS_DIRTY(ESDP) \
+ ((ESDP)->dirty_no != 0)
+#else
+#define ERTS_SCHEDULER_IS_DIRTY(ESDP) 0
+#endif
+#else
+#define ERTS_RUNQ_IX_IS_DIRTY(IX) 0
+#define ERTS_SCHEDULER_IS_DIRTY(ESDP) 0
+#endif
void erts_pre_init_process(void);
void erts_late_init_process(void);
@@ -1439,9 +1517,11 @@ int erts_dbg_check_halloc_lock(Process *p);
void erts_dbg_multi_scheduling_return_trap(Process *, Eterm);
#endif
int erts_get_max_no_executing_schedulers(void);
-#ifdef ERTS_SMP
+#if defined(ERTS_SMP) || defined(ERTS_DIRTY_SCHEDULERS)
ErtsSchedSuspendResult
-erts_schedulers_state(Uint *, Uint *, Uint *, int);
+erts_schedulers_state(Uint *, Uint *, Uint *, Uint *, Uint *, Uint *, int);
+#endif
+#ifdef ERTS_SMP
ErtsSchedSuspendResult
erts_set_schedulers_online(Process *p,
ErtsProcLocks plocks,
@@ -1559,7 +1639,7 @@ do { \
ErtsSchedulerData *esdp__ = ((P) \
? ERTS_PROC_GET_SCHDATA((Process *) (P)) \
: erts_get_scheduler_data()); \
- if (esdp__) \
+ if (esdp__ && !ERTS_SCHEDULER_IS_DIRTY(esdp__)) \
esdp__->verify_unused_temp_alloc( \
esdp__->verify_unused_temp_alloc_data); \
} while (0)
@@ -1694,6 +1774,13 @@ erts_psd_set(Process *p, ErtsProcLocks plocks, int ix, void *data)
#define ERTS_PROC_SET_DELAYED_GC_TASK_QS(P, L, PBT) \
((ErtsProcSysTaskQs *) erts_psd_set((P), (L), ERTS_PSD_DELAYED_GC_TASK_QS, (void *) (PBT)))
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_PROC_GET_DIRTY_SCHED_TRAP_EXPORT(P) \
+ ((Export *) erts_psd_get((P), ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT))
+#define ERTS_PROC_SET_DIRTY_SCHED_TRAP_EXPORT(P, L, DSTE) \
+ ((Export *) erts_psd_set((P), (L), ERTS_PSD_DIRTY_SCHED_TRAP_EXPORT, (void *) (DSTE)))
+#endif
+
ERTS_GLB_INLINE Eterm erts_proc_get_error_handler(Process *p);
ERTS_GLB_INLINE Eterm erts_proc_set_error_handler(Process *p,
@@ -1887,7 +1974,12 @@ Uint erts_get_scheduler_id(void)
{
#ifdef ERTS_SMP
ErtsSchedulerData *esdp = erts_get_scheduler_data();
- return esdp ? esdp->no : (Uint) 0;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (esdp && ERTS_SCHEDULER_IS_DIRTY(esdp))
+ return 0;
+ else
+#endif
+ return esdp ? esdp->no : (Uint) 0;
#else
return erts_get_scheduler_data() ? (Uint) 1 : (Uint) 0;
#endif
diff --git a/erts/emulator/beam/erl_term.h b/erts/emulator/beam/erl_term.h
index 953edf79ea..50d3e63c58 100644
--- a/erts/emulator/beam/erl_term.h
+++ b/erts/emulator/beam/erl_term.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2000-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2000-2014. 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
@@ -1126,6 +1126,7 @@ extern unsigned tag_val_def(Wterm);
#define make_tuple_rel make_boxed_rel
#define make_external_rel make_boxed_rel
#define make_internal_ref_rel make_boxed_rel
+#define make_big_rel make_boxed_rel
#define binary_val_rel(RTERM, BASE) binary_val(rterm2wterm(RTERM, BASE))
#define list_val_rel(RTERM, BASE) list_val(rterm2wterm(RTERM, BASE))
diff --git a/erts/emulator/beam/erl_vm.h b/erts/emulator/beam/erl_vm.h
index 337422eead..b7de8208ad 100644
--- a/erts/emulator/beam/erl_vm.h
+++ b/erts/emulator/beam/erl_vm.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1996-2013. All Rights Reserved.
+ * Copyright Ericsson AB 1996-2014. 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
@@ -46,7 +46,6 @@
heap data on the C stack or if we use the buffers in the scheduler data. */
#define TMP_HEAP_SIZE 128 /* Number of Eterm in the schedulers
small heap for transient heap data */
-#define CMP_TMP_HEAP_SIZE 32 /* cmp wants its own tmp-heap... */
#define ERL_ARITH_TMP_HEAP_SIZE 4 /* as does erl_arith... */
#define BEAM_EMU_TMP_HEAP_SIZE 2 /* and beam_emu... */
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index c183c519ff..83a8911a36 100755
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -371,9 +371,9 @@ extern int stackdump_on_exit;
*/
typedef struct {
- UWord* start;
- UWord* sp;
- UWord* end;
+ Eterm* start;
+ Eterm* sp;
+ Eterm* end;
ErtsAlcType_t alloc_type;
}ErtsEStack;
@@ -384,7 +384,7 @@ void erl_grow_estack(ErtsEStack*, Eterm* def_stack);
#define ESTK_DEF_STACK(s) ESTK_CONCAT(s,_default_estack)
#define DECLARE_ESTACK(s) \
- UWord ESTK_DEF_STACK(s)[DEF_ESTACK_SIZE]; \
+ Eterm ESTK_DEF_STACK(s)[DEF_ESTACK_SIZE]; \
ErtsEStack s = { \
ESTK_DEF_STACK(s), /* start */ \
ESTK_DEF_STACK(s), /* sp */ \
@@ -418,8 +418,8 @@ do {\
if (s.start == ESTK_DEF_STACK(s)) {\
UWord _wsz = ESTACK_COUNT(s);\
(dst)->start = erts_alloc(s.alloc_type,\
- DEF_ESTACK_SIZE * sizeof(UWord));\
- memcpy((dst)->start, s.start,_wsz*sizeof(UWord));\
+ DEF_ESTACK_SIZE * sizeof(Eterm));\
+ memcpy((dst)->start, s.start,_wsz*sizeof(Eterm));\
(dst)->sp = (dst)->start + _wsz;\
(dst)->end = (dst)->start + DEF_ESTACK_SIZE;\
(dst)->alloc_type = s.alloc_type;\
@@ -495,7 +495,7 @@ typedef struct {
#define DEF_WSTACK_SIZE (16)
-void erl_grow_wstack(ErtsWStack*, Eterm* def_stack);
+void erl_grow_wstack(ErtsWStack*, UWord* def_stack);
#define WSTK_CONCAT(a,b) a##b
#define WSTK_DEF_STACK(s) WSTK_CONCAT(s,_default_wstack)
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c
index 7f8bdcb2ca..e0776cf67d 100644
--- a/erts/emulator/beam/utils.c
+++ b/erts/emulator/beam/utils.c
@@ -2688,11 +2688,6 @@ tailrecur_ne:
{
FloatDef f1, f2;
Eterm big;
-#if HEAP_ON_C_STACK
- Eterm big_buf[CMP_TMP_HEAP_SIZE]; /* If HEAP_ON_C_STACK */
-#else
- Eterm *big_buf = erts_get_scheduler_data()->cmp_tmp_heap;
-#endif
#if HALFWORD_HEAP
Wterm aw = is_immed(a) ? a : rterm2wterm(a,a_base);
Wterm bw = is_immed(b) ? b : rterm2wterm(b,b_base);
@@ -2703,6 +2698,8 @@ tailrecur_ne:
#define MAX_LOSSLESS_FLOAT ((double)((1LL << 53) - 2))
#define MIN_LOSSLESS_FLOAT ((double)(((1LL << 53) - 2)*-1))
#define BIG_ARITY_FLOAT_MAX (1024 / D_EXP) /* arity of max float as a bignum */
+ Eterm big_buf[BIG_NEED_SIZE(BIG_ARITY_FLOAT_MAX)];
+
b_tag = tag_val_def(bw);
switch(_NUMBER_CODE(a_tag, b_tag)) {
@@ -2718,8 +2715,9 @@ tailrecur_ne:
/* Float is within the no loss limit */
f1.fd = signed_val(aw);
j = float_comp(f1.fd, f2.fd);
+ }
#if ERTS_SIZEOF_ETERM == 8
- } else if (f2.fd > (double) (MAX_SMALL + 1)) {
+ else if (f2.fd > (double) (MAX_SMALL + 1)) {
/* Float is a positive bignum, i.e. bigger */
j = -1;
} else if (f2.fd < (double) (MIN_SMALL - 1)) {
@@ -2730,7 +2728,7 @@ tailrecur_ne:
j = signed_val(aw) - (Sint) f2.fd;
}
#else
- } else {
+ else {
/* If float is positive it is bigger than small */
j = (f2.fd > 0.0) ? -1 : 1;
}
@@ -2764,8 +2762,8 @@ tailrecur_ne:
j = float_comp(f1.fd, f2.fd);
}
} else {
- big = double_to_big(f2.fd, big_buf);
- j = big_comp(aw, big);
+ big = double_to_big(f2.fd, big_buf, sizeof(big_buf)/sizeof(Eterm));
+ j = big_comp(aw, rterm2wterm(big,big_buf));
}
if (_NUMBER_CODE(a_tag, b_tag) == FLOAT_BIG) {
j = -j;
@@ -2777,8 +2775,9 @@ tailrecur_ne:
/* Float is within the no loss limit */
f2.fd = signed_val(bw);
j = float_comp(f1.fd, f2.fd);
+ }
#if ERTS_SIZEOF_ETERM == 8
- } else if (f1.fd > (double) (MAX_SMALL + 1)) {
+ else if (f1.fd > (double) (MAX_SMALL + 1)) {
/* Float is a positive bignum, i.e. bigger */
j = 1;
} else if (f1.fd < (double) (MIN_SMALL - 1)) {
@@ -2789,7 +2788,7 @@ tailrecur_ne:
j = (Sint) f1.fd - signed_val(bw);
}
#else
- } else {
+ else {
/* If float is positive it is bigger than small */
j = (f1.fd > 0.0) ? 1 : -1;
}
diff --git a/erts/emulator/drivers/common/efile_drv.c b/erts/emulator/drivers/common/efile_drv.c
index dca979c13a..e040864d24 100644
--- a/erts/emulator/drivers/common/efile_drv.c
+++ b/erts/emulator/drivers/common/efile_drv.c
@@ -167,7 +167,7 @@ dt_private *get_dt_private(int);
#ifdef USE_THREADS
-#define IF_THRDS if (sys_info.async_threads > 0)
+#define THRDS_AVAILABLE (sys_info.async_threads > 0)
#ifdef HARDDEBUG /* HARDDEBUG in io.c is expected too */
#define TRACE_DRIVER fprintf(stderr, "Efile: ")
#else
@@ -177,24 +177,26 @@ dt_private *get_dt_private(int);
#define MUTEX_LOCK(m) do { IF_THRDS { TRACE_DRIVER; driver_pdl_lock(m); } } while (0)
#define MUTEX_UNLOCK(m) do { IF_THRDS { TRACE_DRIVER; driver_pdl_unlock(m); } } while (0)
#else
-#define IF_THRDS if (0)
+#define THRDS_AVAILABLE (0)
#define MUTEX_INIT(m, p)
#define MUTEX_LOCK(m)
#define MUTEX_UNLOCK(m)
#endif
+#define IF_THRDS if (THRDS_AVAILABLE)
+#define SENDFILE_FLGS_USE_THREADS (1 << 0)
/**
* On DARWIN sendfile can deadlock with close if called in
* different threads. So until Apple fixes so that sendfile
* is not buggy we disable usage of the async pool for
* DARWIN. The testcase t_sendfile_crashduring reproduces
- * this error when using +A 10.
+ * this error when using +A 10 and enabling SENDFILE_FLGS_USE_THREADS.
*/
#if defined(__APPLE__) && defined(__MACH__)
-#define USE_THRDS_FOR_SENDFILE 0
+#define USE_THRDS_FOR_SENDFILE(DATA) 0
#else
-#define USE_THRDS_FOR_SENDFILE (sys_info.async_threads > 0)
+#define USE_THRDS_FOR_SENDFILE(DATA) (DATA->flags & SENDFILE_FLGS_USE_THREADS)
#endif /* defined(__APPLE__) && defined(__MACH__) */
@@ -300,7 +302,7 @@ static void file_stop_select(ErlDrvEvent event, void* _);
enum e_timer {timer_idle, timer_again, timer_write};
#ifdef HAVE_SENDFILE
enum e_sendfile {sending, not_sending};
-static void free_sendfile(void *data);
+#define SENDFILE_USE_THREADS (1 << 0)
#endif /* HAVE_SENDFILE */
struct t_data;
@@ -1932,7 +1934,7 @@ static void invoke_sendfile(void *data)
d->c.sendfile.written += nbytes;
- if (result == 1 || (result == 0 && USE_THRDS_FOR_SENDFILE)) {
+ if (result == 1 || (result == 0 && USE_THRDS_FOR_SENDFILE(d))) {
d->result_ok = 0;
} else if (result == 0 && (d->errInfo.posix_errno == EAGAIN
|| d->errInfo.posix_errno == EINTR)) {
@@ -1949,7 +1951,7 @@ static void invoke_sendfile(void *data)
static void free_sendfile(void *data) {
struct t_data *d = (struct t_data *)data;
- if (USE_THRDS_FOR_SENDFILE) {
+ if (USE_THRDS_FOR_SENDFILE(d)) {
SET_NONBLOCKING(d->c.sendfile.out_fd);
} else {
MUTEX_LOCK(d->c.sendfile.q_mtx);
@@ -4122,8 +4124,16 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) {
goto done;
}
- if (hd_len != 0 || tl_len != 0 || flags != 0) {
- /* We do not allow header, trailers and/or flags right now */
+ if (hd_len != 0 || tl_len != 0) {
+ /* We do not allow header, trailers */
+ reply_posix_error(desc, EINVAL);
+ goto done;
+ }
+
+
+ if (flags & SENDFILE_FLGS_USE_THREADS && !THRDS_AVAILABLE) {
+ /* We do not allow use_threads flag on a system where
+ no threads are available. */
reply_posix_error(desc, EINVAL);
goto done;
}
@@ -4133,6 +4143,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) {
d->command = command;
d->invoke = invoke_sendfile;
d->free = free_sendfile;
+ d->flags = flags;
d->level = 2;
d->c.sendfile.out_fd = (int) out_fd;
@@ -4152,7 +4163,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) {
d->c.sendfile.nbytes = nbytes;
- if (USE_THRDS_FOR_SENDFILE) {
+ if (USE_THRDS_FOR_SENDFILE(d)) {
SET_BLOCKING(d->c.sendfile.out_fd);
} else {
/**
diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c
index 80937dfcc8..4a861b121c 100644
--- a/erts/emulator/drivers/common/inet_drv.c
+++ b/erts/emulator/drivers/common/inet_drv.c
@@ -854,9 +854,10 @@ static int my_strncasecmp(const char *s1, const char *s2, size_t n)
#define INET_IFNAMSIZ 16
/* INET Ignore states */
-#define INET_IGNORE_NONE 0
-#define INET_IGNORE_READ 1
-#define INET_IGNORE_WRITE 1 << 1
+#define INET_IGNORE_NONE 0
+#define INET_IGNORE_READ (1 << 0)
+#define INET_IGNORE_WRITE (1 << 1)
+#define INET_IGNORE_PASSIVE (1 << 2)
/* Max length of Erlang Term Buffer (for outputting structured terms): */
#ifdef HAVE_SCTP
@@ -8307,11 +8308,19 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
if (*buf == 1 && !desc->is_ignored) {
sock_select(desc, (FD_READ|FD_WRITE|FD_CLOSE|ERL_DRV_USE_NO_CALLBACK), 0);
- desc->is_ignored = INET_IGNORE_READ;
+ if (desc->active)
+ desc->is_ignored = INET_IGNORE_READ;
+ else
+ desc->is_ignored = INET_IGNORE_PASSIVE;
} else if (*buf == 0 && desc->is_ignored) {
- int flags = (FD_READ|FD_CLOSE|((desc->is_ignored & INET_IGNORE_WRITE)?FD_WRITE:0));
+ int flags = FD_CLOSE;
+ if (desc->is_ignored & INET_IGNORE_READ)
+ flags |= FD_READ;
+ if (desc->is_ignored & INET_IGNORE_WRITE)
+ flags |= FD_WRITE;
desc->is_ignored = INET_IGNORE_NONE;
- sock_select(desc, flags, 1);
+ if (flags != FD_CLOSE)
+ sock_select(desc, flags, 1);
} else
return ctl_error(EINVAL, rbuf, rsize);
@@ -8988,6 +8997,8 @@ static ErlDrvSSizeT tcp_inet_ctl(ErlDrvData e, unsigned int cmd,
driver_set_timer(desc->inet.port, timeout);
if (!INETP(desc)->is_ignored)
sock_select(INETP(desc),(FD_READ|FD_CLOSE),1);
+ else
+ INETP(desc)->is_ignored |= INET_IGNORE_READ;
}
}
return ctl_reply(INET_REP_OK, tbuf, 2, rbuf, rsize);
diff --git a/erts/emulator/sys/unix/sys.c b/erts/emulator/sys/unix/sys.c
index 59e34eb819..a5294ad84e 100644
--- a/erts/emulator/sys/unix/sys.c
+++ b/erts/emulator/sys/unix/sys.c
@@ -409,8 +409,10 @@ void sys_tty_reset(int exit_code)
#ifdef __tile__
/* Direct malloc to spread memory around the caches of multiple tiles. */
#include <malloc.h>
+#if defined(MALLOC_USE_HASH)
MALLOC_USE_HASH(1);
#endif
+#endif
#ifdef USE_THREADS
diff --git a/erts/emulator/sys/win32/erl_win_dyn_driver.h b/erts/emulator/sys/win32/erl_win_dyn_driver.h
index b9a9838a36..4010d939e5 100644
--- a/erts/emulator/sys/win32/erl_win_dyn_driver.h
+++ b/erts/emulator/sys/win32/erl_win_dyn_driver.h
@@ -82,7 +82,6 @@ WDD_TYPEDEF(int, erl_drv_send_term, (ErlDrvTermData, ErlDrvTermData, ErlDrvTermD
WDD_TYPEDEF(int, driver_send_term, (ErlDrvPort, ErlDrvTermData, ErlDrvTermData*, int));
WDD_TYPEDEF(unsigned int, driver_async_port_key, (ErlDrvPort));
WDD_TYPEDEF(long, driver_async, (ErlDrvPort,unsigned int*,void (*)(void*),void*,void (*)(void*)));
-WDD_TYPEDEF(int, driver_async_cancel, (unsigned int));
WDD_TYPEDEF(int, driver_lock_driver, (ErlDrvPort));
WDD_TYPEDEF(void *, driver_dl_open, (char *));
WDD_TYPEDEF(void *, driver_dl_sym, (void *, char *));
@@ -200,7 +199,6 @@ typedef struct {
WDD_FTYPE(driver_send_term) *driver_send_term;
WDD_FTYPE(driver_async_port_key) *driver_async_port_key;
WDD_FTYPE(driver_async) *driver_async;
- WDD_FTYPE(driver_async_cancel) *driver_async_cancel;
WDD_FTYPE(driver_lock_driver) *driver_lock_driver;
WDD_FTYPE(driver_dl_open) *driver_dl_open;
WDD_FTYPE(driver_dl_sym) *driver_dl_sym;
@@ -312,7 +310,6 @@ extern TWinDynDriverCallbacks WinDynDriverCallbacks;
#define driver_send_term (WinDynDriverCallbacks.driver_send_term)
#define driver_async_port_key (WinDynDriverCallbacks.driver_async_port_key)
#define driver_async (WinDynDriverCallbacks.driver_async)
-#define driver_async_cancel (WinDynDriverCallbacks.driver_async_cancel)
#define driver_lock_driver (WinDynDriverCallbacks.driver_lock_driver)
#define driver_dl_open (WinDynDriverCallbacks.driver_dl_open)
#define driver_dl_sym (WinDynDriverCallbacks.driver_dl_sym)
@@ -448,7 +445,6 @@ do { \
((W).driver_send_term) = driver_send_term; \
((W).driver_async_port_key) = driver_async_port_key; \
((W).driver_async) = driver_async; \
-((W).driver_async_cancel) = driver_async_cancel; \
((W).driver_lock_driver) = driver_lock_driver; \
((W).driver_dl_open) = driver_dl_open; \
((W).driver_dl_sym) = driver_dl_sym; \
diff --git a/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c b/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
index 9d8bbac231..e2b338f801 100644
--- a/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
@@ -277,10 +277,6 @@ static void stop(ErlDrvData drv_data)
case IOQ_EXIT_TIMEOUT_ASYNC:
driver_cancel_timer(ddp->port);
break;
- case IOQ_EXIT_READY_ASYNC:
- if (ddp->outstanding_async_task)
- driver_async_cancel(ddp->async_task);
- break;
default:
break;
}
diff --git a/erts/emulator/test/driver_SUITE_data/otp_9302_drv.c b/erts/emulator/test/driver_SUITE_data/otp_9302_drv.c
index 88df73f696..7c144d20cf 100644
--- a/erts/emulator/test/driver_SUITE_data/otp_9302_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/otp_9302_drv.c
@@ -227,6 +227,4 @@ static void output(ErlDrvData drv_data,
ad[4]->term_data.msg = driver_mk_atom("end_of_jobs");
for (i = 0; i < sizeof(id)/sizeof(id[0]); i++)
id[i] = driver_async(data->port, &key, async_invoke, ad[i], driver_free);
- if (id[2] > 0)
- driver_async_cancel(id[2]);
}
diff --git a/erts/emulator/test/driver_SUITE_data/sys_info_base_drv.c b/erts/emulator/test/driver_SUITE_data/sys_info_base_drv.c
index c22a415c59..e44c7dbd5e 100644
--- a/erts/emulator/test/driver_SUITE_data/sys_info_base_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/sys_info_base_drv.c
@@ -19,14 +19,14 @@
/*
* Author: Rickard Green
*
- * Description: Driver that fakes driver version 2.0 and tests
+ * Description: Driver that fakes driver version 3.0 and tests
* driver_system_info().
*
*/
#include "sys_info_drv_impl.h"
-#define SYS_INFO_DRV_MAJOR_VSN 2
+#define SYS_INFO_DRV_MAJOR_VSN 3
#define SYS_INFO_DRV_MINOR_VSN 0
#define SYS_INFO_DRV_NAME_STR "sys_info_base_drv"
#define SYS_INFO_DRV_NAME sys_info_base_drv
diff --git a/erts/emulator/test/driver_SUITE_data/sys_info_prev_drv.c b/erts/emulator/test/driver_SUITE_data/sys_info_prev_drv.c
index 815d96cc97..63c69f751c 100644
--- a/erts/emulator/test/driver_SUITE_data/sys_info_prev_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/sys_info_prev_drv.c
@@ -19,14 +19,14 @@
/*
* Author: Rickard Green
*
- * Description: Driver that fakes driver version 2.0 and tests
+ * Description: Driver that fakes driver version 3.0 and tests
* driver_system_info().
*
*/
#include "sys_info_drv_impl.h"
-#define SYS_INFO_DRV_MAJOR_VSN 2
+#define SYS_INFO_DRV_MAJOR_VSN 3
#define SYS_INFO_DRV_MINOR_VSN 0
#define SYS_INFO_DRV_NAME_STR "sys_info_prev_drv"
#define SYS_INFO_DRV_NAME sys_info_prev_drv
diff --git a/erts/emulator/test/match_spec_SUITE.erl b/erts/emulator/test/match_spec_SUITE.erl
index bcc46d78ba..330bef7104 100644
--- a/erts/emulator/test/match_spec_SUITE.erl
+++ b/erts/emulator/test/match_spec_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2014. 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
@@ -25,6 +25,7 @@
trace_control_word/1, silent/1, silent_no_ms/1, silent_test/1,
ms_trace2/1, ms_trace3/1, boxed_and_small/1,
destructive_in_test_bif/1, guard_exceptions/1,
+ empty_list/1,
unary_plus/1, unary_minus/1, moving_labels/1]).
-export([fpe/1]).
-export([otp_9422/1]).
@@ -60,6 +61,7 @@ all() ->
guard_exceptions, unary_plus, unary_minus, fpe,
moving_labels,
faulty_seq_trace,
+ empty_list,
otp_9422];
true -> [not_run]
end.
@@ -897,6 +899,11 @@ fpe(Config) when is_list(Config) ->
_ -> ok
end.
+empty_list(Config) when is_list(Config) ->
+ Val=[{'$1',[], [{message,'$1'},{message,{caller}},{return_trace}]}],
+ %% Did crash debug VM in faulty assert:
+ erlang:match_spec_test([],Val,trace).
+
moving_labels(Config) when is_list(Config) ->
%% Force an andalso/orelse construction to be moved by placing it
%% in a tuple followed by a constant term. Labels should still
diff --git a/erts/emulator/test/nif_SUITE.erl b/erts/emulator/test/nif_SUITE.erl
index 9a70e8646a..affb66289b 100644
--- a/erts/emulator/test/nif_SUITE.erl
+++ b/erts/emulator/test/nif_SUITE.erl
@@ -36,7 +36,7 @@
threading/1, send/1, send2/1, send3/1, send_threaded/1, neg/1,
is_checks/1,
get_length/1, make_atom/1, make_string/1, reverse_list_test/1,
- otp_9668/1, consume_timeslice/1
+ otp_9668/1, consume_timeslice/1, dirty_nif/1
]).
-export([many_args_100/100]).
@@ -63,7 +63,7 @@ all() ->
resource_takeover, threading, send, send2, send3,
send_threaded, neg, is_checks, get_length, make_atom,
make_string,reverse_list_test,
- otp_9668, consume_timeslice
+ otp_9668, consume_timeslice, dirty_nif
].
groups() ->
@@ -1343,6 +1343,20 @@ consume_timeslice(Config) when is_list(Config) ->
ok.
+dirty_nif(Config) when is_list(Config) ->
+ try erlang:system_info(dirty_cpu_schedulers) of
+ N when is_integer(N) ->
+ ensure_lib_loaded(Config),
+ Val1 = 42,
+ Val2 = "Erlang",
+ Val3 = list_to_binary([Val2, 0]),
+ {Val1, Val2, Val3} = call_dirty_nif(Val1, Val2, Val3),
+ ok
+ catch
+ error:badarg ->
+ {skipped,"No dirty scheduler support"}
+ end.
+
next_msg(Pid) ->
receive
M -> M
@@ -1472,6 +1486,7 @@ echo_int(_) -> ?nif_stub.
type_sizes() -> ?nif_stub.
otp_9668_nif(_) -> ?nif_stub.
consume_timeslice_nif(_,_) -> ?nif_stub.
+call_dirty_nif(_,_,_) -> ?nif_stub.
nif_stub_error(Line) ->
exit({nif_not_loaded,module,?MODULE,line,Line}).
diff --git a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
index 0c4a9f7e5c..6f902e186d 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
+++ b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
@@ -1494,6 +1494,48 @@ static ERL_NIF_TERM consume_timeslice_nif(ErlNifEnv* env, int argc, const ERL_NI
}
}
+#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
+static ERL_NIF_TERM dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int n;
+ char s[10];
+ ErlNifBinary b;
+ ERL_NIF_TERM result;
+ if (enif_have_dirty_schedulers()) {
+ assert(enif_is_on_dirty_scheduler(env));
+ }
+ assert(argc == 3);
+ enif_get_int(env, argv[0], &n);
+ enif_get_string(env, argv[1], s, sizeof s, ERL_NIF_LATIN1);
+ enif_inspect_binary(env, argv[2], &b);
+ result = enif_make_tuple3(env,
+ enif_make_int(env, n),
+ enif_make_string(env, s, ERL_NIF_LATIN1),
+ enif_make_binary(env, &b));
+ return enif_schedule_dirty_nif_finalizer(env, result, enif_dirty_nif_finalizer);
+}
+
+static ERL_NIF_TERM call_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int n;
+ char s[10];
+ ErlNifBinary b;
+ assert(!enif_is_on_dirty_scheduler(env));
+ if (argc != 3)
+ return enif_make_badarg(env);
+ if (enif_have_dirty_schedulers()) {
+ if (enif_get_int(env, argv[0], &n) &&
+ enif_get_string(env, argv[1], s, sizeof s, ERL_NIF_LATIN1) &&
+ enif_inspect_binary(env, argv[2], &b))
+ return enif_schedule_dirty_nif(env, ERL_NIF_DIRTY_JOB_CPU_BOUND, dirty_nif, argc, argv);
+ else
+ return enif_make_badarg(env);
+ } else {
+ return dirty_nif(env, argc, argv);
+ }
+}
+#endif
+
static ErlNifFunc nif_funcs[] =
{
{"lib_version", 0, lib_version},
@@ -1543,7 +1585,10 @@ static ErlNifFunc nif_funcs[] =
{"echo_int", 1, echo_int},
{"type_sizes", 0, type_sizes},
{"otp_9668_nif", 1, otp_9668_nif},
- {"consume_timeslice_nif", 2, consume_timeslice_nif}
+ {"consume_timeslice_nif", 2, consume_timeslice_nif},
+#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
+ {"call_dirty_nif", 3, call_dirty_nif},
+#endif
};
ERL_NIF_INIT(nif_SUITE,nif_funcs,load,reload,upgrade,unload)
diff --git a/erts/etc/common/erlexec.c b/erts/etc/common/erlexec.c
index 78a50744ef..2cf7280ebc 100644
--- a/erts/etc/common/erlexec.c
+++ b/erts/etc/common/erlexec.c
@@ -829,7 +829,17 @@ int main(int argc, char **argv)
if (argv[i][2] == 'P') {
if (argv[i][3] != '\0')
goto the_default;
- } else if (argv[i][2] != '\0')
+ }
+#ifdef ERTS_DIRTY_SCHEDULERS
+ else if (argv[i][2] == 'D') {
+ char* type = argv[i]+3;
+ if (strcmp(type, "cpu") != 0 &&
+ strcmp(type, "Pcpu") != 0 &&
+ strcmp(type, "io") != 0)
+ goto the_default;
+ }
+#endif
+ else if (argv[i][2] != '\0')
goto the_default;
if (i+1 >= argc)
usage(argv[i]);
diff --git a/erts/etc/unix/cerl.src b/erts/etc/unix/cerl.src
index be8343e87e..78fefbea55 100644
--- a/erts/etc/unix/cerl.src
+++ b/erts/etc/unix/cerl.src
@@ -86,6 +86,7 @@ run_valgrind=no
# Default rootdir
ROOTDIR=%SRC_ROOTDIR%
BINDIR="$ROOTDIR/bin/`$ROOTDIR/erts/autoconf/config.guess`"
+TARGET=%TARGET%
#BINDIR="$ROOTDIR/bin/%TARGET%"
PROGNAME=$ROOTDIR/bin/cerl
EMU=beam
@@ -248,6 +249,12 @@ while [ $# -gt 0 ]; do
done
+if [ ! -f $BINDIR/erlexec -a -f $ROOTDIR/bin/$TARGET/erlexec ]; then
+ # We are in a strange target (I'm looking at you openbsd) where
+ # TARGET != config.guess
+ BINDIR=$ROOTDIR/bin/$TARGET
+fi
+
PATH=$BINDIR:$ROOTDIR/bin:$PATH
EXEC=$BINDIR/erlexec
diff --git a/erts/include/erl_native_features_config.h.in b/erts/include/erl_native_features_config.h.in
new file mode 100644
index 0000000000..d1674cb256
--- /dev/null
+++ b/erts/include/erl_native_features_config.h.in
@@ -0,0 +1,21 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2004-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%
+ */
+
+/* Dirty scheduler support */
+#undef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
diff --git a/erts/lib_src/Makefile.in b/erts/lib_src/Makefile.in
index 4f0a5e5202..cf1aef518a 100644
--- a/erts/lib_src/Makefile.in
+++ b/erts/lib_src/Makefile.in
@@ -458,6 +458,7 @@ RELSYSDIR = $(RELEASE_PATH)/erts-$(VSN)
RELEASE_INCLUDES= \
$(ERTS_INCL)/erl_memory_trace_parser.h \
$(ERTS_INCL)/$(TARGET)/erl_int_sizes_config.h \
+ $(ERTS_INCL)/$(TARGET)/erl_native_features_config.h \
$(ERTS_INCL)/erl_fixed_size_int_types.h
RELEASE_LIBS=$(ERTS_LIBS)
diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam
index 3c77d6ae0f..f38377647c 100644
--- a/erts/preloaded/ebin/erlang.beam
+++ b/erts/preloaded/ebin/erlang.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_file.beam b/erts/preloaded/ebin/prim_file.beam
index d5a1ec766d..e40e33b332 100644
--- a/erts/preloaded/ebin/prim_file.beam
+++ b/erts/preloaded/ebin/prim_file.beam
Binary files differ
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl
index f99d5bfdd0..ee5bd3e515 100644
--- a/erts/preloaded/src/erlang.erl
+++ b/erts/preloaded/src/erlang.erl
@@ -2090,6 +2090,10 @@ subtract(_,_) ->
(cpu_topology, CpuTopology) -> OldCpuTopology when
CpuTopology :: cpu_topology(),
OldCpuTopology :: cpu_topology();
+ (dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline) ->
+ OldDirtyCPUSchedulersOnline when
+ DirtyCPUSchedulersOnline :: pos_integer(),
+ OldDirtyCPUSchedulersOnline :: pos_integer();
(fullsweep_after, Number) -> OldNumber when
Number :: non_neg_integer(),
OldNumber :: non_neg_integer();
@@ -2220,6 +2224,9 @@ tuple_to_list(_Tuple) ->
CpuTopology :: cpu_topology();
(creation) -> integer();
(debug_compiled) -> boolean();
+ (dirty_cpu_schedulers) -> non_neg_integer();
+ (dirty_cpu_schedulers_online) -> non_neg_integer();
+ (dirty_io_schedulers) -> non_neg_integer();
(dist) -> binary();
(dist_buf_busy_limit) -> non_neg_integer();
(dist_ctrl) -> {Node :: node(),
diff --git a/erts/preloaded/src/prim_file.erl b/erts/preloaded/src/prim_file.erl
index 5999e98340..34679404a2 100644
--- a/erts/preloaded/src/prim_file.erl
+++ b/erts/preloaded/src/prim_file.erl
@@ -27,7 +27,7 @@
%% Generic file contents operations
-export([open/2, close/1, datasync/1, sync/1, advise/4, position/2, truncate/1,
write/2, pwrite/2, pwrite/3, read/2, read_line/1, pread/2, pread/3,
- copy/3, sendfile/10, allocate/3]).
+ copy/3, sendfile/8, allocate/3]).
%% Specialized file operations
-export([open/1, open/3]).
@@ -149,6 +149,9 @@
-define(POSIX_FADV_DONTNEED, 4).
-define(POSIX_FADV_NOREUSE, 5).
+%% Sendfile flags
+-define(EFILE_SENDFILE_USE_THREADS, 1).
+
%%% BIFs
@@ -582,13 +585,14 @@ write_file(_, _) ->
% {error, enotsup};
sendfile(#file_descriptor{module = ?MODULE, data = {Port, _}},
Dest, Offset, Bytes, _ChunkSize, Headers, Trailers,
- _Nodiskio, _MNowait, _Sync) ->
+ Flags) ->
case erlang:port_get_data(Dest) of
Data when Data == inet_tcp; Data == inet6_tcp ->
ok = inet:lock_socket(Dest,true),
{ok, DestFD} = prim_inet:getfd(Dest),
+ IntFlags = translate_sendfile_flags(Flags),
try drv_command(Port, [<<?FILE_SENDFILE, DestFD:32,
- 0:8,
+ IntFlags:8,
Offset:64/unsigned,
Bytes:64/unsigned,
(iolist_size(Headers)):32/unsigned,
@@ -601,6 +605,13 @@ sendfile(#file_descriptor{module = ?MODULE, data = {Port, _}},
{error,badarg}
end.
+translate_sendfile_flags([{use_threads,true}|T]) ->
+ ?EFILE_SENDFILE_USE_THREADS bor translate_sendfile_flags(T);
+translate_sendfile_flags([_|T]) ->
+ translate_sendfile_flags(T);
+translate_sendfile_flags([]) ->
+ 0.
+
%%%-----------------------------------------------------------------
%%% Functions operating on files without handle to the file. ?DRV.
diff --git a/erts/test/z_SUITE.erl b/erts/test/z_SUITE.erl
index da72b18f05..056561d3db 100644
--- a/erts/test/z_SUITE.erl
+++ b/erts/test/z_SUITE.erl
@@ -116,7 +116,7 @@ find_cerl(false) ->
end;
find_cerl(DBTop) ->
case catch filelib:wildcard(filename:join([DBTop,
- "otp_src_R*",
+ "otp_src_*",
"bin",
"cerl"])) of
[Cerl | _ ] ->
@@ -242,7 +242,7 @@ dump_core(#core_search_conf{ cerl = Cerl }, Core) ->
_ ->
os:cmd(Cerl ++ " -dump " ++ Core)
end,
- ct:log("~s~n~n~s",[Core,Dump]).
+ ct:log("~ts~n~n~ts",[Core,Dump]).
format_core(Conf, {ignore, Core}) ->
diff --git a/erts/vsn.mk b/erts/vsn.mk
index 8e77a9a26e..88a393f3d5 100644
--- a/erts/vsn.mk
+++ b/erts/vsn.mk
@@ -22,7 +22,7 @@ VSN = 6.0
# OTP major version
SYSTEM_VSN = 17
# OTP correction package version
-SYSTEM_CP_VSN = 17.0-rc0
+SYSTEM_CP_VSN = 17.0-rc1
# Port number 4365 in 4.2
# Port number 4366 in 4.3
diff --git a/lib/asn1/doc/src/asn1_ug.xml b/lib/asn1/doc/src/asn1_ug.xml
index 74c4aa9948..eb9f000e75 100644
--- a/lib/asn1/doc/src/asn1_ug.xml
+++ b/lib/asn1/doc/src/asn1_ug.xml
@@ -653,7 +653,7 @@ Day1 = saturday,
Bits1 ::= BIT STRING
Bits2 ::= BIT STRING {foo(0),bar(1),gnu(2),gnome(3),punk(14)}
</pre>
- <p>There are five different notations available for representation of
+ <p>There are two notations available for representation of
BIT STRING values in Erlang and as input to the encode functions.</p>
<list type="ordered">
<item>A bitstring. By default, a BIT STRING with no
@@ -661,43 +661,10 @@ Bits2 ::= BIT STRING {foo(0),bar(1),gnu(2),gnome(3),punk(14)}
<item>A list of atoms corresponding to atoms in the <c>NamedBitList</c>
in the BIT STRING definition. A BIT STRING with symbolic
names will always be decoded to this format.</item>
- <item>A list of binary digits (0 or 1). This format is always
- accepted as input to the encode functions. A BIT STRING will
- be decoded to this format if <em>legacy_bit_string</em> option
- has been given. <em>This format may be withdrawn in a future
- release.</em>
- </item>
- <item>As <c>{Unused,Binary}</c> where <c>Unused</c> denotes how
- many trailing zero-bits 0 to 7 that are unused in the least
- significant byte in <c>Binary</c>. This format is always
- accepted as input to the encode functions. A BIT STRING will
- be decoded to this format if <em>compact_bit_string</em> has
- been given. <em>This format may be withdrawn in a future
- release.</em>
- </item>
- <item>A hexadecimal number (or an integer). This format should be
- avoided, since it is easy to misinterpret a <c>BIT STRING</c>
- value in this format. <em>This format may be withdrawn in a future
- release.</em>
- </item>
</list>
- <note>
- <p>It is recommended to either use the bitstring format (for
- BIT STRINGs with no symbolic names) or a list of symbolic
- names (for BIT STRINGs with symbolic names). The other formats
- should be avoided since they may be withdrawn in a future
- release.
- </p>
- </note>
+ <p>Example:</p>
<pre>
Bits1Val1 = &lt;&lt;0:1,1:1,0:1,1:1,1:1&gt;&gt;,
-Bits1Val2 = 16#1A,
-Bits1Val3 = {3,&lt;&lt;0:1,1:1,0:1,1:1,1:1,0:3&gt;&gt;},
-Bits1Val4 = [0,1,0,1,1]
- </pre>
- <p>Note that <c>Bits1Val1</c>, <c>Bits1Val2</c>, <c>Bits1Val3</c>,
- and <c>Bits1Val1</c> denote the same value.</p>
- <pre>
Bits2Val1 = [gnu,punk],
Bits2Val2 = &lt;&lt;2#1110:4&gt;&gt;,
Bits2Val3 = [bar,gnu,gnome],
@@ -708,37 +675,60 @@ Bits2Val3 = [bar,gnu,gnome],
2 and 14 are set to 1 and the rest set to 0. The symbolic values
appear as a list of values. If a named value appears, which is not
specified in the type definition, a run-time error will occur.</p>
- <p>The compact notation equivalent to the empty BIT STRING is
- <c><![CDATA[{0,<<>>}]]></c>, which in the other notations is
- <c><![CDATA[<<>>]]></c>, <c>[]</c>, or
- <c>0</c>.</p>
<p>BIT STRINGS may also be sub-typed with, for example, a SIZE
specification:</p>
<pre>
Bits3 ::= BIT STRING (SIZE(0..31)) </pre>
<p>This means that no bit higher than 31 can ever be set.</p>
+
+ <section>
+ <title>Deprecated representations for BIT STRING</title>
+ <p>In addition to the representations described above, the
+ following deprecated representations are available if the
+ specification has been compiled with the
+ <c>legacy_erlang_types</c> option:</p>
+ <list type="ordered">
+ <item>A list of binary digits (0 or 1). This format is
+ accepted as input to the encode functions, and a BIT STRING
+ will be decoded to this format if the
+ <em>legacy_bit_string</em> option has been given.
+ </item>
+ <item>As <c>{Unused,Binary}</c> where <c>Unused</c> denotes
+ how many trailing zero-bits 0 to 7 that are unused in the
+ least significant byte in <c>Binary</c>. This format is
+ accepted as input to the encode functions, and a <c>BIT
+ STRING</c> will be decoded to this format if
+ <em>compact_bit_string</em> has been given.
+ </item>
+ <item>A hexadecimal number (or an integer). This format
+ should be avoided, since it is easy to misinterpret a BIT
+ STRING value in this format.
+ </item>
+ </list>
+ </section>
</section>
<section>
<marker id="OCTET STRING"></marker>
<title>OCTET STRING</title>
- <p>The OCTET STRING is the simplest of all ASN.1 types The OCTET STRING
- only moves or transfers e.g. binary files or other unstructured
- information complying to two rules.
- Firstly, the bytes consist of octets and secondly, encoding is
- not required.</p>
+ <p>The OCTET STRING is the simplest of all ASN.1 types. The
+ OCTET STRING only moves or transfers e.g. binary files or other
+ unstructured information complying to two rules. Firstly, the
+ bytes consist of octets and secondly, encoding is not
+ required.</p>
<p>It is possible to have the following ASN.1 type definitions:</p>
<pre>
O1 ::= OCTET STRING
O2 ::= OCTET STRING (SIZE(28)) </pre>
<p>With the following example assignments in Erlang:</p>
<pre>
-O1Val = [17,13,19,20,0,0,255,254],
-O2Val = "must be exactly 28 chars....", </pre>
- <p>Observe that <c>O1Val</c> is assigned a series of numbers between 0
- and 255 i.e. octets.
- <c>O2Val</c> is assigned using the string notation.
- </p>
+O1Val = &lt;&lt;17,13,19,20,0,0,255,254&gt;&gt;,
+O2Val = &lt;&lt;"must be exactly 28 chars...."&gt;&gt;,</pre>
+ <p>By default, an OCTET STRING is always represented as
+ an Erlang binary. If the specification has been compiled with
+ the <c>legacy_erlang_types</c> option, the encode functions
+ will accept both lists and binaries, and the decode functions
+ will decode an OCTET STRING to a list.</p>
</section>
<section>
diff --git a/lib/asn1/doc/src/asn1ct.xml b/lib/asn1/doc/src/asn1ct.xml
index ada2aace87..5871c8ad68 100644
--- a/lib/asn1/doc/src/asn1ct.xml
+++ b/lib/asn1/doc/src/asn1ct.xml
@@ -42,6 +42,17 @@
can be used in during development of applications which handles ASN.1
data (encoded as BER or PER).</p>
<note>
+ <p>By default in OTP 17, the representation of the BIT STRING
+ and OCTET STRING types as Erlang terms have changed. BIT
+ STRING values are now Erlang bitstrings and OCTET STRING values
+ are binaries. For details see <seealso
+ marker="asn1_ug#BIT STRING">BIT STRING</seealso> and <seealso
+ marker="asn1_ug#OCTET STRING">OCTET STRING</seealso> in User's
+ Guide.</p>
+ <p>To revert to the old representation of the types, use the
+ <c>legacy_erlang_types</c> option.</p>
+ </note>
+ <note>
<p>In R16, the options have been simplified. The back-end is chosen
using one of the options <c>ber</c>, <c>per</c>, or <c>uper</c>.
The options <c>optimize</c>, <c>nif</c>, and <c>driver</c> options
@@ -64,7 +75,7 @@
<v>Asn1module = atom() | string()</v>
<v>Options = [Option| OldOption]</v>
<v>Option = ber | per | uper | der | compact_bit_string |
- legacy_bit_string |
+ legacy_bit_string | legacy_erlang_types |
noobj | {n2n, EnumTypeName} |{outdir, Dir} | {i, IncludeDir} |
asn1config | undec_rest | no_ok_wrapper |
{macro_name_prefix, Prefix} | {record_name_prefix, Prefix} | verbose | warnings_as_errors</v>
@@ -163,6 +174,7 @@ File3.asn </pre>
BIT STRING type section in the Users Guide
</seealso>.
</p>
+ <p>This option implies the <c>legacy_erlang_types</c> option.</p>
</item>
<tag><c>legacy_bit_string</c></tag>
<item>
@@ -175,8 +187,19 @@ File3.asn </pre>
<seealso marker="asn1_ug#BIT STRING">
BIT STRING type section in the Users Guide
</seealso>.
+ <p>This option implies the <c>legacy_erlang_types</c> option.</p>
</p>
</item>
+ <tag><c>legacy_erlang_types</c></tag>
+ <item>
+ <p>Use the same Erlang types to represent BIT STRING and
+ OCTET STRING as in R16. For details see <seealso
+ marker="asn1_ug#BIT STRING">BIT STRING</seealso> and
+ <seealso marker="asn1_ug#OCTET STRING">OCTET
+ STRING</seealso> in User's Guide.</p>
+ <p><em>This option is not recommended for
+ new code.</em></p>
+ </item>
<tag><c>{n2n, EnumTypeName}</c></tag>
<item>
<p>
diff --git a/lib/asn1/src/asn1ct.erl b/lib/asn1/src/asn1ct.erl
index f2e9606ccb..531a4935fe 100644
--- a/lib/asn1/src/asn1ct.erl
+++ b/lib/asn1/src/asn1ct.erl
@@ -40,7 +40,7 @@
maybe_rename_function/3,current_sindex/0,
set_current_sindex/1,maybe_saved_sindex/2,
parse_and_save/2,verbose/3,warning/3,warning/4,error/3]).
--export([get_bit_string_format/0]).
+-export([get_bit_string_format/0,use_legacy_types/0]).
-include("asn1_records.hrl").
-include_lib("stdlib/include/erl_compile.hrl").
@@ -841,6 +841,7 @@ delete_double_of_symbol1([],Acc) ->
generate({M,GenTOrV}, OutFile, EncodingRule, Options) ->
debug_on(Options),
setup_bit_string_format(Options),
+ setup_legacy_erlang_types(Options),
put(encoding_options,Options),
asn1ct_table:new(check_functions),
@@ -869,6 +870,31 @@ generate({M,GenTOrV}, OutFile, EncodingRule, Options) ->
asn1ct_table:delete(check_functions),
Result.
+setup_legacy_erlang_types(Opts) ->
+ F = case lists:member(legacy_erlang_types, Opts) of
+ false ->
+ case get_bit_string_format() of
+ bitstring ->
+ false;
+ compact ->
+ legacy_forced_info(compact_bit_string),
+ true;
+ legacy ->
+ legacy_forced_info(legacy_bit_string),
+ true
+ end;
+ true ->
+ true
+ end,
+ put(use_legacy_erlang_types, F).
+
+legacy_forced_info(Opt) ->
+ io:format("Info: The option 'legacy_erlang_types' "
+ "is implied by the '~s' option.\n", [Opt]).
+
+use_legacy_types() ->
+ get(use_legacy_erlang_types).
+
setup_bit_string_format(Opts) ->
Format = case {lists:member(compact_bit_string, Opts),
lists:member(legacy_bit_string, Opts)} of
@@ -1075,6 +1101,7 @@ remove_asn_flags(Options) ->
X /= optimize,
X /= compact_bit_string,
X /= legacy_bit_string,
+ X /= legacy_erlang_types,
X /= debug,
X /= asn1config,
X /= record_name_prefix].
diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl
index 0a13801e08..f94f3b56bc 100644
--- a/lib/asn1/src/asn1ct_check.erl
+++ b/lib/asn1/src/asn1ct_check.erl
@@ -2574,6 +2574,18 @@ normalize_bitstring(S, Value, Type)->
Bs
end.
+hstring_to_binary(L) ->
+ byte_align(hstring_to_bitstring(L)).
+
+bstring_to_binary(L) ->
+ byte_align(bstring_to_bitstring(L)).
+
+byte_align(Bs) ->
+ case bit_size(Bs) rem 8 of
+ 0 -> Bs;
+ N -> <<Bs/bitstring,0:(8-N)>>
+ end.
+
hstring_to_bitstring(L) ->
<< <<(hex_to_int(D)):4>> || D <- L >>.
@@ -2592,9 +2604,9 @@ hex_to_int(D) when $A =< D, D =< $F -> D - ($A - 10).
normalize_octetstring(S,Value,CType) ->
case Value of
{bstring,String} ->
- bstring_to_octetlist(String);
+ bstring_to_binary(String);
{hstring,String} ->
- hstring_to_octetlist(String);
+ hstring_to_binary(String);
Rec when is_record(Rec,'Externalvaluereference') ->
get_normalized_value(S,Value,CType,
fun normalize_octetstring/3,[]);
@@ -2616,35 +2628,6 @@ normalize_octetstring(S,Value,CType) ->
Value
end.
-
-bstring_to_octetlist([]) ->
- [];
-bstring_to_octetlist([H|T]) when H == $0 ; H == $1 ->
- bstring_to_octetlist(T,6,[(H - $0) bsl 7]).
-bstring_to_octetlist([H|T],0,[Hacc|Tacc]) when H == $0; H == $1 ->
- bstring_to_octetlist(T, 7, [0,Hacc + (H -$0)| Tacc]);
-bstring_to_octetlist([H|T],BSL,[Hacc|Tacc]) when H == $0; H == $1 ->
- bstring_to_octetlist(T, BSL-1, [Hacc + ((H - $0) bsl BSL)| Tacc]);
-bstring_to_octetlist([],7,[0|Acc]) ->
- lists:reverse(Acc);
-bstring_to_octetlist([],_,Acc) ->
- lists:reverse(Acc).
-
-hstring_to_octetlist([]) ->
- [];
-hstring_to_octetlist(L) ->
- hstring_to_octetlist(L,4,[]).
-hstring_to_octetlist([H|T],0,[Hacc|Tacc]) when H >= $A, H =< $F ->
- hstring_to_octetlist(T,4,[Hacc + (H - $A + 10)|Tacc]);
-hstring_to_octetlist([H|T],BSL,Acc) when H >= $A, H =< $F ->
- hstring_to_octetlist(T,0,[(H - $A + 10) bsl BSL|Acc]);
-hstring_to_octetlist([H|T],0,[Hacc|Tacc]) when H >= $0; H =< $9 ->
- hstring_to_octetlist(T,4,[Hacc + (H - $0)|Tacc]);
-hstring_to_octetlist([H|T],BSL,Acc) when H >= $0; H =< $9 ->
- hstring_to_octetlist(T,0,[(H - $0) bsl BSL|Acc]);
-hstring_to_octetlist([],_,Acc) ->
- lists:reverse(Acc).
-
normalize_objectidentifier(S, Value) ->
{ok,Val} = validate_objectidentifier(S, o_id, Value, []),
Val.
diff --git a/lib/asn1/src/asn1ct_constructed_per.erl b/lib/asn1/src/asn1ct_constructed_per.erl
index c224f4c9fa..ed3f6f886e 100644
--- a/lib/asn1/src/asn1ct_constructed_per.erl
+++ b/lib/asn1/src/asn1ct_constructed_per.erl
@@ -450,8 +450,13 @@ dec_objset_default(N, C, LeadingAttr, false) ->
"{value,Bytes},"
"{unique_name_and_value,",{asis,LeadingAttr},",Id}}}).",nl,nl]);
dec_objset_default(N, _, _, true) ->
- emit([{asis,N},"(Bytes, Id) ->",nl,
- "Bytes.",nl,nl]).
+ emit([{asis,N},"(Bytes, Id) ->",nl|
+ case asn1ct:use_legacy_types() of
+ false ->
+ ["{asn1_OPENTYPE,Bytes}.",nl,nl];
+ true ->
+ ["Bytes.",nl,nl]
+ end]).
dec_objset_1(Erule, N, {Id,Obj}, RestFields, Typename) ->
emit([{asis,N},"(Bytes, ",{asis,Id},") ->",nl]),
@@ -906,26 +911,36 @@ def_values(#type{def=#'Externaltypereference'{module=Mod,type=Type}}, Def) ->
#typedef{typespec=T} = asn1_db:dbget(Mod, Type),
def_values(T, Def);
def_values(#type{def={'BIT STRING',[]}}, Bs) when is_bitstring(Bs) ->
- ListBs = [B || <<B:1>> <= Bs],
- IntBs = lists:foldl(fun(B, A) ->
- (A bsl 1) bor B
- end, 0, lists:reverse(ListBs)),
- Sz = bit_size(Bs),
- Compact = case 8 - Sz rem 8 of
- 8 ->
- {0,Bs};
- Unused ->
- {Unused,<<Bs:Sz/bits,0:Unused>>}
- end,
- [asn1_DEFAULT,Bs,Compact,ListBs,IntBs];
+ case asn1ct:use_legacy_types() of
+ false ->
+ [asn1_DEFAULT,Bs];
+ true ->
+ ListBs = [B || <<B:1>> <= Bs],
+ IntBs = lists:foldl(fun(B, A) ->
+ (A bsl 1) bor B
+ end, 0, lists:reverse(ListBs)),
+ Sz = bit_size(Bs),
+ Compact = case 8 - Sz rem 8 of
+ 8 ->
+ {0,Bs};
+ Unused ->
+ {Unused,<<Bs:Sz/bits,0:Unused>>}
+ end,
+ [asn1_DEFAULT,Bs,Compact,ListBs,IntBs]
+ end;
def_values(#type{def={'BIT STRING',[_|_]=Ns}}, List) when is_list(List) ->
Bs = asn1ct_gen:named_bitstring_value(List, Ns),
- ListBs = [B || <<B:1>> <= Bs],
- IntBs = lists:foldl(fun(B, A) ->
- (A bsl 1) bor B
- end, 0, lists:reverse(ListBs)),
- Args = [List,Bs,ListBs,IntBs],
- {call,per_common,is_default_bitstring,Args};
+ As = case asn1ct:use_legacy_types() of
+ false ->
+ [List,Bs];
+ true ->
+ ListBs = [B || <<B:1>> <= Bs],
+ IntBs = lists:foldl(fun(B, A) ->
+ (A bsl 1) bor B
+ end, 0, lists:reverse(ListBs)),
+ [List,Bs,ListBs,IntBs]
+ end,
+ {call,per_common,is_default_bitstring,As};
def_values(#type{def={'INTEGER',Ns}}, Def) ->
[asn1_DEFAULT,Def|case lists:keyfind(Def, 2, Ns) of
false -> [];
@@ -1059,8 +1074,17 @@ enc_objset_imm(Erule, Component, ObjSet, RestFieldNames, Extensible) ->
enc_obj(Erule, Obj, RestFieldNames, Aligned)] ||
{Key,Obj} <- ObjSet] ++
[['_',case Extensible of
- false -> E;
- true -> {put_bits,{var,"Val"},binary,[1]}
+ false ->
+ E;
+ true ->
+ case asn1ct:use_legacy_types() of
+ false ->
+ {call,per_common,open_type_to_binary,
+ [{var,"Val"}]};
+ true ->
+ {call,per_common,legacy_open_type_to_binary,
+ [{var,"Val"}]}
+ end
end]]}].
enc_obj(Erule, Obj, RestFieldNames0, Aligned) ->
diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl
index 37b33194d0..71d870b4ce 100644
--- a/lib/asn1/src/asn1ct_gen.erl
+++ b/lib/asn1/src/asn1ct_gen.erl
@@ -790,7 +790,8 @@ gen_decode_constructed(Erules,Typename,InnerType,D) when is_record(D,typedef) ->
pgen_exports(Erules,_Module,{Types,Values,_,_,Objects,ObjectSets}) ->
- emit(["-export([encoding_rule/0,bit_string_format/0]).",nl]),
+ emit(["-export([encoding_rule/0,bit_string_format/0,"
+ " legacy_erlang_types/0]).",nl]),
case Types of
[] -> ok;
_ ->
@@ -1022,7 +1023,9 @@ gen_info_functions(Erules) ->
emit(["encoding_rule() -> ",
{asis,Erules},".",nl,nl,
"bit_string_format() -> ",
- {asis,asn1ct:get_bit_string_format()},".",nl,nl]).
+ {asis,asn1ct:get_bit_string_format()},".",nl,nl,
+ "legacy_erlang_types() -> ",
+ {asis,asn1ct:use_legacy_types()},".",nl,nl]).
gen_decode_partial_incomplete(ber) ->
case {asn1ct:read_config_data(partial_incomplete_decode),
diff --git a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
index de81259fcb..bea0ec8968 100644
--- a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
@@ -206,10 +206,32 @@ gen_encode_prim(_Erules, #type{}=D, DoTag, Value) ->
{call,ber,encode_tags,
[DoTag,{curr,realval},{curr,realsize}]},nl,
"end"]);
+ {'BIT STRING',[]} ->
+ case asn1ct:use_legacy_types() of
+ false when BitStringConstraint =:= [] ->
+ call(encode_unnamed_bit_string, [Value,DoTag]);
+ false ->
+ call(encode_unnamed_bit_string,
+ [{asis,BitStringConstraint},Value,DoTag]);
+ true ->
+ call(encode_bit_string,
+ [{asis,BitStringConstraint},Value,
+ {asis,[]},DoTag])
+ end;
{'BIT STRING',NamedNumberList} ->
- call(encode_bit_string,
- [{asis,BitStringConstraint},Value,
- {asis,NamedNumberList},DoTag]);
+ case asn1ct:use_legacy_types() of
+ false when BitStringConstraint =:= [] ->
+ call(encode_named_bit_string,
+ [Value,{asis,NamedNumberList},DoTag]);
+ false ->
+ call(encode_named_bit_string,
+ [{asis,BitStringConstraint},Value,
+ {asis,NamedNumberList},DoTag]);
+ true ->
+ call(encode_bit_string,
+ [{asis,BitStringConstraint},Value,
+ {asis,NamedNumberList},DoTag])
+ end;
'NULL' ->
call(encode_null, [Value,DoTag]);
'OBJECT IDENTIFIER' ->
@@ -471,7 +493,6 @@ gen_dec_prim(_Erules, Att, BytesVar, DoTag, _TagIn, _Form, _OptOrMand) ->
_ -> ""
end,
NewTypeName = case Typename of
- 'OCTET STRING' -> restricted_string;
'NumericString' -> restricted_string;
'TeletexString' -> restricted_string;
'T61String' -> restricted_string;
@@ -529,6 +550,19 @@ gen_dec_prim(_Erules, Att, BytesVar, DoTag, _TagIn, _Form, _OptOrMand) ->
'RELATIVE-OID' ->
emit(["decode_relative_oid(",BytesVar,","]),
need(decode_relative_oid, 2);
+ 'OCTET STRING' ->
+ F = case asn1ct:use_legacy_types() of
+ false -> decode_octet_string;
+ true -> decode_restricted_string
+ end,
+ emit([{asis,F},"(",BytesVar,","]),
+ case Constraint of
+ [] ->
+ need(F, 2);
+ _ ->
+ emit([{asis,Constraint},","]),
+ need(F, 3)
+ end;
restricted_string ->
emit(["decode_restricted_string",AsBin,"(",BytesVar,","]),
case Constraint of
@@ -1090,13 +1124,11 @@ gen_objset_enc(Erules, ObjSetName, UniqueName,
%% See X.681 Annex E for the following case
gen_objset_enc(_,ObjSetName,_UniqueName,['EXTENSIONMARK'],_ClName,
_ClFields,_NthObj,Acc) ->
- emit(["'getenc_",ObjSetName,"'(_) ->",nl]),
- emit({indent(3),"fun(_, Val, _RestPrimFieldName) ->",nl}),
- emit({indent(6),"Len = case Val of",nl,indent(9),
- "Bin when is_binary(Bin) -> byte_size(Bin);",nl,indent(9),
- "_ -> length(Val)",nl,indent(6),"end,"}),
- emit({indent(6),"{Val,Len}",nl}),
- emit({indent(3),"end.",nl,nl}),
+ emit(["'getenc_",ObjSetName,"'(_) ->",nl,
+ indent(2),"fun(_, Val, _RestPrimFieldName) ->",nl]),
+ emit_enc_open_type(4),
+ emit([nl,
+ indent(2),"end.",nl,nl]),
Acc;
gen_objset_enc(_, ObjSetName, UniqueName, [], _, _, _, Acc) ->
emit_default_getenc(ObjSetName, UniqueName),
@@ -1158,13 +1190,8 @@ gen_inlined_enc_funs1(Fields, [{typefield,Name,_}|Rest], ObjSetName,
%% were no type in the table and we therefore generate
%% code that returns the input for application
%% treatment.
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12),"Len = case Val of",nl,
- indent(15),"Bin when is_binary(Bin) -> "
- "byte_size(Bin);",nl,
- indent(15),"_ -> length(Val)",nl,
- indent(12),"end,",nl,
- indent(12),"{Val,Len}"]),
+ emit([indent(9),{asis,Name}," ->",nl]),
+ emit_enc_open_type(11),
{Acc0,0}
end,
gen_inlined_enc_funs1(Fields, Rest, ObjSetName, Sep, NthObj+NAdd, Acc);
@@ -1175,6 +1202,25 @@ gen_inlined_enc_funs1(_, [], _, _, NthObj, Acc) ->
indent(3),"end"]),
{Acc,NthObj}.
+emit_enc_open_type(I) ->
+ Indent = indent(I),
+ S = [Indent, "case Val of",nl,
+ Indent,indent(2),"{asn1_OPENTYPE,Bin} when is_binary(Bin) ->",nl,
+ Indent,indent(4),"{Bin,byte_size(Bin)}"|
+ case asn1ct:use_legacy_types() of
+ false ->
+ [nl,
+ Indent,"end"];
+ true ->
+ [";",nl,
+ Indent,indent(2),"Bin when is_binary(Bin) ->",nl,
+ Indent,indent(4),"{Bin,byte_size(Bin)};",nl,
+ Indent,indent(2),"_ ->",nl,
+ Indent,indent(4),"{Val,length(Val)}",nl,
+ Indent, "end"]
+ end],
+ emit(S).
+
emit_inner_of_fun(TDef=#typedef{name={ExtMod,Name},typespec=Type},
InternalDefFunName) ->
OTag = Type#type.tag,
@@ -1258,14 +1304,9 @@ gen_objset_dec(_,ObjSetName,_UniqueName,['EXTENSIONMARK'],_ClName,
_ClFields,_NthObj) ->
emit(["'getdec_",ObjSetName,"'(_) ->",nl]),
emit([indent(2),"fun(_,Bytes, _RestPrimFieldName) ->",nl]),
-
- emit([indent(4),"case Bytes of",nl,
- indent(6),"Bin when is_binary(Bin) -> ",nl,
- indent(8),"Bin;",nl,
- indent(6),"_ ->",nl,
- indent(8),{call,ber,ber_encode,["Bytes"]},nl,
- indent(4),"end",nl]),
- emit([indent(2),"end.",nl,nl]),
+ emit_dec_open_type(4),
+ emit([nl,
+ indent(2),"end.",nl,nl]),
ok;
gen_objset_dec(_, ObjSetName, UniqueName, [], _, _, _) ->
emit_default_getdec(ObjSetName, UniqueName),
@@ -1312,12 +1353,8 @@ gen_inlined_dec_funs1(Fields, [{typefield,Name,Prop}|Rest],
end,
0;
false ->
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12),"Len = case Bytes of",nl,
- indent(15),"B when is_binary(B) -> byte_size(B);",nl,
- indent(15),"_ -> length(Bytes)",nl,
- indent(12),"end,",nl,
- indent(12),"{Bytes,[],Len}"]),
+ emit([indent(9),{asis,Name}," ->",nl]),
+ emit_dec_open_type(11),
0
end,
gen_inlined_dec_funs1(Fields, Rest, ObjSetName, Sep, NthObj+N);
@@ -1328,6 +1365,27 @@ gen_inlined_dec_funs1(_, [], _, _, NthObj) ->
indent(3),"end"]),
NthObj.
+emit_dec_open_type(I) ->
+ Indent = indent(I),
+ S = case asn1ct:use_legacy_types() of
+ false ->
+ [Indent, "case Bytes of",nl,
+ Indent,indent(2),"Bin when is_binary(Bin) -> ",nl,
+ Indent,indent(4),"{asn1_OPENTYPE,Bin};",nl,
+ Indent,indent(2),"_ ->",nl,
+ Indent,indent(4),"{asn1_OPENTYPE,",
+ {call,ber,ber_encode,["Bytes"]},"}",nl,
+ Indent, "end"];
+ true ->
+ [Indent, "case Bytes of",nl,
+ Indent,indent(2),"Bin when is_binary(Bin) -> ",nl,
+ Indent,indent(4),"Bin;",nl,
+ Indent,indent(2),"_ ->",nl,
+ Indent,indent(4),{call,ber,ber_encode,["Bytes"]},nl,
+ Indent, "end"]
+ end,
+ emit(S).
+
emit_inner_of_decfun(#typedef{name={ExtName,Name},typespec=Type},Prop,
InternalDefFunName) ->
OTag = Type#type.tag,
diff --git a/lib/asn1/src/asn1ct_gen_per.erl b/lib/asn1/src/asn1ct_gen_per.erl
index 7ba649c874..519ce9f054 100644
--- a/lib/asn1/src/asn1ct_gen_per.erl
+++ b/lib/asn1/src/asn1ct_gen_per.erl
@@ -132,7 +132,14 @@ gen_encode_prim_imm(Val, #type{def=Type0,constraint=Constraint}, Aligned) ->
ToBinary = {real_common,encode_real},
asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned);
{'BIT STRING',NNL} ->
- asn1ct_imm:per_enc_bit_string(Val, NNL, Constraint, Aligned);
+ case asn1ct:use_legacy_types() of
+ false ->
+ asn1ct_imm:per_enc_bit_string(Val, NNL,
+ Constraint, Aligned);
+ true ->
+ asn1ct_imm:per_enc_legacy_bit_string(Val, NNL,
+ Constraint, Aligned)
+ end;
'NULL' ->
asn1ct_imm:per_enc_null(Val, Aligned);
'OBJECT IDENTIFIER' ->
@@ -144,7 +151,13 @@ gen_encode_prim_imm(Val, #type{def=Type0,constraint=Constraint}, Aligned) ->
'BOOLEAN' ->
asn1ct_imm:per_enc_boolean(Val, Aligned);
'OCTET STRING' ->
- asn1ct_imm:per_enc_octet_string(Val, Constraint, Aligned);
+ case asn1ct:use_legacy_types() of
+ false ->
+ asn1ct_imm:per_enc_octet_string(Val, Constraint, Aligned);
+ true ->
+ asn1ct_imm:per_enc_legacy_octet_string(Val, Constraint,
+ Aligned)
+ end;
'ASN1_OPEN_TYPE' ->
case Constraint of
[#'Externaltypereference'{type=Tname}] ->
@@ -325,7 +338,10 @@ gen_dec_imm_1('GeneralizedTime', Constraint, Aligned) ->
gen_dec_imm_1('OCTET STRING', Constraint, Aligned) ->
SzConstr = asn1ct_imm:effective_constraint(bitstring, Constraint),
Imm = asn1ct_imm:per_dec_octet_string(SzConstr, Aligned),
- {convert,binary_to_list,Imm};
+ case asn1ct:use_legacy_types() of
+ false -> {convert,{binary,copy},Imm};
+ true -> {convert,binary_to_list,Imm}
+ end;
gen_dec_imm_1('TeletexString', _Constraint, Aligned) ->
gen_dec_restricted_string(Aligned);
gen_dec_imm_1('T61String', _Constraint, Aligned) ->
diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl
index c14f0b889f..fde39c674e 100644
--- a/lib/asn1/src/asn1ct_imm.erl
+++ b/lib/asn1/src/asn1ct_imm.erl
@@ -26,11 +26,13 @@
per_dec_octet_string/2,per_dec_open_type/1,per_dec_real/1,
per_dec_restricted_string/1]).
-export([per_dec_constrained/3,per_dec_normally_small_number/1]).
--export([per_enc_bit_string/4,per_enc_boolean/2,
+-export([per_enc_bit_string/4,per_enc_legacy_bit_string/4,
+ per_enc_boolean/2,
per_enc_choice/3,per_enc_enumerated/3,
per_enc_integer/3,per_enc_integer/4,
per_enc_null/2,
per_enc_k_m_string/4,per_enc_octet_string/3,
+ per_enc_legacy_octet_string/3,
per_enc_open_type/2,
per_enc_restricted_string/3,
per_enc_small_number/2]).
@@ -157,7 +159,35 @@ per_dec_restricted_string(Aligned) ->
%%% Encoding.
%%%
-per_enc_bit_string(Val0, [], Constraint0, Aligned) ->
+per_enc_bit_string(Val, [], Constraint0, Aligned) ->
+ {B,[[],Bits]} = mk_vars([], [bits]),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ B ++ [{call,erlang,bit_size,[Val],Bits}|
+ per_enc_length(Val, 1, Bits, Constraint, Aligned, 'BIT STRING')];
+per_enc_bit_string(Val0, NNL0, Constraint0, Aligned) ->
+ {B,[Val,Bs,Bits,Positions]} = mk_vars(Val0, [bs,bits,positions]),
+ NNL = lists:keysort(2, NNL0),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ ExtraArgs = case constr_min_size(Constraint) of
+ no -> [];
+ Lb -> [Lb]
+ end,
+ ToBs = case ExtraArgs of
+ [] ->
+ {call,per_common,bs_drop_trailing_zeroes,[Val]};
+ [Lower] ->
+ {call,per_common,adjust_trailing_zeroes,[Val,Lower]}
+ end,
+ B ++ [{'try',
+ [bit_string_name2pos_fun(NNL, Val)],
+ {Positions,
+ [{call,per_common,bitstring_from_positions,
+ [Positions|ExtraArgs]}]},
+ [ToBs],Bs},
+ {call,erlang,bit_size,[Bs],Bits}|
+ per_enc_length(Bs, 1, Bits, Constraint, Aligned, 'BIT STRING')].
+
+per_enc_legacy_bit_string(Val0, [], Constraint0, Aligned) ->
{B,[Val,Bs,Bits]} = mk_vars(Val0, [bs,bits]),
Constraint = effective_constraint(bitstring, Constraint0),
ExtraArgs = case constr_min_size(Constraint) of
@@ -167,7 +197,7 @@ per_enc_bit_string(Val0, [], Constraint0, Aligned) ->
B ++ [{call,per_common,to_bitstring,[Val|ExtraArgs],Bs},
{call,erlang,bit_size,[Bs],Bits}|
per_enc_length(Bs, 1, Bits, Constraint, Aligned, 'BIT STRING')];
-per_enc_bit_string(Val0, NNL0, Constraint0, Aligned) ->
+per_enc_legacy_bit_string(Val0, NNL0, Constraint0, Aligned) ->
{B,[Val,Bs,Bits,Positions]} = mk_vars(Val0, [bs,bits,positions]),
NNL = lists:keysort(2, NNL0),
Constraint = effective_constraint(bitstring, Constraint0),
@@ -276,7 +306,13 @@ per_enc_open_type(Imm0, Aligned) ->
{call,erlang,byte_size,[Bin],Len}|
per_enc_length(Bin, 8, Len, Aligned)].
-per_enc_octet_string(Val0, Constraint0, Aligned) ->
+per_enc_octet_string(Bin, Constraint0, Aligned) ->
+ {B,[[],Len]} = mk_vars([], [len]),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ B ++ [{call,erlang,byte_size,[Bin],Len}|
+ per_enc_length(Bin, 8, Len, Constraint, Aligned, 'OCTET STRING')].
+
+per_enc_legacy_octet_string(Val0, Constraint0, Aligned) ->
{B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]),
Constraint = effective_constraint(bitstring, Constraint0),
B ++ [{call,erlang,iolist_to_binary,[Val],Bin},
@@ -874,6 +910,9 @@ dcg_list_outside([{call,Fun,{V,Buf},{Dst,DstBuf}}|T]) ->
emit(["{",Dst,",",DstBuf,"} = "]),
Fun(V, Buf),
iter_dcg_list_outside(T);
+dcg_list_outside([{convert,{M,F},V,Dst}|T]) ->
+ emit([Dst," = ",{asis,M},":",{asis,F},"(",V,")"]),
+ iter_dcg_list_outside(T);
dcg_list_outside([{convert,Op,V,Dst}|T]) ->
emit([Dst," = ",Op,"(",V,")"]),
iter_dcg_list_outside(T);
diff --git a/lib/asn1/src/asn1ct_value.erl b/lib/asn1/src/asn1ct_value.erl
index 862b3c4ea5..a86c963b9d 100644
--- a/lib/asn1/src/asn1ct_value.erl
+++ b/lib/asn1/src/asn1ct_value.erl
@@ -260,7 +260,11 @@ from_type_prim(M, D) ->
'BOOLEAN' ->
true;
'OCTET STRING' ->
- adjust_list(size_random(C),c_string(C,"OCTET STRING"));
+ S0 = adjust_list(size_random(C), c_string(C, "OCTET STRING")),
+ case M:legacy_erlang_types() of
+ false -> list_to_binary(S0);
+ true -> S0
+ end;
'NumericString' ->
adjust_list(size_random(C),c_string(C,"0123456789"));
'TeletexString' ->
diff --git a/lib/asn1/src/asn1rtt_ber.erl b/lib/asn1/src/asn1rtt_ber.erl
index 583ff790b7..4bd814769f 100644
--- a/lib/asn1/src/asn1rtt_ber.erl
+++ b/lib/asn1/src/asn1rtt_ber.erl
@@ -29,6 +29,8 @@
decode_integer/2,decode_integer/3,
decode_named_integer/3,decode_named_integer/4,
encode_enumerated/2,decode_enumerated/3,
+ encode_unnamed_bit_string/2,encode_unnamed_bit_string/3,
+ encode_named_bit_string/3,encode_named_bit_string/4,
encode_bit_string/4,
decode_named_bit_string/3,
decode_compact_bit_string/3,
@@ -38,6 +40,7 @@
encode_relative_oid/2,decode_relative_oid/2,
encode_object_identifier/2,decode_object_identifier/2,
encode_restricted_string/2,
+ decode_octet_string/2,decode_octet_string/3,
decode_restricted_string/2,decode_restricted_string/3,
encode_universal_string/2,decode_universal_string/3,
encode_UTF8_string/2,decode_UTF8_string/2,
@@ -780,6 +783,55 @@ decode_enumerated1(Val, NamedNumberList) ->
{asn1_enum,Val}
end.
+%%============================================================================
+%% Bitstring value, ITU_T X.690 Chapter 8.6
+%%
+%% encode bitstring value
+%%============================================================================
+
+encode_unnamed_bit_string(Bits, TagIn) ->
+ Unused = (8 - (bit_size(Bits) band 7)) band 7,
+ Bin = <<Unused,Bits/bitstring,0:Unused>>,
+ encode_tags(TagIn, Bin, byte_size(Bin)).
+
+encode_unnamed_bit_string(C, Bits, TagIn) ->
+ NumBits = bit_size(Bits),
+ Unused = (8 - (NumBits band 7)) band 7,
+ Bin = <<Unused,Bits/bitstring,0:Unused>>,
+ case C of
+ {_Min,Max} ->
+ if
+ NumBits > Max ->
+ exit({error,{asn1,
+ {bitstring_length,
+ {{was,NumBits},{maximum,Max}}}}});
+ true ->
+ ok
+ end;
+ Size ->
+ if NumBits =< Size ->
+ ok;
+ true ->
+ exit({error,{asn1,
+ {bitstring_length,
+ {{was,NumBits},{should_be,Size}}}}})
+ end
+ end,
+ encode_tags(TagIn, Bin, byte_size(Bin)).
+
+encode_named_bit_string([H|_]=Bits, NamedBitList, TagIn) when is_atom(H) ->
+ encode_bit_string_named([], Bits, NamedBitList, TagIn);
+encode_named_bit_string([{bit,_}|_]=Bits, NamedBitList, TagIn) ->
+ encode_bit_string_named([], Bits, NamedBitList, TagIn);
+encode_named_bit_string(Bits, _NamedBitList, TagIn) when is_bitstring(Bits) ->
+ encode_unnamed_bit_string(Bits, TagIn).
+
+encode_named_bit_string(C, [H|_]=Bits, NamedBitList, TagIn) when is_atom(H) ->
+ encode_bit_string_named(C, Bits, NamedBitList, TagIn);
+encode_named_bit_string(C, [{bit,_}|_]=Bits, NamedBitList, TagIn) ->
+ encode_bit_string_named(C, Bits, NamedBitList, TagIn);
+encode_named_bit_string(C, Bits, _NamedBitList, TagIn) when is_bitstring(Bits) ->
+ encode_unnamed_bit_string(C, Bits, TagIn).
%%============================================================================
%% Bitstring value, ITU_T X.690 Chapter 8.6
@@ -1251,6 +1303,19 @@ encode_restricted_string(OctetList, TagIn) when is_list(OctetList) ->
encode_tags(TagIn, OctetList, length(OctetList)).
%%============================================================================
+%% decode OCTET STRING to binary
+%%============================================================================
+
+decode_octet_string(Tlv, TagsIn) ->
+ Bin = match_and_collect(Tlv, TagsIn),
+ binary:copy(Bin).
+
+decode_octet_string(Tlv, Range, TagsIn) ->
+ Bin0 = match_and_collect(Tlv, TagsIn),
+ Bin = binary:copy(Bin0),
+ check_restricted_string(Bin, byte_size(Bin), Range).
+
+%%============================================================================
%% decode Numeric Printable Teletex Videotex Visible IA5 Graphic General strings
%%============================================================================
diff --git a/lib/asn1/src/asn1rtt_ext.erl b/lib/asn1/src/asn1rtt_ext.erl
index 46adb2007d..f3eee1cdd5 100644
--- a/lib/asn1/src/asn1rtt_ext.erl
+++ b/lib/asn1/src/asn1rtt_ext.erl
@@ -38,7 +38,7 @@ transform_to_EXTERNAL1990([{'context-negotiation',Context_negot}|Rest], Acc) ->
transform_to_EXTERNAL1990([asn1_NOVALUE|Rest], Acc) ->
transform_to_EXTERNAL1990(Rest, [asn1_NOVALUE|Acc]);
transform_to_EXTERNAL1990([Data_val_desc,Data_value], Acc)
- when is_list(Data_value)->
+ when is_list(Data_value); is_binary(Data_value) ->
list_to_tuple(lists:reverse([{'octet-aligned',Data_value},
Data_val_desc|Acc]));
transform_to_EXTERNAL1990([Data_val_desc,Data_value], Acc)
diff --git a/lib/asn1/src/asn1rtt_per_common.erl b/lib/asn1/src/asn1rtt_per_common.erl
index 3309e6a4ca..71fec411a0 100644
--- a/lib/asn1/src/asn1rtt_per_common.erl
+++ b/lib/asn1/src/asn1rtt_per_common.erl
@@ -37,8 +37,10 @@
bitstring_from_positions/1,bitstring_from_positions/2,
to_bitstring/1,to_bitstring/2,
to_named_bitstring/1,to_named_bitstring/2,
- is_default_bitstring/5,
- extension_bitmap/3]).
+ bs_drop_trailing_zeroes/1,adjust_trailing_zeroes/2,
+ is_default_bitstring/3,is_default_bitstring/5,
+ extension_bitmap/3,
+ open_type_to_binary/1,legacy_open_type_to_binary/1]).
-define('16K',16384).
@@ -272,6 +274,25 @@ to_named_bitstring(Val, Lb) ->
%% for correctness, not speed.
adjust_trailing_zeroes(to_bitstring(Val), Lb).
+is_default_bitstring(asn1_DEFAULT, _, _) ->
+ true;
+is_default_bitstring(Named, Named, _) ->
+ true;
+is_default_bitstring(Bs, _, Bs) ->
+ true;
+is_default_bitstring(Val, _, Def) when is_bitstring(Val) ->
+ Sz = bit_size(Def),
+ case Val of
+ <<Def:Sz/bitstring,T/bitstring>> ->
+ NumZeroes = bit_size(T),
+ case T of
+ <<0:NumZeroes>> -> true;
+ _ -> false
+ end;
+ _ ->
+ false
+ end.
+
is_default_bitstring(asn1_DEFAULT, _, _, _, _) ->
true;
is_default_bitstring({Unused,Bin}, V0, V1, V2, V3) when is_integer(Unused) ->
@@ -306,6 +327,16 @@ is_default_bitstring(_, _, _, _, _) -> false.
extension_bitmap(Val, Pos, Limit) ->
extension_bitmap(Val, Pos, Limit, 0).
+open_type_to_binary({asn1_OPENTYPE,Bin}) when is_binary(Bin) ->
+ Bin.
+
+legacy_open_type_to_binary({asn1_OPENTYPE,Bin}) when is_binary(Bin) ->
+ Bin;
+legacy_open_type_to_binary(Bin) when is_binary(Bin) ->
+ Bin;
+legacy_open_type_to_binary(List) when is_list(List) ->
+ List.
+
%%%
%%% Internal functions.
%%%
@@ -438,6 +469,8 @@ adjust_trailing_zeroes(Bs0, Lb) ->
bs_drop_trailing_zeroes(Bs) ->
bs_drop_trailing_zeroes(Bs, bit_size(Bs)).
+bs_drop_trailing_zeroes(Bs, 0) ->
+ Bs;
bs_drop_trailing_zeroes(Bs0, Sz0) when Sz0 < 8 ->
<<Byte:Sz0>> = Bs0,
Sz = Sz0 - ntz(Byte),
diff --git a/lib/asn1/test/asn1_SUITE.erl b/lib/asn1/test/asn1_SUITE.erl
index 83bd66a631..3b34feb5a3 100644
--- a/lib/asn1/test/asn1_SUITE.erl
+++ b/lib/asn1/test/asn1_SUITE.erl
@@ -328,6 +328,10 @@ testCompactBitString(Config, Rule, Opts) ->
testPrimStrings(Config) ->
test(Config, fun testPrimStrings/3, [ber,{ber,[der]},per,uper]).
testPrimStrings(Config, Rule, Opts) ->
+ LegacyOpts = [legacy_erlang_types|Opts],
+ asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config,
+ [Rule|LegacyOpts]),
+ testPrimStrings_cases(Rule, LegacyOpts),
asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config, [Rule|Opts]),
testPrimStrings_cases(Rule, Opts),
asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config,
@@ -432,7 +436,8 @@ testDef(Config, Rule, Opts) ->
testDEFAULT(Config) ->
test(Config, fun testDEFAULT/3, [ber,{ber,[der]},per,uper]).
testDEFAULT(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["Def","Default"], Config, [Rule|Opts]),
+ asn1_test_lib:compile_all(["Def","Default"], Config,
+ [legacy_erlang_types,Rule|Opts]),
testDef:main(Rule),
testSeqSetDefaultVal:main(Rule, Opts).
@@ -766,7 +771,10 @@ testParameterizedInfObj(Config) ->
testParameterizedInfObj(Config, Rule, Opts) ->
Files = ["Param","Param2"],
asn1_test_lib:compile_all(Files, Config, [Rule|Opts]),
- testParameterizedInfObj:main(Config, Rule).
+ testParameterizedInfObj:main(Config, Rule),
+ asn1_test_lib:compile("Param", Config,
+ [legacy_erlang_types,Rule|Opts]),
+ testParameterizedInfObj:param(Rule).
testFragmented(Config) ->
test(Config, fun testFragmented/3).
@@ -784,7 +792,8 @@ testMergeCompile(Config, Rule, Opts) ->
testobj(Config) -> test(Config, fun testobj/3).
testobj(Config, Rule, Opts) ->
- asn1_test_lib:compile("RANAP", Config, [Rule|Opts]),
+ asn1_test_lib:compile("RANAP", Config, [legacy_erlang_types,
+ Rule|Opts]),
asn1_test_lib:compile_erlang("testobj", Config, []),
ok = testobj:run(),
ok = testParameterizedInfObj:ranap(Rule).
@@ -811,7 +820,8 @@ testImport(Config, Rule, Opts) ->
testMegaco(Config) -> test(Config, fun testMegaco/3).
testMegaco(Config, Rule, Opts) ->
- {ok, Module1, Module2} = testMegaco:compile(Config, Rule, Opts),
+ {ok, Module1, Module2} = testMegaco:compile(Config, Rule,
+ [legacy_erlang_types|Opts]),
ok = testMegaco:main(Module1, Config),
ok = testMegaco:main(Module2, Config).
@@ -892,7 +902,8 @@ specialized_decodes(Config, Rule, Opts) ->
"PartialDecMyHTTP.asn",
"MEDIA-GATEWAY-CONTROL.asn",
"P-Record"],
- Config, [Rule, asn1config|Opts]),
+ Config,
+ [Rule,legacy_erlang_types,asn1config|Opts]),
test_partial_incomplete_decode:test(Config),
test_selective_decode:test().
@@ -1022,7 +1033,8 @@ test_x691(Config, Rule, Opts) ->
test_x691:cases(Rule),
%% OTP-7708.
- asn1_test_lib:compile("EUTRA-extract-55", Config, [Rule|Opts]),
+ asn1_test_lib:compile("EUTRA-extract-55", Config,
+ [legacy_erlang_types,Rule|Opts]),
%% OTP-7763.
Val = {'Seq',15,lists:duplicate(8, 0),[0],lists:duplicate(28, 0),15,true},
@@ -1128,21 +1140,21 @@ END
ok = asn1ct:compile(File, [{outdir, PrivDir}]).
-timer_compile(Config, Rule, Opts) ->
+timer_compile(Config, Rule) ->
asn1_test_lib:compile_all(["H235-SECURITY-MESSAGES", "H323-MESSAGES"],
- Config, [Rule|Opts]).
+ Config, [no_ok_wrapper,Rule]).
testTimer_ber(Config) ->
- timer_compile(Config,ber,[]),
- testTimer:go(Config,ber).
+ timer_compile(Config, ber),
+ testTimer:go().
testTimer_per(Config) ->
- timer_compile(Config,per,[]),
- testTimer:go(Config,per).
+ timer_compile(Config, per),
+ testTimer:go().
testTimer_uper(Config) ->
- timer_compile(Config,uper,[]),
- {comment,_} = testTimer:go(Config,uper).
+ timer_compile(Config, uper),
+ testTimer:go().
%% Test of multiple-line comment, OTP-8043
testComment(suite) -> [];
@@ -1200,8 +1212,8 @@ ticket_7407_code(FinalPadding) ->
eutra1(msg) ->
{'BCCH-BCH-Message',
- {'MasterInformationBlock',[0,1,0,1],[1,0,1,0],
- {'PHICH-Configuration',short,ffs},[1,0,1,0,0,0,0,0]}}.
+ {'MasterInformationBlock',<<2#0101:4>>,<<2#1010:4>>,
+ {'PHICH-Configuration',short,ffs},<<2#10100000>>}}.
eutra1(result, true) ->
<<90,80,0>>;
diff --git a/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl b/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
index 06eba8b6eb..0bf4425263 100644
--- a/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
+++ b/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
@@ -47,7 +47,7 @@ val('TransactionPDU') ->
dialoguePortion=val('DialoguePortion'),
componentPortion=val('ComponentSequence')};
val('TransactionID') ->
- "OCTET STRING";
+ <<"OCTET STRING">>;
val('DialoguePortion') ->
#'DialoguePortion'{version=val('ProtocolVersion'),
applicationContext={integerApplicationId,12},
@@ -57,23 +57,23 @@ val('DialoguePortion') ->
val('Confidentiality') ->
#'Confidentiality'{confidentialityId={integerConfidentialityId,14}};
val('ProtocolVersion') ->
- "K";
+ <<"K">>;
val('UserInformation') ->
[val('EXTERNAL'),val('EXTERNAL')];
val('EXTERNAL') ->
#'EXTERNAL'{'direct-reference'={0,1,2},
- encoding={'single-ASN1-type',[1,2,3,4]}};
+ encoding={'single-ASN1-type',<<1,2,3,4>>}};
val('ComponentSequence') ->
[val('ComponentPDU',1),val('ComponentPDU',2),val('ComponentPDU',3)];
val('Invoke') ->
- #'Invoke'{componentIDs="AB",
+ #'Invoke'{componentIDs = <<"AB">>,
opcode={local,-2},
parameter=running};
val('ReturnResult') ->
- #'ReturnResult'{componentID="C",
+ #'ReturnResult'{componentID = <<"C">>,
parameter=[1,2,3,4]};
val('ReturnError') ->
- #'ReturnError'{componentID="D",
+ #'ReturnError'{componentID = <<"D">>,
errorCode={local,21},
parameter=true};
val('Abort') ->
@@ -87,8 +87,8 @@ val(Type) ->
check_result('PackageType',unidirectional,Res) ->
{unidirectional,
{'UniTransactionPDU',
- "OCTET STRING",
- {'DialoguePortion',"K",
+ <<"OCTET STRING">>,
+ {'DialoguePortion',<<"K">>,
{integerApplicationId,12},
[_,%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal},
_],%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal}],
@@ -96,14 +96,14 @@ check_result('PackageType',unidirectional,Res) ->
{'Confidentiality',
{integerConfidentialityId,14}}},
[{invokeLast,
- {_,"AB",{local,-2},running}},
- {returnResultLast,{_,"C",_}},
- {returnError,{_,"D",{local,21},true}}]}} = Res,
+ {_,<<"AB">>,{local,-2},running}},
+ {returnResultLast,{_,<<"C">>,_}},
+ {returnError,{_,<<"D">>,{local,21},true}}]}} = Res,
ok;
%% check_OT_val(OTVal);
check_result('PackageType',abort,Res)->
- {abort,{'Abort',"OCTET STRING",
- {'DialoguePortion',"K",
+ {abort,{'Abort',<<"OCTET STRING">>,
+ {'DialoguePortion',<<"K">>,
{integerApplicationId,12},
[_,%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal},
_],%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal}],
@@ -114,9 +114,9 @@ check_result('PackageType',abort,Res)->
ok;
%% check_OT_val(OTVal);
check_result('PackageType',response,Res) ->
- {response,{'TransactionPDU',"OCTET STRING",
+ {response,{'TransactionPDU',<<"OCTET STRING">>,
{'DialoguePortion',
- "K",
+ <<"K">>,
{integerApplicationId,12},
[_,%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal},
_],%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal}],
@@ -124,11 +124,11 @@ check_result('PackageType',response,Res) ->
{'Confidentiality',
{integerConfidentialityId,14}}},
[{invokeLast,
- {_,"AB",{local,-2},running}},
+ {_,<<"AB">>,{local,-2},running}},
{returnResultLast,
- {_,"C",_}},
+ {_,<<"C">>,_}},
{returnError,
- {_,"D",{local,21},true}}]}} = Res,
+ {_,<<"D">>,{local,21},true}}]}} = Res,
ok.
%% check_OT_val(OTVal).
diff --git a/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl b/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
index 8e21e6ca84..a1e563f6be 100644
--- a/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
+++ b/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
@@ -67,8 +67,8 @@ run3(Erule) ->
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
asn1_NOVALUE,asn1_NOVALUE},
asn1_NOVALUE,
- [[80,66,0,5,10,0,5,0,24,11,7,84,54,33,0,1,1,0,0,0,1,39,5,66,127,0,0,1],
- []],
+ [<<80,66,0,5,10,0,5,0,24,11,7,84,54,33,0,1,1,0,0,0,1,39,5,66,127,0,0,1>>,
+ <<>>],
{'RRC-RadioResourceConfigDedicated',
[{'RRC-SRB-ToAddMod',1,
{explicitValue,
diff --git a/lib/asn1/test/h323test.erl b/lib/asn1/test/h323test.erl
index 3baaa994ea..7577928493 100644
--- a/lib/asn1/test/h323test.erl
+++ b/lib/asn1/test/h323test.erl
@@ -42,7 +42,7 @@ alerting_val() ->
{'TerminalInfo',asn1_NOVALUE},
false,false},
asn1_NOVALUE,
- {'CallIdentifier',[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
+ {'CallIdentifier',<<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE},
asn1_NOVALUE}.
@@ -57,18 +57,18 @@ connect_val() ->
{'Connect-UUIE',
{0,0,8,2250,0,2},
{ipAddress,
- {'TransportAddress_ipAddress',[136,225,41,58],1187}},
+ {'TransportAddress_ipAddress',<<136,225,41,58>>,1187}},
{'EndpointType',asn1_NOVALUE,
{'VendorIdentifier',
{'H221NonStandard',181,0,21324},
- [77,105,99,114,111,115,111,102,116,174,32,78,101,116,
- 77,101,100,116,105,110,103,174,0],
- [51,46,48,0]},
+ <<77,105,99,114,111,115,111,102,116,174,32,78,101,116,
+ 77,101,100,116,105,110,103,174,0>>,
+ <<51,46,48,0>>},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
{'TerminalInfo',asn1_NOVALUE},
false,false},
- [22,137,237,197,191,35,211,17,140,45,0,192,79,75,28,208],
- {'CallIdentifier',[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
+ <<22,137,237,197,191,35,211,17,140,45,0,192,79,75,28,208>>,
+ {'CallIdentifier',<<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE},
asn1_NOVALUE}.
diff --git a/lib/asn1/test/testChoExtension.erl b/lib/asn1/test/testChoExtension.erl
index e54cbe825b..09e19ceebb 100644
--- a/lib/asn1/test/testChoExtension.erl
+++ b/lib/asn1/test/testChoExtension.erl
@@ -31,13 +31,13 @@ extension(_Rules) ->
%% A trick to encode with another compatible CHOICE type to test reception
%% extension alternative
- roundtrip('ChoExt1x', {str,"abc"}),
+ roundtrip('ChoExt1x', {str,<<"abc">>}),
roundtrip('ChoExt2', {bool,true}),
roundtrip('ChoExt2', {int,33}),
roundtrip('ChoExt3', {bool,true}),
roundtrip('ChoExt3', {int,33}),
- roundtrip('ChoExt4', {str,"abc"}),
+ roundtrip('ChoExt4', {str,<<"abc">>}),
roundtrip('ChoEmptyRoot', {bool,false}),
roundtrip('ChoEmptyRoot', {bool,true}),
diff --git a/lib/asn1/test/testChoExternal.erl b/lib/asn1/test/testChoExternal.erl
index 12abdbb2bc..0914d54f33 100644
--- a/lib/asn1/test/testChoExternal.erl
+++ b/lib/asn1/test/testChoExternal.erl
@@ -31,16 +31,16 @@ external(_Rules) ->
roundtrip('ChoXBool', {xboolImp,true}),
roundtrip('ChoXBool', {xboolExp,true}),
- roundtrip('NT', {os,"kalle"}),
- roundtrip('Exp', {os,"kalle"}),
- roundtrip('NTNT', {os,"kalle"}),
- roundtrip('NTExp', {os,"kalle"}),
- roundtrip('ExpNT', {os,"kalle"}),
- roundtrip('ExpExp', {os,"kalle"}),
- roundtrip('XNTNT', {os,"kalle"}),
- roundtrip('XNTExp', {os,"kalle"}),
- roundtrip('XExpNT', {os,"kalle"}),
- roundtrip('XExpExp', {os,"kalle"}),
+ roundtrip('NT', {os,<<"kalle">>}),
+ roundtrip('Exp', {os,<<"kalle">>}),
+ roundtrip('NTNT', {os,<<"kalle">>}),
+ roundtrip('NTExp', {os,<<"kalle">>}),
+ roundtrip('ExpNT', {os,<<"kalle">>}),
+ roundtrip('ExpExp', {os,<<"kalle">>}),
+ roundtrip('XNTNT', {os,<<"kalle">>}),
+ roundtrip('XNTExp', {os,<<"kalle">>}),
+ roundtrip('XExpNT', {os,<<"kalle">>}),
+ roundtrip('XExpExp', {os,<<"kalle">>}),
ok.
diff --git a/lib/asn1/test/testChoOptional.erl b/lib/asn1/test/testChoOptional.erl
index f5e77cb721..71a7346e3f 100644
--- a/lib/asn1/test/testChoOptional.erl
+++ b/lib/asn1/test/testChoOptional.erl
@@ -27,16 +27,20 @@
run() ->
roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho=asn1_NOVALUE}),
roundtrip('Seq1', #'Seq1'{bool=true,int=233,cho=asn1_NOVALUE}),
- roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho={vsCho,"Vs Str"}}),
- roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho={ocStrCho,"Oct Str"}}),
+ roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,
+ cho={vsCho,"Vs Str"}}),
+ roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,
+ cho={ocStrCho,<<"Oct Str">>}}),
roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho=asn1_NOVALUE,bool=true}),
roundtrip('Seq2', #'Seq2'{int=233,cho=asn1_NOVALUE,bool=true}),
roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho={vsCho,"Vs Str"},bool=true}),
- roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho={ocStrCho,"Oct Str"},bool=true}),
+ roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho={ocStrCho,<<"Oct Str">>},
+ bool=true}),
roundtrip('Seq3', #'Seq3'{cho=asn1_NOVALUE,int=asn1_NOVALUE,bool=true}),
roundtrip('Seq3', #'Seq3'{cho=asn1_NOVALUE,int=233,bool=true}),
roundtrip('Seq3', #'Seq3'{cho={vsCho,"Vs Str"},int=asn1_NOVALUE,bool=true}),
- roundtrip('Seq3', #'Seq3'{cho={ocStrCho,"Oct Str"},int=asn1_NOVALUE,bool=true}),
+ roundtrip('Seq3', #'Seq3'{cho={ocStrCho,<<"Oct Str">>},
+ int=asn1_NOVALUE,bool=true}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testChoRecursive.erl b/lib/asn1/test/testChoRecursive.erl
index 593b845949..ccd60c2897 100644
--- a/lib/asn1/test/testChoRecursive.erl
+++ b/lib/asn1/test/testChoRecursive.erl
@@ -31,13 +31,13 @@ recursive(_Rules) ->
roundtrip('ChoRec',
{something,
#'ChoRec_something'{a = 77,
- b = "some octets here",
+ b = <<"some octets here">>,
c = {nothing,'NULL'}}}),
roundtrip('ChoRec', {nothing,'NULL'}),
roundtrip('ChoRec2',
{something,
#'ChoRec2_something'{a = 77,
- b = "some octets here",
+ b = <<"some octets here">>,
c = {nothing,'NULL'}}}),
roundtrip('ChoRec2', {nothing,'NULL'}),
ok.
diff --git a/lib/asn1/test/testChoTypeRefCho.erl b/lib/asn1/test/testChoTypeRefCho.erl
index cd2672add0..636c301403 100644
--- a/lib/asn1/test/testChoTypeRefCho.erl
+++ b/lib/asn1/test/testChoTypeRefCho.erl
@@ -30,7 +30,7 @@ choice(_Rules) ->
roundtrip('ChoTRcho', {'choChoE-E',{choInt,88}}),
roundtrip('ChoChoInline', {bool1,true}),
roundtrip('ChoChoInline', {choCho,{bool,true}}),
- roundtrip('ChoChoInline', {choCho,{octStr,"kk"}}),
+ roundtrip('ChoChoInline', {choCho,{octStr,<<"kk">>}}),
roundtrip('ChoChoInline', {choCho,{int,55}}),
ok.
diff --git a/lib/asn1/test/testChoTypeRefPrim.erl b/lib/asn1/test/testChoTypeRefPrim.erl
index 8a2bc7bd8e..747baeddd8 100644
--- a/lib/asn1/test/testChoTypeRefPrim.erl
+++ b/lib/asn1/test/testChoTypeRefPrim.erl
@@ -25,18 +25,18 @@
prim(_Rules) ->
roundtrip('ChoTR', {bool,true}),
- roundtrip('ChoTR', {octStr,[11,12,13,14,15,16,17]}),
+ roundtrip('ChoTR', {octStr,<<11,12,13,14,15,16,17>>}),
roundtrip('ChoTR', {int,233}),
- roundtrip('ChoTR', {octStr,"Stringing in the rain"}),
- roundtrip('ChoTR2', {octStr,"A string"}),
- roundtrip('ChoTR2', {octStrI,"A string"}),
- roundtrip('ChoTR2', {octStrE,"A string"}),
- roundtrip('ChoTR2', {'octStr-I',"A string"}),
- roundtrip('ChoTR2', {'octStrI-I',"A string"}),
- roundtrip('ChoTR2', {'octStrE-I',"A string"}),
- roundtrip('ChoTR2', {'octStr-E',"A string"}),
- roundtrip('ChoTR2', {'octStrI-E',"A string"}),
- roundtrip('ChoTR2', {'octStrE-E',"A string"}),
+ roundtrip('ChoTR', {octStr,<<"Stringing in the rain">>}),
+ roundtrip('ChoTR2', {octStr,<<"A string">>}),
+ roundtrip('ChoTR2', {octStrI,<<"A string">>}),
+ roundtrip('ChoTR2', {octStrE,<<"A string">>}),
+ roundtrip('ChoTR2', {'octStr-I',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStrI-I',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStrE-I',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStr-E',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStrI-E',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStrE-E',<<"A string">>}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testChoTypeRefSeq.erl b/lib/asn1/test/testChoTypeRefSeq.erl
index 86c22619aa..91d0b45e89 100644
--- a/lib/asn1/test/testChoTypeRefSeq.erl
+++ b/lib/asn1/test/testChoTypeRefSeq.erl
@@ -28,15 +28,24 @@
-record('ChoSeqExp', {seqInt, seqOs}).
seq(_Rules) ->
- roundtrip('ChoTRseq', {choSeq,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {choSeqI,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {choSeqE,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeq-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeqI-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeqE-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeq-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeqI-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeqE-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {choSeq,#'ChoSeq'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {choSeqI,#'ChoSeq'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {choSeqE,#'ChoSeq'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeq-I',#'ChoSeqImp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeqI-I',#'ChoSeqImp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeqE-I',#'ChoSeqImp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeq-E',#'ChoSeqExp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeqI-E',#'ChoSeqExp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeqE-E',#'ChoSeqExp'{seqInt=88,
+ seqOs = <<"A string">>}}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testChoTypeRefSet.erl b/lib/asn1/test/testChoTypeRefSet.erl
index fd3d75cbcb..bd9068b53e 100644
--- a/lib/asn1/test/testChoTypeRefSet.erl
+++ b/lib/asn1/test/testChoTypeRefSet.erl
@@ -28,15 +28,24 @@
-record('ChoSetExp', {setInt, setOs}).
set(_Rules) ->
- roundtrip('ChoTRset', {choSet,#'ChoSet'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {choSetI,#'ChoSet'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {choSetE,#'ChoSet'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSet-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSetI-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSetE-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSet-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSetI-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSetE-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {choSet,#'ChoSet'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {choSetI,#'ChoSet'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {choSetE,#'ChoSet'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSet-I',#'ChoSetImp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSetI-I',#'ChoSetImp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSetE-I',#'ChoSetImp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSet-E',#'ChoSetExp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSetI-E',#'ChoSetExp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSetE-E',#'ChoSetExp'{setInt=88,
+ setOs = <<"A string">>}}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testConstraints.erl b/lib/asn1/test/testConstraints.erl
index 54ba748519..3ccf883bd6 100644
--- a/lib/asn1/test/testConstraints.erl
+++ b/lib/asn1/test/testConstraints.erl
@@ -208,14 +208,14 @@ int_constraints(Rules) ->
%% More SIZE Constraints
%%==========================================================
- roundtrip('FixedSize', "0123456789"),
- roundtrip('FixedSize2', "0123456789"),
- roundtrip('FixedSize2', "0123456789abcdefghij"),
+ roundtrip('FixedSize', <<"0123456789">>),
+ roundtrip('FixedSize2', <<"0123456789">>),
+ roundtrip('FixedSize2', <<"0123456789abcdefghij">>),
range_error(Rules, 'FixedSize', "short"),
range_error(Rules, 'FixedSize2', "short"),
- [roundtrip('VariableSize', lists:seq($A, $A+L-1)) ||
+ [roundtrip('VariableSize', list_to_binary(lists:seq($A, $A+L-1))) ||
L <- lists:seq(1, 10)],
roundtrip_enc('ShorterExt', "a", shorter_ext(Rules, "a")),
diff --git a/lib/asn1/test/testFragmented.erl b/lib/asn1/test/testFragmented.erl
index 8d5fa07a5b..35b21f90a9 100644
--- a/lib/asn1/test/testFragmented.erl
+++ b/lib/asn1/test/testFragmented.erl
@@ -22,10 +22,10 @@
-export([main/1]).
main(_Erule) ->
- roundtrip('PDU', {'PDU',1,false,["abc","def"]}),
+ roundtrip('PDU', {'PDU',1,false,[<<"abc">>,<<"def">>]}),
B256 = lists:seq(0, 255),
K1 = lists:duplicate(4, B256),
- K8 = binary_to_list(iolist_to_binary(lists:duplicate(8, K1))),
+ K8 = iolist_to_binary(lists:duplicate(8, K1)),
roundtrip('PDU', {'PDU',1,false,[K8,K8]}),
roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8]}),
roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8]}),
diff --git a/lib/asn1/test/testInfObj.erl b/lib/asn1/test/testInfObj.erl
index cd335e1023..311595cfda 100644
--- a/lib/asn1/test/testInfObj.erl
+++ b/lib/asn1/test/testInfObj.erl
@@ -49,7 +49,7 @@ main(_Erule) ->
roundtrip('RANAPextract1', 'InitiatingMessage2', Val3),
roundtrip('InfObj', 'MyPdu', {'MyPdu',42,12,false,"string"}),
- roundtrip('InfObj', 'MyPdu', {'MyPdu',{'Seq',1023,"hello"},
+ roundtrip('InfObj', 'MyPdu', {'MyPdu',{'Seq',1023,<<"hello">>},
42,true,"longer string"}),
roundtrip('InfObj', 'MyPdu', {'MyPdu',"75712346",43,true,"string"}),
@@ -110,11 +110,11 @@ main(_Erule) ->
enc_dec('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,asn1_DEFAULT}),
roundtrip('InfObj', 'Multiple-Optionals',
- {'Multiple-Optionals',1,42,true,"abc"}),
+ {'Multiple-Optionals',1,42,true,<<"abc">>}),
roundtrip('InfObj', 'Multiple-Optionals',
- {'Multiple-Optionals',1,asn1_NOVALUE,true,"abc"}),
+ {'Multiple-Optionals',1,asn1_NOVALUE,true,<<"abc">>}),
roundtrip('InfObj', 'Multiple-Optionals',
- {'Multiple-Optionals',1,42,asn1_NOVALUE,"abc"}),
+ {'Multiple-Optionals',1,42,asn1_NOVALUE,<<"abc">>}),
roundtrip('InfObj', 'Multiple-Optionals',
{'Multiple-Optionals',1,42,true,asn1_NOVALUE}),
roundtrip('InfObj', 'Multiple-Optionals',
diff --git a/lib/asn1/test/testMergeCompile.erl b/lib/asn1/test/testMergeCompile.erl
index 7cda71c441..b21897cfc2 100644
--- a/lib/asn1/test/testMergeCompile.erl
+++ b/lib/asn1/test/testMergeCompile.erl
@@ -30,12 +30,12 @@
main(Erule) ->
%% test of module MS.set.asn that tests OTP-4492: different tagdefault in
%% modules and types with same name in modules
- MSVal = {'Type4M2',8,true,three,"OCTET STRING"},
+ MSVal = {'Type4M2',8,true,three,<<"OCTET STRING">>},
asn1_test_lib:roundtrip('MS', 'Type4M2', MSVal),
%% test of RANAP.set.asn1
PIEVal2 = [{'ProtocolIE-Field',4,ignore,{radioNetwork,'rab-pre-empted'}}],
- EncVal =
+ EncVal0 =
case Erule of
per ->
<<1,100>>;
@@ -44,6 +44,7 @@ main(Erule) ->
ber ->
<<2,1,1>>
end,
+ EncVal = {asn1_OPENTYPE,EncVal0},
PEVal2 = [{'ProtocolExtensionField',1,ignore,EncVal},
{'ProtocolExtensionField',2,reject,EncVal}],
Val2 =
@@ -142,7 +143,40 @@ test('InsertSubscriberDataArg') ->
ok.
test(mvrasn6,'InsertSubscriberDataArg') ->
- Val = {'InsertSubscriberDataArg',"IMSI","Address","C",serviceGranted,["abc","cde"],["tele","serv","ice"],asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,{'NAEA-PreferredCI',"NCC",asn1_NOVALUE},{'GPRSSubscriptionData','NULL',[{'PDP-Context',49,"PT","PDP-Address","QoS",'NULL',"APN",asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],asn1_NOVALUE},'NULL',onlyMSC,{'LSAInformation','NULL',accessOutsideLSAsAllowed,[{'LSAData',"LSA","L",'NULL',asn1_NOVALUE},{'LSAData',"LSA","L",'NULL',asn1_NOVALUE}],asn1_NOVALUE},'NULL',{'LCSInformation',["Addr","ess","string"],[{'LCS-PrivacyClass',"S","ExtSS",notifyLocationAllowed,[{'ExternalClient',{'LCSClientExternalID',"Addr",asn1_NOVALUE},asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],[broadcastService,anonymousLocation,targetMSsubscribedService],asn1_NOVALUE}],asn1_NOVALUE},100,"age",{'MC-SS-Info',"S","ExtSS",5,4,asn1_NOVALUE},"C",{'SGSN-CAMEL-SubscriptionInfo',{'GPRS-CSI',[{'GPRS-CamelTDPData',attach,13,"Addr",continueTransaction,asn1_NOVALUE}],11,asn1_NOVALUE,'NULL','NULL'},{'SMS-CSI',[{'SMS-CAMEL-TDP-DataList','sms-CollectedInfo',13,"Addr",continueTransaction,asn1_NOVALUE}],11,asn1_NOVALUE,'NULL','NULL'},asn1_NOVALUE},"ON"},
- {ok,Bytes} = 'Mvrasn6':encode('InsertSubscriberDataArg', Val),
- {ok,_} = 'Mvrasn6':decode('InsertSubscriberDataArg', Bytes),
+ Val = {'InsertSubscriberDataArg',<<"IMSI">>,<<"Address">>,<<"C">>,
+ serviceGranted,[<<"abc">>,<<"cde">>],
+ [<<"tele">>,<<"serv">>,<<"ice">>],
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ {'NAEA-PreferredCI',<<"NCC">>,asn1_NOVALUE},
+ {'GPRSSubscriptionData','NULL',
+ [{'PDP-Context',49,<<"PT">>,<<"PDP-Address">>,<<"QoS">>,
+ 'NULL',<<"APN">>,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],
+ asn1_NOVALUE},'NULL',onlyMSC,
+ {'LSAInformation','NULL',accessOutsideLSAsAllowed,
+ [{'LSAData',<<"LSA">>,<<"L">>,'NULL',asn1_NOVALUE},
+ {'LSAData',<<"LSA">>,<<"L">>,'NULL',asn1_NOVALUE}],
+ asn1_NOVALUE},'NULL',
+ {'LCSInformation',[<<"Addr">>,<<"ess">>,<<"string">>],
+ [{'LCS-PrivacyClass',<<"S">>,<<"ExtSS">>,notifyLocationAllowed,
+ [{'ExternalClient',
+ {'LCSClientExternalID',<<"Addr">>,asn1_NOVALUE},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],
+ [broadcastService,anonymousLocation,targetMSsubscribedService],
+ asn1_NOVALUE}],asn1_NOVALUE},
+ 100,<<"age">>,
+ {'MC-SS-Info',<<"S">>,<<"ExtSS">>,5,4,asn1_NOVALUE},
+ <<"C">>,
+ {'SGSN-CAMEL-SubscriptionInfo',
+ {'GPRS-CSI',
+ [{'GPRS-CamelTDPData',attach,13,<<"Addr">>,
+ continueTransaction,asn1_NOVALUE}],
+ 11,asn1_NOVALUE,'NULL','NULL'},
+ {'SMS-CSI',
+ [{'SMS-CAMEL-TDP-Data','sms-CollectedInfo',
+ 13,<<"Addr">>,continueTransaction,asn1_NOVALUE}],
+ 11,asn1_NOVALUE,'NULL','NULL'},
+ asn1_NOVALUE},
+ <<"ON">>},
+ asn1_test_lib:roundtrip('Mvrasn6', 'InsertSubscriberDataArg', Val),
ok.
diff --git a/lib/asn1/test/testParameterizedInfObj.erl b/lib/asn1/test/testParameterizedInfObj.erl
index f3b4f9b170..2fe900792d 100644
--- a/lib/asn1/test/testParameterizedInfObj.erl
+++ b/lib/asn1/test/testParameterizedInfObj.erl
@@ -20,7 +20,7 @@
-module(testParameterizedInfObj).
--export([main/2,ranap/1]).
+-export([main/2,param/1,ranap/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -36,31 +36,29 @@ main(Config, Erule) ->
param2(Config, Erule).
param(Erule) ->
- PERVal = #'AllocationOrRetentionPriority'
- {priorityLevel = true,
- iE_Extensions =
- [#'ProtocolExtensionField'{id=14,
- criticality=reject,
- extensionValue= <<0>>},
- #'ProtocolExtensionField'{id=2,
- criticality=ignore,
- extensionValue= <<1>>}]},
- BERVal = #'AllocationOrRetentionPriority'
- {priorityLevel = true,
- iE_Extensions =
- [#'ProtocolExtensionField'{id=14,
- criticality=reject,
- extensionValue= <<2,1,0>>},
- #'ProtocolExtensionField'{id=2,
- criticality=ignore,
- extensionValue= <<2,1,1>>}]},
- case Erule of
- ber ->
- roundtrip('AllocationOrRetentionPriority', BERVal);
- per ->
- roundtrip('AllocationOrRetentionPriority', PERVal);
- uper ->
- roundtrip('AllocationOrRetentionPriority', PERVal)
+ Exts0 = case Erule of
+ ber ->
+ %% As implemented, the open type must contain
+ %% valid BER-encoded data.
+ [{14,<<2,1,0>>},{2,<<2,1,0>>}];
+ _ ->
+ %% The PER decoder will not look inside the open type.
+ [{14,<<0>>},{2,<<"anything goes">>}]
+ end,
+ case 'Param':legacy_erlang_types() of
+ false ->
+ Exts = [#'ProtocolExtensionField'{id=Id,
+ criticality=reject,
+ extensionValue={asn1_OPENTYPE,
+ Eval}} ||
+ {Id,Eval} <- Exts0],
+ aor_roundtrip(Exts);
+ true ->
+ Exts = [#'ProtocolExtensionField'{id=Id,
+ criticality=reject,
+ extensionValue=Eval} ||
+ {Id,Eval} <- Exts0],
+ aor_roundtrip(Exts)
end,
%% test code for OTP-4242, ValueFromObject
@@ -72,8 +70,13 @@ param(Erule) ->
{error,_Reason2} = 'Param':decode('OS2',[4,4,1,2,3,4]),
{ok,_Val4} = 'Param':decode('OS1',[4,2,1,2]);
_ -> %per/uper
- roundtrip('OS1', [1,2]),
- {error,_Reason3} = 'Param':encode('OS1', [1,2,3,4])
+ case 'Param':legacy_erlang_types() of
+ false ->
+ roundtrip('OS1', <<1,2>>),
+ {error,_Reason3} = 'Param':encode('OS1', <<1,2,3,4>>);
+ true ->
+ ok
+ end
end,
roundtrip('Scl', {'Scl',42,{a,9738654}}),
@@ -82,6 +85,11 @@ param(Erule) ->
ok.
+aor_roundtrip(Exts) ->
+ Val = #'AllocationOrRetentionPriority'{priorityLevel = true,
+ iE_Extensions = Exts},
+ roundtrip('AllocationOrRetentionPriority', Val).
+
roundtrip(T, V) ->
asn1_test_lib:roundtrip('Param', T, V).
@@ -102,11 +110,11 @@ ranap(_Erule) ->
param2(Config, Erule) ->
roundtrip2('HandoverRequired',
{'HandoverRequired',
- [{'ProtocolIE-Field',1,"ABC"},
+ [{'ProtocolIE-Field',1,<<"ABC">>},
{'ProtocolIE-Field',2,577799}]}),
Enc = roundtrip2('HandoverRequired',
{'HandoverRequired',
- [{'ProtocolIE-Field',1,"ABC"},
+ [{'ProtocolIE-Field',1,<<"ABC">>},
{'ProtocolIE-Field',2,-42},
{'ProtocolIE-Field',100,533},
{'ProtocolIE-Field',101,true}]}),
@@ -127,17 +135,19 @@ param2(Config, Erule) ->
[{i,DataDir},{outdir,CaseDir},Erule]),
%% Decompile extended data.
- {ok,{'HandoverRequired',[{'ProtocolIE-Field',1,"ABC"},
+ {ok,{'HandoverRequired',[{'ProtocolIE-Field',1,<<"ABC">>},
{'ProtocolIE-Field',2,-42},
- {'ProtocolIE-Field',100,Open100},
- {'ProtocolIE-Field',101,Open101}]}} =
+ {'ProtocolIE-Field',100,
+ {asn1_OPENTYPE,Open100}},
+ {'ProtocolIE-Field',101,
+ {asn1_OPENTYPE,Open101}}]}} =
'Param2':decode('HandoverRequired', Enc),
true = is_binary(Open100),
true = is_binary(Open101),
%% Test single root.
roundtrip2('SingleRoot',
- {'SingleRoot',[{'ProtocolIE-Field',1,"ABC"},
+ {'SingleRoot',[{'ProtocolIE-Field',1,<<"ABC">>},
{'ProtocolIE-Field',2,9999}]}),
ok.
diff --git a/lib/asn1/test/testPrimExternal.erl b/lib/asn1/test/testPrimExternal.erl
index 07a1de931f..a03760976d 100644
--- a/lib/asn1/test/testPrimExternal.erl
+++ b/lib/asn1/test/testPrimExternal.erl
@@ -45,6 +45,6 @@ external(_Rules) ->
'XExpNT',
'XExpImp',
'XExpExp'],
- _ = [asn1_test_lib:roundtrip('PrimExternal', T, "kalle") ||
+ _ = [asn1_test_lib:roundtrip('PrimExternal', T, <<"kalle">>) ||
T <- Types],
ok.
diff --git a/lib/asn1/test/testPrimStrings.erl b/lib/asn1/test/testPrimStrings.erl
index 2fe0780701..3262d61a4d 100644
--- a/lib/asn1/test/testPrimStrings.erl
+++ b/lib/asn1/test/testPrimStrings.erl
@@ -34,14 +34,11 @@
fragmented(Rules) ->
Lens = fragmented_lengths(),
- fragmented_octet_string(Rules, Lens),
- case Rules of
- per ->
- %% NYI.
- ok;
- _ ->
- fragmented_strings(Lens)
- end.
+ case 'PrimStrings':legacy_erlang_types() of
+ false -> fragmented_octet_string(Rules, Lens);
+ true -> ok
+ end,
+ fragmented_strings(Lens).
fragmented_strings(Lens) ->
Types = ['Ns','Ps','Ps11','Vis','IA5'],
@@ -74,33 +71,37 @@ bit_string(Rules, Opts) ->
%% Bs1 ::= BIT STRING
%%==========================================================
- bs_roundtrip('Bs1', 0, <<>>),
- bs_roundtrip('Bs1', 4, <<1:3>>),
- bs_roundtrip('Bs1', 15, <<15:4>>),
- bs_roundtrip('Bs1', 255, <<255:8>>),
-
- bs_roundtrip('Bs1', 256, [0,0,0,0,0,0,0,0,1]),
- bs_roundtrip('Bs1', 257, [1,0,0,0,0,0,0,0,1]),
- bs_roundtrip('Bs1', 444, [0,0,1,1,1,1,0,1,1]),
-
- {ok,Enc1} = 'PrimStrings':encode('Bs1', 12345678901234567890),
- {ok,_} = 'PrimStrings':decode('Bs1', Enc1),
+ bs_roundtrip('Bs1', <<>>),
+ bs_roundtrip('Bs1', <<1:3>>),
+ bs_roundtrip('Bs1', <<15:4>>),
+ bs_roundtrip('Bs1', <<2#010010:6>>),
+ bs_roundtrip('Bs1', <<2#11111111:8>>),
+ bs_roundtrip('Bs1', <<2#100000000:9>>),
+ bs_roundtrip('Bs1', <<2#100000001:9>>),
+ bs_roundtrip('Bs1', <<2#001111011:9>>),
+ bs_roundtrip('Bs1', <<2#0100101111100010011:19>>),
- bs_roundtrip('Bs1', [1,1,1,1,1,1,1,1]),
- bs_roundtrip('Bs1', [0,1,0,0,1,0]),
- bs_roundtrip('Bs1', [1,0,0,0,0,0,0,0,0]),
- bs_roundtrip('Bs1', [0,1,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1]),
+ case 'PrimStrings':legacy_erlang_types() of
+ false ->
+ ok;
+ true ->
+ {ok,Enc1} = 'PrimStrings':encode('Bs1', 12345678901234567890),
+ {ok,_} = 'PrimStrings':decode('Bs1', Enc1)
+ end,
case {Rules,Opts} of
- {ber,[]} ->
+ {ber,[legacy_erlang_types]} ->
bs_decode('Bs1', <<35,8,3,2,0,73,3,2,4,32>>,
[0,1,0,0,1,0,0,1,0,0,1,0]),
bs_decode('Bs1', <<35,9,3,2,0,234,3,3,7,156,0>>,
[1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0]),
bs_decode('Bs1', <<35,128,3,2,0,234,3,3,7,156,0,0,0>>,
[1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0]);
- _ ->
+ {ber,[]} ->
+ %% XXX
+ ok;
+ {_,_} ->
%% DER, PER, UPER
consistent_def_enc('BsDef1',
[2#111101,
@@ -120,30 +121,39 @@ bit_string(Rules, Opts) ->
%%==========================================================
roundtrip('Bs2', [mo,tu,fr]),
- roundtrip('Bs2', [0,1,1,0,0,1,0], [mo,tu,fr]),
+ bs_roundtrip('Bs2', <<2#0110010:7>>, [mo,tu,fr]),
+ bs_roundtrip('Bs2', <<2#0110011:7>>, [mo,tu,fr,sa]),
%%==========================================================
%% Bs3 ::= BIT STRING {su(0), mo(1), tu(2), we(3), th(4), fr(5), sa(6) } (SIZE (1..7))
%%==========================================================
roundtrip('Bs3', [mo,tu,fr]),
- bs_roundtrip('Bs3', [0,1,1,0,0,1,0], [mo,tu,fr]),
+ bs_roundtrip('Bs3', <<2#0110010:7>>, [mo,tu,fr]),
+ bs_roundtrip('Bs3', <<2#0110010:7>>, [mo,tu,fr]),
+ bs_roundtrip('Bs2', <<2#0110011:7>>, [mo,tu,fr,sa]),
+ bs_roundtrip('Bs3', <<2#011001:6>>, [mo,tu,fr]),
+ bs_roundtrip('Bs3', <<2#11:2>>, [su,mo]),
%%==========================================================
%% Bs7 ::= BIT STRING (SIZE (24))
%%==========================================================
- bs_roundtrip('Bs7', 53245,
- [1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0]),
- bs_roundtrip('Bs7', [1,0,1,0],
- [1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),
+ bs_roundtrip('Bs7', <<23563:24>>),
+ case 'PrimStrings':legacy_erlang_types() of
+ false ->
+%% {error,_} = 'PrimStrings':encode('Bs7', <<2#1010:4>>);
+ ok;
+ true ->
+ ok
+ end,
%%==========================================================
%% BsPri ::= [PRIVATE 61] BIT STRING
%%==========================================================
- bs_roundtrip('BsPri', 45, [1,0,1,1,0,1]),
- bs_roundtrip('BsPri', 211, [1,1,0,0,1,0,1,1]),
+ bs_roundtrip('BsPri', <<2#101101:6>>),
+ bs_roundtrip('BsPri', <<2#11001011:8>>),
case Rules of
ber ->
@@ -164,8 +174,8 @@ bit_string(Rules, Opts) ->
%% BsExpPri ::= [PRIVATE 61] EXPLICIT BIT STRING
%%==========================================================
- bs_roundtrip('BsExpPri', 45, [1,0,1,1,0,1]),
- bs_roundtrip('BsExpPri', 211, [1,1,0,0,1,0,1,1]),
+ bs_roundtrip('BsExpPri', <<2#101101:6>>),
+ bs_roundtrip('BsExpPri', <<2#11001011:8>>),
case Rules of
ber ->
@@ -186,14 +196,14 @@ bit_string(Rules, Opts) ->
%% veteran(2), collegeGraduate(3)}, test case for OTP-5710
%%==========================================================
- {ok,Bytes54} = 'BitStr':encode('PersonalStatus', []),
+ {ok,Bytes54} = 'BitStr':encode('PersonalStatus', <<>>),
{ok,[]} = 'BitStr':decode('PersonalStatus', Bytes54),
%%==========================================================
%% BS5932 ::= BIT STRING (SIZE (5..MAX))
%% test case for OTP-5932
%%==========================================================
- bs_roundtrip('BSMAX', [1,0,1,0,1]),
+ bs_roundtrip('BSMAX', <<2#10101:5>>),
case Rules of
ber ->
{error,_} = 'PrimStrings':encode('BSMAX', [1,0,1]);
@@ -207,28 +217,35 @@ bit_string(Rules, Opts) ->
%% BS1024 ::= BIT STRING (SIZE (1024))
%% test case for OTP-7602
%%==========================================================
- BSmaker =
- fun(_F,S,S,_,Acc) ->
- Acc;
- (F,Ix,S,{A,B},Acc) ->
- F(F,Ix+1,S,{B,A},[A|Acc])
- end,
-
- BSList255 = BSmaker(BSmaker,0,255,{1,0},[]),
- bs_roundtrip('BS255', BSList255),
- BSList256 = BSmaker(BSmaker,0,256,{1,0},[]),
- bs_roundtrip('BS256', BSList256),
- BSList1024 = BSmaker(BSmaker,0,1024,{1,0},[]),
- bs_roundtrip('BS1024', BSList1024),
- bs_roundtrip('TransportLayerAddress', [0,1,1,0]),
+ bs_roundtrip('BS255', random_bits(255)),
+ bs_roundtrip('BS256', random_bits(256)),
+ bs_roundtrip('BS1024', random_bits(1024)),
+
+ bs_roundtrip('TransportLayerAddress', <<2#0110:4>>),
case Rules of
ber -> ok;
_ -> per_bs_strings()
end.
-consistent_def_enc(Type, Vs) ->
+random_bits(N) ->
+ Seed = integer_to_list(erlang:phash2(erlang:now())),
+ random_bits(<<>>, N, Seed).
+
+random_bits(Bin, N, Seed) ->
+ RandomBits = erlang:md5(Seed),
+ Bits = bit_size(RandomBits),
+ if
+ Bits < N ->
+ random_bits(<<Bin/bitstring,RandomBits/bitstring>>,
+ N-Bits, RandomBits);
+ true ->
+ <<LastBits:N/bitstring,_/bitstring>> = RandomBits,
+ <<Bin/bitstring,LastBits/bitstring>>
+ end.
+
+consistent_def_enc(Type, Vs0) ->
M = 'PrimStrings',
{ok,Enc} = M:encode(Type, {Type,asn1_DEFAULT}),
{ok,Val} = M:decode(Type, Enc),
@@ -241,6 +258,13 @@ consistent_def_enc(Type, Vs) ->
{legacy,{_,Bs}} when is_list(Bs) -> ok
end,
+ %% If this is not the legacy format, only bitstrings are
+ %% allowed.
+ Vs = case M:legacy_erlang_types() of
+ false -> [V || V <- Vs0, is_bitstring(V)];
+ true -> Vs0
+ end,
+
%% All values should be recognized and encoded as the
%% the default value (i.e. not encoded at all).
_ = [{ok,Enc} = M:encode(Type, {Type,V}) || V <- Vs],
@@ -252,18 +276,9 @@ consistent_def_enc(Type, Vs) ->
%% a SIZE constraint).
per_bs_strings() ->
- bs_roundtrip('Bs3', [0,0,1,0,0,0,0], [tu]),
bs_roundtrip('Bs3', <<2#0010000:7>>, [tu]),
- bs_roundtrip('Bs3', {1,<<2#00100000:8>>}, [tu]),
-
- bs_roundtrip('Bs4', [0,1,1,0,0,1,0], [mo,tu,fr]),
bs_roundtrip('Bs4', <<2#0110010:7>>, [mo,tu,fr]),
- bs_roundtrip('Bs4', {1,<<2#01100100:8>>}, [mo,tu,fr]),
-
- bs_roundtrip('Bs4', [0,1,1,0,0,0,0], [mo,tu]),
bs_roundtrip('Bs4', <<2#011:3,0:32>>, [mo,tu]),
- bs_roundtrip('Bs4', {5,<<2#011:3,0:32,0:5>>}, [mo,tu]),
-
[per_trailing_zeroes(B) || B <- lists:seq(0, 255)],
ok.
@@ -279,10 +294,6 @@ per_trailing_zeroes(Byte) ->
{bit,LastBitPos} -> LastBitPos+1
end,
- %% List of zeroes and ones.
- named_roundtrip(L, Pos, ExpectedSz),
- named_roundtrip(L++[0,0,0,0,0], Pos, ExpectedSz),
-
%% Bitstrings.
Bs = << <<B:1>> || B <- L >>,
Sz = bit_size(Bs),
@@ -290,14 +301,22 @@ per_trailing_zeroes(Byte) ->
Bin = <<Bs:Sz/bits,0:16,0:7>>,
named_roundtrip(Bin, Pos, ExpectedSz),
- %% Compact bitstring.
- named_roundtrip({7,Bin}, Pos, ExpectedSz),
+ case 'PrimStrings':legacy_erlang_types() of
+ false ->
+ ok;
+ true ->
+ %% List of zeroes and ones.
+ named_roundtrip(L, Pos, ExpectedSz),
+ named_roundtrip(L++[0,0,0,0,0], Pos, ExpectedSz),
- %% Integer bitstring (obsolete).
- IntBs = intlist_to_integer(L, 0, 0),
- named_roundtrip(IntBs, Pos, ExpectedSz),
+ %% Compact bitstring.
+ named_roundtrip({7,Bin}, Pos, ExpectedSz),
- ok.
+ %% Integer bitstring (obsolete).
+ IntBs = intlist_to_integer(L, 0, 0),
+ named_roundtrip(IntBs, Pos, ExpectedSz),
+ ok
+ end.
make_bit_list(0) -> [];
make_bit_list(B) -> [B band 1|make_bit_list(B bsr 1)].
@@ -331,61 +350,62 @@ octet_string(Rules) ->
%% Os ::= OCTET STRING
%%==========================================================
+ Legacy = 'PrimStrings':legacy_erlang_types(),
case Rules of
- ber ->
- {ok,"Jones"} =
+ ber when not Legacy ->
+ {ok,<<"Jones">>} =
'PrimStrings':decode('Os', <<4,5,16#4A,16#6F,16#6E,16#65,16#73>>),
- {ok,"Jones"} =
+ {ok,<<"Jones">>} =
'PrimStrings':decode('Os', <<36,9,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73>>),
- {ok,"Jones"} =
+ {ok,<<"Jones">>} =
'PrimStrings':decode('Os', <<36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0>>),
ok;
_ ->
ok
end,
- roundtrip('Os', [47,23,99,255,1]),
- roundtrip('OsCon', [47,23,99,255,1]),
- roundtrip('OsPri', [47,23,99,255,1]),
- roundtrip('OsApp', [47,23,99,255,1]),
+ os_roundtrip('Os', <<47,23,99,255,1>>),
+ os_roundtrip('OsCon', <<47,23,99,255,1>>),
+ os_roundtrip('OsPri', <<47,23,99,255,1>>),
+ os_roundtrip('OsApp', <<47,23,99,255,1>>),
- roundtrip('OsExpCon', [47,23,99,255,1]),
- roundtrip('OsExpPri', [47,23,99,255,1]),
- roundtrip('OsExpApp', [47,23,99,255,1]),
+ os_roundtrip('OsExpCon', <<47,23,99,255,1>>),
+ os_roundtrip('OsExpPri', <<47,23,99,255,1>>),
+ os_roundtrip('OsExpApp', <<47,23,99,255,1>>),
- roundtrip('Os', []),
- roundtrip('OsApp', []),
- roundtrip('OsExpApp',[]),
+ os_roundtrip('Os', <<>>),
+ os_roundtrip('OsApp', <<>>),
+ os_roundtrip('OsExpApp', <<>>),
- OsR = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890",
+ OsR = <<"12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890">>,
- roundtrip('Os', OsR),
- roundtrip('OsCon', OsR),
- roundtrip('OsExpApp', OsR),
+ os_roundtrip('Os', OsR),
+ os_roundtrip('OsCon', OsR),
+ os_roundtrip('OsExpApp', OsR),
case Rules of
- ber ->
- {ok,"Jones"} = 'PrimStrings':decode('OsExpApp', <<127,62,7,4,5,16#4A,16#6F,16#6E,16#65,16#73>>),
- {ok,"Jones"} = 'PrimStrings':decode('OsExpApp', <<127,62,11,36,9,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73>>),
- {ok,"Jones"} = 'PrimStrings':decode('OsExpApp', <<127,62,13,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0>>),
- {ok,"Jones"} = 'PrimStrings':decode('OsExpApp', <<127,62,128,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,0,0>>),
- {ok,"JonesJones"} = 'PrimStrings':decode('OsExpApp', <<127,62,128,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,0,0>>),
+ ber when not Legacy ->
+ {ok,<<"Jones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,7,4,5,16#4A,16#6F,16#6E,16#65,16#73>>),
+ {ok,<<"Jones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,11,36,9,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73>>),
+ {ok,<<"Jones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,13,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0>>),
+ {ok,<<"Jones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,128,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,0,0>>),
+ {ok,<<"JonesJones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,128,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,0,0>>),
ok;
-
- _->
+ _ ->
ok
end,
S255 = lists:seq(1, 255),
- Strings = {type,true,"","1","12","345",true,
- S255,[$a|S255],[$a,$b|S255],397},
- p_roundtrip('OsFixedStrings', Strings),
- p_roundtrip('OsFixedStringsExt', Strings),
- p_roundtrip('OsVarStringsExt', Strings),
+ Strings = {type,true,<<"">>,<<"1">>,<<"12">>,<<"345">>,true,
+ list_to_binary(S255),list_to_binary([$a|S255]),
+ list_to_binary([$a,$b|S255]),397},
+ p_os_roundtrip('OsFixedStrings', Strings),
+ p_os_roundtrip('OsFixedStringsExt', Strings),
+ p_os_roundtrip('OsVarStringsExt', Strings),
ShortenedStrings = shorten_by_two(Strings),
- p_roundtrip('OsFixedStringsExt', ShortenedStrings),
- p_roundtrip('OsVarStringsExt', ShortenedStrings),
+ p_os_roundtrip('OsFixedStringsExt', ShortenedStrings),
+ p_os_roundtrip('OsVarStringsExt', ShortenedStrings),
ok.
fragmented_octet_string(Erules, Lens) ->
@@ -414,13 +434,14 @@ fragmented_octet_string(Erules, Types, L) ->
ok.
enc_frag(Erules, Type, Value) ->
- {ok,Encoded} = 'PrimStrings':encode(Type, Value),
+ M = 'PrimStrings',
+ {ok,Encoded} = M:encode(Type, Value),
case Erules of
ber ->
Encoded;
_ ->
%% Validate encoding with our own encoder.
- Encoded = enc_frag_1(<<>>, list_to_binary(Value))
+ Encoded = enc_frag_1(<<>>, Value)
end.
enc_frag_1(Res, Bin0) ->
@@ -439,12 +460,12 @@ enc_frag_1(Res, Bin0) ->
end.
make_value(L) ->
- make_value(L, 0, []).
+ make_value(L, 0, <<>>).
make_value(0, _, Acc) ->
Acc;
make_value(N, Byte, Acc) when Byte =< 255 ->
- make_value(N-1, Byte+7, [Byte|Acc]);
+ make_value(N-1, Byte+7, <<Acc/binary,Byte:8>>);
make_value(N, Byte, Acc) ->
make_value(N, Byte band 16#FF, Acc).
@@ -742,10 +763,32 @@ utf8_string(_Rules) ->
shorten_by_two(Tuple) ->
L = [case E of
[_,_|T] -> T;
+ <<_:16,T/binary>> -> T;
_ -> E
end || E <- tuple_to_list(Tuple)],
list_to_tuple(L).
+p_os_roundtrip(Type, Value0) ->
+ Value = setelement(1, Value0, Type),
+ p_os_roundtrip_1(Type, Value).
+
+p_os_roundtrip_1(Type, Value) ->
+ M = 'PrimStrings',
+ case M:legacy_erlang_types() of
+ false ->
+ asn1_test_lib:roundtrip(M, Type, Value);
+ true ->
+ {ok,Encoded} = M:encode(Type, Value),
+ Es0 = tuple_to_list(Value),
+ Es1 = [if
+ is_binary(E) -> binary_to_list(E);
+ true -> E
+ end || E <- Es0],
+ ListValue = list_to_tuple(Es1),
+ {ok,Encoded} = M:encode(Type, ListValue),
+ {ok,ListValue} = M:decode(Type, Encoded)
+ end.
+
p_roundtrip(Type, Value0) ->
Value = setelement(1, Value0, Type),
roundtrip(Type, Value).
@@ -759,15 +802,57 @@ roundtrip(Type, Value, Expected) ->
bs_roundtrip(Type, Value) ->
bs_roundtrip(Type, Value, Value).
-bs_roundtrip(Type, Value, Expected) ->
+os_roundtrip(Type, Bin) when is_binary(Bin) ->
M = 'PrimStrings',
- {ok,Encoded} = M:encode(Type, Value),
- {ok,Encoded} = M:encode(Type, Expected),
- case M:decode(Type, Encoded) of
- {ok,Expected} ->
- ok;
- {ok,Other} ->
- Expected = convert(Other, Expected)
+ case M:legacy_erlang_types() of
+ false ->
+ asn1_test_lib:roundtrip(M, Type, Bin);
+ true ->
+ {ok,Encoded} = M:encode(Type, Bin),
+ List = binary_to_list(Bin),
+ {ok,Encoded} = M:encode(Type, List),
+ {ok,List} = M:decode(Type, Encoded)
+ end.
+
+bs_roundtrip(Type, Value, Expected) when is_bitstring(Value) ->
+ M = 'PrimStrings',
+ case M:legacy_erlang_types() of
+ false ->
+ asn1_test_lib:roundtrip(M, Type, Value, Expected);
+ true ->
+ {ok,Encoded} = M:encode(Type, Value),
+ BitList = [B || <<B:1>> <= Value],
+ {ok,Encoded} = M:encode(Type, BitList),
+ case BitList of
+ [] ->
+ {ok,Encoded} = M:encode(Type, 0);
+ [_|_] ->
+ case lists:last(BitList) of
+ 1 ->
+ Int = lists:foldr(fun(B, A) ->
+ (A bsl 1) bor B
+ end, 0, BitList),
+ {ok,Encoded} = M:encode(Type, Int);
+ 0 ->
+ %% This BIT STRING cannot be represented
+ %% as an integer.
+ ok
+ end
+ end,
+ Compact = case bit_size(Value) of
+ Bits when Bits rem 8 =:= 0 ->
+ {0,Value};
+ Bits ->
+ Unused = 8 - Bits rem 8,
+ {Unused,<<Value:Bits/bitstring,0:Unused>>}
+ end,
+ {ok,Encoded} = M:encode(Type, Compact),
+ case M:decode(Type, Encoded) of
+ {ok,Expected} ->
+ ok;
+ {ok,Other} ->
+ Expected = convert(Other, Expected)
+ end
end.
bs_decode(Type, Encoded, Expected) ->
diff --git a/lib/asn1/test/testSeqExtension.erl b/lib/asn1/test/testSeqExtension.erl
index 8473459c36..c16e9fcd4c 100644
--- a/lib/asn1/test/testSeqExtension.erl
+++ b/lib/asn1/test/testSeqExtension.erl
@@ -44,7 +44,7 @@ main(Erule, DataDir, Opts) ->
roundtrip('SeqExt4', #'SeqExt4'{bool=true,int=12345}),
roundtrip('SeqExt4', #'SeqExt4'{bool=false,int=123456}),
- roundtrip('SeqExt5', #'SeqExt5'{name="Arne",shoesize=47}),
+ roundtrip('SeqExt5', #'SeqExt5'{name = <<"Arne">>,shoesize=47}),
%% Encode a value with this version of the specification.
BigInt = 128638468966,
@@ -52,7 +52,7 @@ main(Erule, DataDir, Opts) ->
s2=#'SeqExt2'{bool=true,int=2345},
s3=#'SeqExt3'{bool=false,int=17},
s4=#'SeqExt4'{bool=true,int=38739739},
- s5=#'SeqExt5'{name="Arne",shoesize=47},
+ s5=#'SeqExt5'{name = <<"Arne">>,shoesize=47},
s6=#'SeqExt6'{i1=531,i2=601,i3=999,
i4=777,i5=11953,
i6=13553,i7=77777},
diff --git a/lib/asn1/test/testSeqExternal.erl b/lib/asn1/test/testSeqExternal.erl
index a8e0902244..0b1d305054 100644
--- a/lib/asn1/test/testSeqExternal.erl
+++ b/lib/asn1/test/testSeqExternal.erl
@@ -29,15 +29,15 @@
-record('SeqXSet3',{bool, int, set}).
main(_Rules) ->
- roundtrip('XNTNT', #'XSeqNT'{os="kalle",bool=true}),
- roundtrip('XImpNT', #'XSeqNT'{os="kalle",bool=true}),
- roundtrip('XExpNT', #'XSeqNT'{os="kalle",bool=true}),
- roundtrip('XNTImp', #'XSeqImp'{os="kalle",bool=true}),
- roundtrip('XImpImp', #'XSeqImp'{os="kalle",bool=true}),
- roundtrip('XExpImp', #'XSeqImp'{os="kalle",bool=true}),
- roundtrip('XNTExp', #'XSeqExp'{os="kalle",bool=true}),
- roundtrip('XImpExp', #'XSeqExp'{os="kalle",bool=true}),
- roundtrip('XExpExp', #'XSeqExp'{os="kalle",bool=true}),
+ roundtrip('XNTNT', #'XSeqNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpNT', #'XSeqNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpNT', #'XSeqNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XNTImp', #'XSeqImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpImp', #'XSeqImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpImp', #'XSeqImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XNTExp', #'XSeqExp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpExp', #'XSeqExp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpExp', #'XSeqExp'{os = <<"kalle">>,bool=true}),
roundtrip('SeqXSet1',
#'SeqXSet1'{set=#'XSet1'{bool1=true,int1=77,
set1=#'XSetIn'{boolIn=false,intIn=88}},
diff --git a/lib/asn1/test/testSeqOf.erl b/lib/asn1/test/testSeqOf.erl
index 7f8f4079b4..25059d6052 100644
--- a/lib/asn1/test/testSeqOf.erl
+++ b/lib/asn1/test/testSeqOf.erl
@@ -85,10 +85,10 @@ main(_Rules) ->
seq43=SeqIn3}),
roundtrip('Seq5', {'Seq5',true,[],77}),
- roundtrip('Seq5', {'Seq5',true,[""],77}),
- roundtrip('Seq5', {'Seq5',true,["a"],77}),
- roundtrip('Seq5', {'Seq5',true,["ab"],77}),
- roundtrip('Seq5', {'Seq5',true,["abc"],77}),
+ roundtrip('Seq5', {'Seq5',true,[<<"">>],77}),
+ roundtrip('Seq5', {'Seq5',true,[<<"a">>],77}),
+ roundtrip('Seq5', {'Seq5',true,[<<"ab">>],77}),
+ roundtrip('Seq5', {'Seq5',true,[<<"abc">>],77}),
roundtrip('Seq6', {'Seq6',[],[],101}),
roundtrip('Seq6', {'Seq6',[],[7],101}),
@@ -100,15 +100,15 @@ main(_Rules) ->
roundtrip('Seq8', {'Seq8',[],37}),
roundtrip('Seq9', {'Seq9',true,[],97}),
- roundtrip('Seq9', {'Seq9',true,[""],97}),
- roundtrip('Seq9', {'Seq9',true,["x"],97}),
- roundtrip('Seq9', {'Seq9',true,["xy"],97}),
- roundtrip('Seq9', {'Seq9',true,["xyz"],97}),
-
- roundtrip('Seq10', {'Seq10',true,[""],97}),
- roundtrip('Seq10', {'Seq10',true,["a"],97}),
- roundtrip('Seq10', {'Seq10',true,["a","b"],97}),
- roundtrip('Seq10', {'Seq10',true,["a","b","c"],97}),
+ roundtrip('Seq9', {'Seq9',true,[<<"">>],97}),
+ roundtrip('Seq9', {'Seq9',true,[<<"x">>],97}),
+ roundtrip('Seq9', {'Seq9',true,[<<"xy">>],97}),
+ roundtrip('Seq9', {'Seq9',true,[<<"xyz">>],97}),
+
+ roundtrip('Seq10', {'Seq10',true,[<<"">>],97}),
+ roundtrip('Seq10', {'Seq10',true,[<<"a">>],97}),
+ roundtrip('Seq10', {'Seq10',true,[<<"a">>,<<"b">>],97}),
+ roundtrip('Seq10', {'Seq10',true,[<<"a">>,<<"b">>,<<"c">>],97}),
roundtrip('SeqEmp', #'SeqEmp'{seq1=[#'Empty'{}]}),
diff --git a/lib/asn1/test/testSeqOfExternal.erl b/lib/asn1/test/testSeqOfExternal.erl
index 2e60f441c1..38b9f0ce7c 100644
--- a/lib/asn1/test/testSeqOfExternal.erl
+++ b/lib/asn1/test/testSeqOfExternal.erl
@@ -29,50 +29,59 @@
main(_Rules) ->
roundtrip('NTNT',
- [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
roundtrip('ImpNT',
- [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
roundtrip('ExpNT',
- [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
roundtrip('NTImp',
- [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
roundtrip('ImpImp',
- [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
roundtrip('ExpImp',
- [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
roundtrip('NTExp',
- [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
roundtrip('ImpExp',
- [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
roundtrip('ExpExp',
- [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
roundtrip('XNTNT',
- [#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}]),
+ [#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}]),
roundtrip('XImpNT',
- [#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}]),
+ [#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}]),
roundtrip('XExpNT',
- [#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}]),
+ [#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}]),
roundtrip('XNTImp',
- [#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}]),
+ [#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}]),
roundtrip('XImpImp',
- [#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}]),
+ [#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}]),
roundtrip('XExpImp',
- [#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}]),
+ [#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}]),
roundtrip('XNTExp',
- [#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]),
+ [#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]),
roundtrip('XImpExp',
- [#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]),
+ [#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]),
roundtrip('XExpExp',
- [#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]),
+ [#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqOfTag.erl b/lib/asn1/test/testSeqOfTag.erl
index 38c1dcb90f..f66e29e91d 100644
--- a/lib/asn1/test/testSeqOfTag.erl
+++ b/lib/asn1/test/testSeqOfTag.erl
@@ -44,47 +44,47 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('SeqTagNt', #'SeqTagNt'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SeqTagNtI', #'SeqTagNtI'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagNtE', #'SeqTagNtE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagI', #'SeqTagI'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SeqTagII', #'SeqTagII'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagIE', #'SeqTagIE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagE', #'SeqTagE'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SeqTagEI', #'SeqTagEI'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagEE', #'SeqTagEE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagNt', #'SeqTagNt'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagNtI', #'SeqTagNtI'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagNtE', #'SeqTagNtE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagI', #'SeqTagI'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagII', #'SeqTagII'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagIE', #'SeqTagIE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagE', #'SeqTagE'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagEI', #'SeqTagEI'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagEE', #'SeqTagEE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagXNt',
- #'SeqTagXNt'{xnt=[#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}]}),
+ #'SeqTagXNt'{xnt=[#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagXI',
- #'SeqTagXI'{ximp=[#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}]}),
+ #'SeqTagXI'{ximp=[#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagXE',
- #'SeqTagXE'{xexp=[#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]}),
+ #'SeqTagXE'{xexp=[#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagImpX',
- #'SeqTagImpX'{xnt=[#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}],
- ximp=[#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}],
- xexp=[#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]}),
+ #'SeqTagImpX'{xnt=[#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}],
+ ximp=[#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}],
+ xexp=[#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagExpX',
- #'SeqTagExpX'{xnt=[#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}],
- ximp=[#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}],
- xexp=[#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]}),
+ #'SeqTagExpX'{xnt=[#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}],
+ ximp=[#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}],
+ xexp=[#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqPrim.erl b/lib/asn1/test/testSeqPrim.erl
index 46bac77910..7f3ef86ac5 100644
--- a/lib/asn1/test/testSeqPrim.erl
+++ b/lib/asn1/test/testSeqPrim.erl
@@ -36,9 +36,9 @@ main(_Rules) ->
roundtrip('Seq', #'Seq'{bool=false,boolCon=true,boolPri=false,boolApp=true,
boolExpCon=false,boolExpPri=true,boolExpApp=false}),
roundtrip('Empty', #'Empty'{}),
- roundtrip('Big', #'Big'{os1=lists:duplicate(120, 16#A5),
- os2=lists:duplicate(128, 16#A7),
- os3=lists:duplicate(17777, 16#F5)}),
+ roundtrip('Big', #'Big'{os1=list_to_binary(lists:duplicate(120, 16#A5)),
+ os2=list_to_binary(lists:duplicate(128, 16#A7)),
+ os3=list_to_binary(lists:duplicate(17777, 16#F5))}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testSeqSetDefaultVal.erl b/lib/asn1/test/testSeqSetDefaultVal.erl
index 044099199f..79992a0a94 100644
--- a/lib/asn1/test/testSeqSetDefaultVal.erl
+++ b/lib/asn1/test/testSeqSetDefaultVal.erl
@@ -162,7 +162,7 @@ main(Rule, Opts) ->
{#'SeqOS'{},
[{#'SeqOS'.a,
[asn1_DEFAULT,
- [172]]}]},
+ <<172>>]}]},
{#'SeqOI'{},
[{#'SeqOI'.a,
@@ -314,17 +314,10 @@ der() ->
c=[second], d = <<>>}),
roundtrip(<<48,0>>, 'SeqOS',
- #'SeqOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
- roundtrip(<<48,0>>,
- 'SeqOS',
- #'SeqOS'{a=172,b=43168,c='NULL'},
- #'SeqOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
+ #'SeqOS'{a = <<172>>,b = <<16#A8,16#A0>>,c='NULL'}),
- roundtrip(<<49,0>>, 'SetOS', #'SetOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
- roundtrip(<<49,0>>,
- 'SetOS',
- #'SetOS'{a=172,b=43168,c='NULL'},
- #'SetOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
+ roundtrip(<<49,0>>, 'SetOS',
+ #'SetOS'{a = <<172>>,b = <<16#A8,16#A0>>,c='NULL'}),
roundtrip(<<48,0>>,
'SeqOI',
diff --git a/lib/asn1/test/testSeqTag.erl b/lib/asn1/test/testSeqTag.erl
index 2f127b3e97..6bacca6808 100644
--- a/lib/asn1/test/testSeqTag.erl
+++ b/lib/asn1/test/testSeqTag.erl
@@ -35,24 +35,24 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('SeqTag', #'SeqTag'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SeqTagImp', #'SeqTagImp'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SeqTagExp', #'SeqTagExp'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SeqTagX', #'SeqTagX'{xnt=#'XSeqNT'{os="kalle",bool=true},
- ximp=#'XSeqImp'{os="kalle",bool=true},
- xexp=#'XSeqExp'{os="kalle",bool=true}}),
- roundtrip('SeqTagImpX', #'SeqTagImpX'{xnt=#'XSeqNT'{os="kalle",bool=true},
- ximp=#'XSeqImp'{os="kalle",bool=true},
- xexp=#'XSeqExp'{os="kalle",bool=true}}),
- roundtrip('SeqTagExpX', #'SeqTagExpX'{xnt=#'XSeqNT'{os="kalle",bool=true},
- ximp=#'XSeqImp'{os="kalle",bool=true},
- xexp=#'XSeqExp'{os="kalle",bool=true}}),
+ roundtrip('SeqTag', #'SeqTag'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagImp', #'SeqTagImp'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagExp', #'SeqTagExp'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagX', #'SeqTagX'{xnt=#'XSeqNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSeqImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSeqExp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagImpX', #'SeqTagImpX'{xnt=#'XSeqNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSeqImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSeqExp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagExpX', #'SeqTagExpX'{xnt=#'XSeqNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSeqImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSeqExp'{os = <<"kalle">>,bool=true}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqTypeRefCho.erl b/lib/asn1/test/testSeqTypeRefCho.erl
index b008bc46b8..1a921c6f38 100644
--- a/lib/asn1/test/testSeqTypeRefCho.erl
+++ b/lib/asn1/test/testSeqTypeRefCho.erl
@@ -28,10 +28,10 @@
main(_Rules) ->
roundtrip('SeqTRcho',
- #'SeqTRcho'{'seqCho' = {choOs,"A string 1"},
- 'seqChoE' = {choOs,"A string 3"},
- 'seqCho-E' = {choOs,"A string 7"},
- 'seqChoE-E' = {choOs,"A string 9"}}),
+ #'SeqTRcho'{'seqCho' = {choOs,<<"A string 1">>},
+ 'seqChoE' = {choOs,<<"A string 3">>},
+ 'seqCho-E' = {choOs,<<"A string 7">>},
+ 'seqChoE-E' = {choOs,<<"A string 9">>}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqTypeRefPrim.erl b/lib/asn1/test/testSeqTypeRefPrim.erl
index b63882ae99..d66d1ebcfe 100644
--- a/lib/asn1/test/testSeqTypeRefPrim.erl
+++ b/lib/asn1/test/testSeqTypeRefPrim.erl
@@ -26,15 +26,15 @@
main(_Rules) ->
roundtrip('SeqTR',
- #'SeqTR'{'octStr' = "A string 1",
- 'octStrI' = "A string 2",
- 'octStrE' = "A string 3",
- 'octStr-I' = "A string 4",
- 'octStrI-I' = "A string 5",
- 'octStrE-I' = "A string 6",
- 'octStr-E' = "A string 7",
- 'octStrI-E' = "A string 8",
- 'octStrE-E' = "A string 9"}),
+ #'SeqTR'{'octStr' = <<"A string 1">>,
+ 'octStrI' = <<"A string 2">>,
+ 'octStrE' = <<"A string 3">>,
+ 'octStr-I' = <<"A string 4">>,
+ 'octStrI-I' = <<"A string 5">>,
+ 'octStrE-I' = <<"A string 6">>,
+ 'octStr-E' = <<"A string 7">>,
+ 'octStrI-E' = <<"A string 8">>,
+ 'octStrE-E' = <<"A string 9">>}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqTypeRefSeq.erl b/lib/asn1/test/testSeqTypeRefSeq.erl
index fc2e0a67c9..3288511f0a 100644
--- a/lib/asn1/test/testSeqTypeRefSeq.erl
+++ b/lib/asn1/test/testSeqTypeRefSeq.erl
@@ -71,15 +71,15 @@ main(_Rules) ->
seqS2=#'SeqSTag_seqS2'{b2=true,i2=22},
seqS3=#'SeqSTag_seqS3'{b3=true,i3=33}}),
roundtrip('SeqTRseq',
- #'SeqTRseq'{seqSeq=#'SeqSeq'{seqInt=2,seqOs="A1"},
- seqSeqI=#'SeqSeq'{seqInt=2,seqOs="A2"},
- seqSeqE=#'SeqSeq'{seqInt=2,seqOs="A3"},
- 'seqSeq-I'=#'SeqSeqImp'{seqInt=2,seqOs="A4"},
- 'seqSeqI-I'=#'SeqSeqImp'{seqInt=2,seqOs="A5"},
- 'seqSeqE-I'=#'SeqSeqImp'{seqInt=2,seqOs="A6"},
- 'seqSeq-E'=#'SeqSeqExp'{seqInt=2,seqOs="A7"},
- 'seqSeqI-E'=#'SeqSeqExp'{seqInt=2,seqOs="A8"},
- 'seqSeqE-E'=#'SeqSeqExp'{seqInt=2,seqOs="A9"}}),
+ #'SeqTRseq'{seqSeq=#'SeqSeq'{seqInt=2,seqOs = <<"A1">>},
+ seqSeqI=#'SeqSeq'{seqInt=2,seqOs = <<"A2">>},
+ seqSeqE=#'SeqSeq'{seqInt=2,seqOs = <<"A3">>},
+ 'seqSeq-I'=#'SeqSeqImp'{seqInt=2,seqOs = <<"A4">>},
+ 'seqSeqI-I'=#'SeqSeqImp'{seqInt=2,seqOs = <<"A5">>},
+ 'seqSeqE-I'=#'SeqSeqImp'{seqInt=2,seqOs = <<"A6">>},
+ 'seqSeq-E'=#'SeqSeqExp'{seqInt=2,seqOs = <<"A7">>},
+ 'seqSeqI-E'=#'SeqSeqExp'{seqInt=2,seqOs = <<"A8">>},
+ 'seqSeqE-E'=#'SeqSeqExp'{seqInt=2,seqOs = <<"A9">>}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqTypeRefSet.erl b/lib/asn1/test/testSeqTypeRefSet.erl
index 911a4b7a47..d73423284b 100644
--- a/lib/asn1/test/testSeqTypeRefSet.erl
+++ b/lib/asn1/test/testSeqTypeRefSet.erl
@@ -32,15 +32,15 @@
main(_Rules) ->
roundtrip('SeqTRset',
- #'SeqTRset'{seqSet=#'SeqSet'{setInt=2,setOs="A1"},
- seqSetI=#'SeqSet'{setInt=2,setOs="A2"},
- seqSetE=#'SeqSet'{setInt=2,setOs="A3"},
- 'seqSet-I'=#'SeqSetImp'{setInt=2,setOs="A4"},
- 'seqSetI-I'=#'SeqSetImp'{setInt=2,setOs="A5"},
- 'seqSetE-I'=#'SeqSetImp'{setInt=2,setOs="A6"},
- 'seqSet-E'=#'SeqSetExp'{setInt=2,setOs="A7"},
- 'seqSetI-E'=#'SeqSetExp'{setInt=2,setOs="A8"},
- 'seqSetE-E'=#'SeqSetExp'{setInt=2,setOs="A9"}}),
+ #'SeqTRset'{seqSet=#'SeqSet'{setInt=2,setOs = <<"A1">>},
+ seqSetI=#'SeqSet'{setInt=2,setOs = <<"A2">>},
+ seqSetE=#'SeqSet'{setInt=2,setOs = <<"A3">>},
+ 'seqSet-I'=#'SeqSetImp'{setInt=2,setOs = <<"A4">>},
+ 'seqSetI-I'=#'SeqSetImp'{setInt=2,setOs = <<"A5">>},
+ 'seqSetE-I'=#'SeqSetImp'{setInt=2,setOs = <<"A6">>},
+ 'seqSet-E'=#'SeqSetExp'{setInt=2,setOs = <<"A7">>},
+ 'seqSetI-E'=#'SeqSetExp'{setInt=2,setOs = <<"A8">>},
+ 'seqSetE-E'=#'SeqSetExp'{setInt=2,setOs = <<"A9">>}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetExternal.erl b/lib/asn1/test/testSetExternal.erl
index e17d7053aa..626adc5822 100644
--- a/lib/asn1/test/testSetExternal.erl
+++ b/lib/asn1/test/testSetExternal.erl
@@ -28,15 +28,15 @@
-record('SetXSeq3',{bool, int, seq}).
main(_Rules) ->
- roundtrip('XNTNT', #'XSetNT'{os="kalle",bool=true}),
- roundtrip('XImpNT', #'XSetNT'{os="kalle",bool=true}),
- roundtrip('XExpNT', #'XSetNT'{os="kalle",bool=true}),
- roundtrip('XNTImp', #'XSetImp'{os="kalle",bool=true}),
- roundtrip('XImpImp', #'XSetImp'{os="kalle",bool=true}),
- roundtrip('XExpImp', #'XSetImp'{os="kalle",bool=true}),
- roundtrip('XNTExp', #'XSetExp'{os="kalle",bool=true}),
- roundtrip('XImpExp', #'XSetExp'{os="kalle",bool=true}),
- roundtrip('XExpExp', #'XSetExp'{os="kalle",bool=true}),
+ roundtrip('XNTNT', #'XSetNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpNT', #'XSetNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpNT', #'XSetNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XNTImp', #'XSetImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpImp', #'XSetImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpImp', #'XSetImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XNTExp', #'XSetExp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpExp', #'XSetExp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpExp', #'XSetExp'{os = <<"kalle">>,bool=true}),
roundtrip('SetXSeq1', #'SetXSeq1'{seq=#'XSeq1'{bool1=true,int1=77,
seq1=#'XSeqIn'{boolIn=false,intIn=88}},
bool=true,int=66}),
diff --git a/lib/asn1/test/testSetOf.erl b/lib/asn1/test/testSetOf.erl
index 54c42c1f21..0f82a14625 100644
--- a/lib/asn1/test/testSetOf.erl
+++ b/lib/asn1/test/testSetOf.erl
@@ -121,9 +121,9 @@ main(_Rules) ->
#'SetIn'{boolIn=false,intIn=125},
#'SetIn'{boolIn=false,intIn=225}]}),
- roundtrip('SetOs', ["First","Second","Third"]),
- roundtrip('SetOsImp', ["First","Second","Third"]),
- roundtrip('SetOsExp', ["First","Second","Third"]),
+ roundtrip('SetOs', [<<"First">>,<<"Second">>,<<"Third">>]),
+ roundtrip('SetOsImp', [<<"First">>,<<"Second">>,<<"Third">>]),
+ roundtrip('SetOsExp', [<<"First">>,<<"Second">>,<<"Third">>]),
roundtrip('SetEmp', #'SetEmp'{set1=[#'Empty'{}]}),
ok.
diff --git a/lib/asn1/test/testSetOfExternal.erl b/lib/asn1/test/testSetOfExternal.erl
index a380ba5ac1..cc5fe10710 100644
--- a/lib/asn1/test/testSetOfExternal.erl
+++ b/lib/asn1/test/testSetOfExternal.erl
@@ -28,24 +28,42 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('NTNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
- roundtrip('ImpNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
- roundtrip('ExpNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
- roundtrip('NTImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
- roundtrip('ImpImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
- roundtrip('ExpImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
- roundtrip('NTExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
- roundtrip('ImpExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
- roundtrip('ExpExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
- roundtrip('XNTNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
- roundtrip('XImpNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
- roundtrip('XExpNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
- roundtrip('XNTImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
- roundtrip('XImpImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
- roundtrip('XExpImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
- roundtrip('XNTExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
- roundtrip('XImpExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
- roundtrip('XExpExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
+ roundtrip('NTNT', [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ImpNT', [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ExpNT', [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('NTImp', [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ImpImp', [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ExpImp', [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('NTExp', [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ImpExp', [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ExpExp', [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XNTNT', [#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XImpNT', [#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XExpNT', [#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XNTImp', [#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XImpImp', [#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XExpImp', [#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XNTExp', [#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XImpExp', [#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XExpExp', [#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetOfTag.erl b/lib/asn1/test/testSetOfTag.erl
index 81bc467abb..0d656f05a6 100644
--- a/lib/asn1/test/testSetOfTag.erl
+++ b/lib/asn1/test/testSetOfTag.erl
@@ -42,42 +42,42 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('SetTagNt', #'SetTagNt'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SetTagNtI', #'SetTagNtI'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SetTagNtE', #'SetTagNtE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SetTagI', #'SetTagI'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SetTagII', #'SetTagII'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SetTagIE', #'SetTagIE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SetTagE', #'SetTagE'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SetTagEI', #'SetTagEI'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SetTagEE', #'SetTagEE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SetTagXNt', #'SetTagXNt'{xnt=[#'XSetNT'{os="kalle",bool=true},
- #'XSetNT'{os="kalle",bool=true}]}),
- roundtrip('SetTagXI', #'SetTagXI'{ximp=[#'XSetImp'{os="kalle",bool=true},
- #'XSetImp'{os="kalle",bool=true}]}),
- roundtrip('SetTagXE', #'SetTagXE'{xexp=[#'XSetExp'{os="kalle",bool=true},
- #'XSetExp'{os="kalle",bool=true}]}),
- roundtrip('SetTagImpX', #'SetTagImpX'{xnt=[#'XSetNT'{os="kalle",bool=true},
- #'XSetNT'{os="kalle",bool=true}],
- ximp=[#'XSetImp'{os="kalle",bool=true},
- #'XSetImp'{os="kalle",bool=true}],
- xexp=[#'XSetExp'{os="kalle",bool=true},
- #'XSetExp'{os="kalle",bool=true}]}),
- roundtrip('SetTagExpX', #'SetTagExpX'{xnt=[#'XSetNT'{os="kalle",bool=true},
- #'XSetNT'{os="kalle",bool=true}],
- ximp=[#'XSetImp'{os="kalle",bool=true},
- #'XSetImp'{os="kalle",bool=true}],
- xexp=[#'XSetExp'{os="kalle",bool=true},
- #'XSetExp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagNt', #'SetTagNt'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagNtI', #'SetTagNtI'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagNtE', #'SetTagNtE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagI', #'SetTagI'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagII', #'SetTagII'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagIE', #'SetTagIE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagE', #'SetTagE'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagEI', #'SetTagEI'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagEE', #'SetTagEE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagXNt', #'SetTagXNt'{xnt=[#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagXI', #'SetTagXI'{ximp=[#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagXE', #'SetTagXE'{xexp=[#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagImpX', #'SetTagImpX'{xnt=[#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}],
+ ximp=[#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}],
+ xexp=[#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagExpX', #'SetTagExpX'{xnt=[#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}],
+ ximp=[#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}],
+ xexp=[#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetTag.erl b/lib/asn1/test/testSetTag.erl
index 5863a149b9..fa1d84f50d 100644
--- a/lib/asn1/test/testSetTag.erl
+++ b/lib/asn1/test/testSetTag.erl
@@ -34,24 +34,24 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('SetTag', #'SetTag'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SetTagImp', #'SetTagImp'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SetTagExp', #'SetTagExp'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SetTagX', #'SetTagX'{xnt=#'XSetNT'{os="kalle",bool=true},
- ximp=#'XSetImp'{os="kalle",bool=true},
- xexp=#'XSetExp'{os="kalle",bool=true}}),
- roundtrip('SetTagImpX', #'SetTagImpX'{xnt=#'XSetNT'{os="kalle",bool=true},
- ximp=#'XSetImp'{os="kalle",bool=true},
- xexp=#'XSetExp'{os="kalle",bool=true}}),
- roundtrip('SetTagExpX', #'SetTagExpX'{xnt=#'XSetNT'{os="kalle",bool=true},
- ximp=#'XSetImp'{os="kalle",bool=true},
- xexp=#'XSetExp'{os="kalle",bool=true}}),
+ roundtrip('SetTag', #'SetTag'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagImp', #'SetTagImp'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagExp', #'SetTagExp'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagX', #'SetTagX'{xnt=#'XSetNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSetImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSetExp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagImpX', #'SetTagImpX'{xnt=#'XSetNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSetImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSetExp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagExpX', #'SetTagExpX'{xnt=#'XSetNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSetImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSetExp'{os = <<"kalle">>,bool=true}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetTypeRefCho.erl b/lib/asn1/test/testSetTypeRefCho.erl
index 8d62f45bfa..97bbd557e0 100644
--- a/lib/asn1/test/testSetTypeRefCho.erl
+++ b/lib/asn1/test/testSetTypeRefCho.erl
@@ -29,10 +29,10 @@
main(_Rules) ->
roundtrip('SetTRcho',
- #'SetTRcho'{'setCho' = {choOs,"A string 1"},
- 'setChoE' = {choOs,"A string 3"},
- 'setCho-E' = {choOs,"A string 7"},
- 'setChoE-E' = {choOs,"A string 9"}}),
+ #'SetTRcho'{'setCho' = {choOs,<<"A string 1">>},
+ 'setChoE' = {choOs,<<"A string 3">>},
+ 'setCho-E' = {choOs,<<"A string 7">>},
+ 'setChoE-E' = {choOs,<<"A string 9">>}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetTypeRefPrim.erl b/lib/asn1/test/testSetTypeRefPrim.erl
index cc2e157e68..d441fb789d 100644
--- a/lib/asn1/test/testSetTypeRefPrim.erl
+++ b/lib/asn1/test/testSetTypeRefPrim.erl
@@ -28,15 +28,15 @@
main(_Rules) ->
roundtrip('SetTR',
- #'SetTR'{'octStr' = "A string 1",
- 'octStrI' = "A string 2",
- 'octStrE' = "A string 3",
- 'octStr-I' = "A string 4",
- 'octStrI-I' = "A string 5",
- 'octStrE-I' = "A string 6",
- 'octStr-E' = "A string 7",
- 'octStrI-E' = "A string 8",
- 'octStrE-E' = "A string 9"}),
+ #'SetTR'{'octStr' = <<"A string 1">>,
+ 'octStrI' = <<"A string 2">>,
+ 'octStrE' = <<"A string 3">>,
+ 'octStr-I' = <<"A string 4">>,
+ 'octStrI-I' = <<"A string 5">>,
+ 'octStrE-I' = <<"A string 6">>,
+ 'octStr-E' = <<"A string 7">>,
+ 'octStrI-E' = <<"A string 8">>,
+ 'octStrE-E' = <<"A string 9">>}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetTypeRefSeq.erl b/lib/asn1/test/testSetTypeRefSeq.erl
index 17af5c2922..a2b5f5745e 100644
--- a/lib/asn1/test/testSetTypeRefSeq.erl
+++ b/lib/asn1/test/testSetTypeRefSeq.erl
@@ -30,23 +30,23 @@
main(_Rules) ->
roundtrip('SetTRseq',
- #'SetTRseq'{'setSeq' = #'SetSeq'{seqOs = "A1",
+ #'SetTRseq'{'setSeq' = #'SetSeq'{seqOs = <<"A1">>,
seqInt = 2},
- 'setSeqI' = #'SetSeq'{seqOs = "A2",
+ 'setSeqI' = #'SetSeq'{seqOs = <<"A2">>,
seqInt = 2},
- 'setSeqE' = #'SetSeq'{seqOs = "A3",
+ 'setSeqE' = #'SetSeq'{seqOs = <<"A3">>,
seqInt = 2},
- 'setSeq-I' = #'SetSeqImp'{seqOs = "A4",
+ 'setSeq-I' = #'SetSeqImp'{seqOs = <<"A4">>,
seqInt = 2},
- 'setSeqI-I' = #'SetSeqImp'{seqOs = "A5",
+ 'setSeqI-I' = #'SetSeqImp'{seqOs = <<"A5">>,
seqInt = 2},
- 'setSeqE-I' = #'SetSeqImp'{seqOs = "A6",
+ 'setSeqE-I' = #'SetSeqImp'{seqOs = <<"A6">>,
seqInt = 2},
- 'setSeq-E' = #'SetSeqExp'{seqOs = "A7",
+ 'setSeq-E' = #'SetSeqExp'{seqOs = <<"A7">>,
seqInt = 2},
- 'setSeqI-E' = #'SetSeqExp'{seqOs = "A8",
+ 'setSeqI-E' = #'SetSeqExp'{seqOs = <<"A8">>,
seqInt = 2},
- 'setSeqE-E' = #'SetSeqExp'{seqOs = "A9",
+ 'setSeqE-E' = #'SetSeqExp'{seqOs = <<"A9">>,
seqInt = 2}}),
ok.
diff --git a/lib/asn1/test/testSetTypeRefSet.erl b/lib/asn1/test/testSetTypeRefSet.erl
index 8786e0fb4d..80a6be58c9 100644
--- a/lib/asn1/test/testSetTypeRefSet.erl
+++ b/lib/asn1/test/testSetTypeRefSet.erl
@@ -71,15 +71,15 @@ main(_Rules) ->
setS2=#'SetSTag_setS2'{b2=true,i2=22},
setS3=#'SetSTag_setS3'{b3=true,i3=33}}),
roundtrip('SetTRset',
- #'SetTRset'{setSet=#'SetSet'{setInt=2,setOs="A1"},
- setSetI=#'SetSet'{setInt=2,setOs="A2"},
- setSetE=#'SetSet'{setInt=2,setOs="A3"},
- 'setSet-I'=#'SetSetImp'{setInt=2,setOs="A4"},
- 'setSetI-I'=#'SetSetImp'{setInt=2,setOs="A5"},
- 'setSetE-I'=#'SetSetImp'{setInt=2,setOs="A6"},
- 'setSet-E'=#'SetSetExp'{setInt=2,setOs="A7"},
- 'setSetI-E'=#'SetSetExp'{setInt=2,setOs="A8"},
- 'setSetE-E'=#'SetSetExp'{setInt=2,setOs="A9"}}),
+ #'SetTRset'{setSet=#'SetSet'{setInt=2,setOs = <<"A1">>},
+ setSetI=#'SetSet'{setInt=2,setOs = <<"A2">>},
+ setSetE=#'SetSet'{setInt=2,setOs = <<"A3">>},
+ 'setSet-I'=#'SetSetImp'{setInt=2,setOs = <<"A4">>},
+ 'setSetI-I'=#'SetSetImp'{setInt=2,setOs = <<"A5">>},
+ 'setSetE-I'=#'SetSetImp'{setInt=2,setOs = <<"A6">>},
+ 'setSet-E'=#'SetSetExp'{setInt=2,setOs = <<"A7">>},
+ 'setSetI-E'=#'SetSetExp'{setInt=2,setOs = <<"A8">>},
+ 'setSetE-E'=#'SetSetExp'{setInt=2,setOs = <<"A9">>}}),
ok.
diff --git a/lib/asn1/test/testTimer.erl b/lib/asn1/test/testTimer.erl
index 0f02bab6e0..89bc2b463d 100644
--- a/lib/asn1/test/testTimer.erl
+++ b/lib/asn1/test/testTimer.erl
@@ -18,163 +18,141 @@
%%
%%
-module(testTimer).
--export([go/2]).
+-export([go/0]).
-include_lib("test_server/include/test_server.hrl").
-define(times, 5000).
val() ->
- _Value = {'H323-UserInformation',{'H323-UU-PDU',
- {callProceeding,
- {'CallProceeding-UUIE',
- {0,8,222},
- {'EndpointType',
- {'NonStandardParameter',
- {object,{0,9,237}},
- "O"},
- {'VendorIdentifier',
- {'H221NonStandard',62,63,16282},
- "OC",
- "OC"},
- {'GatekeeperInfo',
- {'NonStandardParameter',
- {object,{0,10,260}},
- "O"}},
- {'GatewayInfo',
- [{h320,
- {'H320Caps',
- {'NonStandardParameter',
- {object,{0,11,282}},
- "O"},
- [{'DataRate',
- {'NonStandardParameter',
- {object,
- {0,11,295}},
- "O"},
- 1290470518,
- 78}],
- [{'SupportedPrefix',
- {'NonStandardParameter',
- {object,
- {0,12,312}},
- "O"},
- {'h323-ID',"BM"}}]}}],
- {'NonStandardParameter',
- {object,{0,13,326}},
- "O"}},
- {'McuInfo',
- {'NonStandardParameter',
- {object,{1,13,340,340}},
- "OC"}},
- {'TerminalInfo',
- {'NonStandardParameter',
- {object,{1,14,353,354}},
- "OC"}},
- true,
- true},
- {ipxAddress,
- {'TransportAddress_ipxAddress',
- "OCTET ",
- "OCTE",
- "OC"}},
- {'CallIdentifier',"OCTET STRINGOCTE"},
- {noSecurity,'NULL'},
- [{'ClearToken',
- 1667517741,
- "BM",
- {'DHset',[1],[1],[1]},
- "OCTET STR",
- -26430296,
- {'TypedCertificate',
- {1,16,405,406},
- "OC"},
- "BMP",
- {'NonStandardParameter',
- {1,16,414,415},
- "OC"}},
- {'ClearToken',
- 1817656756,
- "BMP",
- {'DHset',[1],[1],[1]},
- "OCTET STRI",
- -16356110,
- {'TypedCertificate',
- {1,17,442,443},
- "OC"},
- "BMP",
- {'NonStandardParameter',
- {1,18,452,452},
- "OC"}}],
- [{cryptoGKPwdEncr,
- {'CryptoH323Token_cryptoGKPwdEncr',
- {1,18,467,467},
- {'Params',-7477016,"OCTET ST"},
- "OC"}},
- {cryptoGKPwdEncr,
- {'CryptoH323Token_cryptoGKPwdEncr',
- {1,19,486,486},
- {'Params',-2404513,"OCTET ST"},
- []}}],
- []}},
- {'NonStandardParameter',{object,{0,3,84}},[]},
- [],
- true,
- [],
- []},
- {'H323-UserInformation_user-data',24,"O"}}.
+ {'H323-UserInformation',{'H323-UU-PDU',
+ {callProceeding,
+ {'CallProceeding-UUIE',
+ {0,8,222},
+ {'EndpointType',
+ {'NonStandardParameter',
+ {object,{0,9,237}},
+ <<"O">>},
+ {'VendorIdentifier',
+ {'H221NonStandard',62,63,16282},
+ <<"OC">>,
+ <<"OC">>},
+ {'GatekeeperInfo',
+ {'NonStandardParameter',
+ {object,{0,10,260}},
+ <<"O">>}},
+ {'GatewayInfo',
+ [{h320,
+ {'H320Caps',
+ {'NonStandardParameter',
+ {object,{0,11,282}},
+ <<"O">>},
+ [{'DataRate',
+ {'NonStandardParameter',
+ {object,
+ {0,11,295}},
+ <<"O">>},
+ 1290470518,
+ 78}],
+ [{'SupportedPrefix',
+ {'NonStandardParameter',
+ {object,
+ {0,12,312}},
+ <<"O">>},
+ {'h323-ID',"BM"}}]}}],
+ {'NonStandardParameter',
+ {object,{0,13,326}},
+ <<"O">>}},
+ {'McuInfo',
+ {'NonStandardParameter',
+ {object,{1,13,340,340}},
+ <<"OC">>}},
+ {'TerminalInfo',
+ {'NonStandardParameter',
+ {object,{1,14,353,354}},
+ <<"OC">>}},
+ true,
+ true},
+ {ipxAddress,
+ {'TransportAddress_ipxAddress',
+ <<"OCTET ">>,
+ <<"OCTE">>,
+ <<"OC">>}},
+ {'CallIdentifier',<<"OCTET STRINGOCTE">>},
+ {noSecurity,'NULL'},
+ [{'ClearToken',
+ 1667517741,
+ "BM",
+ {'DHset',<<1:1>>,<<1:1>>,<<1:1>>},
+ <<"OCTET STR">>,
+ -26430296,
+ {'TypedCertificate',
+ {1,16,405,406},
+ <<"OC">>},
+ "BMP",
+ {'NonStandardParameter',
+ {1,16,414,415},
+ <<"OC">>}},
+ {'ClearToken',
+ 1817656756,
+ "BMP",
+ {'DHset',<<1:1>>,<<1:1>>,<<1:1>>},
+ <<"OCTET STRI">>,
+ -16356110,
+ {'TypedCertificate',
+ {1,17,442,443},
+ <<"OC">>},
+ "BMP",
+ {'NonStandardParameter',
+ {1,18,452,452},
+ <<"OC">>}}],
+ [{cryptoGKPwdEncr,
+ {'CryptoH323Token_cryptoGKPwdEncr',
+ {1,18,467,467},
+ {'Params',-7477016,<<"OCTET ST">>},
+ <<"OC">>}},
+ {cryptoGKPwdEncr,
+ {'CryptoH323Token_cryptoGKPwdEncr',
+ {1,19,486,486},
+ {'Params',-2404513,<<"OCTET ST">>},
+ <<>>}}],
+ []}},
+ {'NonStandardParameter',{object,{0,3,84}},<<>>},
+ [],
+ true,
+ [],
+ []},
+ {'H323-UserInformation_user-data',24,<<"O">>}}.
-go(Config, _Enc) ->
- ?line true = code:add_patha(?config(priv_dir,Config)),
-
+go() ->
Module = 'H323-MESSAGES',
Type = 'H323-UserInformation',
Value = val(),
- {ok,Bytes} = asn1rt:encode(Module,Type,Value),
+ Bytes = Module:encode(Type, Value),
+ Value = Module:decode(Type, Bytes),
- CompileOptions = compile_options(),
-
{ValWr,done} = timer:tc(fun() -> encode(?times, Module, Type, Value) end),
- ?line io:format("ASN1 encode ~p: ~p micro~n", [CompileOptions, ValWr / ?times]),
+ io:format("ASN.1 encoding: ~p micro~n", [ValWr / ?times]),
done = decode(2, Module, Type, Bytes),
{ValRead,done} = timer:tc(fun() -> decode(?times, Module, Type, Bytes) end),
- ?line io:format("ASN1 decode ~p: ~p micro~n", [CompileOptions, ValRead /?times]),
-
+ io:format("ASN.1 decoding: ~p micro~n", [ValRead /?times]),
- ?line Comment = "encode: "++integer_to_list(round(ValWr/?times))++
- " micro, decode: "++integer_to_list(round(ValRead /?times))++
- " micro. " ++ CompileOptions,
+ Comment = "encode: "++integer_to_list(round(ValWr/?times)) ++
+ " micro, decode: "++integer_to_list(round(ValRead /?times)) ++
+ " micro. [" ++ atom_to_list(Module:encoding_rule()) ++ "]",
{comment,Comment}.
encode(0, _Module,_Type,_Value) ->
done;
encode(N, Module,Type,Value) ->
- ?line {ok,B} = asn1rt:encode(Module,Type,Value),
- _B2 = if
- is_list(B) -> list_to_binary(B);
- true -> B
- end,
- encode(N-1, Module,Type,Value).
+ Module:encode(Type, Value),
+ encode(N-1, Module, Type, Value).
decode(0, _Module, _Type, _Value) ->
done;
decode(N, Module, Type, Value) ->
- {ok,_B} = asn1rt:decode(Module, Type, Value),
+ Module:decode(Type, Value),
decode(N-1, Module, Type, Value).
-
-compile_options() ->
- {ok,Info} = asn1rt:info('H323-MESSAGES'),
- case lists:keyfind(options, 1, Info) of
- {_,Opts0} ->
- Opts1 = [X || X <- Opts0,
- (X =:= ber orelse
- X =:= per orelse
- X =:= uper)],
- lists:flatten(io_lib:format("~p", [Opts1]));
- _ ->
- "[]"
- end.
-
diff --git a/lib/asn1/test/testTypeValueNotation.erl b/lib/asn1/test/testTypeValueNotation.erl
index b46d7177f5..2b5f3f74c1 100644
--- a/lib/asn1/test/testTypeValueNotation.erl
+++ b/lib/asn1/test/testTypeValueNotation.erl
@@ -24,7 +24,7 @@
-record('Seq', {octstr, int, bool, enum, bitstr, null, oid, vstr}).
main(_Rule, _Option) ->
- Value = #'Seq'{octstr = [1, 2, 3, 4],
+ Value = #'Seq'{octstr = <<1,2,3,4>>,
int = 12,
bool = true,
enum = a,
diff --git a/lib/common_test/doc/src/run_test_chapter.xml b/lib/common_test/doc/src/run_test_chapter.xml
index 44fe73d24f..a4a77ee400 100644
--- a/lib/common_test/doc/src/run_test_chapter.xml
+++ b/lib/common_test/doc/src/run_test_chapter.xml
@@ -215,7 +215,7 @@
<pre>-exit_status ignore_config</pre>
<p>For more information about the <c>ct_run</c> program, see the
- <seealso marker="ct_run#top">Reference Manual</seealso> and the
+ <seealso marker="ct_run">Reference Manual</seealso> and the
<seealso marker="install_chapter#general">Installation</seealso> chapter.
</p>
</section>
diff --git a/lib/crypto/src/Makefile b/lib/crypto/src/Makefile
index eabfd676c5..c185c159e5 100644
--- a/lib/crypto/src/Makefile
+++ b/lib/crypto/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2013. All Rights Reserved.
+# Copyright Ericsson AB 1999-2014. 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
@@ -35,11 +35,8 @@ RELSYSDIR = $(RELEASE_PATH)/lib/crypto-$(VSN)
# ----------------------------------------------------
MODULES= \
- crypto_app \
crypto \
- crypto_ec_curves \
- crypto_server \
- crypto_sup
+ crypto_ec_curves
HRL_FILES=
diff --git a/lib/crypto/src/crypto.app.src b/lib/crypto/src/crypto.app.src
index 161ea7c9fe..d3084ff336 100644
--- a/lib/crypto/src/crypto.app.src
+++ b/lib/crypto/src/crypto.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2014. 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
@@ -17,16 +17,12 @@
%% %CopyrightEnd%
%%
{application, crypto,
- [{description, "CRYPTO version 2"},
+ [{description, "CRYPTO"},
{vsn, "%VSN%"},
{modules, [crypto,
- crypto_ec_curves,
- crypto_app,
- crypto_sup,
- crypto_server]},
- {registered, [crypto_sup, crypto_server]},
+ crypto_ec_curves]},
+ {registered, []},
{applications, [kernel, stdlib]},
- {env, []},
- {mod, {crypto_app, []}}]}.
+ {env, []}]}.
diff --git a/lib/crypto/src/crypto_app.erl b/lib/crypto/src/crypto_app.erl
deleted file mode 100644
index f1ea1406e4..0000000000
--- a/lib/crypto/src/crypto_app.erl
+++ /dev/null
@@ -1,39 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-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 : Application master for CRYPTO.
-
--module(crypto_app).
-
--behaviour(application).
-
--export([start/2, stop/1]).
-
-%% start/2(Type, StartArgs) -> {ok, Pid} | {ok, Pid, State} |
-%% {error, Reason}
-%%
-start(_Type, _StartArgs) ->
- crypto_sup:start_link().
-
-%% stop(State) -> void()
-%%
-stop(_State) ->
- ok.
-
-
diff --git a/lib/crypto/src/crypto_server.erl b/lib/crypto/src/crypto_server.erl
deleted file mode 100644
index 89650a9f06..0000000000
--- a/lib/crypto/src/crypto_server.erl
+++ /dev/null
@@ -1,68 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-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%
-%%
-
-%% Purpose: Provide cryptographic algorithms.
-
--module(crypto_server).
-
--behaviour(gen_server).
-
--export([start_link/0]).
-
-%% Internal exports, call-back functions.
--export([init/1,handle_call/3,handle_cast/2,handle_info/2,code_change/3,
- terminate/2]).
-
-
-%%% --------------------------------------------------------
-%%% Interface Functions.
-%%% --------------------------------------------------------
-
-start_link() ->
- gen_server:start_link({local, crypto_server}, crypto_server, [], []).
-
-init([]) ->
- {ok,[]}.
-
-
-
-%%% --------------------------------------------------------
-%%% The call-back functions.
-%%% --------------------------------------------------------
-
-handle_call(_, _, State) ->
- {noreply, State}.
-
-handle_cast(_, State) ->
- {noreply, State}.
-
-handle_info(_, State) ->
- {noreply, State}.
-
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-terminate(_Reason, _State) ->
- [].
-
-
-
-
-
-
diff --git a/lib/crypto/src/crypto_sup.erl b/lib/crypto/src/crypto_sup.erl
deleted file mode 100644
index 8ef58777ab..0000000000
--- a/lib/crypto/src/crypto_sup.erl
+++ /dev/null
@@ -1,39 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-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: Main supervisor in CRYPTO application.
-
--module(crypto_sup).
-
--behaviour(supervisor).
-
--export([start_link/0, init/1]).
-
-start_link() ->
- supervisor:start_link({local, crypto_sup}, crypto_sup, []).
-
-
-%% init([])
-%% Returns: {ok, {SupFlags, [ChildSpec]}}
-%%
-init([]) ->
- Child = {crypto_server, {crypto_server, start_link, []},
- permanent, 2000, worker, [crypto_server]},
- {ok, {{one_for_all, 10, 3600}, [Child]}}.
-
diff --git a/lib/debugger/priv/erlang_bug.png b/lib/debugger/priv/erlang_bug.png
index 87c8279654..200f531484 100644
--- a/lib/debugger/priv/erlang_bug.png
+++ b/lib/debugger/priv/erlang_bug.png
Binary files differ
diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl
index 35156afff2..bb7e39dfda 100644
--- a/lib/dialyzer/src/dialyzer.erl
+++ b/lib/dialyzer/src/dialyzer.erl
@@ -423,6 +423,9 @@ message_to_string({call_without_opaque, [M, F, Args, ExpectedTriples]}) ->
message_to_string({opaque_eq, [Type, _Op, OpaqueType]}) ->
io_lib:format("Attempt to test for equality between a term of type ~s"
" and a term of opaque type ~s\n", [Type, OpaqueType]);
+message_to_string({opaque_guard, [Arg1, Infix, Arg2, ArgNs]}) ->
+ io_lib:format("Guard test ~s ~s ~s contains ~s\n",
+ [Arg1, Infix, Arg2, form_positions(ArgNs)]);
message_to_string({opaque_guard, [Guard, Args]}) ->
io_lib:format("Guard test ~w~s breaks the opaqueness of its argument\n",
[Guard, Args]);
@@ -435,8 +438,16 @@ message_to_string({opaque_match, [Pat, OpaqueType, OpaqueTerm]}) ->
message_to_string({opaque_neq, [Type, _Op, OpaqueType]}) ->
io_lib:format("Attempt to test for inequality between a term of type ~s"
" and a term of opaque type ~s\n", [Type, OpaqueType]);
-message_to_string({opaque_type_test, [Fun, Opaque]}) ->
- io_lib:format("The type test ~s(~s) breaks the opaqueness of the term ~s\n", [Fun, Opaque, Opaque]);
+message_to_string({opaque_type_test, [Fun, Args, Arg, ArgType]}) ->
+ io_lib:format("The type test ~s~s breaks the opaqueness of the term ~s~s\n",
+ [Fun, Args, Arg, ArgType]);
+message_to_string({opaque_size, [SizeType, Size]}) ->
+ io_lib:format("The size ~s breaks the opaqueness of ~s\n",
+ [SizeType, Size]);
+message_to_string({opaque_call, [M, F, Args, Culprit, OpaqueType]}) ->
+ io_lib:format("The call ~s:~s~s breaks the opaqueness of the term ~s :: ~s\n",
+ [M, F, Args, Culprit, OpaqueType]);
+
%%----- Warnings for concurrency errors --------------------
message_to_string({race_condition, [M, F, Args, Reason]}) ->
io_lib:format("The call ~w:~w~s ~s\n", [M, F, Args, Reason]);
diff --git a/lib/dialyzer/src/dialyzer_cl.erl b/lib/dialyzer/src/dialyzer_cl.erl
index 365c0b36d4..a7be6e0d05 100644
--- a/lib/dialyzer/src/dialyzer_cl.erl
+++ b/lib/dialyzer/src/dialyzer_cl.erl
@@ -2,7 +2,7 @@
%%-------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2014. 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
@@ -613,7 +613,7 @@ cl_loop(State, LogCache) ->
-spec failed_anal_msg(string(), [_]) -> nonempty_string().
failed_anal_msg(Reason, LogCache) ->
- Msg = "Analysis failed with error:\n" ++ Reason ++ "\n",
+ Msg = "Analysis failed with error:\n" ++ lists:flatten(Reason) ++ "\n",
case LogCache =:= [] of
true -> Msg;
false ->
@@ -640,7 +640,7 @@ store_unknown_behaviours(#cl_state{unknown_behaviours = Behs} = St, Beh) ->
-spec cl_error(string()) -> no_return().
cl_error(Msg) ->
- throw({dialyzer_error, Msg}).
+ throw({dialyzer_error, lists:flatten(Msg)}).
-spec cl_error(#cl_state{}, string()) -> no_return().
@@ -650,7 +650,7 @@ cl_error(State, Msg) ->
Outfile -> io:format(Outfile, "\n~s\n", [Msg])
end,
maybe_close_output_file(State),
- throw({dialyzer_error, Msg}).
+ throw({dialyzer_error, lists:flatten(Msg)}).
return_value(State = #cl_state{erlang_mode = ErlangMode,
mod_deps = ModDeps,
diff --git a/lib/dialyzer/src/dialyzer_contracts.erl b/lib/dialyzer/src/dialyzer_contracts.erl
index 332a326b0d..3467ab4e65 100644
--- a/lib/dialyzer/src/dialyzer_contracts.erl
+++ b/lib/dialyzer/src/dialyzer_contracts.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2014. 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
@@ -21,10 +21,10 @@
-module(dialyzer_contracts).
-export([check_contract/2,
- check_contracts/3,
+ check_contracts/4,
contracts_without_fun/3,
contract_to_string/1,
- get_invalid_contract_warnings/3,
+ get_invalid_contract_warnings/4,
get_contract_args/1,
get_contract_return/1,
get_contract_return/2,
@@ -160,17 +160,22 @@ process_contract_remote_types(CodeServer) ->
dialyzer_codeserver:finalize_contracts(NewContractDict, NewCallbackDict,
CodeServer).
+-type opaques() :: [erl_types:erl_type()] | 'universe'.
+-type opaques_fun() :: fun((module()) -> opaques()).
+
-spec check_contracts([{mfa(), file_contract()}],
- dialyzer_callgraph:callgraph(), dict()) -> plt_contracts().
+ dialyzer_callgraph:callgraph(), dict(),
+ opaques_fun()) -> plt_contracts().
-check_contracts(Contracts, Callgraph, FunTypes) ->
+check_contracts(Contracts, Callgraph, FunTypes, FindOpaques) ->
FoldFun =
fun(Label, Type, NewContracts) ->
case dialyzer_callgraph:lookup_name(Label, Callgraph) of
{ok, {M,F,A} = MFA} ->
case orddict:find(MFA, Contracts) of
{ok, {_FileLine, Contract}} ->
- case check_contract(Contract, Type) of
+ Opaques = FindOpaques(M),
+ case check_contract(Contract, Type, Opaques) of
ok ->
case erl_bif_types:is_known(M, F, A) of
true ->
@@ -192,7 +197,10 @@ check_contracts(Contracts, Callgraph, FunTypes) ->
%% Checks all components of a contract
-spec check_contract(#contract{}, erl_types:erl_type()) -> 'ok' | {'error', term()}.
-check_contract(#contract{contracts = Contracts}, SuccType) ->
+check_contract(Contract, SuccType) ->
+ check_contract(Contract, SuccType, 'universe').
+
+check_contract(#contract{contracts = Contracts}, SuccType, Opaques) ->
try
Contracts1 = [{Contract, insert_constraints(Constraints, dict:new())}
|| {Contract, Constraints} <- Contracts],
@@ -203,9 +211,9 @@ check_contract(#contract{contracts = Contracts}, SuccType) ->
error ->
{error, {overlapping_contract, []}};
ok ->
- InfList = [erl_types:t_inf(Contract, SuccType, opaque)
+ InfList = [erl_types:t_inf(Contract, SuccType, Opaques)
|| Contract <- Contracts2],
- case check_contract_inf_list(InfList, SuccType) of
+ case check_contract_inf_list(InfList, SuccType, Opaques) of
{error, _} = Invalid -> Invalid;
ok -> check_extraneous(Contracts2, SuccType)
end
@@ -217,7 +225,7 @@ check_contract(#contract{contracts = Contracts}, SuccType) ->
check_domains([_]) -> ok;
check_domains([Dom|Doms]) ->
Fun = fun(D) ->
- erl_types:any_none_or_unit(erl_types:t_inf_lists(Dom, D, opaque))
+ erl_types:any_none_or_unit(erl_types:t_inf_lists(Dom, D))
end,
case lists:all(Fun, Doms) of
true -> check_domains(Doms);
@@ -227,23 +235,23 @@ check_domains([Dom|Doms]) ->
%% Allow a contract if one of the overloaded contracts is possible.
%% We used to be more strict, e.g., all overloaded contracts had to be
%% possible.
-check_contract_inf_list([FunType|Left], SuccType) ->
+check_contract_inf_list([FunType|Left], SuccType, Opaques) ->
FunArgs = erl_types:t_fun_args(FunType),
case lists:any(fun erl_types:t_is_none_or_unit/1, FunArgs) of
- true -> check_contract_inf_list(Left, SuccType);
+ true -> check_contract_inf_list(Left, SuccType, Opaques);
false ->
STRange = erl_types:t_fun_range(SuccType),
case erl_types:t_is_none_or_unit(STRange) of
true -> ok;
false ->
Range = erl_types:t_fun_range(FunType),
- case erl_types:t_is_none(erl_types:t_inf(STRange, Range, opaque)) of
- true -> check_contract_inf_list(Left, SuccType);
+ case erl_types:t_is_none(erl_types:t_inf(STRange, Range)) of
+ true -> check_contract_inf_list(Left, SuccType, Opaques);
false -> ok
end
end
end;
-check_contract_inf_list([], _SuccType) ->
+check_contract_inf_list([], _SuccType, _Opaques) ->
{error, invalid_contract}.
check_extraneous([], _SuccType) -> ok;
@@ -259,7 +267,7 @@ check_extraneous_1(Contract, SuccType) ->
STRng = erl_types:t_fun_range(SuccType),
?debug("CR = ~p\nSR = ~p\n", [CRngs, STRng]),
case [CR || CR <- CRngs,
- erl_types:t_is_none(erl_types:t_inf(CR, STRng, opaque))] of
+ erl_types:t_is_none(erl_types:t_inf(CR, STRng))] of
[] ->
CRngList = list_part(CRng),
STRngList = list_part(STRng),
@@ -268,7 +276,7 @@ check_extraneous_1(Contract, SuccType) ->
true ->
CRngElements = erl_types:t_list_elements(CRngList),
STRngElements = erl_types:t_list_elements(STRngList),
- Inf = erl_types:t_inf(CRngElements, STRngElements, opaque),
+ Inf = erl_types:t_inf(CRngElements, STRngElements),
case erl_types:t_is_none(Inf) of
true -> {error, invalid_contract};
false -> ok
@@ -278,7 +286,7 @@ check_extraneous_1(Contract, SuccType) ->
end.
list_part(Type) ->
- erl_types:t_inf(erl_types:t_list(), Type, opaque).
+ erl_types:t_inf(erl_types:t_list(), Type).
is_not_nil_list(Type) ->
erl_types:t_is_list(Type) andalso not erl_types:t_is_nil(Type).
@@ -374,7 +382,7 @@ insert_constraints([], Dict) -> Dict.
store_tmp_contract(MFA, FileLine, TypeSpec, SpecDict, RecordsDict) ->
%% io:format("contract from form: ~p\n", [TypeSpec]),
TmpContract = contract_from_form(TypeSpec, RecordsDict, FileLine),
- %% io:format("contract: ~p\n", [Contract]),
+ %% io:format("contract: ~p\n", [TmpContract]),
dict:store(MFA, {FileLine, TmpContract}, SpecDict).
contract_from_form(Forms, RecDict, FileLine) ->
@@ -494,30 +502,35 @@ general_domain([], AccSig) ->
AccSig1 = erl_types:subst_all_vars_to_any(AccSig),
erl_types:t_fun_args(AccSig1).
--spec get_invalid_contract_warnings([module()], dialyzer_codeserver:codeserver(), dialyzer_plt:plt()) -> [dial_warning()].
+-spec get_invalid_contract_warnings([module()],
+ dialyzer_codeserver:codeserver(),
+ dialyzer_plt:plt(),
+ opaques_fun()) -> [dial_warning()].
-get_invalid_contract_warnings(Modules, CodeServer, Plt) ->
- get_invalid_contract_warnings_modules(Modules, CodeServer, Plt, []).
+get_invalid_contract_warnings(Modules, CodeServer, Plt, FindOpaques) ->
+ get_invalid_contract_warnings_modules(Modules, CodeServer, Plt, FindOpaques, []).
-get_invalid_contract_warnings_modules([Mod|Mods], CodeServer, Plt, Acc) ->
+get_invalid_contract_warnings_modules([Mod|Mods], CodeServer, Plt, FindOpaques, Acc) ->
Contracts1 = dialyzer_codeserver:lookup_mod_contracts(Mod, CodeServer),
Contracts2 = dict:to_list(Contracts1),
Records = dialyzer_codeserver:lookup_mod_records(Mod, CodeServer),
- NewAcc = get_invalid_contract_warnings_funs(Contracts2, Plt, Records, Acc),
- get_invalid_contract_warnings_modules(Mods, CodeServer, Plt, NewAcc);
-get_invalid_contract_warnings_modules([], _CodeServer, _Plt, Acc) ->
+ NewAcc = get_invalid_contract_warnings_funs(Contracts2, Plt, Records, FindOpaques, Acc),
+ get_invalid_contract_warnings_modules(Mods, CodeServer, Plt, FindOpaques, NewAcc);
+get_invalid_contract_warnings_modules([], _CodeServer, _Plt, _FindOpaques, Acc) ->
Acc.
get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract}}|Left],
- Plt, RecDict, Acc) ->
+ Plt, RecDict, FindOpaques, Acc) ->
case dialyzer_plt:lookup(Plt, MFA) of
none ->
%% This must be a contract for a non-available function. Just accept it.
- get_invalid_contract_warnings_funs(Left, Plt, RecDict, Acc);
+ get_invalid_contract_warnings_funs(Left, Plt, RecDict, FindOpaques, Acc);
{value, {Ret, Args}} ->
Sig = erl_types:t_fun(Args, Ret),
+ {M, _F, _A} = MFA,
+ Opaques = FindOpaques(M),
NewAcc =
- case check_contract(Contract, Sig) of
+ case check_contract(Contract, Sig, Opaques) of
{error, invalid_contract} ->
[invalid_contract_warning(MFA, FileLine, Sig, RecDict)|Acc];
{error, {overlapping_contract, []}} ->
@@ -551,7 +564,7 @@ get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract}}|Left],
BifArgs = erl_bif_types:arg_types(M, F, A),
BifRet = erl_bif_types:type(M, F, A),
BifSig = erl_types:t_fun(BifArgs, BifRet),
- case check_contract(Contract, BifSig) of
+ case check_contract(Contract, BifSig, Opaques) of
{error, _} ->
[invalid_contract_warning(MFA, FileLine, BifSig, RecDict)
|Acc];
@@ -564,9 +577,9 @@ get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract}}|Left],
RecDict, Acc)
end
end,
- get_invalid_contract_warnings_funs(Left, Plt, RecDict, NewAcc)
+ get_invalid_contract_warnings_funs(Left, Plt, RecDict, FindOpaques, NewAcc)
end;
-get_invalid_contract_warnings_funs([], _Plt, _RecDict, Acc) ->
+get_invalid_contract_warnings_funs([], _Plt, _RecDict, _FindOpaques, Acc) ->
Acc.
invalid_contract_warning({M, F, A}, FileLine, SuccType, RecDict) ->
@@ -601,16 +614,23 @@ picky_contract_check(CSig0, Sig0, MFA, FileLine, Contract, RecDict, Acc) ->
end.
extra_contract_warning({M, F, A}, FileLine, Contract, CSig, Sig, RecDict) ->
- SigString = lists:flatten(dialyzer_utils:format_sig(Sig, RecDict)),
- ContractString0 = lists:flatten(dialyzer_utils:format_sig(CSig, RecDict)),
+ %% We do not want to depend upon erl_types:t_to_string() possibly
+ %% hiding the contents of opaque types.
+ SigUnopaque = erl_types:t_unopaque(Sig),
+ CSigUnopaque = erl_types:t_unopaque(CSig),
+ SigString0 =
+ lists:flatten(dialyzer_utils:format_sig(SigUnopaque, RecDict)),
+ ContractString0 =
+ lists:flatten(dialyzer_utils:format_sig(CSigUnopaque, RecDict)),
%% The only difference is in record fields containing 'undefined' or not.
- IsUndefRecordFieldsRelated = SigString =:= ContractString0,
+ IsUndefRecordFieldsRelated = SigString0 =:= ContractString0,
{IsRemoteTypesRelated, SubtypeRelation} =
is_remote_types_related(Contract, CSig, Sig, RecDict),
case IsUndefRecordFieldsRelated orelse IsRemoteTypesRelated of
true ->
no_warning;
false ->
+ SigString = lists:flatten(dialyzer_utils:format_sig(Sig, RecDict)),
ContractString = contract_to_string(Contract),
{Tag, Msg} =
case SubtypeRelation of
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 922ccad599..3591d5be8e 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2014. 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
@@ -41,27 +41,33 @@
-include("dialyzer.hrl").
+%%-import(helper, %% 'helper' could be any module doing sanity checks...
-import(erl_types,
- [any_none/1, t_any/0, t_atom/0, t_atom/1, t_atom_vals/1,
+ [t_inf/2, t_inf/3, t_inf_lists/2, t_inf_lists/3,
+ t_inf_lists/3, t_is_equal/2, t_is_subtype/2, t_subtract/2,
+ t_sup/1, t_sup/2]).
+
+-import(erl_types,
+ [any_none/1, t_any/0, t_atom/0, t_atom/1, t_atom_vals/1, t_atom_vals/2,
t_binary/0, t_boolean/0,
t_bitstr/0, t_bitstr/2, t_bitstr_concat/1, t_bitstr_match/2,
- t_cons/0, t_cons/2, t_cons_hd/1, t_cons_tl/1, t_contains_opaque/1,
+ t_cons/0, t_cons/2, t_cons_hd/2, t_cons_tl/2,
+ t_contains_opaque/2,
t_find_opaque_mismatch/2, t_float/0, t_from_range/2, t_from_term/1,
- t_fun/0, t_fun/2, t_fun_args/1, t_fun_range/1,
- t_inf/2, t_inf/3, t_inf_lists/2, t_inf_lists/3, t_inf_lists_masked/3,
- t_integer/0, t_integers/1,
- t_is_any/1, t_is_atom/1, t_is_atom/2, t_is_boolean/1, t_is_equal/2,
- t_is_integer/1, t_is_nil/1, t_is_none/1, t_is_none_or_unit/1,
- t_is_number/1, t_is_reference/1, t_is_pid/1, t_is_port/1,
- t_is_subtype/2, t_is_unit/1,
+ t_fun/0, t_fun/2, t_fun_args/1, t_fun_args/2, t_fun_range/1,
+ t_fun_range/2, t_integer/0, t_integers/1,
+ t_is_any/1, t_is_atom/1, t_is_atom/2, t_is_any_atom/3,
+ t_is_boolean/2,
+ t_is_integer/2, t_is_nil/2, t_is_none/1, t_is_none_or_unit/1,
+ t_is_number/2, t_is_reference/2, t_is_pid/2, t_is_port/2,
+ t_is_unit/1,
t_limit/2, t_list/0, t_maybe_improper_list/0, t_module/0,
- t_none/0, t_non_neg_integer/0, t_number/0, t_number_vals/1,
- t_opaque_match_atom/2, t_opaque_match_record/2,
- t_opaque_matching_structure/2,
+ t_none/0, t_non_neg_integer/0, t_number/0, t_number_vals/2,
t_pid/0, t_port/0, t_product/1, t_reference/0,
- t_sup/1, t_sup/2, t_subtract/2, t_to_string/2, t_to_tlist/1,
- t_tuple/0, t_tuple/1, t_tuple_args/1, t_tuple_subtypes/1,
- t_unit/0, t_unopaque/1]).
+ t_to_string/2, t_to_tlist/1,
+ t_tuple/0, t_tuple/1, t_tuple_args/1, t_tuple_args/2,
+ t_tuple_subtypes/2,
+ t_unit/0, t_unopaque/2]).
%%-define(DEBUG, true).
%%-define(DEBUG_PP, true).
@@ -204,7 +210,7 @@ analyze_loop(State) ->
traverse(Tree, Map, State) ->
?debug("Handling ~p\n", [cerl:type(Tree)]),
- %%debug_pp_map(Map),
+ %% debug_pp_map(Map),
case cerl:type(Tree) of
alias ->
%% This only happens when checking for illegal record patterns
@@ -256,12 +262,7 @@ traverse(Tree, Map, State) ->
case cerl:unfold_literal(Tree) of
Tree ->
Type = literal_type(Tree),
- NewType =
- case erl_types:t_opaque_match_atom(Type, State#state.opaques) of
- [Opaque] -> Opaque;
- _ -> Type
- end,
- {State, Map, NewType};
+ {State, Map, Type};
NewTree -> traverse(NewTree, Map, State)
end;
module ->
@@ -286,8 +287,11 @@ traverse(Tree, Map, State) ->
SMA;
false ->
State2 =
- case (t_is_any(ArgType) orelse t_is_simple(ArgType)
- orelse is_call_to_send(Arg)) of
+ case
+ t_is_any(ArgType)
+ orelse t_is_simple(ArgType, State)
+ orelse is_call_to_send(Arg)
+ of
true -> % do not warn in these cases
State1;
false ->
@@ -311,15 +315,7 @@ traverse(Tree, Map, State) ->
case state__lookup_type_for_letrec(Tree, State) of
error ->
LType = lookup_type(Tree, Map),
- Opaques = State#state.opaques,
- case t_opaque_match_record(LType, Opaques) of
- [Opaque] -> {State, Map, Opaque};
- _ ->
- case t_opaque_match_atom(LType, Opaques) of
- [Opaque] -> {State, Map, Opaque};
- _ -> {State, Map, LType}
- end
- end;
+ {State, Map, LType};
{ok, Type} -> {State, Map, Type}
end;
Other ->
@@ -367,7 +363,8 @@ handle_apply(Tree, Map, State) ->
Tree, Msg),
{State3, Map2, t_none()};
false ->
- NewArgs = t_inf_lists(ArgTypes, t_fun_args(OpType1)),
+ NewArgs = t_inf_lists(ArgTypes,
+ t_fun_args(OpType1, 'universe')),
case any_none(NewArgs) of
true ->
Msg = {fun_app_args,
@@ -378,7 +375,7 @@ handle_apply(Tree, Map, State) ->
{State3, enter_type(Op, OpType1, Map2), t_none()};
false ->
Map3 = enter_type_lists(Args, NewArgs, Map2),
- Range0 = t_fun_range(OpType1),
+ Range0 = t_fun_range(OpType1, 'universe'),
Range =
case t_is_unit(Range0) of
true -> t_none();
@@ -423,83 +420,55 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
{M, F, A} = Fun,
case erl_bif_types:is_known(M, F, A) of
true ->
- IsBIF = true,
BArgs = erl_bif_types:arg_types(M, F, A),
BRange =
fun(FunArgs) ->
- ArgPos = erl_bif_types:structure_inspecting_args(M, F, A),
- NewFunArgs =
- case ArgPos =:= [] of
- true -> FunArgs;
- false -> % some positions need to be un-opaqued
- N = length(FunArgs),
- PFs = lists:zip(lists:seq(1, N), FunArgs),
- [case ordsets:is_element(P, ArgPos) of
- true -> erl_types:t_unopaque(FArg, Opaques);
- false -> FArg
- end || {P, FArg} <- PFs]
- end,
- erl_bif_types:type(M, F, A, NewFunArgs)
+ erl_bif_types:type(M, F, A, FunArgs, Opaques)
end,
{BArgs, BRange};
- false -> IsBIF = false, GenSig
+ false ->
+ GenSig
end;
- local -> IsBIF = false, GenSig
+ local -> GenSig
end,
{SigArgs, SigRange} =
- %% if there is hard-coded or contract information with opaque types,
- %% the checking for possible type violations needs to take place w.r.t.
- %% this information and not w.r.t. the structure-based success typing.
- case prefer_opaque_types(CArgs, BifArgs) of
- true -> {AnyArgs, t_any()}; % effectively forgets the success typing
- false ->
- case Sig of
- {value, {SR, SA}} -> {SA, SR};
- none -> {AnyArgs, t_any()}
- end
- end,
- ArgModeMask = [case lists:member(Arg, Opaques) of
- true -> opaque;
- false -> structured
- end || Arg <- ArgTypes],
- NewArgsSig = t_inf_lists_masked(SigArgs, ArgTypes, ArgModeMask),
- NewArgsContract = t_inf_lists_masked(CArgs, ArgTypes, ArgModeMask),
- NewArgsBif = t_inf_lists_masked(BifArgs, ArgTypes, ArgModeMask),
- NewArgTypes0 = t_inf_lists_masked(NewArgsSig, NewArgsContract, ArgModeMask),
- NewArgTypes = t_inf_lists_masked(NewArgTypes0, NewArgsBif, ArgModeMask),
- BifRet = BifRange(NewArgTypes),
- {TmpArgTypes, TmpArgsContract} =
- case (TypeOfApply =:= remote) andalso (not IsBIF) of
- true ->
- List1 = lists:zip(CArgs, NewArgTypes),
- List2 = lists:zip(CArgs, NewArgsContract),
- {[erl_types:t_unopaque_on_mismatch(T1, T2, Opaques)
- || {T1, T2} <- List1],
- [erl_types:t_unopaque_on_mismatch(T1, T2, Opaques)
- || {T1, T2} <- List2]};
- false -> {NewArgTypes, NewArgsContract}
- end,
- ContrRet = CRange(TmpArgTypes),
- RetMode =
- case t_contains_opaque(ContrRet) orelse t_contains_opaque(BifRet) of
- true -> opaque;
- false -> structured
+ case Sig of
+ {value, {SR, SA}} -> {SA, SR};
+ none -> {AnyArgs, t_any()}
end,
- RetWithoutContr = t_inf(SigRange, BifRet, RetMode),
- RetWithoutLocal = t_inf(ContrRet, RetWithoutContr, RetMode),
+
?debug("--------------------------------------------------------\n", []),
- ?debug("Fun: ~p\n", [Fun]),
- ?debug("Args: ~s\n", [erl_types:t_to_string(t_product(ArgTypes))]),
+ ?debug("Fun: ~p\n", [state__lookup_name(Fun, State)]),
+ ?debug("Module ~p\n", [State#state.module]),
+ ?debug("CArgs ~s\n", [erl_types:t_to_string(t_product(CArgs))]),
+ ?debug("ArgTypes ~s\n", [erl_types:t_to_string(t_product(ArgTypes))]),
+ ?debug("BifArgs ~p\n", [erl_types:t_to_string(t_product(BifArgs))]),
+
+ NewArgsSig = t_inf_lists(SigArgs, ArgTypes, Opaques),
+ ?debug("SigArgs ~s\n", [erl_types:t_to_string(t_product(SigArgs))]),
?debug("NewArgsSig: ~s\n", [erl_types:t_to_string(t_product(NewArgsSig))]),
+ NewArgsContract = t_inf_lists(CArgs, ArgTypes, Opaques),
?debug("NewArgsContract: ~s\n",
[erl_types:t_to_string(t_product(NewArgsContract))]),
+ NewArgsBif = t_inf_lists(BifArgs, ArgTypes, Opaques),
?debug("NewArgsBif: ~s\n", [erl_types:t_to_string(t_product(NewArgsBif))]),
- ?debug("NewArgTypes: ~s\n", [erl_types:t_to_string(t_product(NewArgTypes))]),
+ NewArgTypes0 = t_inf_lists(NewArgsSig, NewArgsContract),
+ NewArgTypes = t_inf_lists(NewArgTypes0, NewArgsBif, Opaques),
+ ?debug("NewArgTypes ~s\n", [erl_types:t_to_string(t_product(NewArgTypes))]),
+ ?debug("\n", []),
+
+ BifRet = BifRange(NewArgTypes),
+ ContrRet = CRange(NewArgTypes),
+ RetWithoutContr = t_inf(SigRange, BifRet),
+ RetWithoutLocal = t_inf(ContrRet, RetWithoutContr),
+
?debug("RetWithoutContr: ~s\n",[erl_types:t_to_string(RetWithoutContr)]),
?debug("RetWithoutLocal: ~s\n", [erl_types:t_to_string(RetWithoutLocal)]),
?debug("BifRet: ~s\n", [erl_types:t_to_string(BifRange(NewArgTypes))]),
- ?debug("ContrRet: ~s\n", [erl_types:t_to_string(CRange(TmpArgTypes))]),
- ?debug("SigRet: ~s\n", [erl_types:t_to_string(SigRange)]),
+ ?debug("SigRange: ~s\n", [erl_types:t_to_string(SigRange)]),
+ ?debug("ContrRet: ~s\n", [erl_types:t_to_string(CRange(NewArgTypes))]),
+ ?debug("LocalRet: ~s\n", [erl_types:t_to_string(LocalRet)]),
+
State1 =
case is_race_analysis_enabled(State) of
true ->
@@ -513,6 +482,9 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
FailedConj = any_none([RetWithoutLocal|NewArgTypes]),
IsFailBif = t_is_none(BifRange(BifArgs)),
IsFailSig = t_is_none(SigRange),
+ ?debug("FailedConj: ~p~n", [FailedConj]),
+ ?debug("IsFailBif: ~p~n", [IsFailBif]),
+ ?debug("IsFailSig: ~p~n", [IsFailSig]),
State2 =
case FailedConj andalso not (IsFailBif orelse IsFailSig) of
true ->
@@ -532,14 +504,14 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
false ->
FailedSig = any_none(NewArgsSig),
FailedContract =
- any_none([CRange(TmpArgsContract)|NewArgsContract]),
+ any_none([CRange(NewArgsContract)|NewArgsContract]),
FailedBif = any_none([BifRange(NewArgsBif)|NewArgsBif]),
InfSig = t_inf(t_fun(SigArgs, SigRange),
- t_fun(BifArgs, BifRange(BifArgs))),
+ t_fun(BifArgs, BifRange(BifArgs))),
FailReason =
apply_fail_reason(FailedSig, FailedBif, FailedContract),
Msg = get_apply_fail_msg(Fun, Args, ArgTypes, NewArgTypes, InfSig,
- Contr, CArgs, State1, FailReason),
+ Contr, CArgs, State1, FailReason, Opaques),
WarnType = case Msg of
{call, _} -> ?WARN_FAILING_CALL;
{apply, _} -> ?WARN_FAILING_CALL;
@@ -547,7 +519,8 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
{call_without_opaque, _} -> ?WARN_OPAQUE;
{opaque_type_test, _} -> ?WARN_OPAQUE
end,
- state__add_warning(State1, WarnType, Tree, Msg)
+ Frc = {erlang, is_record, 3} =:= state__lookup_name(Fun, State),
+ state__add_warning(State1, WarnType, Tree, Msg, Frc)
end;
false -> State1
end,
@@ -571,7 +544,7 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
TotalRet =
case t_is_none(LocalRet) andalso t_is_unit(RetWithoutLocal) of
true -> RetWithoutLocal;
- false -> t_inf(RetWithoutLocal, LocalRet, opaque)
+ false -> t_inf(RetWithoutLocal, LocalRet)
end,
NewAccRet = t_sup(AccRet, TotalRet),
?debug("NewAccRet: ~s\n", [t_to_string(NewAccRet)]),
@@ -590,7 +563,7 @@ apply_fail_reason(FailedSig, FailedBif, FailedContract) ->
end.
get_apply_fail_msg(Fun, Args, ArgTypes, NewArgTypes,
- Sig, Contract, ContrArgs, State, FailReason) ->
+ Sig, Contract, ContrArgs, State, FailReason, Opaques) ->
ArgStrings = format_args(Args, ArgTypes, State),
ContractInfo =
case Contract of
@@ -599,44 +572,52 @@ get_apply_fail_msg(Fun, Args, ArgTypes, NewArgTypes,
dialyzer_contracts:contract_to_string(C)};
none -> {false, none}
end,
- EnumArgTypes =
- case NewArgTypes of
- [] -> [];
- _ -> lists:zip(lists:seq(1, length(NewArgTypes)), NewArgTypes)
- end,
+ EnumArgTypes = lists:zip(lists:seq(1, length(NewArgTypes)), NewArgTypes),
ArgNs = [Arg || {Arg, Type} <- EnumArgTypes, t_is_none(Type)],
case state__lookup_name(Fun, State) of
- {M, F, _A} ->
- case is_opaque_type_test_problem(Fun, NewArgTypes, State) of
- true ->
- [Opaque] = NewArgTypes,
- {opaque_type_test, [atom_to_list(F), erl_types:t_to_string(Opaque)]};
- false ->
+ {M, F, A} ->
+ case is_opaque_type_test_problem(Fun, Args, NewArgTypes, State) of
+ {yes, Arg, ArgType} ->
+ {opaque_type_test, [atom_to_list(F), ArgStrings,
+ format_arg(Arg), format_type(ArgType, State)]};
+ no ->
SigArgs = t_fun_args(Sig),
- case is_opaque_related_problem(ArgNs, ArgTypes) of
- true -> %% an opaque term is used where a structured term is expected
- ExpectedArgs =
- case FailReason of
- only_sig -> SigArgs;
- _ -> ContrArgs
- end,
- {call_with_opaque, [M, F, ArgStrings, ArgNs, ExpectedArgs]};
- false ->
- case is_opaque_related_problem(ArgNs, SigArgs) orelse
- is_opaque_related_problem(ArgNs, ContrArgs) of
- true -> %% a structured term is used where an opaque is expected
- ExpectedTriples =
- case FailReason of
- only_sig -> expected_arg_triples(ArgNs, SigArgs, State);
- _ -> expected_arg_triples(ArgNs, ContrArgs, State)
- end,
- {call_without_opaque, [M, F, ArgStrings, ExpectedTriples]};
- false -> %% there is a structured term clash in some argument
- {call, [M, F, ArgStrings,
- ArgNs, FailReason,
- format_sig_args(Sig, State),
- format_type(t_fun_range(Sig), State),
- ContractInfo]}
+ BadOpaque =
+ opaque_problems([SigArgs, ContrArgs], ArgTypes, Opaques, ArgNs),
+ %% In fact *both* 'call_with_opaque' and
+ %% 'call_without_opaque' are possible.
+ case lists:keyfind(decl, 1, BadOpaque) of
+ {decl, BadArgs} ->
+ %% a structured term is used where an opaque is expected
+ ExpectedTriples =
+ case FailReason of
+ only_sig -> expected_arg_triples(BadArgs, SigArgs, State);
+ _ -> expected_arg_triples(BadArgs, ContrArgs, State)
+ end,
+ {call_without_opaque, [M, F, ArgStrings, ExpectedTriples]};
+ false ->
+ case lists:keyfind(use, 1, BadOpaque) of
+ {use, BadArgs} ->
+ %% an opaque term is used where a structured term is expected
+ ExpectedArgs =
+ case FailReason of
+ only_sig -> SigArgs;
+ _ -> ContrArgs
+ end,
+ {call_with_opaque, [M, F, ArgStrings, BadArgs, ExpectedArgs]};
+ false ->
+ case
+ erl_bif_types:opaque_args(M, F, A, ArgTypes, Opaques)
+ of
+ [] -> %% there is a structured term clash in some argument
+ {call, [M, F, ArgStrings,
+ ArgNs, FailReason,
+ format_sig_args(Sig, State),
+ format_type(t_fun_range(Sig), State),
+ ContractInfo]};
+ Ns ->
+ {call_with_opaque, [M, F, ArgStrings, Ns, ContrArgs]}
+ end
end
end
end;
@@ -648,20 +629,28 @@ get_apply_fail_msg(Fun, Args, ArgTypes, NewArgTypes,
ContractInfo]}
end.
-%% returns 'true' if we are running with opaque on (not checked yet),
-%% and there is either a contract or hard-coded type information with
-%% opaque types
-%% TODO: check that we are running with opaque types
-%% TODO: check the return type also
-prefer_opaque_types(CArgs, BifArgs) ->
- t_contains_opaque(t_product(CArgs))
- orelse t_contains_opaque(t_product(BifArgs)).
-
-is_opaque_related_problem(ArgNs, ArgTypes) ->
- Fun = fun (N) -> erl_types:t_contains_opaque(lists:nth(N, ArgTypes)) end,
- ArgNs =/= [] andalso lists:all(Fun, ArgNs).
-
-is_opaque_type_test_problem(Fun, ArgTypes, State) ->
+%% -> [{ElementI, [ArgN]}] where [ArgN] is a non-empty list of
+%% arguments containing unknown opaque types and Element is 1 or 2.
+opaque_problems(ContractOrSigList, ArgTypes, Opaques, ArgNs) ->
+ ArgElementList = find_unknown(ContractOrSigList, ArgTypes, Opaques, ArgNs),
+ F = fun(1) -> decl; (2) -> use end,
+ [{F(ElementI), lists:usort([ArgN || {ArgN, EI} <- ArgElementList,
+ EI =:= ElementI])} ||
+ ElementI <- lists:usort([EI || {_, EI} <- ArgElementList])].
+
+%% -> [{ArgN, ElementI}] where ElementI = 1 means there is an unknown
+%% opaque type in argument ArgN of the the contract/signature,
+%% and ElementI = 2 means that there is an unknown opaque type in
+%% argument ArgN of the the (current) argument types.
+find_unknown(ContractOrSigList, ArgTypes, Opaques, NoneArgNs) ->
+ ArgNs = lists:seq(1, length(ArgTypes)),
+ [{ArgN, ElementI} ||
+ ContractOrSig <- ContractOrSigList,
+ {E1, E2, ArgN} <- lists:zip3(ContractOrSig, ArgTypes, ArgNs),
+ lists:member(ArgN, NoneArgNs),
+ ElementI <- erl_types:t_find_unknown_opaque(E1, E2, Opaques)].
+
+is_opaque_type_test_problem(Fun, Args, ArgTypes, State) ->
case Fun of
{erlang, FN, 1} when FN =:= is_atom; FN =:= is_boolean;
FN =:= is_binary; FN =:= is_bitstring;
@@ -669,10 +658,18 @@ is_opaque_type_test_problem(Fun, ArgTypes, State) ->
FN =:= is_integer; FN =:= is_list;
FN =:= is_number; FN =:= is_pid; FN =:= is_port;
FN =:= is_reference; FN =:= is_tuple ->
- [Type] = ArgTypes,
- erl_types:t_is_opaque(Type) andalso
- not lists:member(Type, State#state.opaques);
- _ -> false
+ type_test_opaque_arg(Args, ArgTypes, State#state.opaques);
+ {erlang, FN, 2} when FN =:= is_function ->
+ type_test_opaque_arg(Args, ArgTypes, State#state.opaques);
+ _ -> no
+ end.
+
+type_test_opaque_arg([], [], _Opaques) ->
+ no;
+type_test_opaque_arg([Arg|Args], [ArgType|ArgTypes], Opaques) ->
+ case erl_types:t_has_opaque_subtype(ArgType, Opaques) of
+ true -> {yes, Arg, ArgType};
+ false -> type_test_opaque_arg(Args, ArgTypes, Opaques)
end.
expected_arg_triples(ArgNs, ArgTypes, State) ->
@@ -683,47 +680,56 @@ expected_arg_triples(ArgNs, ArgTypes, State) ->
add_bif_warnings({erlang, Op, 2}, [T1, T2] = Ts, Tree, State)
when Op =:= '=:='; Op =:= '==' ->
- Type1 = erl_types:t_unopaque(T1, State#state.opaques),
- Type2 = erl_types:t_unopaque(T2, State#state.opaques),
- Inf = t_inf(T1, T2),
- Inf1 = t_inf(Type1, Type2),
- case t_is_none(Inf) andalso t_is_none(Inf1) andalso(not any_none(Ts))
- andalso (not is_int_float_eq_comp(T1, Op, T2)) of
+ Opaques = State#state.opaques,
+ Inf = t_inf(T1, T2, Opaques),
+ case
+ t_is_none(Inf) andalso (not any_none(Ts))
+ andalso (not is_int_float_eq_comp(T1, Op, T2, Opaques))
+ of
true ->
- Args = case erl_types:t_is_opaque(T1) of
- true -> [format_type(T2, State), Op, format_type(T1, State)];
- false -> [format_type(T1, State), Op, format_type(T2, State)]
- end,
- case any_opaque(Ts) of
- true ->
- state__add_warning(State, ?WARN_OPAQUE, Tree, {opaque_eq, Args});
- false ->
- state__add_warning(State, ?WARN_MATCHING, Tree, {exact_eq, Args})
+ %% Give priority to opaque warning (as usual).
+ case erl_types:t_find_unknown_opaque(T1, T2, Opaques) of
+ [] ->
+ Args = comp_format_args([], T1, Op, T2, State),
+ state__add_warning(State, ?WARN_MATCHING, Tree, {exact_eq, Args});
+ Ns ->
+ Args = comp_format_args(Ns, T1, Op, T2, State),
+ state__add_warning(State, ?WARN_OPAQUE, Tree, {opaque_eq, Args})
end;
false ->
State
end;
add_bif_warnings({erlang, Op, 2}, [T1, T2] = Ts, Tree, State)
when Op =:= '=/='; Op =:= '/=' ->
- Inf = t_inf(T1, T2),
- case t_is_none(Inf) andalso (not any_none(Ts))
- andalso (not is_int_float_eq_comp(T1, Op, T2)) andalso any_opaque(Ts) of
+ Opaques = State#state.opaques,
+ case
+ (not any_none(Ts))
+ andalso (not is_int_float_eq_comp(T1, Op, T2, Opaques))
+ of
true ->
- Args = case erl_types:t_is_opaque(T1) of
- true -> [format_type(T2, State), Op, format_type(T1, State)];
- false -> [format_type(T1, State), Op, format_type(T2, State)]
- end,
- state__add_warning(State, ?WARN_OPAQUE, Tree, {opaque_neq, Args});
+ case erl_types:t_find_unknown_opaque(T1, T2, Opaques) of
+ [] -> State;
+ Ns ->
+ Args = comp_format_args(Ns, T1, Op, T2, State),
+ state__add_warning(State, ?WARN_OPAQUE, Tree, {opaque_neq, Args})
+ end;
false ->
State
end;
add_bif_warnings(_, _, _, State) ->
State.
-is_int_float_eq_comp(T1, Op, T2) ->
+is_int_float_eq_comp(T1, Op, T2, Opaques) ->
(Op =:= '==' orelse Op =:= '/=') andalso
- ((erl_types:t_is_float(T1) andalso erl_types:t_is_integer(T2)) orelse
- (erl_types:t_is_integer(T1) andalso erl_types:t_is_float(T2))).
+ ((erl_types:t_is_float(T1, Opaques)
+ andalso t_is_integer(T2, Opaques)) orelse
+ (t_is_integer(T1, Opaques)
+ andalso erl_types:t_is_float(T2, Opaques))).
+
+comp_format_args([1|_], T1, Op, T2, State) ->
+ [format_type(T2, State), Op, format_type(T1, State)];
+comp_format_args(_, T1, Op, T2, State) ->
+ [format_type(T1, State), Op, format_type(T2, State)].
%%----------------------------------------
@@ -784,16 +790,27 @@ handle_bitstr(Tree, Map, State) ->
{State3, Map2, t_none()};
false ->
UnitVal = cerl:concrete(cerl:bitstr_unit(Tree)),
- Type =
- case t_number_vals(SizeType) of
- [OneSize] -> t_bitstr(0, OneSize * UnitVal);
- _ ->
- MinSize = erl_types:number_min(SizeType),
- t_bitstr(UnitVal, UnitVal * MinSize)
- end,
+ Opaques = State2#state.opaques,
+ NumberVals = t_number_vals(SizeType, Opaques),
+ {State3, Type} =
+ case t_contains_opaque(SizeType, Opaques) of
+ true ->
+ Msg = {opaque_size, [format_type(SizeType, State2),
+ format_cerl(Size)]},
+ {state__add_warning(State2, ?WARN_OPAQUE, Size, Msg),
+ t_none()};
+ false ->
+ case NumberVals of
+ [OneSize] -> {State2, t_bitstr(0, OneSize * UnitVal)};
+ unknown -> {State2, t_bitstr()};
+ _ ->
+ MinSize = erl_types:number_min(SizeType, Opaques),
+ {State2, t_bitstr(UnitVal, UnitVal * MinSize)}
+ end
+ end,
Map3 = enter_type_lists([Val, Size, Tree],
[ValType, SizeType, Type], Map2),
- {State2, Map3, Type}
+ {State3, Map3, Type}
end
end.
@@ -805,34 +822,47 @@ handle_call(Tree, Map, State) ->
Args = cerl:call_args(Tree),
MFAList = [M, F|Args],
{State1, Map1, [MType0, FType0|As]} = traverse_list(MFAList, Map, State),
- %% Module and function names should be treated as *structured terms*
- %% even if they happen to be identical to an atom (or tuple) which
- %% is also involved in the definition of an opaque data type.
- MType = t_inf(t_module(), t_unopaque(MType0)),
- FType = t_inf(t_atom(), t_unopaque(FType0)),
+ Opaques = State#state.opaques,
+ MType = t_inf(t_module(), MType0, Opaques),
+ FType = t_inf(t_atom(), FType0, Opaques),
Map2 = enter_type_lists([M, F], [MType, FType], Map1),
+ MOpaque = t_is_none(MType) andalso (not t_is_none(MType0)),
+ FOpaque = t_is_none(FType) andalso (not t_is_none(FType0)),
case any_none([MType, FType|As]) of
true ->
State2 =
- case t_is_none(MType) andalso (not t_is_none(MType0)) of
- true -> % This is a problem we just detected; not a known one
- MS = format_cerl(M),
- Msg = {app_call, [MS, format_cerl(F),
- format_args(Args, As, State1),
- MS, format_type(t_module(), State1),
- format_type(MType0, State1)]},
- state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg);
- false ->
- case t_is_none(FType) andalso (not t_is_none(FType0)) of
- true ->
- FS = format_cerl(F),
- Msg = {app_call, [format_cerl(M), FS,
- format_args(Args, As, State1),
- FS, format_type(t_atom(), State1),
- format_type(FType0, State1)]},
- state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg);
- false -> State1
- end
+ if
+ MOpaque -> % This is a problem we just detected; not a known one
+ MS = format_cerl(M),
+ case t_is_none(t_inf(t_module(), MType0)) of
+ true ->
+ Msg = {app_call, [MS, format_cerl(F),
+ format_args(Args, As, State1),
+ MS, format_type(t_module(), State1),
+ format_type(MType0, State1)]},
+ state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg);
+ false ->
+ Msg = {opaque_call, [MS, format_cerl(F),
+ format_args(Args, As, State1),
+ MS, format_type(MType0, State1)]},
+ state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg)
+ end;
+ FOpaque ->
+ FS = format_cerl(F),
+ case t_is_none(t_inf(t_atom(), FType0)) of
+ true ->
+ Msg = {app_call, [format_cerl(M), FS,
+ format_args(Args, As, State1),
+ FS, format_type(t_atom(), State1),
+ format_type(FType0, State1)]},
+ state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg);
+ false ->
+ Msg = {opaque_call, [format_cerl(M), FS,
+ format_args(Args, As, State1),
+ FS, format_type(FType0, State1)]},
+ state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg)
+ end;
+ true -> State1
end,
{State2, Map2, t_none()};
false ->
@@ -874,7 +904,7 @@ handle_case(Tree, Map, State) ->
handle_clauses(Clauses, Arg, ArgType, ArgType, State2,
[], Map2, [], []),
Map3 = join_maps_end(MapList, Map2),
- debug_pp_map(Map2),
+ debug_pp_map(Map3),
{State3, Map3, Type}
end.
@@ -886,7 +916,7 @@ handle_cons(Tree, Map, State) ->
{State1, Map1, HdType} = traverse(Hd, Map, State),
{State2, Map2, TlType} = traverse(Tl, Map1, State1),
State3 =
- case t_is_none(t_inf(TlType, t_list())) of
+ case t_is_none(t_inf(TlType, t_list(), State2#state.opaques)) of
true ->
Msg = {improper_list_constr, [format_type(TlType, State2)]},
state__add_warning(State2, ?WARN_NON_PROPER_LIST, Tree, Msg);
@@ -979,8 +1009,9 @@ handle_receive(Tree, Map, State) ->
[], []),
Map1 = join_maps(MapList, Map),
{State3, Map2, TimeoutType} = traverse(Timeout, Map1, State2),
- case (t_is_atom(TimeoutType) andalso
- (t_atom_vals(TimeoutType) =:= ['infinity'])) of
+ Opaques = State3#state.opaques,
+ case (t_is_atom(TimeoutType, Opaques) andalso
+ (t_atom_vals(TimeoutType, Opaques) =:= ['infinity'])) of
true ->
{State3, Map2, ReceiveType};
false ->
@@ -1031,55 +1062,46 @@ handle_tuple(Tree, Map, State) ->
true ->
{State1, Map1, t_none()};
false ->
- %% Let's find out if this is a record or opaque construction.
+ %% Let's find out if this is a record
case Elements of
[Tag|Left] ->
case cerl:is_c_atom(Tag) of
true ->
TagVal = cerl:atom_val(Tag),
- case t_opaque_match_record(TupleType, State1#state.opaques) of
- [Opaque] ->
- RecStruct = t_opaque_matching_structure(TupleType, Opaque),
- RecFields = t_tuple_args(RecStruct),
- case bind_pat_vars(Elements, RecFields, [], Map1, State1) of
- {error, _, ErrorPat, ErrorType, _} ->
- Msg = {record_constr,
- [TagVal, format_patterns(ErrorPat),
- format_type(ErrorType, State1)]},
- State2 = state__add_warning(State1, ?WARN_MATCHING,
- Tree, Msg),
- {State2, Map1, t_none()};
- {Map2, _ETypes} ->
- {State1, Map2, Opaque}
- end;
- _ ->
- case state__lookup_record(TagVal, length(Left), State1) of
- error -> {State1, Map1, TupleType};
- {ok, RecType} ->
- InfTupleType = t_inf(RecType, TupleType),
- case t_is_none(InfTupleType) of
- true ->
- RecC = format_type(TupleType, State1),
- FieldDiffs = format_field_diffs(TupleType, State1),
- Msg = {record_constr, [RecC, FieldDiffs]},
- State2 = state__add_warning(State1, ?WARN_MATCHING,
- Tree, Msg),
- {State2, Map1, t_none()};
- false ->
- case bind_pat_vars(Elements, t_tuple_args(RecType),
- [], Map1, State1) of
- {error, bind, ErrorPat, ErrorType, _} ->
- Msg = {record_constr,
- [TagVal, format_patterns(ErrorPat),
- format_type(ErrorType, State1)]},
- State2 = state__add_warning(State1, ?WARN_MATCHING,
- Tree, Msg),
- {State2, Map1, t_none()};
- {Map2, ETypes} ->
- {State1, Map2, t_tuple(ETypes)}
- end
- end
- end
+ case state__lookup_record(TagVal, length(Left), State1) of
+ error -> {State1, Map1, TupleType};
+ {ok, RecType} ->
+ InfTupleType = t_inf(RecType, TupleType),
+ case t_is_none(InfTupleType) of
+ true ->
+ RecC = format_type(TupleType, State1),
+ FieldDiffs = format_field_diffs(TupleType, State1),
+ Msg = {record_constr, [RecC, FieldDiffs]},
+ State2 = state__add_warning(State1, ?WARN_MATCHING,
+ Tree, Msg),
+ {State2, Map1, t_none()};
+ false ->
+ case bind_pat_vars(Elements, t_tuple_args(RecType),
+ [], Map1, State1) of
+ {error, bind, ErrorPat, ErrorType, _} ->
+ Msg = {record_constr,
+ [TagVal, format_patterns(ErrorPat),
+ format_type(ErrorType, State1)]},
+ State2 = state__add_warning(State1, ?WARN_MATCHING,
+ Tree, Msg),
+ {State2, Map1, t_none()};
+ {error, opaque, ErrorPat, ErrorType, OpaqueType} ->
+ Msg = {opaque_match,
+ [format_patterns(ErrorPat),
+ format_type(ErrorType, State1),
+ format_type(OpaqueType, State1)]},
+ State2 = state__add_warning(State1, ?WARN_OPAQUE,
+ Tree, Msg),
+ {State2, Map1, t_none()};
+ {Map2, ETypes} ->
+ {State1, Map2, t_tuple(ETypes)}
+ end
+ end
end;
false ->
{State1, Map1, t_tuple(EsType)}
@@ -1356,7 +1378,9 @@ bind_pat_vars_reverse(Pats, Types, Acc, Map, State) ->
end.
bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
- ?debug("Binding pat: ~w to ~s\n", [cerl:type(Pat), format_type(Type, State)]),
+ ?debug("Binding pat: ~w to ~s\n", [cerl:type(Pat), format_type(Type, State)]
+),
+ Opaques = State#state.opaques,
{NewMap, TypeOut} =
case cerl:type(Pat) of
alias ->
@@ -1372,9 +1396,15 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
case Rev of
true -> {Map, t_bitstr()};
false ->
- BinType = t_inf(t_bitstr(), Type),
+ BinType = t_inf(t_bitstr(), Type, Opaques),
case t_is_none(BinType) of
- true -> bind_error([Pat], Type, t_none(), bind);
+ true ->
+ case t_find_opaque_mismatch(t_bitstr(), Type) of
+ {ok, T1, T2} ->
+ bind_error([Pat], T1, T2, opaque);
+ error ->
+ bind_error([Pat], Type, t_none(), bind)
+ end;
false ->
Segs = cerl:binary_segments(Pat),
{Map1, SegTypes} = bind_bin_segs(Segs, BinType, Map, State),
@@ -1382,28 +1412,24 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
end
end;
cons ->
- Cons = t_inf(Type, t_cons()),
+ Cons = t_inf(Type, t_cons(), Opaques),
case t_is_none(Cons) of
true ->
bind_opaque_pats(t_cons(), Type, Pat, Map, State, Rev);
false ->
{Map1, [HdType, TlType]} =
bind_pat_vars([cerl:cons_hd(Pat), cerl:cons_tl(Pat)],
- [t_cons_hd(Cons), t_cons_tl(Cons)],
+ [t_cons_hd(Cons, Opaques),
+ t_cons_tl(Cons, Opaques)],
[], Map, State, Rev),
{Map1, t_cons(HdType, TlType)}
end;
literal ->
Literal = literal_type(Pat),
- LiteralOrOpaque =
- case t_opaque_match_atom(Literal, State#state.opaques) of
- [Opaque] -> Opaque;
- _ -> Literal
- end,
- case t_is_none(t_inf(LiteralOrOpaque, Type)) of
+ case t_is_none(t_inf(Literal, Type, Opaques)) of
true ->
bind_opaque_pats(Literal, Type, Pat, Map, State, Rev);
- false -> {Map, LiteralOrOpaque}
+ false -> {Map, Literal}
end;
tuple ->
Es = cerl:tuple_es(Pat),
@@ -1419,27 +1445,28 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
{ok, Record} ->
[_Head|AnyTail] = [t_any() || _ <- Es],
UntypedRecord = t_tuple([t_atom(TagAtom)|AnyTail]),
- {not erl_types:t_is_equal(Record, UntypedRecord), Record}
+ {not t_is_equal(Record, UntypedRecord), Record}
end;
false -> {false, t_tuple(length(Es))}
end
end,
- Tuple = t_inf(Prototype, Type),
+ Tuple = t_inf(Prototype, Type, Opaques),
case t_is_none(Tuple) of
true ->
bind_opaque_pats(Prototype, Type, Pat, Map, State, Rev);
false ->
- SubTuples = t_tuple_subtypes(Tuple),
+ SubTuples = t_tuple_subtypes(Tuple, Opaques),
%% Need to call the top function to get the try-catch wrapper
MapJ = join_maps_begin(Map),
Results =
case Rev of
true ->
- [bind_pat_vars_reverse(Es, t_tuple_args(SubTuple), [],
- MapJ, State)
+ [bind_pat_vars_reverse(Es, t_tuple_args(SubTuple, Opaques),
+ [], MapJ, State)
|| SubTuple <- SubTuples];
false ->
- [bind_pat_vars(Es, t_tuple_args(SubTuple), [], MapJ, State)
+ [bind_pat_vars(Es, t_tuple_args(SubTuple, Opaques), [],
+ MapJ, State)
|| SubTuple <- SubTuples]
end,
case lists:keyfind(opaque, 2, Results) of
@@ -1466,37 +1493,14 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
bind_pat_vars(Es, t_to_tlist(Type), [], Map, State, Rev),
{Map1, t_product(EsTypes)};
var ->
- Opaques = State#state.opaques,
VarType1 =
case state__lookup_type_for_letrec(Pat, State) of
- error ->
- LType = lookup_type(Pat, Map),
- case t_opaque_match_record(LType, Opaques) of
- [Opaque] -> Opaque;
- _ ->
- case t_opaque_match_atom(LType, Opaques) of
- [Opaque] -> Opaque;
- _ -> LType
- end
- end;
+ error -> lookup_type(Pat, Map);
{ok, RecType} -> RecType
end,
%% Must do inf when binding args to pats. Vars in pats are fresh.
- VarType2 = t_inf(VarType1, Type),
- VarType3 =
- case Opaques =/= [] of
- true ->
- case t_opaque_match_record(VarType2, Opaques) of
- [OpaqueRec] -> OpaqueRec;
- _ ->
- case t_opaque_match_atom(VarType2, Opaques) of
- [OpaqueAtom] -> OpaqueAtom;
- _ -> VarType2
- end
- end;
- false -> VarType2
- end,
- case t_is_none(VarType3) of
+ VarType2 = t_inf(VarType1, Type, Opaques),
+ case t_is_none(VarType2) of
true ->
case t_find_opaque_mismatch(VarType1, Type) of
{ok, T1, T2} ->
@@ -1505,8 +1509,8 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
bind_error([Pat], Type, t_none(), bind)
end;
false ->
- Map1 = enter_type(Pat, VarType3, Map),
- {Map1, VarType3}
+ Map1 = enter_type(Pat, VarType2, Map),
+ {Map1, VarType2}
end;
_Other ->
%% Catch all is needed when binding args to pats
@@ -1529,7 +1533,8 @@ bind_bin_segs([Seg|Segs], BinType, Acc, Map, State) ->
binary = SegType, [] = Segs, %% just an assert
T = t_inf(t_bitstr(UnitVal, 0), BinType),
{Map1, [Type]} = bind_pat_vars([Val], [T], [], Map, State, false),
- bind_bin_segs(Segs, t_bitstr(0, 0), [Type|Acc], Map1, State);
+ Type1 = remove_local_opaque_types(Type, State#state.opaques),
+ bind_bin_segs(Segs, t_bitstr(0, 0), [Type1|Acc], Map1, State);
utf -> % XXX: possibly can be strengthened
true = lists:member(SegType, [utf8, utf16, utf32]),
{Map1, [_]} = bind_pat_vars([Val], [t_integer()], [], Map, State, false),
@@ -1539,11 +1544,17 @@ bind_bin_segs([Seg|Segs], BinType, Acc, Map, State) ->
Size = cerl:bitstr_size(Seg),
{Map1, [SizeType]} =
bind_pat_vars([Size], [t_non_neg_integer()], [], Map, State, false),
+ Opaques = State#state.opaques,
+ NumberVals = t_number_vals(SizeType, Opaques),
+ case t_contains_opaque(SizeType, Opaques) of
+ true -> bind_error([Seg], SizeType, t_none(), opaque);
+ false -> ok
+ end,
Type =
- case t_number_vals(SizeType) of
+ case NumberVals of
[OneSize] -> t_bitstr(0, UnitVal * OneSize);
- _ ->
- MinSize = erl_types:number_min(SizeType),
+ _ -> % 'unknown' too
+ MinSize = erl_types:number_min(SizeType, Opaques),
t_bitstr(UnitVal, UnitVal * MinSize)
end,
ValConstr =
@@ -1551,7 +1562,7 @@ bind_bin_segs([Seg|Segs], BinType, Acc, Map, State) ->
binary -> Type; %% The same constraints as for the whole bitstr
float -> t_float();
integer ->
- case t_number_vals(SizeType) of
+ case NumberVals of
unknown -> t_integer();
List ->
SizeVal = lists:max(List),
@@ -1579,7 +1590,7 @@ bind_error(Pats, Type, OpaqueType, Error) ->
bind_opaque_pats(GenType, Type, Pat, Map, State, Rev) ->
case t_find_opaque_mismatch(GenType, Type) of
{ok, T1, T2} ->
- case lists:member(T2, State#state.opaques) of
+ case erl_types:is_opaque_type(T2, State#state.opaques) of
true ->
NewType = erl_types:t_struct_from_opaque(Type, [T2]),
{Map1, _} =
@@ -1700,19 +1711,9 @@ handle_guard_call(Guard, Map, Env, Eval, State) ->
handle_guard_gen_fun({M, F, A}, Guard, Map, Env, Eval, State) ->
Args = cerl:call_args(Guard),
- {Map1, As0} = bind_guard_list(Args, Map, Env, dont_know, State),
- MapFun = fun(Type) ->
- case lists:member(Type, State#state.opaques) of
- true -> erl_types:t_opaque_structure(Type);
- false -> Type
- end
- end,
- As = lists:map(MapFun, As0),
- Mode = case As =:= As0 of
- true -> structured;
- false -> opaque
- end,
- BifRet = erl_bif_types:type(M, F, A, As),
+ {Map1, As} = bind_guard_list(Args, Map, Env, dont_know, State),
+ Opaques = State#state.opaques,
+ BifRet = erl_bif_types:type(M, F, A, As, Opaques),
case t_is_none(BifRet) of
true ->
%% Is this an error-bif?
@@ -1721,11 +1722,8 @@ handle_guard_gen_fun({M, F, A}, Guard, Map, Env, Eval, State) ->
false -> signal_guard_fatal_fail(Eval, Guard, As, State)
end;
false ->
- BifArgs = case erl_bif_types:arg_types(M, F, A) of
- unknown -> lists:duplicate(A, t_any());
- List -> List
- end,
- Map2 = enter_type_lists(Args, t_inf_lists(BifArgs, As0, Mode), Map1),
+ BifArgs = bif_args(M, F, A),
+ Map2 = enter_type_lists(Args, t_inf_lists(BifArgs, As, Opaques), Map1),
Ret =
case Eval of
pos -> t_inf(t_atom(true), BifRet);
@@ -1771,29 +1769,19 @@ bind_type_test(Eval, TypeTest, ArgType, State) ->
is_reference -> t_reference();
is_tuple -> t_tuple()
end,
- Mode = determine_mode(ArgType, State#state.opaques),
case Eval of
pos ->
- Inf = t_inf(Type, ArgType, Mode),
+ Inf = t_inf(Type, ArgType, State#state.opaques),
case t_is_none(Inf) of
true -> error;
false -> {ok, Inf, t_atom(true)}
end;
neg ->
- case Mode of
- opaque ->
- Struct = erl_types:t_opaque_structure(ArgType),
- case t_is_none(t_subtract(Struct, Type)) of
- true -> error;
- false -> {ok, ArgType, t_atom(false)}
- end;
- structured ->
- Sub = t_subtract(ArgType, Type),
- case t_is_none(Sub) of
- true -> error;
- false -> {ok, Sub, t_atom(false)}
- end
- end;
+ Sub = t_subtract(ArgType, Type),
+ case t_is_none(Sub) of
+ true -> error;
+ false -> {ok, Sub, t_atom(false)}
+ end;
dont_know ->
{ok, ArgType, t_boolean()}
end.
@@ -1802,9 +1790,10 @@ handle_guard_comp(Guard, Comp, Map, Env, Eval, State) ->
Args = cerl:call_args(Guard),
[Arg1, Arg2] = Args,
{Map1, ArgTypes} = bind_guard_list(Args, Map, Env, dont_know, State),
+ Opaques = State#state.opaques,
[Type1, Type2] = ArgTypes,
- IsInt1 = t_is_integer(Type1),
- IsInt2 = t_is_integer(Type2),
+ IsInt1 = t_is_integer(Type1, Opaques),
+ IsInt2 = t_is_integer(Type2, Opaques),
case {cerl:type(Arg1), cerl:type(Arg2)} of
{literal, literal} ->
case erlang:Comp(cerl:concrete(Arg1), cerl:concrete(Arg2)) of
@@ -1817,12 +1806,13 @@ handle_guard_comp(Guard, Comp, Map, Env, Eval, State) ->
false when Eval =:= neg -> {Map, t_atom(false)}
end;
{literal, var} when IsInt1 andalso IsInt2 andalso (Eval =:= pos) ->
- case bind_comp_literal_var(Arg1, Arg2, Type2, Comp, Map1) of
+ case bind_comp_literal_var(Arg1, Arg2, Type2, Comp, Map1, Opaques) of
error -> signal_guard_fail(Eval, Guard, ArgTypes, State);
{ok, NewMap} -> {NewMap, t_atom(true)}
end;
{var, literal} when IsInt1 andalso IsInt2 andalso (Eval =:= pos) ->
- case bind_comp_literal_var(Arg2, Arg1, Type1, invert_comp(Comp), Map1) of
+ case bind_comp_literal_var(Arg2, Arg1, Type1, invert_comp(Comp),
+ Map1, Opaques) of
error -> signal_guard_fail(Eval, Guard, ArgTypes, State);
{ok, NewMap} -> {NewMap, t_atom(true)}
end;
@@ -1835,10 +1825,10 @@ invert_comp('<') -> '>';
invert_comp('>=') -> '=<';
invert_comp('>') -> '<'.
-bind_comp_literal_var(Lit, Var, VarType, CompOp, Map) ->
+bind_comp_literal_var(Lit, Var, VarType, CompOp, Map, Opaques) ->
LitVal = cerl:concrete(Lit),
NewVarType =
- case t_number_vals(VarType) of
+ case t_number_vals(VarType, Opaques) of
unknown ->
Range =
case CompOp of
@@ -1847,7 +1837,7 @@ bind_comp_literal_var(Lit, Var, VarType, CompOp, Map) ->
'>=' -> t_from_range(neg_inf, LitVal);
'>' -> t_from_range(neg_inf, LitVal - 1)
end,
- t_inf(Range, VarType);
+ t_inf(Range, VarType, Opaques);
NumberVals ->
NewNumberVals = [X || X <- NumberVals, erlang:CompOp(LitVal, X)],
t_integers(NewNumberVals)
@@ -1861,17 +1851,18 @@ handle_guard_is_function(Guard, Map, Env, Eval, State) ->
Args = cerl:call_args(Guard),
{Map1, ArgTypes0} = bind_guard_list(Args, Map, Env, dont_know, State),
[FunType0, ArityType0] = ArgTypes0,
- ArityType = t_inf(ArityType0, t_integer()),
+ Opaques = State#state.opaques,
+ ArityType = t_inf(ArityType0, t_integer(), Opaques),
case t_is_none(ArityType) of
true -> signal_guard_fail(Eval, Guard, ArgTypes0, State);
false ->
FunTypeConstr =
- case t_number_vals(ArityType) of
+ case t_number_vals(ArityType, State#state.opaques) of
unknown -> t_fun();
Vals ->
t_sup([t_fun(lists:duplicate(X, t_any()), t_any()) || X <- Vals])
end,
- FunType = t_inf(FunType0, FunTypeConstr),
+ FunType = t_inf(FunType0, FunTypeConstr, Opaques),
case t_is_none(FunType) of
true ->
case Eval of
@@ -1896,33 +1887,45 @@ handle_guard_is_record(Guard, Map, Env, Eval, State) ->
Arity = cerl:int_val(Arity0),
{Map1, RecType} = bind_guard(Rec, Map, Env, dont_know, State),
ArityMin1 = Arity - 1,
- TupleType =
- case state__lookup_record(Tag, ArityMin1, State) of
- error -> t_tuple([t_atom(Tag)|lists:duplicate(ArityMin1, t_any())]);
- {ok, Prototype} -> Prototype
- end,
- Mode = determine_mode(RecType, State#state.opaques),
- NewTupleType =
- case t_opaque_match_record(TupleType, State#state.opaques) of
- [Opaque] -> Opaque;
- _ -> TupleType
- end,
- Type = t_inf(NewTupleType, RecType, Mode),
- case t_is_none(Type) of
+ Opaques = State#state.opaques,
+ Tuple = t_tuple([t_atom(Tag)|lists:duplicate(ArityMin1, t_any())]),
+ case t_is_none(t_inf(Tuple, RecType, Opaques)) of
true ->
- case Eval of
- pos -> signal_guard_fail(Eval, Guard,
- [RecType, t_from_term(Tag),
- t_from_term(Arity)],
- State);
- neg -> {Map1, t_atom(false)};
- dont_know -> {Map1, t_atom(false)}
+ case erl_types:t_has_opaque_subtype(RecType, Opaques) of
+ true ->
+ signal_guard_fail(Eval, Guard,
+ [RecType, t_from_term(Tag),
+ t_from_term(Arity)],
+ State);
+ false ->
+ case Eval of
+ pos -> signal_guard_fail(Eval, Guard,
+ [RecType, t_from_term(Tag),
+ t_from_term(Arity)],
+ State);
+ neg -> {Map1, t_atom(false)};
+ dont_know -> {Map1, t_atom(false)}
+ end
end;
false ->
- case Eval of
- pos -> {enter_type(Rec, Type, Map1), t_atom(true)};
- neg -> {Map1, t_atom(false)};
- dont_know -> {Map1, t_boolean()}
+ TupleType =
+ case state__lookup_record(Tag, ArityMin1, State) of
+ error -> Tuple;
+ {ok, Prototype} -> Prototype
+ end,
+ Type = t_inf(TupleType, RecType, State#state.opaques),
+ case t_is_none(Type) of
+ true ->
+ %% No special handling of opaque errors.
+ FArgs = "record " ++ format_type(RecType, State),
+ Msg = {record_matching, [FArgs, Tag]},
+ throw({fail, {Guard, Msg}});
+ false ->
+ case Eval of
+ pos -> {enter_type(Rec, Type, Map1), t_atom(true)};
+ neg -> {Map1, t_atom(false)};
+ dont_know -> {Map1, t_boolean()}
+ end
end
end.
@@ -1975,14 +1978,24 @@ handle_guard_eq(Guard, Map, Env, Eval, State) ->
bind_eq_guard(Guard, Arg1, Arg2, Map, Env, Eval, State) ->
{Map1, Type1} = bind_guard(Arg1, Map, Env, dont_know, State),
{Map2, Type2} = bind_guard(Arg2, Map1, Env, dont_know, State),
- case (t_is_nil(Type1) orelse t_is_nil(Type2) orelse
- t_is_atom(Type1) orelse t_is_atom(Type2)) of
+ Opaques = State#state.opaques,
+ case
+ t_is_nil(Type1, Opaques) orelse t_is_nil(Type2, Opaques)
+ orelse t_is_atom(Type1, Opaques) orelse t_is_atom(Type2, Opaques)
+ of
true -> bind_eqeq_guard(Guard, Arg1, Arg2, Map, Env, Eval, State);
false ->
- case Eval of
- pos -> {Map2, t_atom(true)};
- neg -> {Map2, t_atom(false)};
- dont_know -> {Map2, t_boolean()}
+ %% XXX. Is this test OK?
+ OpArgs = erl_types:t_find_unknown_opaque(Type1, Type2, Opaques),
+ case OpArgs =:= [] of
+ true ->
+ case Eval of
+ pos -> {Map2, t_atom(true)};
+ neg -> {Map2, t_atom(false)};
+ dont_know -> {Map2, t_boolean()}
+ end;
+ false ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State)
end
end.
@@ -2021,44 +2034,52 @@ bind_eqeq_guard(Guard, Arg1, Arg2, Map, Env, Eval, State) ->
{Map2, Type2} = bind_guard(Arg2, Map1, Env, dont_know, State),
?debug("Types are:~s =:= ~s\n", [t_to_string(Type1),
t_to_string(Type2)]),
- Inf = t_inf(Type1, Type2),
+ Opaques = State#state.opaques,
+ Inf = t_inf(Type1, Type2, Opaques),
case t_is_none(Inf) of
true ->
- case Eval of
- neg -> {Map2, t_atom(false)};
- dont_know -> {Map2, t_atom(false)};
- pos -> signal_guard_fail(Eval, Guard, [Type1, Type2], State)
+ OpArgs = erl_types:t_find_unknown_opaque(Type1, Type2, Opaques),
+ case OpArgs =:= [] of
+ true ->
+ case Eval of
+ neg -> {Map2, t_atom(false)};
+ dont_know -> {Map2, t_atom(false)};
+ pos -> signal_guard_fail(Eval, Guard, [Type1, Type2], State)
+ end;
+ false ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State)
end;
false ->
case Eval of
- pos ->
- case {cerl:type(Arg1), cerl:type(Arg2)} of
- {var, var} ->
- Map3 = enter_subst(Arg1, Arg2, Map2),
- Map4 = enter_type(Arg2, Inf, Map3),
- {Map4, t_atom(true)};
- {var, _} ->
- Map3 = enter_type(Arg1, Inf, Map2),
- {Map3, t_atom(true)};
- {_, var} ->
- Map3 = enter_type(Arg2, Inf, Map2),
- {Map3, t_atom(true)};
- {_, _} ->
- {Map2, t_atom(true)}
- end;
- neg ->
- {Map2, t_atom(false)};
- dont_know ->
- {Map2, t_boolean()}
+ pos ->
+ case {cerl:type(Arg1), cerl:type(Arg2)} of
+ {var, var} ->
+ Map3 = enter_subst(Arg1, Arg2, Map2),
+ Map4 = enter_type(Arg2, Inf, Map3),
+ {Map4, t_atom(true)};
+ {var, _} ->
+ Map3 = enter_type(Arg1, Inf, Map2),
+ {Map3, t_atom(true)};
+ {_, var} ->
+ Map3 = enter_type(Arg2, Inf, Map2),
+ {Map3, t_atom(true)};
+ {_, _} ->
+ {Map2, t_atom(true)}
+ end;
+ neg ->
+ {Map2, t_atom(false)};
+ dont_know ->
+ {Map2, t_boolean()}
end
end.
bind_eqeq_guard_lit_other(Guard, Arg1, Arg2, Map, Env, State) ->
Eval = dont_know,
+ Opaques = State#state.opaques,
case cerl:concrete(Arg1) of
true ->
{_, Type} = MT = bind_guard(Arg2, Map, Env, pos, State),
- case t_is_atom(true, Type) of
+ case t_is_any_atom(true, Type, Opaques) of
true -> MT;
false ->
{_, Type0} = bind_guard(Arg2, Map, Env, Eval, State),
@@ -2066,7 +2087,7 @@ bind_eqeq_guard_lit_other(Guard, Arg1, Arg2, Map, Env, State) ->
end;
false ->
{Map1, Type} = bind_guard(Arg2, Map, Env, neg, State),
- case t_is_atom(false, Type) of
+ case t_is_any_atom(false, Type, Opaques) of
true -> {Map1, t_atom(true)};
false ->
{_, Type0} = bind_guard(Arg2, Map, Env, Eval, State),
@@ -2087,14 +2108,15 @@ bind_eqeq_guard_lit_other(Guard, Arg1, Arg2, Map, Env, State) ->
handle_guard_and(Guard, Map, Env, Eval, State) ->
[Arg1, Arg2] = cerl:call_args(Guard),
+ Opaques = State#state.opaques,
case Eval of
pos ->
{Map1, Type1} = bind_guard(Arg1, Map, Env, Eval, State),
- case t_is_atom(true, Type1) of
+ case t_is_any_atom(true, Type1, Opaques) of
false -> signal_guard_fail(Eval, Guard, [Type1, t_any()], State);
true ->
{Map2, Type2} = bind_guard(Arg2, Map1, Env, Eval, State),
- case t_is_atom(true, Type2) of
+ case t_is_any_atom(true, Type2, Opaques) of
false -> signal_guard_fail(Eval, Guard, [Type1, Type2], State);
true -> {Map2, t_atom(true)}
end
@@ -2109,7 +2131,10 @@ handle_guard_and(Guard, Map, Env, Eval, State) ->
try bind_guard(Arg2, MapJ, Env, neg, State)
catch throw:{fail, _} -> bind_guard(Arg1, MapJ, Env, pos, State)
end,
- case t_is_atom(false, Type1) orelse t_is_atom(false, Type2) of
+ case
+ t_is_any_atom(false, Type1, Opaques)
+ orelse t_is_any_atom(false, Type2, Opaques)
+ of
true -> {join_maps_end([Map1, Map2], MapJ), t_atom(false)};
false -> signal_guard_fail(Eval, Guard, [Type1, Type2], State)
end;
@@ -2124,11 +2149,16 @@ handle_guard_and(Guard, Map, Env, Eval, State) ->
false ->
NewMap = join_maps_end([Map1, Map2], MapJ),
NewType =
- case {t_atom_vals(Bool1), t_atom_vals(Bool2)} of
+ case {t_atom_vals(Bool1, Opaques), t_atom_vals(Bool2, Opaques)} of
{['true'] , ['true'] } -> t_atom(true);
{['false'], _ } -> t_atom(false);
{_ , ['false']} -> t_atom(false);
+ {unknown , _ } ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State);
+ {_ , unknown } ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State);
{_ , _ } -> t_boolean()
+
end,
{NewMap, NewType}
end
@@ -2136,6 +2166,7 @@ handle_guard_and(Guard, Map, Env, Eval, State) ->
handle_guard_or(Guard, Map, Env, Eval, State) ->
[Arg1, Arg2] = cerl:call_args(Guard),
+ Opaques = State#state.opaques,
case Eval of
pos ->
MapJ = join_maps_begin(Map),
@@ -2149,19 +2180,23 @@ handle_guard_or(Guard, Map, Env, Eval, State) ->
catch
throw:{fail,_} -> bind_guard(Arg2, MapJ, Env, dont_know, State)
end,
- case ((t_is_atom(true, Bool1) andalso t_is_boolean(Bool2))
- orelse
- (t_is_atom(true, Bool2) andalso t_is_boolean(Bool1))) of
+ case
+ ((t_is_any_atom(true, Bool1, Opaques)
+ andalso t_is_boolean(Bool2, Opaques))
+ orelse
+ (t_is_any_atom(true, Bool2, Opaques)
+ andalso t_is_boolean(Bool1, Opaques)))
+ of
true -> {join_maps_end([Map1, Map2], MapJ), t_atom(true)};
false -> signal_guard_fail(Eval, Guard, [Bool1, Bool2], State)
end;
neg ->
{Map1, Type1} = bind_guard(Arg1, Map, Env, neg, State),
- case t_is_atom(false, Type1) of
+ case t_is_any_atom(false, Type1, Opaques) of
false -> signal_guard_fail(Eval, Guard, [Type1, t_any()], State);
true ->
{Map2, Type2} = bind_guard(Arg2, Map1, Env, neg, State),
- case t_is_atom(false, Type2) of
+ case t_is_any_atom(false, Type2, Opaques) of
false -> signal_guard_fail(Eval, Guard, [Type1, Type2], State);
true -> {Map2, t_atom(false)}
end
@@ -2177,10 +2212,14 @@ handle_guard_or(Guard, Map, Env, Eval, State) ->
false ->
NewMap = join_maps_end([Map1, Map2], MapJ),
NewType =
- case {t_atom_vals(Bool1), t_atom_vals(Bool2)} of
+ case {t_atom_vals(Bool1, Opaques), t_atom_vals(Bool2, Opaques)} of
{['false'], ['false']} -> t_atom(false);
{['true'] , _ } -> t_atom(true);
{_ , ['true'] } -> t_atom(true);
+ {unknown , _ } ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State);
+ {_ , unknown } ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State);
{_ , _ } -> t_boolean()
end,
{NewMap, NewType}
@@ -2189,10 +2228,11 @@ handle_guard_or(Guard, Map, Env, Eval, State) ->
handle_guard_not(Guard, Map, Env, Eval, State) ->
[Arg] = cerl:call_args(Guard),
+ Opaques = State#state.opaques,
case Eval of
neg ->
{Map1, Type} = bind_guard(Arg, Map, Env, pos, State),
- case t_is_atom(true, Type) of
+ case t_is_any_atom(true, Type, Opaques) of
true -> {Map1, t_atom(false)};
false ->
{_, Type0} = bind_guard(Arg, Map, Env, Eval, State),
@@ -2200,7 +2240,7 @@ handle_guard_not(Guard, Map, Env, Eval, State) ->
end;
pos ->
{Map1, Type} = bind_guard(Arg, Map, Env, neg, State),
- case t_is_atom(false, Type) of
+ case t_is_any_atom(false, Type, Opaques) of
true -> {Map1, t_atom(true)};
false ->
{_, Type0} = bind_guard(Arg, Map, Env, Eval, State),
@@ -2212,10 +2252,11 @@ handle_guard_not(Guard, Map, Env, Eval, State) ->
case t_is_none(Bool) of
true -> throw({fatal_fail, none});
false ->
- case t_atom_vals(Bool) of
+ case t_atom_vals(Bool, Opaques) of
['true'] -> {Map1, t_atom(false)};
['false'] -> {Map1, t_atom(true)};
- [_, _] -> {Map1, Bool}
+ [_, _] -> {Map1, Bool};
+ unknown -> signal_guard_fail(Eval, Guard, [Type], State)
end
end
end.
@@ -2235,27 +2276,40 @@ bind_guard_list([], Map, _Env, _Eval, _State, Acc) ->
state()) -> no_return().
signal_guard_fail(Eval, Guard, ArgTypes, State) ->
+ signal_guard_failure(Eval, Guard, ArgTypes, fail, State).
+
+signal_guard_fatal_fail(Eval, Guard, ArgTypes, State) ->
+ signal_guard_failure(Eval, Guard, ArgTypes, fatal_fail, State).
+
+signal_guard_failure(Eval, Guard, ArgTypes, Tag, State) ->
Args = cerl:call_args(Guard),
F = cerl:atom_val(cerl:call_name(Guard)),
- MFA = {cerl:atom_val(cerl:call_module(Guard)), F, length(Args)},
- Msg =
+ {M, F, A} = MFA = {cerl:atom_val(cerl:call_module(Guard)), F, length(Args)},
+ Opaques = State#state.opaques,
+ {Kind, XInfo} =
+ case erl_bif_types:opaque_args(M, F, A, ArgTypes, Opaques) of
+ [] ->
+ {case Eval of
+ neg -> neg_guard_fail;
+ pos -> guard_fail;
+ dont_know -> guard_fail
+ end,
+ []};
+ Ns -> {opaque_guard, [Ns]}
+ end,
+ FArgs =
case is_infix_op(MFA) of
true ->
[ArgType1, ArgType2] = ArgTypes,
[Arg1, Arg2] = Args,
- Kind =
- case Eval of
- neg -> neg_guard_fail;
- pos -> guard_fail;
- dont_know -> guard_fail
- end,
- {Kind, [format_args_1([Arg1], [ArgType1], State),
- atom_to_list(F),
- format_args_1([Arg2], [ArgType2], State)]};
+ [format_args_1([Arg1], [ArgType1], State),
+ atom_to_list(F),
+ format_args_1([Arg2], [ArgType2], State)] ++ XInfo;
false ->
- mk_guard_msg(Eval, F, Args, ArgTypes, State)
+ [F, format_args(Args, ArgTypes, State)]
end,
- throw({fail, {Guard, Msg}}).
+ Msg = {Kind, FArgs},
+ throw({Tag, {Guard, Msg}}).
is_infix_op({erlang, '=:=', 2}) -> true;
is_infix_op({erlang, '==', 2}) -> true;
@@ -2268,25 +2322,10 @@ is_infix_op({erlang, '>=', 2}) -> true;
is_infix_op({M, F, A}) when is_atom(M), is_atom(F),
is_integer(A), 0 =< A, A =< 255 -> false.
--spec signal_guard_fatal_fail(eval(), cerl:c_call(), [erl_types:erl_type()],
- state()) -> no_return().
-
-signal_guard_fatal_fail(Eval, Guard, ArgTypes, State) ->
- Args = cerl:call_args(Guard),
- F = cerl:atom_val(cerl:call_name(Guard)),
- Msg = mk_guard_msg(Eval, F, Args, ArgTypes, State),
- throw({fatal_fail, {Guard, Msg}}).
-
-mk_guard_msg(Eval, F, Args, ArgTypes, State) ->
- FArgs = [F, format_args(Args, ArgTypes, State)],
- case any_has_opaque_subtype(ArgTypes) of
- true -> {opaque_guard, FArgs};
- false ->
- case Eval of
- neg -> {neg_guard_fail, FArgs};
- pos -> {guard_fail, FArgs};
- dont_know -> {guard_fail, FArgs}
- end
+bif_args(M, F, A) ->
+ case erl_bif_types:arg_types(M, F, A) of
+ unknown -> lists:duplicate(A, t_any());
+ List -> List
end.
bind_guard_case_clauses(Arg, Clauses, Map0, Env, Eval, State) ->
@@ -2366,14 +2405,15 @@ bind_guard_case_clauses(GenArgType, GenMap, ArgExpr, [Clause|Left],
end,
{NewMap3, CType} = bind_guard(cerl:clause_body(Clause), NewMap2,
Env, Eval, State),
+ Opaques = State#state.opaques,
case Eval of
pos ->
- case t_is_atom(true, CType) of
+ case t_is_any_atom(true, CType, Opaques) of
true -> ok;
false -> throw({fail, none})
end;
neg ->
- case t_is_atom(false, CType) of
+ case t_is_any_atom(false, CType, Opaques) of
true -> ok;
false -> throw({fail, none})
end;
@@ -2501,8 +2541,11 @@ enter_type(Key, Val, MS) ->
error ->
?debug("Entering ~p :: ~s\n", [KeyLabel, t_to_string(Val)]),
case dict:find(KeyLabel, Dict) of
- {ok, Val} -> MS;
- {ok, _OldVal} -> store_map(KeyLabel, Val, MS);
+ {ok, Value} ->
+ case erl_types:t_is_equal(Val, Value) of
+ true -> MS;
+ false -> store_map(KeyLabel, Val, MS)
+ end;
error -> store_map(KeyLabel, Val, MS)
end
end
@@ -2611,10 +2654,15 @@ get_label(L) when is_integer(L) ->
get_label(T) ->
cerl_trees:get_label(T).
-t_is_simple(ArgType) ->
- t_is_atom(ArgType) orelse t_is_number(ArgType) orelse t_is_port(ArgType)
- orelse t_is_pid(ArgType) orelse t_is_reference(ArgType)
- orelse t_is_nil(ArgType).
+t_is_simple(ArgType, State) ->
+ Opaques = State#state.opaques,
+ t_is_atom(ArgType, Opaques) orelse t_is_number(ArgType, Opaques)
+ orelse t_is_port(ArgType, Opaques)
+ orelse t_is_pid(ArgType, Opaques) orelse t_is_reference(ArgType, Opaques)
+ orelse t_is_nil(ArgType, Opaques).
+
+remove_local_opaque_types(Type, Opaques) ->
+ t_unopaque(Type, Opaques).
%% t_is_structured(ArgType) ->
%% case t_is_nil(ArgType) of
@@ -2638,12 +2686,6 @@ is_call_to_send(Tree) ->
andalso (Arity =:= 2)
end.
-any_opaque(Ts) ->
- lists:any(fun erl_types:t_is_opaque/1, Ts).
-
-any_has_opaque_subtype(Ts) ->
- lists:any(fun erl_types:t_has_opaque_subtype/1, Ts).
-
filter_match_fail([Clause] = Cls) ->
Body = cerl:clause_body(Clause),
case cerl:type(Body) of
@@ -2662,12 +2704,6 @@ filter_match_fail([]) ->
%% receive after 1 -> ok end
[].
-determine_mode(Type, Opaques) ->
- case lists:member(Type, Opaques) of
- true -> opaque;
- false -> structured
- end.
-
%%% ===========================================================================
%%%
%%% The State.
@@ -2679,7 +2715,7 @@ state__new(Callgraph, Tree, Plt, Module, Records) ->
erl_types:t_opaque_from_records(Records),
TreeMap = build_tree_map(Tree),
Funs = dict:fetch_keys(TreeMap),
- FunTab = init_fun_tab(Funs, dict:new(), TreeMap, Callgraph, Plt, Opaques),
+ FunTab = init_fun_tab(Funs, dict:new(), TreeMap, Callgraph, Plt),
ExportedFuns =
[Fun || Fun <- Funs--[top], dialyzer_callgraph:is_escaping(Fun, Callgraph)],
Work = init_work(ExportedFuns),
@@ -2740,12 +2776,14 @@ state__add_warning(#state{warnings = Warnings, warning_mode = true} = State,
case Force of
true ->
Warn = {Tag, {get_file(Ann), abs(get_line(Ann))}, Msg},
+ ?debug("MSG ~s\n", [dialyzer:format_warning(Warn)]),
State#state{warnings = [Warn|Warnings]};
false ->
case is_compiler_generated(Ann) of
true -> State;
false ->
Warn = {Tag, {get_file(Ann), get_line(Ann)}, Msg},
+ ?debug("MSG ~s\n", [dialyzer:format_warning(Warn)]),
State#state{warnings = [Warn|Warnings]}
end
end.
@@ -2875,10 +2913,10 @@ build_tree_map(Tree) ->
end,
cerl_trees:fold(Fun, dict:new(), Tree).
-init_fun_tab([top|Left], Dict, TreeMap, Callgraph, Plt, Opaques) ->
+init_fun_tab([top|Left], Dict, TreeMap, Callgraph, Plt) ->
NewDict = dict:store(top, {[], t_none()}, Dict),
- init_fun_tab(Left, NewDict, TreeMap, Callgraph, Plt, Opaques);
-init_fun_tab([Fun|Left], Dict, TreeMap, Callgraph, Plt, Opaques) ->
+ init_fun_tab(Left, NewDict, TreeMap, Callgraph, Plt);
+init_fun_tab([Fun|Left], Dict, TreeMap, Callgraph, Plt) ->
Arity = cerl:fun_arity(dict:fetch(Fun, TreeMap)),
FunEntry =
case dialyzer_callgraph:is_escaping(Fun, Callgraph) of
@@ -2895,8 +2933,8 @@ init_fun_tab([Fun|Left], Dict, TreeMap, Callgraph, Plt, Opaques) ->
false -> {not_handled, {lists:duplicate(Arity, t_none()), t_unit()}}
end,
NewDict = dict:store(Fun, FunEntry, Dict),
- init_fun_tab(Left, NewDict, TreeMap, Callgraph, Plt, Opaques);
-init_fun_tab([], Dict, _TreeMap, _Callgraph, _Plt, _Opaques) ->
+ init_fun_tab(Left, NewDict, TreeMap, Callgraph, Plt);
+init_fun_tab([], Dict, _TreeMap, _Callgraph, _Plt) ->
?debug("DICT:~p\n",[dict:to_list(Dict)]),
Dict.
@@ -2945,34 +2983,27 @@ state__update_fun_entry(Tree, ArgTypes, Out0,
if Fun =:= top -> Out0;
true ->
case lookup_fun_sig(Fun, CG, Plt) of
- {value, {SigRet, _}} -> t_inf(SigRet, Out0, opaque);
+ {value, {SigRet, _}} -> t_inf(SigRet, Out0);
none -> Out0
end
end,
Out = t_limit(Out1, ?TYPE_LIMIT),
- case dict:find(Fun, FunTab) of
- {ok, {ArgTypes, OldOut}} ->
- case t_is_equal(OldOut, Out) of
- true ->
- ?debug("Fixpoint for ~w: ~s\n",
- [state__lookup_name(Fun, State),
- t_to_string(t_fun(ArgTypes, Out))]),
- State;
- false ->
- NewEntry = {ArgTypes, Out},
- ?debug("New Entry for ~w: ~s\n",
- [state__lookup_name(Fun, State),
- t_to_string(t_fun(ArgTypes, Out))]),
- NewFunTab = dict:store(Fun, NewEntry, FunTab),
- State1 = State#state{fun_tab = NewFunTab},
- state__add_work_from_fun(Tree, State1)
- end;
- {ok, {NewArgTypes, _OldOut}} ->
- %% Can only happen in self-recursive functions. Only update the out type.
- NewEntry = {NewArgTypes, Out},
+ {ok, {OldArgTypes, OldOut}} = dict:find(Fun, FunTab),
+ SameArgs = lists:all(fun({A, B}) -> erl_types:t_is_equal(A, B)
+ end, lists:zip(OldArgTypes, ArgTypes)),
+ SameOut = t_is_equal(OldOut, Out),
+ if
+ SameArgs, SameOut ->
+ ?debug("Fixpoint for ~w: ~s\n",
+ [state__lookup_name(Fun, State),
+ t_to_string(t_fun(ArgTypes, Out))]),
+ State;
+ true ->
+ %% Can only happen in self-recursive functions.
+ NewEntry = {OldArgTypes, Out},
?debug("New Entry for ~w: ~s\n",
[state__lookup_name(Fun, State),
- t_to_string(t_fun(NewArgTypes, Out))]),
+ t_to_string(t_fun(OldArgTypes, Out))]),
NewFunTab = dict:store(Fun, NewEntry, FunTab),
State1 = State#state{fun_tab = NewFunTab},
state__add_work_from_fun(Tree, State1)
@@ -2993,7 +3024,7 @@ state__add_work_from_fun(Tree, #state{callgraph = Callgraph,
%% Must filter the result for results in this module.
FilteredList = [L || {ok, L} <- LabelList, dict:is_key(L, TreeMap)],
?debug("~w: Will try to add:~w\n",
- [state__lookup_name(get_label(Tree), State), MFAList]),
+ [state__lookup_name(Label, State), MFAList]),
lists:foldl(fun(L, AccState) ->
state__add_work(L, AccState)
end, State, FilteredList)
@@ -3054,7 +3085,8 @@ forward_args(Fun, ArgTypes, #state{work = Work, fun_tab = FunTab} = State) ->
case Fixpoint of
true -> State;
false ->
- NewArgTypes = [t_sup(X, Y) || {X, Y} <- lists:zip(ArgTypes, OldArgTypes)],
+ NewArgTypes = [t_sup(X, Y) ||
+ {X, Y} <- lists:zip(ArgTypes, OldArgTypes)],
NewWork = add_work(Fun, Work),
?debug("~w: forwarding args ~s\n",
[state__lookup_name(Fun, State),
@@ -3238,13 +3270,13 @@ format_field_diffs(RecConstruction, #state{records = R}) ->
-spec format_sig_args(erl_types:erl_type(), state()) -> string().
-format_sig_args(Type, #state{records = R}) ->
- SigArgs = t_fun_args(Type),
+format_sig_args(Type, #state{opaques = Opaques} = State) ->
+ SigArgs = t_fun_args(Type, Opaques),
case SigArgs of
[] -> "()";
[SArg|SArgs] ->
- lists:flatten("(" ++ t_to_string(SArg, R)
- ++ ["," ++ t_to_string(T, R) || T <- SArgs] ++ ")")
+ lists:flatten("(" ++ format_type(SArg, State)
+ ++ ["," ++ format_type(T, State) || T <- SArgs] ++ ")")
end.
format_cerl(Tree) ->
diff --git a/lib/dialyzer/src/dialyzer_dep.erl b/lib/dialyzer/src/dialyzer_dep.erl
index 1a477f4388..05f81399fb 100644
--- a/lib/dialyzer/src/dialyzer_dep.erl
+++ b/lib/dialyzer/src/dialyzer_dep.erl
@@ -58,7 +58,8 @@
%% separatedly.
%%
--spec analyze(cerl:c_module()) -> {dict(), ordset('external' | label()), dict()}.
+-spec analyze(cerl:c_module()) ->
+ {dict(), ordset('external' | label()), dict(), dict()}.
analyze(Tree) ->
%% io:format("Handling ~w\n", [cerl:atom_val(cerl:module_name(Tree))]),
diff --git a/lib/dialyzer/src/dialyzer_succ_typings.erl b/lib/dialyzer/src/dialyzer_succ_typings.erl
index 84379642bf..f0488b5ee3 100644
--- a/lib/dialyzer/src/dialyzer_succ_typings.erl
+++ b/lib/dialyzer/src/dialyzer_succ_typings.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2014. 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
@@ -149,8 +149,10 @@ get_warnings(Callgraph, Plt, DocPlt, Codeserver,
NewState = InitState#st{no_warn_unused = NoWarnUnused},
Mods = dialyzer_callgraph:modules(NewState#st.callgraph),
MiniPlt = NewState#st.plt,
+ FindOpaques = lookup_and_find_opaques_fun(Codeserver),
CWarns =
- dialyzer_contracts:get_invalid_contract_warnings(Mods, Codeserver, MiniPlt),
+ dialyzer_contracts:get_invalid_contract_warnings(Mods, Codeserver,
+ MiniPlt, FindOpaques),
MiniDocPlt = dialyzer_plt:get_mini_plt(DocPlt),
ModWarns =
?timing(TimingServer, "warning",
@@ -261,7 +263,16 @@ refine_one_module(M, {CodeServer, Callgraph, Plt, _Solvers}) ->
FunTypes = get_fun_types_from_plt(AllFuns, Callgraph, Plt),
NewFunTypes =
dialyzer_dataflow:get_fun_types(ModCode, Plt, Callgraph, Records),
- case reached_fixpoint(FunTypes, NewFunTypes) of
+ Contracts1 = dialyzer_codeserver:lookup_mod_contracts(M, CodeServer),
+ Contracts = orddict:from_list(dict:to_list(Contracts1)),
+ FindOpaques = find_opaques_fun(Records),
+ DecoratedFunTypes =
+ decorate_succ_typings(Contracts, Callgraph, NewFunTypes, FindOpaques),
+ %% ?debug("NewFunTypes ~p\n ~n", [dict:to_list(NewFunTypes)]),
+ %% ?debug("refine DecoratedFunTypes ~p\n ~n", [dict:to_list(DecoratedFunTypes)]),
+ debug_pp_functions("Refine", NewFunTypes, DecoratedFunTypes, Callgraph),
+
+ case reached_fixpoint(FunTypes, DecoratedFunTypes) of
true -> [];
{false, NotFixpoint} ->
?debug("Not fixpoint\n", []),
@@ -357,9 +368,16 @@ find_succ_types_for_scc(SCC, {Codeserver, Callgraph, Plt, Solvers}) ->
AllFunSet = sets:from_list([X || {X, _} <- AllFuns]),
FilteredFunTypes =
dict:filter(fun(X, _) -> sets:is_element(X, AllFunSet) end, FunTypes),
+ FindOpaques = lookup_and_find_opaques_fun(Codeserver),
+ DecoratedFunTypes =
+ decorate_succ_typings(Contracts3, Callgraph, FilteredFunTypes, FindOpaques),
%% Check contracts
PltContracts =
- dialyzer_contracts:check_contracts(Contracts3, Callgraph, FilteredFunTypes),
+ dialyzer_contracts:check_contracts(Contracts3, Callgraph,
+ DecoratedFunTypes, FindOpaques),
+ %% ?debug("FilteredFunTypes ~p\n ~n", [dict:to_list(FilteredFunTypes)]),
+ %% ?debug("SCC DecoratedFunTypes ~p\n ~n", [dict:to_list(DecoratedFunTypes)]),
+ debug_pp_functions("SCC", FilteredFunTypes, DecoratedFunTypes, Callgraph),
ContractFixpoint =
lists:all(fun({MFA, _C}) ->
%% Check the non-deleted PLT
@@ -368,16 +386,47 @@ find_succ_types_for_scc(SCC, {Codeserver, Callgraph, Plt, Solvers}) ->
{value, _} -> true
end
end, PltContracts),
- Plt = insert_into_plt(FilteredFunTypes, Callgraph, Plt),
+ Plt = insert_into_plt(DecoratedFunTypes, Callgraph, Plt),
Plt = dialyzer_plt:insert_contract_list(Plt, PltContracts),
case (ContractFixpoint andalso
- reached_fixpoint_strict(PropTypes, FilteredFunTypes)) of
+ reached_fixpoint_strict(PropTypes, DecoratedFunTypes)) of
true -> [];
false ->
?debug("Not fixpoint for: ~w\n", [AllFuns]),
[Fun || {Fun, _Arity} <- AllFuns]
end.
+decorate_succ_typings(Contracts, Callgraph, FunTypes, FindOpaques) ->
+ F = fun(Label, Type) ->
+ case dialyzer_callgraph:lookup_name(Label, Callgraph) of
+ {ok, MFA} ->
+ case orddict:find(MFA, Contracts) of
+ {ok, {_FileLine, Contract}} ->
+ Args = dialyzer_contracts:get_contract_args(Contract),
+ Ret = dialyzer_contracts:get_contract_return(Contract),
+ C = erl_types:t_fun(Args, Ret),
+ {M, _, _} = MFA,
+ Opaques = FindOpaques(M),
+ erl_types:t_decorate_with_opaque(Type, C, Opaques);
+ error -> Type
+ end;
+ error -> Type
+ end
+ end,
+ dict:map(F, FunTypes).
+
+lookup_and_find_opaques_fun(Codeserver) ->
+ fun(Module) ->
+ Records = dialyzer_codeserver:lookup_mod_records(Module, Codeserver),
+ (find_opaques_fun(Records))(Module)
+ end.
+
+find_opaques_fun(Records) ->
+ fun(Module) ->
+ erl_types:module_builtin_opaques(Module) ++
+ erl_types:t_opaque_from_records(Records)
+ end.
+
get_fun_types_from_plt(FunList, Callgraph, Plt) ->
get_fun_types_from_plt(FunList, Callgraph, Plt, dict:new()).
@@ -443,9 +492,30 @@ debug_pp_succ_typings(SuccTypes) ->
|| {MFA, {contract, RetFun, ArgT}} <- SuccTypes],
?debug("\n", []),
ok.
+
+debug_pp_functions(Header, FunTypes, DecoratedFunTypes, Callgraph) ->
+ ?debug("FunTypes (~s)\n", [Header]),
+ FTypes = lists:keysort(1, dict:to_list(FunTypes)),
+ DTypes = lists:keysort(1, dict:to_list(DecoratedFunTypes)),
+ Fun = fun({{Label, Type},{Label, DecoratedType}}) ->
+ Name = lookup_name(Label, Callgraph),
+ ?debug("~w (~w): ~s\n",
+ [Name, Label, erl_types:t_to_string(Type)]),
+ case erl_types:t_is_equal(Type, DecoratedType) of
+ true -> ok;
+ false ->
+ ?debug(" With opaque types: ~s\n",
+ [erl_types:t_to_string(DecoratedType)])
+ end
+ end,
+ lists:foreach(Fun, lists:zip(FTypes, DTypes)),
+ ?debug("\n", []).
-else.
debug_pp_succ_typings(_) ->
ok.
+
+debug_pp_functions(_, _, _, _) ->
+ ok.
-endif.
lookup_name(F, CG) ->
diff --git a/lib/dialyzer/src/dialyzer_typesig.erl b/lib/dialyzer/src/dialyzer_typesig.erl
index a418a11e65..db7875704a 100644
--- a/lib/dialyzer/src/dialyzer_typesig.erl
+++ b/lib/dialyzer/src/dialyzer_typesig.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2014. 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
@@ -31,28 +31,30 @@
-export([analyze_scc/6]).
-export([get_safe_underapprox/2]).
+%%-import(helper, %% 'helper' could be any module doing sanity checks...
+-import(erl_types,
+ [t_has_var/1, t_inf/2, t_is_equal/2, t_is_subtype/2,
+ t_subtract/2, t_subtract_list/2, t_sup/1, t_sup/2,t_unify/2]).
+
-import(erl_types,
[t_any/0, t_atom/0, t_atom_vals/1,
t_binary/0, t_bitstr/0, t_bitstr/2, t_bitstr_concat/1, t_boolean/0,
t_collect_vars/1, t_cons/2, t_cons_hd/1, t_cons_tl/1,
t_float/0, t_from_range/2, t_from_term/1,
t_fun/0, t_fun/2, t_fun_args/1, t_fun_range/1,
- t_has_var/1,
- t_inf/2, t_inf/3, t_integer/0,
- t_is_any/1, t_is_atom/1, t_is_atom/2, t_is_cons/1, t_is_equal/2,
+ t_integer/0,
+ t_is_any/1, t_is_atom/1, t_is_any_atom/2, t_is_cons/1,
t_is_float/1, t_is_fun/1,
t_is_integer/1, t_non_neg_integer/0,
t_is_list/1, t_is_nil/1, t_is_none/1, t_is_number/1,
- t_is_subtype/2, t_limit/2, t_list/0, t_list/1,
+ t_limit/2, t_list/0, t_list/1,
t_list_elements/1, t_nonempty_list/1, t_maybe_improper_list/0,
t_module/0, t_number/0, t_number_vals/1,
- t_opaque_match_record/2, t_opaque_matching_structure/2,
- t_opaque_from_records/1,
t_pid/0, t_port/0, t_product/1, t_reference/0,
- t_subst/2, t_subtract/2, t_subtract_list/2, t_sup/1, t_sup/2,
+ t_subst/2,
t_timeout/0, t_tuple/0, t_tuple/1,
- t_unify/3, t_var/1, t_var_name/1,
+ t_var/1, t_var_name/1,
t_none/0, t_unit/0]).
-include("dialyzer.hrl").
@@ -105,11 +107,10 @@
module :: module(),
name_map = dict:new() :: dict(),
next_label = 0 :: label(),
- self_rec :: erl_types:erl_type(),
+ self_rec :: 'false' | erl_types:erl_type(),
plt :: dialyzer_plt:plt(),
prop_types = {'d', dict:new()} :: dict_or_ets(),
records = dict:new() :: dict(),
- opaques = [] :: [erl_types:erl_type()],
scc = [] :: [type_var()],
mfas :: [tuple()],
solvers = [] :: [solver()]
@@ -192,11 +193,10 @@ solvers(Solvers) -> Solvers.
%%
%% ============================================================================
-traverse_scc([{MFA, Def, Rec}|Left], DefSet, AccState) ->
+traverse_scc([{_MFA, Def, Rec}|Left], DefSet, AccState) ->
TmpState1 = state__set_rec_dict(AccState, Rec),
- TmpState2 = state__set_opaques(TmpState1, MFA),
DummyLetrec = cerl:c_letrec([Def], cerl:c_atom(foo)),
- {NewAccState, _} = traverse(DummyLetrec, DefSet, TmpState2),
+ {NewAccState, _} = traverse(DummyLetrec, DefSet, TmpState1),
traverse_scc(Left, DefSet, NewAccState);
traverse_scc([], _DefSet, AccState) ->
AccState.
@@ -386,12 +386,7 @@ traverse(Tree, DefinedVars, State) ->
case cerl:unfold_literal(Tree) of
Tree ->
Type = t_from_term(cerl:concrete(Tree)),
- NewType =
- case erl_types:t_opaque_match_atom(Type, State#state.opaques) of
- [Opaque] -> Opaque;
- _ -> Type
- end,
- {State, NewType};
+ {State, Type};
NewTree -> traverse(NewTree, DefinedVars, State)
end;
module ->
@@ -462,25 +457,17 @@ traverse(Tree, DefinedVars, State) ->
[Tag|Fields] ->
case cerl:is_c_atom(Tag) of
true ->
- %% Check if an opaque term is constructed.
- case t_opaque_match_record(TupleType, State#state.opaques) of
- [Opaque] ->
- OpStruct = t_opaque_matching_structure(TupleType, Opaque),
- State3 = state__store_conj(TupleType, sub, OpStruct, State2),
- {State3, Opaque};
- %% Check if a record is constructed.
- _ ->
- Arity = length(Fields),
- Records = State2#state.records,
- case lookup_record(Records, cerl:atom_val(Tag), Arity) of
- error -> {State2, TupleType};
- {ok, RecType} ->
- State3 = state__store_conj(TupleType, sub, RecType, State2),
- {State3, TupleType}
- end
- end;
+ %% Check if a record is constructed.
+ Arity = length(Fields),
+ Records = State2#state.records,
+ case lookup_record(Records, cerl:atom_val(Tag), Arity) of
+ error -> {State2, TupleType};
+ {ok, RecType} ->
+ State3 = state__store_conj(TupleType, sub, RecType, State2),
+ {State3, TupleType}
+ end;
false -> {State2, TupleType}
- end;
+ end;
[] -> {State2, TupleType}
end;
values ->
@@ -591,9 +578,13 @@ handle_try(Tree, DefinedVars, State) ->
case state__is_in_guard(State) of
true ->
Conj1 = mk_conj_constraint_list([ArgBodyCs,
- mk_constraint(BodyVar, eq, TreeVar)]),
+ mk_constraint(BodyVar,
+ eq,
+ TreeVar)]),
Disj = mk_disj_constraint_list([Conj1,
- mk_constraint(HandlerVar, eq, TreeVar)]),
+ mk_constraint(HandlerVar,
+ eq,
+ TreeVar)]),
NewState1 = state__new_constraint_context(HandlerState),
Conj2 = mk_conj_constraint_list([OldCs, Disj]),
NewState2 = state__store_conj(Conj2, NewState1),
@@ -604,19 +595,27 @@ handle_try(Tree, DefinedVars, State) ->
{false, false} ->
Conj1 =
mk_conj_constraint_list([ArgBodyCs,
- mk_constraint(TreeVar, eq, BodyVar)]),
+ mk_constraint(TreeVar,
+ eq,
+ BodyVar)]),
Conj2 =
mk_conj_constraint_list([HandlerCs,
- mk_constraint(TreeVar, eq, HandlerVar)]),
+ mk_constraint(TreeVar,
+ eq,
+ HandlerVar)]),
Disj = mk_disj_constraint_list([Conj1, Conj2]),
{Disj, TreeVar};
{false, true} ->
{mk_conj_constraint_list([ArgBodyCs,
- mk_constraint(TreeVar, eq, BodyVar)]),
+ mk_constraint(TreeVar,
+ eq,
+ BodyVar)]),
BodyVar};
{true, false} ->
{mk_conj_constraint_list([HandlerCs,
- mk_constraint(TreeVar, eq, HandlerVar)]),
+ mk_constraint(TreeVar,
+ eq,
+ HandlerVar)]),
HandlerVar};
{true, true} ->
?debug("Throw failed\n", []),
@@ -668,10 +667,7 @@ handle_call(Call, DefinedVars, State) ->
get_plt_constr(MFA, Dst, ArgVars, State) ->
Plt = state__plt(State),
PltRes = dialyzer_plt:lookup(Plt, MFA),
- Opaques = State#state.opaques,
- Module = State#state.module,
SCCMFAs = State#state.mfas,
- {FunModule, _, _} = MFA,
Contract =
case lists:member(MFA, SCCMFAs) of
true -> none;
@@ -691,28 +687,24 @@ get_plt_constr(MFA, Dst, ArgVars, State) ->
none ->
{?mk_fun_var(fun(Map) ->
ArgTypes = lookup_type_list(ArgVars, Map),
- dialyzer_contracts:get_contract_return(C, ArgTypes)
+ get_contract_return(C, ArgTypes)
end, ArgVars), GenArgs};
{value, {PltRetType, PltArgTypes}} ->
%% Need to combine the contract with the success typing.
{?mk_fun_var(
fun(Map) ->
- ArgTypes0 = lookup_type_list(ArgVars, Map),
- ArgTypes = case FunModule =:= Module of
- false ->
- List = lists:zip(PltArgTypes, ArgTypes0),
- [erl_types:t_unopaque_on_mismatch(T1, T2, Opaques)
- || {T1, T2} <- List];
- true -> ArgTypes0
- end,
- CRet = dialyzer_contracts:get_contract_return(C, ArgTypes),
- t_inf(CRet, PltRetType, opaque)
+ ArgTypes = lookup_type_list(ArgVars, Map),
+ CRet = get_contract_return(C, ArgTypes),
+ t_inf(CRet, PltRetType)
end, ArgVars),
- [t_inf(X, Y, opaque) || {X, Y} <- lists:zip(GenArgs, PltArgTypes)]}
+ [t_inf(X, Y) || {X, Y} <- lists:zip(GenArgs, PltArgTypes)]}
end,
state__store_conj_lists([Dst|ArgVars], sub, [RetType|ArgCs], State)
end.
+get_contract_return(C, ArgTypes) ->
+ dialyzer_contracts:get_contract_return(C, ArgTypes).
+
filter_match_fail([Clause] = Cls) ->
Body = cerl:clause_body(Clause),
case cerl:type(Body) of
@@ -1086,7 +1078,7 @@ get_bif_constr({erlang, Op, 2}, Dst, Args = [Arg1, Arg2], _State)
when Op =:= '+'; Op =:= '-'; Op =:= '*' ->
ReturnType = ?mk_fun_var(fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, Op, 2, TmpArgTypes)
+ bif_return(erlang, Op, 2, TmpArgTypes)
end, Args),
ArgFun =
fun(A, Pos) ->
@@ -1128,8 +1120,8 @@ get_bif_constr({erlang, Op, 2}, Dst, [Arg1, Arg2] = Args, _State)
fun(LocalArg1, LocalArg2, LocalOp) ->
fun(Map) ->
DstType = lookup_type(Dst, Map),
- IsTrue = t_is_atom(true, DstType),
- IsFalse = t_is_atom(false, DstType),
+ IsTrue = t_is_any_atom(true, DstType),
+ IsFalse = t_is_any_atom(false, DstType),
case IsTrue orelse IsFalse of
true ->
Arg1Type = lookup_type(LocalArg1, Map),
@@ -1176,7 +1168,7 @@ get_bif_constr({erlang, Op, 2}, Dst, [Arg1, Arg2] = Args, _State)
Arg2Var = ?mk_fun_var(Arg2Fun, DstArgs),
DstVar = ?mk_fun_var(fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, Op, 2, TmpArgTypes)
+ bif_return(erlang, Op, 2, TmpArgTypes)
end, Args),
mk_conj_constraint_list([mk_constraint(Dst, sub, DstVar),
mk_constraint(Arg1, sub, Arg1Var),
@@ -1218,7 +1210,7 @@ get_bif_constr({erlang, '++', 2}, Dst, [Hd, Tl] = Args, _State) ->
ArgTypes = erl_bif_types:arg_types(erlang, '++', 2),
ReturnType = ?mk_fun_var(fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, '++', 2, TmpArgTypes)
+ bif_return(erlang, '++', 2, TmpArgTypes)
end, Args),
Cs = mk_constraints(Args, sub, ArgTypes),
mk_conj_constraint_list([mk_constraint(Dst, sub, ReturnType),
@@ -1240,7 +1232,7 @@ get_bif_constr({erlang, is_function, 1}, Dst, [Arg], State) ->
get_bif_constr({erlang, is_function, 2}, Dst, [Fun, Arity], _State) ->
ArgFun = fun(Map) ->
DstType = lookup_type(Dst, Map),
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true ->
ArityType = lookup_type(Arity, Map),
case t_number_vals(ArityType) of
@@ -1268,7 +1260,7 @@ get_bif_constr({erlang, is_reference, 1}, Dst, [Arg], State) ->
get_bif_test_constr(Dst, Arg, t_reference(), State);
get_bif_constr({erlang, is_record, 2}, Dst, [Var, Tag] = Args, _State) ->
ArgFun = fun(Map) ->
- case t_is_atom(true, lookup_type(Dst, Map)) of
+ case t_is_any_atom(true, lookup_type(Dst, Map)) of
true -> t_tuple();
false -> t_any()
end
@@ -1276,7 +1268,7 @@ get_bif_constr({erlang, is_record, 2}, Dst, [Var, Tag] = Args, _State) ->
ArgV = ?mk_fun_var(ArgFun, [Dst]),
DstFun = fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, is_record, 2, TmpArgTypes)
+ bif_return(erlang, is_record, 2, TmpArgTypes)
end,
DstV = ?mk_fun_var(DstFun, Args),
mk_conj_constraint_list([mk_constraint(Dst, sub, DstV),
@@ -1285,10 +1277,9 @@ get_bif_constr({erlang, is_record, 2}, Dst, [Var, Tag] = Args, _State) ->
get_bif_constr({erlang, is_record, 3}, Dst, [Var, Tag, Arity] = Args, State) ->
%% TODO: Revise this to make it precise for Tag and Arity.
Records = State#state.records,
- AllOpaques = State#state.opaques,
ArgFun =
fun(Map) ->
- case t_is_atom(true, lookup_type(Dst, Map)) of
+ case t_is_any_atom(true, lookup_type(Dst, Map)) of
true ->
ArityType = lookup_type(Arity, Map),
case t_is_integer(ArityType) of
@@ -1304,10 +1295,7 @@ get_bif_constr({erlang, is_record, 3}, Dst, [Var, Tag, Arity] = Args, State) ->
[TagVal] ->
case lookup_record(Records, TagVal, ArityVal - 1) of
{ok, Type} ->
- case t_opaque_match_record(Type, AllOpaques) of
- [Opaque] -> Opaque;
- _ -> Type
- end;
+ Type;
error -> GenRecord
end;
_ -> GenRecord
@@ -1323,38 +1311,9 @@ get_bif_constr({erlang, is_record, 3}, Dst, [Var, Tag, Arity] = Args, State) ->
end,
ArgV = ?mk_fun_var(ArgFun, [Tag, Arity, Dst]),
DstFun = fun(Map) ->
- [TmpVar, TmpTag, TmpArity] = TmpArgTypes = lookup_type_list(Args, Map),
- TmpArgTypes2 =
- case lists:member(TmpVar, AllOpaques) of
- true ->
- case t_is_integer(TmpArity) of
- true ->
- case t_number_vals(TmpArity) of
- [TmpArityVal] ->
- case t_is_atom(TmpTag) of
- true ->
- case t_atom_vals(TmpTag) of
- [TmpTagVal] ->
- case lookup_record(Records, TmpTagVal,
- TmpArityVal - 1) of
- {ok, TmpType} ->
- case t_is_none(t_inf(TmpType, TmpVar, opaque)) of
- true -> TmpArgTypes;
- false -> [TmpType, TmpTag, TmpArity]
- end;
- error -> TmpArgTypes
- end;
- _ -> TmpArgTypes
- end;
- false -> TmpArgTypes
- end;
- _ -> TmpArgTypes
- end;
- false -> TmpArgTypes
- end;
- false -> TmpArgTypes
- end,
- erl_bif_types:type(erlang, is_record, 3, TmpArgTypes2)
+ [TmpVar, TmpTag, TmpArity] = lookup_type_list(Args, Map),
+ TmpArgTypes = [TmpVar,TmpTag,TmpArity],
+ bif_return(erlang, is_record, 3, TmpArgTypes)
end,
DstV = ?mk_fun_var(DstFun, Args),
mk_conj_constraint_list([mk_constraint(Dst, sub, DstV),
@@ -1369,12 +1328,14 @@ get_bif_constr({erlang, 'and', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
ArgFun = fun(Var) ->
fun(Map) ->
DstType = lookup_type(Dst, Map),
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true -> True;
false ->
- case t_is_atom(false, DstType) of
+ case t_is_any_atom(false, DstType) of
true ->
- case t_is_atom(true, lookup_type(Var, Map)) of
+ case
+ t_is_any_atom(true, lookup_type(Var, Map))
+ of
true -> False;
false -> t_boolean()
end;
@@ -1386,15 +1347,15 @@ get_bif_constr({erlang, 'and', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
end,
DstFun = fun(Map) ->
Arg1Type = lookup_type(Arg1, Map),
- case t_is_atom(false, Arg1Type) of
+ case t_is_any_atom(false, Arg1Type) of
true -> False;
false ->
Arg2Type = lookup_type(Arg2, Map),
- case t_is_atom(false, Arg2Type) of
+ case t_is_any_atom(false, Arg2Type) of
true -> False;
false ->
- case (t_is_atom(true, Arg1Type)
- andalso t_is_atom(true, Arg2Type)) of
+ case (t_is_any_atom(true, Arg1Type)
+ andalso t_is_any_atom(true, Arg2Type)) of
true -> True;
false -> t_boolean()
end
@@ -1413,12 +1374,14 @@ get_bif_constr({erlang, 'or', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
ArgFun = fun(Var) ->
fun(Map) ->
DstType = lookup_type(Dst, Map),
- case t_is_atom(false, DstType) of
+ case t_is_any_atom(false, DstType) of
true -> False;
false ->
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true ->
- case t_is_atom(false, lookup_type(Var, Map)) of
+ case
+ t_is_any_atom(false, lookup_type(Var, Map))
+ of
true -> True;
false -> t_boolean()
end;
@@ -1430,15 +1393,15 @@ get_bif_constr({erlang, 'or', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
end,
DstFun = fun(Map) ->
Arg1Type = lookup_type(Arg1, Map),
- case t_is_atom(true, Arg1Type) of
+ case t_is_any_atom(true, Arg1Type) of
true -> True;
false ->
Arg2Type = lookup_type(Arg2, Map),
- case t_is_atom(true, Arg2Type) of
+ case t_is_any_atom(true, Arg2Type) of
true -> True;
false ->
- case (t_is_atom(false, Arg1Type)
- andalso t_is_atom(false, Arg2Type)) of
+ case (t_is_any_atom(false, Arg1Type)
+ andalso t_is_any_atom(false, Arg2Type)) of
true -> False;
false -> t_boolean()
end
@@ -1465,10 +1428,10 @@ get_bif_constr({erlang, 'not', 1}, Dst, [Arg] = Args, _State) ->
Fun = fun(Var) ->
fun(Map) ->
Type = lookup_type(Var, Map),
- case t_is_atom(true, Type) of
+ case t_is_any_atom(true, Type) of
true -> False;
false ->
- case t_is_atom(false, Type) of
+ case t_is_any_atom(false, Type) of
true -> True;
false -> t_boolean()
end
@@ -1485,10 +1448,10 @@ get_bif_constr({erlang, '=:=', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
fun(Map) ->
DstType = lookup_type(Dst, Map),
OtherVarType = lookup_type(OtherVar, Map),
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true -> OtherVarType;
false ->
- case t_is_atom(false, DstType) of
+ case t_is_any_atom(false, DstType) of
true ->
case is_singleton_type(OtherVarType) of
true -> t_subtract(lookup_type(Self, Map), OtherVarType);
@@ -1518,7 +1481,7 @@ get_bif_constr({erlang, '=:=', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
get_bif_constr({erlang, '==', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
DstFun = fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, '==', 2, TmpArgTypes)
+ bif_return(erlang, '==', 2, TmpArgTypes)
end,
ArgFun =
fun(Var, Self) ->
@@ -1527,16 +1490,16 @@ get_bif_constr({erlang, '==', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
DstType = lookup_type(Dst, Map),
case is_singleton_non_number_type(VarType) of
true ->
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true -> VarType;
false ->
- case t_is_atom(false, DstType) of
+ case t_is_any_atom(false, DstType) of
true -> t_subtract(lookup_type(Self, Map), VarType);
false -> t_any()
end
end;
false ->
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true ->
case t_is_number(VarType) of
true -> t_number();
@@ -1560,18 +1523,14 @@ get_bif_constr({erlang, '==', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
mk_constraint(Arg1, sub, ArgV1),
mk_constraint(Arg2, sub, ArgV2)]);
get_bif_constr({erlang, element, 2} = _BIF, Dst, Args,
- #state{cs = Constrs, opaques = Opaques}) ->
+ #state{cs = Constrs}) ->
GenType = erl_bif_types:type(erlang, element, 2),
case t_is_none(GenType) of
true -> ?debug("Bif: ~w failed\n", [_BIF]), throw(error);
false ->
Fun = fun(Map) ->
- [I, T] = ATs = lookup_type_list(Args, Map),
- ATs2 = case lists:member(T, Opaques) of
- true -> [I, erl_types:t_opaque_structure(T)];
- false -> ATs
- end,
- erl_bif_types:type(erlang, element, 2, ATs2)
+ ATs2 = lookup_type_list(Args, Map),
+ bif_return(erlang, element, 2, ATs2)
end,
ReturnType = ?mk_fun_var(Fun, Args),
ArgTypes = erl_bif_types:arg_types(erlang, element, 2),
@@ -1583,22 +1542,14 @@ get_bif_constr({erlang, element, 2} = _BIF, Dst, Args,
end,
mk_conj_constraint_list([mk_constraint(Dst, sub, ReturnType)|NewCs])
end;
-get_bif_constr({M, F, A} = _BIF, Dst, Args, State) ->
+get_bif_constr({M, F, A} = _BIF, Dst, Args, _State) ->
GenType = erl_bif_types:type(M, F, A),
- Opaques = State#state.opaques,
case t_is_none(GenType) of
true -> ?debug("Bif: ~w failed\n", [_BIF]), throw(error);
false ->
- UnopaqueFun =
- fun(T) -> case lists:member(T, Opaques) of
- true -> erl_types:t_unopaque(T, [T]);
- false -> T
- end
- end,
ReturnType = ?mk_fun_var(fun(Map) ->
- TmpArgTypes0 = lookup_type_list(Args, Map),
- TmpArgTypes = [UnopaqueFun(T) || T<- TmpArgTypes0],
- erl_bif_types:type(M, F, A, TmpArgTypes)
+ TmpArgTypes = lookup_type_list(Args, Map),
+ bif_return(M, F, A, TmpArgTypes)
end, Args),
case erl_bif_types:is_known(M, F, A) of
false ->
@@ -1616,12 +1567,12 @@ get_bif_constr({M, F, A} = _BIF, Dst, Args, State) ->
end.
eval_inv_arith('+', _Pos, Dst, Arg) ->
- erl_bif_types:type(erlang, '-', 2, [Dst, Arg]);
+ bif_return(erlang, '-', 2, [Dst, Arg]);
eval_inv_arith('*', _Pos, Dst, Arg) ->
case t_number_vals(Arg) of
[0] -> t_integer();
_ ->
- TmpRet = erl_bif_types:type(erlang, 'div', 2, [Dst, Arg]),
+ TmpRet = bif_return(erlang, 'div', 2, [Dst, Arg]),
Zero = t_from_term(0),
%% If 0 is not part of the result, it cannot be part of the argument.
case t_is_subtype(Zero, Dst) of
@@ -1630,9 +1581,9 @@ eval_inv_arith('*', _Pos, Dst, Arg) ->
end
end;
eval_inv_arith('-', 1, Dst, Arg) ->
- erl_bif_types:type(erlang, '-', 2, [Arg, Dst]);
+ bif_return(erlang, '-', 2, [Arg, Dst]);
eval_inv_arith('-', 2, Dst, Arg) ->
- erl_bif_types:type(erlang, '+', 2, [Arg, Dst]).
+ bif_return(erlang, '+', 2, [Arg, Dst]).
range_inc(neg_inf) -> neg_inf;
range_inc(pos_inf) -> pos_inf;
@@ -1642,33 +1593,20 @@ range_dec(neg_inf) -> neg_inf;
range_dec(pos_inf) -> pos_inf;
range_dec(Int) when is_integer(Int) -> Int - 1.
-get_bif_test_constr(Dst, Arg, Type, State) ->
+get_bif_test_constr(Dst, Arg, Type, _State) ->
ArgFun = fun(Map) ->
DstType = lookup_type(Dst, Map),
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true -> Type;
false -> t_any()
end
end,
ArgV = ?mk_fun_var(ArgFun, [Dst]),
- Opaques = State#state.opaques,
DstFun = fun(Map) ->
ArgType = lookup_type(Arg, Map),
case t_is_none(t_inf(ArgType, Type)) of
true ->
- case lists:member(ArgType, Opaques) of
- true ->
- OpaqueStruct = erl_types:t_opaque_structure(ArgType),
- case t_is_none(t_inf(OpaqueStruct, Type)) of
- true -> t_from_term(false);
- false ->
- case t_is_subtype(ArgType, Type) of
- true -> t_from_term(true);
- false -> t_boolean()
- end
- end;
- false -> t_from_term(false)
- end;
+ t_from_term(false);
false ->
case t_is_subtype(ArgType, Type) of
true -> t_from_term(true);
@@ -1784,7 +1722,6 @@ minimize_state(#state{
fun_arities = FunArities,
self_rec = SelfRec,
prop_types = {d, PropTypes},
- opaques = Opaques,
solvers = Solvers
}) ->
Opts = [{read_concurrency, true}],
@@ -1798,7 +1735,6 @@ minimize_state(#state{
fun_arities = FunArities,
self_rec = SelfRec,
prop_types = {e, ETSPropTypes},
- opaques = Opaques,
solvers = Solvers
}.
@@ -1956,8 +1892,7 @@ v2_solve_ref(Fun, Map, State) ->
{ok, NewMap}.
v2_solve(#constraint{}=C, Map, V2State) ->
- State = V2State#v2_state.state,
- case solve_one_c(C, Map, State#state.opaques) of
+ case solve_one_c(C, Map) of
error ->
report_failed_constraint(C, Map),
{error, V2State};
@@ -2031,7 +1966,7 @@ v2_solve_self_recursive(Cs, Map, Id, RecType0, V2State0) ->
{ok, NewMap, V2State, U} ->
pp_map("recursive finished", NewMap),
NewRecType = unsafe_lookup_type(Id, NewMap),
- case t_is_equal(NewRecType, RecType0) of
+ case is_equal(NewRecType, RecType0) of
true ->
{NewMap2, U1} = enter_var_type(RecVar, NewRecType, NewMap),
{ok, NewMap2, V2State, lists:umerge(U, U1)};
@@ -2397,7 +2332,7 @@ solve_self_recursive(Cs, Map, MapDict, Id, RecType0, State) ->
{ok, NewMapDict, NewMap} ->
pp_map("NewMap", NewMap),
NewRecType = unsafe_lookup_type(Id, NewMap),
- case t_is_equal(NewRecType, RecType0) of
+ case is_equal(NewRecType, RecType0) of
true ->
{ok, NewMapDict, enter_type(RecVar, NewRecType, NewMap)};
false ->
@@ -2447,7 +2382,7 @@ solve_cs([#constraint_list{} = C|Tail], Map, MapDict, State) ->
{error, _NewMapDict} = Error -> Error
end;
solve_cs([#constraint{} = C|Tail], Map, MapDict, State) ->
- case solve_one_c(C, Map, State#state.opaques) of
+ case solve_one_c(C, Map) of
error ->
report_failed_constraint(C, Map),
{error, MapDict};
@@ -2457,10 +2392,10 @@ solve_cs([#constraint{} = C|Tail], Map, MapDict, State) ->
solve_cs([], Map, MapDict, _State) ->
{ok, MapDict, Map}.
-solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map, Opaques) ->
+solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map) ->
LhsType = lookup_type(Lhs, Map),
RhsType = lookup_type(Rhs, Map),
- Inf = t_inf(LhsType, RhsType, opaque),
+ Inf = t_inf(LhsType, RhsType),
?debug("Solving: ~s :: ~s ~w ~s :: ~s\n\tInf: ~s\n",
[format_type(Lhs), format_type(LhsType), Op,
format_type(Rhs), format_type(RhsType), format_type(Inf)]),
@@ -2468,12 +2403,12 @@ solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map, Opaques) ->
true -> error;
false ->
case Op of
- sub -> solve_subtype(Lhs, Inf, Map, Opaques);
+ sub -> solve_subtype(Lhs, Inf, Map);
eq ->
- case solve_subtype(Lhs, Inf, Map, Opaques) of
+ case solve_subtype(Lhs, Inf, Map) of
error -> error;
{ok, {Map1, U1}} ->
- case solve_subtype(Rhs, Inf, Map1, Opaques) of
+ case solve_subtype(Rhs, Inf, Map1) of
error -> error;
{ok, {Map2, U2}} -> {ok, {Map2, lists:umerge(U1, U2)}}
end
@@ -2481,7 +2416,7 @@ solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map, Opaques) ->
end
end.
-solve_subtype(Type, Inf, Map, Opaques) ->
+solve_subtype(Type, Inf, Map) ->
%% case cerl:is_literal(Type) of
%% true ->
%% case t_is_subtype(t_from_term(cerl:concrete(Type)), Inf) of
@@ -2489,7 +2424,7 @@ solve_subtype(Type, Inf, Map, Opaques) ->
%% false -> error
%% end;
%% false ->
- try t_unify(Type, Inf, Opaques) of
+ try t_unify(Type, Inf) of
{_, List} -> {ok, enter_type_list(List, Map)}
catch
throw:{mismatch, _T1, _T2} ->
@@ -2540,7 +2475,7 @@ join_one_key(Key, [Map|Maps], Type) ->
true -> Type;
false ->
NewType = lookup_type(Key, Map),
- case t_is_equal(NewType, Type) of
+ case is_equal(NewType, Type) of
true -> join_one_key(Key, Maps, Type);
false -> join_one_key(Key, Maps, t_sup(NewType, Type))
end
@@ -2555,7 +2490,7 @@ maps_are_equal(Map1, Map2, Deps) ->
maps_are_equal_1(Map1, Map2, [H|Tail]) ->
T1 = lookup_type(H, Map1),
T2 = lookup_type(H, Map2),
- case t_is_equal(T1, T2) of
+ case is_equal(T1, T2) of
true -> maps_are_equal_1(Map1, Map2, Tail);
false ->
?debug("~w: ~s =/= ~s\n", [H, format_type(T1), format_type(T2)]),
@@ -2587,14 +2522,20 @@ prune_keys(Map1, Map2, Deps) ->
enter_type(Key, Val, Map) when is_integer(Key) ->
?debug("Entering ~s :: ~s\n", [format_type(t_var(Key)), format_type(Val)]),
- case t_is_any(Val) of
+ %% Keep any() in the map if it is opaque:
+ case is_equal(Val, t_any()) of
true ->
erase_type(Key, Map);
false ->
LimitedVal = t_limit(Val, ?INTERNAL_TYPE_LIMIT),
+ [?debug("LimitedVal ~s\n", [format_type(LimitedVal)]) ||
+ not is_equal(LimitedVal, Val)],
case dict:find(Key, Map) of
- {ok, LimitedVal} -> Map;
- {ok, _} -> map_store(Key, LimitedVal, Map);
+ {ok, Value} ->
+ case is_equal(Value, LimitedVal) of
+ true -> Map;
+ false -> map_store(Key, LimitedVal, Map)
+ end;
error -> map_store(Key, LimitedVal, Map)
end
end;
@@ -2681,7 +2622,10 @@ updated_vars_only(U, OldMap, NewMap) ->
[V || V <- U, not is_same(V, OldMap, NewMap)].
is_same(Key, Map1, Map2) ->
- t_is_equal(lookup_type(Key, Map1), lookup_type(Key, Map2)).
+ is_equal(lookup_type(Key, Map1), lookup_type(Key, Map2)).
+
+is_equal(Type1, Type2) ->
+ t_is_equal(Type1, Type2).
pp_map(_S, _Map) ->
?debug("\t~s: ~p\n",
@@ -2716,11 +2660,6 @@ new_state(SCC0, NextLabel, CallGraph, Plt, PropTypes, Solvers) ->
state__set_rec_dict(State, RecDict) ->
State#state{records = RecDict}.
-state__set_opaques(#state{records = RecDict} = State, {M, _F, _A}) ->
- Opaques =
- erl_types:module_builtin_opaques(M) ++ t_opaque_from_records(RecDict),
- State#state{opaques = Opaques, module = M}.
-
state__set_in_match(State, Bool) ->
State#state{in_match = Bool}.
@@ -2760,7 +2699,8 @@ state__lookup_undef_var(Tree, #state{callgraph = CG, plt = Plt}) ->
{ok, MFA} ->
case dialyzer_plt:lookup(Plt, MFA) of
none -> error;
- {value, {RetType, ArgTypes}} -> {ok, t_fun(ArgTypes, RetType)}
+ {value, {RetType, ArgTypes}} ->
+ {ok, t_fun(ArgTypes, RetType)}
end
end.
@@ -2897,7 +2837,7 @@ state__get_cs(Var, #state{cmap = {d, Dict}}) ->
dict:fetch(Var, Dict).
state__is_self_rec(Fun, #state{self_rec = SelfRec}) ->
- Fun =:= SelfRec.
+ not (SelfRec =:= 'false') andalso is_equal(Fun, SelfRec).
state__store_funs(Vars0, Funs0, #state{fun_map = Map} = State) ->
debug_make_name_map(Vars0, Funs0),
@@ -2923,7 +2863,9 @@ state__finalize(State) ->
%%
%% ============================================================================
--spec mk_constraint(erl_types:erl_type(), constr_op(), fvar_or_type()) -> #constraint{}.
+-spec mk_constraint(erl_types:erl_type(),
+ constr_op(),
+ fvar_or_type()) -> #constraint{}.
mk_constraint(Lhs, Op, Rhs) ->
case t_is_any(Lhs) orelse constraint_opnd_is_any(Rhs) of
@@ -2934,9 +2876,9 @@ mk_constraint(Lhs, Op, Rhs) ->
case Deps =:= [] of
true ->
%% This constraint is constant. Solve it immediately.
- case solve_one_c(C, map_new(), []) of
+ case solve_one_c(C, map_new()) of
error -> throw(error);
- _ ->
+ _R ->
%% This is always true, keep it anyway for logistic reasons
C
end;
@@ -2944,10 +2886,13 @@ mk_constraint(Lhs, Op, Rhs) ->
C
end;
true ->
- C = mk_constraint_1(t_any(), Op, t_any()),
- C#constraint{deps = []}
+ mk_constraint_any(Op)
end.
+mk_constraint_any(Op) ->
+ C = mk_constraint_1(t_any(), Op, t_any()),
+ C#constraint{deps = []}.
+
%% the following function is used so that we do not call
%% erl_types:t_is_any/1 with a term other than an erl_type()
-spec constraint_opnd_is_any(fvar_or_type()) -> boolean().
@@ -3002,7 +2947,8 @@ mk_constraint_1(Lhs, Op, Rhs) ->
#constraint{lhs = Lhs, op = Op, rhs = Rhs}.
mk_constraints([Lhs|LhsTail], Op, [Rhs|RhsTail]) ->
- [mk_constraint(Lhs, Op, Rhs)|mk_constraints(LhsTail, Op, RhsTail)];
+ [mk_constraint(Lhs, Op, Rhs) |
+ mk_constraints(LhsTail, Op, RhsTail)];
mk_constraints([], _Op, []) ->
[].
@@ -3017,7 +2963,7 @@ mk_constraint_list(Type, List) ->
Deps = calculate_deps(List2),
case Deps =:= [] of
true -> #constraint_list{type = conj,
- list = [mk_constraint(t_any(), eq, t_any())],
+ list = [mk_constraint_any(eq)],
deps = []};
false -> #constraint_list{type = Type, list = List2, deps = Deps}
end.
@@ -3236,6 +3182,9 @@ calculate_masks([], _I, L) ->
%%
%% ============================================================================
+bif_return(M, F, A, Xs) ->
+ erl_bif_types:type(M, F, A, Xs).
+
is_singleton_non_number_type(Type) ->
case t_is_number(Type) of
true -> false;
@@ -3265,7 +3214,7 @@ is_singleton_type(Type) ->
find_element(Args, Cs) ->
[Pos, Tuple] = Args,
- case erl_types:t_is_number(Pos) of
+ case t_is_number(Pos) of
true ->
case erl_types:t_number_vals(Pos) of
'unknown' -> 'unknown';
@@ -3301,8 +3250,10 @@ find_constraint(Tuple, [_|Cs]) ->
lookup_record(Records, Tag, Arity) ->
case erl_types:lookup_record(Tag, Arity, Records) of
{ok, Fields} ->
- {ok, t_tuple([t_from_term(Tag)|
- [FieldType || {_FieldName, FieldType} <- Fields]])};
+ RecType =
+ t_tuple([t_from_term(Tag)|
+ [FieldType || {_FieldName, FieldType} <- Fields]]),
+ {ok, RecType};
error ->
error
end.
diff --git a/lib/dialyzer/test/Makefile b/lib/dialyzer/test/Makefile
index 9f8a3f1194..27cabc8ef8 100644
--- a/lib/dialyzer/test/Makefile
+++ b/lib/dialyzer/test/Makefile
@@ -7,6 +7,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
AUXILIARY_FILES=\
dialyzer.spec\
+ dialyzer.cover\
dialyzer_test_constants.hrl\
dialyzer_common.erl\
file_utils.erl\
diff --git a/lib/dialyzer/test/dialyzer.cover b/lib/dialyzer/test/dialyzer.cover
new file mode 100644
index 0000000000..cc61ea1901
--- /dev/null
+++ b/lib/dialyzer/test/dialyzer.cover
@@ -0,0 +1,3 @@
+%% -*- erlang -*-
+{incl_app,dialyzer,details}.
+%{incl_mods,dialyzer,[erl_types,erl_bif_types]}.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/crash b/lib/dialyzer/test/opaque_SUITE_data/results/crash
index 1ddae5149f..69bdc00257 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/crash
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/crash
@@ -1,6 +1,6 @@
crash_1.erl:45: Record construction #targetlist{list::[]} violates the declared type of field list::'undefined' | crash_1:target()
-crash_1.erl:48: The call crash_1:get_using_branch2(Branch::maybe_improper_list(),L::'undefined' | crash_1:target()) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+crash_1.erl:48: The call crash_1:get_using_branch2(Branch::maybe_improper_list(),L::'undefined' | crash_1:target()) will never return since it differs in the 2nd argument from the success typing arguments: (any(),maybe_improper_list())
crash_1.erl:50: The pattern <_Branch, []> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
crash_1.erl:52: The pattern <Branch, [H = {'target', _, _} | _T]> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
crash_1.erl:54: The pattern <Branch, [{'target', _, _} | T]> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/ets b/lib/dialyzer/test/opaque_SUITE_data/results/ets
index 5498ba1538..e79696bc30 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/ets
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/ets
@@ -1,3 +1,4 @@
ets_use.erl:12: Guard test is_integer(T::atom() | tid()) breaks the opaqueness of its argument
+ets_use.erl:20: The type test is_integer(atom() | tid()) breaks the opaqueness of the term atom() | tid()
ets_use.erl:7: Guard test is_integer(T::tid()) breaks the opaqueness of its argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/ewgi b/lib/dialyzer/test/opaque_SUITE_data/results/ewgi
index 3c8cfb59f8..5bc6b87fbb 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/ewgi
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/ewgi
@@ -1,4 +1,4 @@
ewgi_api.erl:55: The call gb_trees:to_list({non_neg_integer(),'nil' | {_,_,_,_}}) does not have an opaque term of type gb_tree() as 1st argument
-ewgi_testapp.erl:35: The call ewgi_testapp:htmlise_data("request_data",{non_neg_integer(),'nil' | {_,_,_,_}}) will never return since it differs in the 2nd argument from the success typing arguments: ([95 | 97 | 100 | 101 | 104 | 112 | 113 | 114 | 115 | 116 | 117,...],[{_,_}])
+ewgi_testapp.erl:35: The call ewgi_testapp:htmlise_data("request_data",{non_neg_integer(),'nil' | {_,_,_,_}}) does not have a term of type [{_,_}] | gb_tree() (with opaque subterms) as 2nd argument
ewgi_testapp.erl:43: The call gb_trees:to_list(T::{non_neg_integer(),'nil' | {_,_,_,_}}) does not have an opaque term of type gb_tree() as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop1 b/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop1
index eb8f304905..4fe5fcfe2d 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop1
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop1
@@ -2,4 +2,4 @@
inf_loop1.erl:119: The pattern [{_, LNorms}] can never match the type []
inf_loop1.erl:121: The pattern [{LinksA, LNormA}, {LinksB, LNormB}] can never match the type []
inf_loop1.erl:129: The pattern [{_, Norm} | _] can never match the type []
-inf_loop1.erl:71: The call gb_trees:get(Edge::any(),Etab::array()) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+inf_loop1.erl:71: The call gb_trees:get(Edge::any(),Etab::array()) does not have an opaque term of type gb_tree() as 2nd argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop2 b/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop2
new file mode 100644
index 0000000000..4f0b79eb35
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop2
@@ -0,0 +1,5 @@
+
+inf_loop2.erl:122: The pattern [{_, LNorms}] can never match the type []
+inf_loop2.erl:124: The pattern [{LinksA, LNormA}, {LinksB, LNormB}] can never match the type []
+inf_loop2.erl:132: The pattern [{_, Norm} | _] can never match the type []
+inf_loop2.erl:74: The call gb_trees:get(Edge::any(),Etab::array()) does not have an opaque term of type gb_tree() as 2nd argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/int b/lib/dialyzer/test/opaque_SUITE_data/results/int
index 3ee4def34b..dc806fa12c 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/int
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/int
@@ -1,3 +1,3 @@
-int_adt.erl:28: Invalid type specification for function int_adt:add_f/2. The success typing is (number(),float()) -> number()
-int_adt.erl:32: Invalid type specification for function int_adt:div_f/2. The success typing is (number(),number()) -> float()
+int_adt.erl:28: Invalid type specification for function int_adt:add_f/2. The success typing is (number() | int_adt:int(),float()) -> number() | int_adt:int()
+int_adt.erl:32: Invalid type specification for function int_adt:div_f/2. The success typing is (number() | int_adt:int(),number() | int_adt:int()) -> float()
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque b/lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque
index ab850b613e..0363be544d 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque
@@ -1,2 +1,2 @@
-mixed_opaque_use.erl:31: The call mixed_opaque_rec_adt:get_a(Q::mixed_opaque_queue_adt:my_queue()) contains an opaque term as 1st argument when an opaque term of type mixed_opaque_rec_adt:rec() is expected
+mixed_opaque_use.erl:31: The call mixed_opaque_rec_adt:get_a(Q::mixed_opaque_queue_adt:my_queue()) does not have an opaque term of type mixed_opaque_rec_adt:rec() as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/modules b/lib/dialyzer/test/opaque_SUITE_data/results/modules
new file mode 100644
index 0000000000..f71334b9de
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/modules
@@ -0,0 +1,3 @@
+
+opaque_digraph.erl:353: Cons will produce an improper list since its 2nd argument is number()
+opaque_digraph.erl:365: Cons will produce an improper list since its 2nd argument is number()
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/my_queue b/lib/dialyzer/test/opaque_SUITE_data/results/my_queue
index 2860b91084..1f25a6f9c3 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/my_queue
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/my_queue
@@ -4,4 +4,4 @@ my_queue_use.erl:19: The call my_queue_adt:add(42,Q0::[]) does not have an opaqu
my_queue_use.erl:24: The attempt to match a term of type my_queue_adt:my_queue() against the pattern [42 | Q2] breaks the opaqueness of the term
my_queue_use.erl:30: Attempt to test for equality between a term of type [] and a term of opaque type my_queue_adt:my_queue()
my_queue_use.erl:34: Cons will produce an improper list since its 2nd argument is my_queue_adt:my_queue()
-my_queue_use.erl:34: The call my_queue_adt:dequeue(nonempty_improper_list(42,my_queue_adt:my_queue())) does not have an opaque term of type my_queue_adt:my_queue() as 1st argument
+my_queue_use.erl:34: The call my_queue_adt:dequeue(nonempty_maybe_improper_list(42,my_queue_adt:my_queue())) does not have an opaque term of type my_queue_adt:my_queue() as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/opaque b/lib/dialyzer/test/opaque_SUITE_data/results/opaque
index ca76f57b54..5747f9061f 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/opaque
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/opaque
@@ -1,2 +1,3 @@
+opaque_bug3.erl:19: The pattern 'a' can never match the type #c{}
opaque_bug4.erl:20: The attempt to match a term of type opaque_adt:abc() against the pattern 'a' breaks the opaqueness of the term
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/queue b/lib/dialyzer/test/opaque_SUITE_data/results/queue
index c3f04ea64d..59ce33f098 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/queue
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/queue
@@ -5,7 +5,6 @@ queue_use.erl:27: The attempt to match a term of type queue() against the patter
queue_use.erl:33: Attempt to test for equality between a term of type {[42,...],[]} and a term of opaque type queue()
queue_use.erl:36: The attempt to match a term of type queue() against the pattern {F, _R} breaks the opaqueness of the term
queue_use.erl:40: The call queue:out({[42,...],[]}) does not have an opaque term of type queue() as 1st argument
-queue_use.erl:48: The call queue_use:add_unique(42,#db{p::[],q::queue()}) contains an opaque term as 2nd argument when terms of different types are expected in these positions
queue_use.erl:51: The call queue_use:is_in_queue(E::42,DB::#db{p::[],q::queue()}) contains an opaque term as 2nd argument when terms of different types are expected in these positions
queue_use.erl:56: The attempt to match a term of type #db{p::[],q::queue()} against the pattern {'db', _, {L1, L2}} breaks the opaqueness of queue()
queue_use.erl:62: The call queue_use:tuple_queue({42,'gazonk'}) does not have a term of type {_,queue()} (with opaque subterms) as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/simple b/lib/dialyzer/test/opaque_SUITE_data/results/simple
new file mode 100644
index 0000000000..f55b384cbe
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/simple
@@ -0,0 +1,87 @@
+
+exact_api.erl:17: The call exact_api:set_type(A::#digraph{vtab::'notable',etab::'notable',ntab::'notable',cyclic::'true'}) does not have an opaque term of type digraph() as 1st argument
+exact_api.erl:23: The call digraph:delete(G::#digraph{vtab::'notable',etab::'notable',ntab::'notable',cyclic::'true'}) does not have an opaque term of type digraph() as 1st argument
+exact_api.erl:55: The attempt to match a term of type exact_adt:exact_adt() against the pattern {'exact_adt'} breaks the opaqueness of the term
+exact_api.erl:59: The call exact_adt:exact_adt_set_type2(A::#exact_adt{}) does not have an opaque term of type exact_adt:exact_adt() as 1st argument
+is_rec.erl:10: The call erlang:is_record(simple1_adt:d1(),'r',2) contains an opaque term as 1st argument when terms of different types are expected in these positions
+is_rec.erl:15: The call erlang:is_record(A::simple1_adt:d1(),'r',I::1 | 2 | 3) contains an opaque term as 1st argument when terms of different types are expected in these positions
+is_rec.erl:19: Guard test is_record(A::simple1_adt:d1(),'r',2) breaks the opaqueness of its argument
+is_rec.erl:23: Guard test is_record({simple1_adt:d1(),1},'r',2) breaks the opaqueness of its argument
+is_rec.erl:41: The call erlang:is_record(A::simple1_adt:d1(),R::'a') contains an opaque term as 1st argument when terms of different types are expected in these positions
+is_rec.erl:45: The call erlang:is_record(A::simple1_adt:d1(),A::simple1_adt:d1(),1) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+is_rec.erl:49: The call erlang:is_record(A::simple1_adt:d1(),any(),1) contains an opaque term as 1st argument when terms of different types are expected in these positions
+is_rec.erl:53: The call erlang:is_record(A::simple1_adt:d1(),A::simple1_adt:d1(),any()) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+is_rec.erl:57: Guard test is_record(A::simple1_adt:d1(),'r',2) breaks the opaqueness of its argument
+is_rec.erl:61: The record #r{f1::simple1_adt:d1()} violates the declared type for #r{}
+is_rec.erl:65: The call erlang:is_record({simple1_adt:d1(),1},'r',2) contains an opaque term as 1st argument when terms of different types are expected in these positions
+rec_api.erl:22: Record construction #r1{f1::10} violates the declared type of field f1::'undefined' | rec_api:a()
+rec_api.erl:23: The pattern {'r1', 10} violates the declared type for #r1{}
+rec_api.erl:27: The attempt to match a term of type rec_adt:r1() against the pattern {'r1', 'a'} breaks the opaqueness of the term
+rec_api.erl:29: Invalid type specification for function rec_api:adt_t1/1. The success typing is (#r1{f1::'a'}) -> #r1{f1::'a'}
+rec_api.erl:34: Invalid type specification for function rec_api:adt_r1/0. The success typing is () -> #r1{f1::'a'}
+rec_api.erl:77: The attempt to match a term of type rec_api:f() against the variable _ breaks the opaqueness of the term
+simple1_api.erl:113: The test simple1_api:d1() =:= simple1_api:d2() can never evaluate to 'true'
+simple1_api.erl:118: Guard test simple1_api:d2() =:= A::simple1_api:d1() can never succeed
+simple1_api.erl:142: Attempt to test for equality between a term of type simple1_adt:o2() and a term of opaque type simple1_adt:o1()
+simple1_api.erl:148: Guard test simple1_adt:o2() =:= A::simple1_adt:o1() contains an opaque term as 1st argument
+simple1_api.erl:154: Attempt to test for inequality between a term of type simple1_adt:o2() and a term of opaque type simple1_adt:o1()
+simple1_api.erl:160: Attempt to test for inequality between a term of type simple1_adt:o2() and a term of opaque type simple1_adt:o1()
+simple1_api.erl:165: Attempt to test for equality between a term of type simple1_adt:c2() and a term of opaque type simple1_adt:c1()
+simple1_api.erl:181: Guard test A::simple1_adt:d1() =< B::simple1_adt:d2() contains an opaque term as 1st argument
+simple1_api.erl:185: Guard test 'a' =< B::simple1_adt:d2() contains an opaque term as 2nd argument
+simple1_api.erl:189: Guard test A::simple1_adt:d1() =< 'd' contains an opaque term as 1st argument
+simple1_api.erl:197: The type test is_integer(A::simple1_adt:d1()) breaks the opaqueness of the term A::simple1_adt:d1()
+simple1_api.erl:221: Guard test A::simple1_api:i1() > 3 can never succeed
+simple1_api.erl:225: Guard test A::simple1_adt:i1() > 3 contains an opaque term as 1st argument
+simple1_api.erl:233: Guard test A::simple1_adt:i1() < 3 contains an opaque term as 1st argument
+simple1_api.erl:239: Guard test A::1 > 3 can never succeed
+simple1_api.erl:243: Guard test A::1 > 3 can never succeed
+simple1_api.erl:257: Guard test is_function(T::simple1_api:o1()) can never succeed
+simple1_api.erl:265: Guard test is_function(T::simple1_adt:o1()) breaks the opaqueness of its argument
+simple1_api.erl:269: The type test is_function(T::simple1_adt:o1()) breaks the opaqueness of the term T::simple1_adt:o1()
+simple1_api.erl:274: Guard test is_function(T::simple1_api:o1(),A::simple1_api:i1()) can never succeed
+simple1_api.erl:284: Guard test is_function(T::simple1_adt:o1(),A::simple1_adt:i1()) breaks the opaqueness of its argument
+simple1_api.erl:289: The type test is_function(T::simple1_adt:o1(),A::simple1_adt:i1()) breaks the opaqueness of the term T::simple1_adt:o1()
+simple1_api.erl:294: The call erlang:is_function(T::simple1_api:o1(),A::simple1_adt:i1()) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+simple1_api.erl:300: The type test is_function(T::simple1_adt:o1(),A::simple1_api:i1()) breaks the opaqueness of the term T::simple1_adt:o1()
+simple1_api.erl:306: Guard test B::simple1_api:b2() =:= 'true' can never succeed
+simple1_api.erl:315: Guard test A::simple1_api:b1() =:= 'false' can never succeed
+simple1_api.erl:319: Guard test not('and'('true','true')) can never succeed
+simple1_api.erl:337: Clause guard cannot succeed.
+simple1_api.erl:342: Guard test B::simple1_adt:b2() =:= 'true' contains an opaque term as 1st argument
+simple1_api.erl:347: Guard test A::simple1_adt:b1() =:= 'true' contains an opaque term as 1st argument
+simple1_api.erl:355: Invalid type specification for function simple1_api:bool_adt_t6/1. The success typing is ('true') -> 1
+simple1_api.erl:365: Clause guard cannot succeed.
+simple1_api.erl:368: Invalid type specification for function simple1_api:bool_adt_t8/2. The success typing is (boolean(),boolean()) -> 1
+simple1_api.erl:378: Clause guard cannot succeed.
+simple1_api.erl:381: Invalid type specification for function simple1_api:bool_adt_t9/2. The success typing is ('false','false') -> 1
+simple1_api.erl:407: The size simple1_adt:i1() breaks the opaqueness of A
+simple1_api.erl:418: The attempt to match a term of type non_neg_integer() against the variable A breaks the opaqueness of simple1_adt:i1()
+simple1_api.erl:425: The attempt to match a term of type non_neg_integer() against the variable B breaks the opaqueness of simple1_adt:i1()
+simple1_api.erl:432: The attempt to match a term of type non_neg_integer() against the variable B breaks the opaqueness of simple1_api:o1()
+simple1_api.erl:448: The attempt to match a term of type non_neg_integer() against the variable Sz breaks the opaqueness of simple1_adt:i1()
+simple1_api.erl:460: The attempt to match a term of type simple1_adt:bit1() against the pattern <<_/binary-unit:8>> breaks the opaqueness of the term
+simple1_api.erl:478: The call 'foo':A(A::simple1_adt:a()) breaks the opaqueness of the term A :: simple1_adt:a()
+simple1_api.erl:486: The call A:'foo'(A::simple1_adt:a()) breaks the opaqueness of the term A :: simple1_adt:a()
+simple1_api.erl:499: The call 'foo':A(A::simple1_api:i()) requires that A is of type atom() not simple1_api:i()
+simple1_api.erl:503: The call 'foo':A(A::simple1_adt:i()) requires that A is of type atom() not simple1_adt:i()
+simple1_api.erl:507: The call A:'foo'(A::simple1_api:i()) requires that A is of type atom() | tuple() not simple1_api:i()
+simple1_api.erl:511: The call A:'foo'(A::simple1_adt:i()) requires that A is of type atom() | tuple() not simple1_adt:i()
+simple1_api.erl:519: Guard test A::simple1_adt:d2() == B::simple1_adt:d1() contains an opaque term as 1st argument
+simple1_api.erl:534: Guard test A::simple1_adt:d1() >= 3 contains an opaque term as 1st argument
+simple1_api.erl:536: Guard test A::simple1_adt:d1() == 3 contains an opaque term as 1st argument
+simple1_api.erl:538: Guard test A::simple1_adt:d1() =:= 3 contains an opaque term as 1st argument
+simple1_api.erl:548: The call erlang:'<'(A::simple1_adt:d1(),3) contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple1_api.erl:558: The call erlang:'=<'(A::simple1_adt:d1(),B::simple1_adt:d2()) contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple1_api.erl:565: Guard test {digraph(),3} > {digraph(),atom() | tid()} contains an opaque term as 2nd argument
+simple1_api.erl:91: Invalid type specification for function simple1_api:tup/0. The success typing is () -> {'a','b'}
+simple2_api.erl:100: The call lists:flatten(A::simple1_adt:tuple1()) contains an opaque term as 1st argument when a structured term of type [any()] is expected
+simple2_api.erl:116: The call lists:flatten({simple1_adt:tuple1()}) will never return since it differs in the 1st argument from the success typing arguments: ([any()])
+simple2_api.erl:121: Guard test {simple1_adt:d1(),3} > {simple1_adt:d1(),simple1_adt:tuple1()} contains an opaque term as 2nd argument
+simple2_api.erl:125: The call erlang:tuple_to_list(B::simple1_adt:tuple1()) contains an opaque term as 1st argument when a structured term of type tuple() is expected
+simple2_api.erl:31: The call erlang:'!'(A::simple1_adt:d1(),'foo') contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple2_api.erl:35: The call erlang:send(A::simple1_adt:d1(),'foo') contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple2_api.erl:51: The call erlang:'<'(A::simple1_adt:d1(),3) contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple2_api.erl:59: The call lists:keysearch(1,A::simple1_adt:d1(),[]) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+simple2_api.erl:67: The call lists:keysearch('key',1,A::simple1_adt:tuple1()) contains an opaque term as 3rd argument when terms of different types are expected in these positions
+simple2_api.erl:96: The call lists:keyreplace('a',1,[{1, 2}],A::simple1_adt:tuple1()) contains an opaque term as 4th argument when terms of different types are expected in these positions
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/wings b/lib/dialyzer/test/opaque_SUITE_data/results/wings
index a9571441f8..0ca91ae331 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/wings
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/wings
@@ -4,7 +4,7 @@ wings_dissolve.erl:19: Guard test is_list(Faces::gb_set()) breaks the opaqueness
wings_dissolve.erl:272: Guard test is_list(Faces::gb_set()) breaks the opaqueness of its argument
wings_dissolve.erl:31: The call gb_sets:is_empty(Faces::[any(),...]) does not have an opaque term of type gb_set() as 1st argument
wings_edge.erl:205: The pattern <Edge, 'hard', Htab> can never match the type <_,'soft',_>
-wings_edge_cmd.erl:30: The call gb_trees:size(P::gb_set()) contains an opaque term as 1st argument when an opaque term of type gb_tree() is expected
+wings_edge_cmd.erl:30: The call gb_trees:size(P::gb_set()) does not have an opaque term of type gb_tree() as 1st argument
wings_edge_cmd.erl:32: The pattern [_ | Parts] can never match the type []
wings_edge_cmd.erl:32: The pattern [{_, P} | _] can never match the type []
wings_io.erl:30: The attempt to match a term of type {'empty',queue()} against the pattern {'empty', {In, Out}} breaks the opaqueness of queue()
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl b/lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl
index d65af0af4e..4eb202f16a 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl
@@ -1,5 +1,5 @@
-module(ets_use).
--export([t1/0, t2/0]).
+-export([t1/0, t2/0, t3/0, t4/0]).
t1() ->
case n() of
@@ -13,4 +13,10 @@ t2() ->
T when is_atom(T) -> atm
end.
-n() -> ets:new(n, [named_table]).
+t3() ->
+ is_atom(n()). % no warning since atom() is possible
+
+t4() ->
+ is_integer(n()). % opaque warning since tid() is opaque
+
+n() -> ets:new(n, [named_table]). % -> atom() | tid()
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/inf_loop2.erl b/lib/dialyzer/test/opaque_SUITE_data/src/inf_loop2.erl
new file mode 100644
index 0000000000..659ccaf015
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/inf_loop2.erl
@@ -0,0 +1,175 @@
+%% -*- erlang-indent-level: 2 -*-
+%%----------------------------------------------------------------------------
+%% Copy of inf_loop1.erl, where the calls mentioned below have been
+%% restored.
+
+%% Non-sensical (i.e., stripped-down) program that sends the analysis
+%% into an infinite loop. The #we.es field was originally a gb_tree()
+%% but the programmer declared it as an array in order to change it to
+%% that data type instead. In the file, there are two calls to function
+%% gb_trees:get/2 which seem to be the ones responsible for sending the
+%% analysis into an infinite loop. Currently, these calls are marked and
+%% have been changed to gbee_trees:get/2 in order to be able to see that
+%% the analysis works if these two calls are taken out of the picture.
+%%----------------------------------------------------------------------------
+-module(inf_loop2).
+
+-export([command/1]).
+
+-record(we, {id,
+ es = array:new() :: array(),
+ vp,
+ mirror = none}).
+-record(edge, {vs,ve,a = none,b = none,lf,rf,ltpr,ltsu,rtpr,rtsu}).
+
+command(St) ->
+ State = drag_mode(offset_region),
+ SetupSt = wings_sel_conv:more(St),
+ Tvs = wings_sel:fold(fun(Faces, #we{id = Id} = We, Acc) ->
+ FaceRegions = wings_sel:face_regions(Faces, We),
+ {AllVs0,VsData} =
+ collect_offset_regions_data(FaceRegions, We, [], []),
+ AllVs = ordsets:from_list(AllVs0),
+ [{Id,{AllVs,offset_regions_fun(VsData, State)}}|Acc]
+ end,
+ [],
+ SetupSt),
+ wings_drag:setup(Tvs, 42, [], St).
+
+drag_mode(Type) ->
+ {Mode,Norm} = wings_pref:get_value(Type, {average,loop}),
+ {Type,Mode,Norm}.
+
+collect_offset_regions_data([Faces|Regions], We, AllVs, VsData) ->
+ {FaceNormTab,OuterEdges,RegVs} =
+ some_fake_module:faces_data_0(Faces, We, [], [], []),
+ {LoopNorm,LoopVsData,LoopVs} =
+ offset_regions_loop_data(OuterEdges, Faces, We, FaceNormTab),
+ Vs = RegVs -- LoopVs,
+ RegVsData = vertex_normals(Vs, FaceNormTab, We, LoopVsData),
+ collect_offset_regions_data(Regions, We, RegVs ++ AllVs,
+ [{LoopNorm,RegVsData}|VsData]);
+collect_offset_regions_data([], _, AllVs, VsData) ->
+ {AllVs,VsData}.
+
+offset_regions_loop_data(Edges, Faces, We, FNtab) ->
+ EdgeSet = gb_sets:from_list(Edges),
+ offset_loop_data_0(EdgeSet, Faces, We, FNtab, [], [], []).
+
+offset_loop_data_0(EdgeSet0, Faces, We, FNtab, LNorms, VData0, Vs0) ->
+ case gb_sets:is_empty(EdgeSet0) of
+ false ->
+ {Edge,EdgeSet1} = gb_sets:take_smallest(EdgeSet0),
+ {EdgeSet,VData,Links,LoopNorm,Vs} =
+ offset_loop_data_1(Edge, EdgeSet1, Faces, We, FNtab, VData0, Vs0),
+ offset_loop_data_0(EdgeSet, Faces, We, FNtab,
+ [{Links,LoopNorm}|LNorms], VData, Vs);
+ true ->
+ AvgLoopNorm = average_loop_norm(LNorms),
+ {AvgLoopNorm,VData0,Vs0}
+ end.
+
+offset_loop_data_1(Edge, EdgeSet, _Faces,
+ #we{es = Etab, vp = Vtab} = We, FNtab, VData, Vs) ->
+ #edge{vs = Va, ve = Vb, lf = Lf, ltsu = NextLeft} = gb_trees:get(Edge, Etab),
+ VposA = gb_trees:get(Va, Vtab),
+ VposB = gb_trees:get(Vb, Vtab),
+ VDir = e3d_vec:sub(VposB, VposA),
+ FNorm = wings_face:normal(Lf, We),
+ EdgeData = gb_trees:get(NextLeft, Etab),
+ offset_loop_data_2(NextLeft, EdgeData, Va, VposA, Lf, Edge, We, FNtab,
+ EdgeSet, VDir, [], [FNorm], VData, [], Vs, 0).
+
+offset_loop_data_2(CurE, #edge{vs = Va, ve = Vb, lf = PrevFace,
+ rtsu = NextEdge, ltsu = IfCurIsMember},
+ Vb, VposB, PrevFace, LastE,
+ #we{mirror = M} = We,
+ FNtab, EdgeSet0, VDir, EDir0, VNorms0, VData0, VPs0, Vs0,
+ Links) ->
+ Mirror = M == PrevFace,
+ offset_loop_is_member(Mirror, Vb, Va, VposB, CurE, IfCurIsMember, VNorms0,
+ NextEdge, EdgeSet0, VDir, EDir0, FNtab, PrevFace,
+ LastE, We, VData0, VPs0, Vs0, Links).
+
+offset_loop_is_member(Mirror, V1, V2, Vpos1, CurE, NextE, VNorms0, NEdge,
+ EdgeSet0, VDir, EDir0, FNtab, PFace, LastE, We,
+ VData0, VPs0, Vs0, Links) ->
+ #we{es = Etab, vp = Vtab} = We,
+ Vpos2 = gb_trees:get(V2, Vtab),
+ Dir = e3d_vec:sub(Vpos2, Vpos1),
+ NextVDir = e3d_vec:neg(Dir),
+ EdgeSet = gb_sets:delete(CurE, EdgeSet0),
+ EdgeData = gb_trees:get(NextE, Etab), %% HERE
+ [FNorm|_] = VNorms0,
+ VData = offset_loop_data_3(Mirror, V1, Vpos1, VNorms0, NEdge, VDir,
+ Dir, EDir0, FNtab, We, VData0),
+ VPs = [Vpos1|VPs0],
+ Vs = [V1|Vs0],
+ offset_loop_data_2(NextE, EdgeData, V2, Vpos2, PFace, LastE, We, FNtab,
+ EdgeSet, NextVDir, [], [FNorm], VData, VPs, Vs, Links + 1).
+
+offset_loop_data_3(false, V, Vpos, VNorms0, NextEdge,
+ VDir, Dir, EDir0, FNtab, We, VData0) ->
+ #we{es = Etab} = We,
+ VNorm = e3d_vec:norm(e3d_vec:add(VNorms0)),
+ NV = wings_vertex:other(V, gb_trees:get(NextEdge, Etab)), %% HERE
+ ANorm = vertex_normal(NV, FNtab, We),
+ EDir = some_fake_module:average_edge_dir(VNorm, VDir, Dir, EDir0),
+ AvgDir = some_fake_module:evaluate_vdata(VDir, Dir, VNorm),
+ ScaledDir = some_fake_module:along_edge_scale_factor(VDir, Dir, EDir, ANorm),
+ [{V,{Vpos,AvgDir,EDir,ScaledDir}}|VData0].
+
+average_loop_norm([{_,LNorms}]) ->
+ e3d_vec:norm(LNorms);
+average_loop_norm([{LinksA,LNormA},{LinksB,LNormB}]) ->
+ case LinksA < LinksB of
+ true ->
+ e3d_vec:norm(e3d_vec:add(e3d_vec:neg(LNormA), LNormB));
+ false ->
+ e3d_vec:norm(e3d_vec:add(e3d_vec:neg(LNormB), LNormA))
+ end;
+average_loop_norm(LNorms) ->
+ LoopNorms = [Norm || {_,Norm} <- LNorms],
+ e3d_vec:norm(e3d_vec:neg(e3d_vec:add(LoopNorms))).
+
+vertex_normals([V|Vs], FaceNormTab, #we{vp = Vtab, mirror = M} = We, Acc) ->
+ FaceNorms =
+ wings_vertex:fold(fun(_, Face, _, A) when Face == M ->
+ [e3d_vec:neg(wings_face:normal(M, We))|A];
+ (_, Face, _, A) ->
+ [gb_trees:get(Face, FaceNormTab)|A]
+ end, [], V, We),
+ VNorm = e3d_vec:norm(e3d_vec:add(FaceNorms)),
+ Vpos = gb_trees:get(V, Vtab),
+ vertex_normals(Vs, FaceNormTab, We, [{V,{Vpos,VNorm}}|Acc]);
+vertex_normals([], _, _, Acc) ->
+ Acc.
+
+vertex_normal(V, FaceNormTab, #we{mirror = M} = We) ->
+ wings_vertex:fold(fun(_, Face, _, A) when Face == M ->
+ [e3d_vec:neg(wings_face:normal(Face, We))|A];
+ (_, Face, _, A) ->
+ N = gb_trees:get(Face, FaceNormTab),
+ case e3d_vec:is_zero(N) of
+ true -> A;
+ false -> [N|A]
+ end
+ end, [], V, We).
+
+offset_regions_fun(OffsetData, {_,Solution,_} = State) ->
+ fun(new_mode_data, {NewState,_}) ->
+ offset_regions_fun(OffsetData, NewState);
+ ([Dist,_,_,Bump|_], A) ->
+ lists:foldl(fun({LoopNormal,VsData}, VsAcc0) ->
+ lists:foldl(fun({V,{Vpos0,VNorm}}, VsAcc) ->
+ [{V,Vpos0}|VsAcc];
+ ({V,{Vpos0,Dir,EDir,ScaledEDir}}, VsAcc) ->
+ Vec = case Solution of
+ average -> Dir;
+ along_edges -> EDir;
+ scaled -> ScaledEDir
+ end,
+ [{V,Vpos0}|VsAcc]
+ end, VsAcc0, VsData)
+ end, A, OffsetData)
+ end.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl
new file mode 100644
index 0000000000..09d4229e28
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl
@@ -0,0 +1,655 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-2014. 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 Erlang scanner. All types are opaque, which puts some stress
+%%% on Dialyzer.
+
+-module(opaque_digraph).
+
+-export([new/0, new/1, delete/1, info/1]).
+
+-export([add_vertex/1, add_vertex/2, add_vertex/3]).
+-export([del_vertex/2, del_vertices/2]).
+-export([vertex/2, no_vertices/1, vertices/1]).
+-export([source_vertices/1, sink_vertices/1]).
+
+-export([add_edge/3, add_edge/4, add_edge/5]).
+-export([del_edge/2, del_edges/2, del_path/3]).
+-export([edge/2, no_edges/1, edges/1]).
+
+-export([out_neighbours/2, in_neighbours/2]).
+-export([out_edges/2, in_edges/2, edges/2]).
+-export([out_degree/2, in_degree/2]).
+-export([get_path/3, get_cycle/2]).
+
+-export([get_short_path/3, get_short_cycle/2]).
+
+-export_type([local_digraph/0, d_type/0, vertex/0]).
+
+-record(digraph, {vtab = notable :: ets:tab(),
+ etab = notable :: ets:tab(),
+ ntab = notable :: ets:tab(),
+ cyclic = true :: boolean()}).
+
+-opaque local_digraph() :: #digraph{}.
+
+-export_type([edge/0, label/0, add_edge_err_rsn/0,
+ d_protection/0, d_cyclicity/0]).
+
+-opaque edge() :: term().
+-opaque label() :: term().
+-opaque vertex() :: term().
+
+-opaque add_edge_err_rsn() :: {'bad_edge', Path :: [vertex()]}
+ | {'bad_vertex', V :: vertex()}.
+
+%%
+%% Type is a list of
+%% protected | private
+%% acyclic | cyclic
+%%
+%% default is [cyclic,protected]
+%%
+-opaque d_protection() :: 'private' | 'protected'.
+-opaque d_cyclicity() :: 'acyclic' | 'cyclic'.
+-opaque d_type() :: d_cyclicity() | d_protection().
+
+-spec new() -> local_digraph().
+
+new() -> new([]).
+
+-spec new(Type) -> local_digraph() when
+ Type :: [d_type()].
+
+new(Type) ->
+ case check_type(Type, protected, []) of
+ {Access, Ts} ->
+ V = ets:new(vertices, [set, Access]),
+ E = ets:new(edges, [set, Access]),
+ N = ets:new(neighbours, [bag, Access]),
+ ets:insert(N, [{'$vid', 0}, {'$eid', 0}]),
+ set_type(Ts, #digraph{vtab=V, etab=E, ntab=N});
+ error ->
+ erlang:error(badarg)
+ end.
+
+%%
+%% Check type of graph
+%%
+%-spec check_type([d_type()], d_protection(), [{'cyclic', boolean()}]) ->
+% {d_protection(), [{'cyclic', boolean()}]}.
+
+check_type([acyclic|Ts], A, L) ->
+ check_type(Ts, A,[{cyclic,false} | L]);
+check_type([cyclic | Ts], A, L) ->
+ check_type(Ts, A, [{cyclic,true} | L]);
+check_type([protected | Ts], _, L) ->
+ check_type(Ts, protected, L);
+check_type([private | Ts], _, L) ->
+ check_type(Ts, private, L);
+check_type([], A, L) -> {A, L};
+check_type(_, _, _) -> error.
+
+%%
+%% Set graph type
+%%
+-spec set_type([{'cyclic', boolean()}], local_digraph()) -> local_digraph().
+
+set_type([{cyclic,V} | Ks], G) ->
+ set_type(Ks, G#digraph{cyclic = V});
+set_type([], G) -> G.
+
+
+%% Data access functions
+
+-spec delete(G) -> 'true' when
+ G :: local_digraph().
+
+delete(G) ->
+ ets:delete(G#digraph.vtab),
+ ets:delete(G#digraph.etab),
+ ets:delete(G#digraph.ntab).
+
+-spec info(G) -> InfoList when
+ G :: local_digraph(),
+ InfoList :: [{'cyclicity', Cyclicity :: d_cyclicity()} |
+ {'memory', NoWords :: non_neg_integer()} |
+ {'protection', Protection :: d_protection()}].
+
+info(G) ->
+ VT = G#digraph.vtab,
+ ET = G#digraph.etab,
+ NT = G#digraph.ntab,
+ Cyclicity = case G#digraph.cyclic of
+ true -> cyclic;
+ false -> acyclic
+ end,
+ Protection = ets:info(VT, protection),
+ Memory = ets:info(VT, memory) + ets:info(ET, memory) + ets:info(NT, memory),
+ [{cyclicity, Cyclicity}, {memory, Memory}, {protection, Protection}].
+
+-spec add_vertex(G) -> vertex() when
+ G :: local_digraph().
+
+add_vertex(G) ->
+ do_add_vertex({new_vertex_id(G), []}, G).
+
+-spec add_vertex(G, V) -> vertex() when
+ G :: local_digraph(),
+ V :: vertex().
+
+add_vertex(G, V) ->
+ do_add_vertex({V, []}, G).
+
+-spec add_vertex(G, V, Label) -> vertex() when
+ G :: local_digraph(),
+ V :: vertex(),
+ Label :: label().
+
+add_vertex(G, V, D) ->
+ do_add_vertex({V, D}, G).
+
+-spec del_vertex(G, V) -> 'true' when
+ G :: local_digraph(),
+ V :: vertex().
+
+del_vertex(G, V) ->
+ do_del_vertex(V, G).
+
+-spec del_vertices(G, Vertices) -> 'true' when
+ G :: local_digraph(),
+ Vertices :: [vertex()].
+
+del_vertices(G, Vs) ->
+ do_del_vertices(Vs, G).
+
+-spec vertex(G, V) -> {V, Label} | 'false' when
+ G :: local_digraph(),
+ V :: vertex(),
+ Label :: label().
+
+vertex(G, V) ->
+ case ets:lookup(G#digraph.vtab, V) of
+ [] -> false;
+ [Vertex] -> Vertex
+ end.
+
+-spec no_vertices(G) -> non_neg_integer() when
+ G :: local_digraph().
+
+no_vertices(G) ->
+ ets:info(G#digraph.vtab, size).
+
+-spec vertices(G) -> Vertices when
+ G :: local_digraph(),
+ Vertices :: [vertex()].
+
+vertices(G) ->
+ ets:select(G#digraph.vtab, [{{'$1', '_'}, [], ['$1']}]).
+
+-spec source_vertices(local_digraph()) -> [vertex()].
+
+source_vertices(G) ->
+ collect_vertices(G, in).
+
+-spec sink_vertices(local_digraph()) -> [vertex()].
+
+sink_vertices(G) ->
+ collect_vertices(G, out).
+
+-spec in_degree(G, V) -> non_neg_integer() when
+ G :: local_digraph(),
+ V :: vertex().
+
+in_degree(G, V) ->
+ length(ets:lookup(G#digraph.ntab, {in, V})).
+
+-spec in_neighbours(G, V) -> Vertex when
+ G :: local_digraph(),
+ V :: vertex(),
+ Vertex :: [vertex()].
+
+in_neighbours(G, V) ->
+ ET = G#digraph.etab,
+ NT = G#digraph.ntab,
+ collect_elems(ets:lookup(NT, {in, V}), ET, 2).
+
+-spec in_edges(G, V) -> Edges when
+ G :: local_digraph(),
+ V :: vertex(),
+ Edges :: [edge()].
+
+in_edges(G, V) ->
+ ets:select(G#digraph.ntab, [{{{in, V}, '$1'}, [], ['$1']}]).
+
+-spec out_degree(G, V) -> non_neg_integer() when
+ G :: local_digraph(),
+ V :: vertex().
+
+out_degree(G, V) ->
+ length(ets:lookup(G#digraph.ntab, {out, V})).
+
+-spec out_neighbours(G, V) -> Vertices when
+ G :: local_digraph(),
+ V :: vertex(),
+ Vertices :: [vertex()].
+
+out_neighbours(G, V) ->
+ ET = G#digraph.etab,
+ NT = G#digraph.ntab,
+ collect_elems(ets:lookup(NT, {out, V}), ET, 3).
+
+-spec out_edges(G, V) -> Edges when
+ G :: local_digraph(),
+ V :: vertex(),
+ Edges :: [edge()].
+
+out_edges(G, V) ->
+ ets:select(G#digraph.ntab, [{{{out, V}, '$1'}, [], ['$1']}]).
+
+-spec add_edge(G, V1, V2) -> edge() | {'error', add_edge_err_rsn()} when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex().
+
+add_edge(G, V1, V2) ->
+ do_add_edge({new_edge_id(G), V1, V2, []}, G).
+
+-spec add_edge(G, V1, V2, Label) -> edge() | {'error', add_edge_err_rsn()} when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Label :: label().
+
+add_edge(G, V1, V2, D) ->
+ do_add_edge({new_edge_id(G), V1, V2, D}, G).
+
+-spec add_edge(G, E, V1, V2, Label) -> edge() | {'error', add_edge_err_rsn()} when
+ G :: local_digraph(),
+ E :: edge(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Label :: label().
+
+add_edge(G, E, V1, V2, D) ->
+ do_add_edge({E, V1, V2, D}, G).
+
+-spec del_edge(G, E) -> 'true' when
+ G :: local_digraph(),
+ E :: edge().
+
+del_edge(G, E) ->
+ do_del_edges([E], G).
+
+-spec del_edges(G, Edges) -> 'true' when
+ G :: local_digraph(),
+ Edges :: [edge()].
+
+del_edges(G, Es) ->
+ do_del_edges(Es, G).
+
+-spec no_edges(G) -> non_neg_integer() when
+ G :: local_digraph().
+
+no_edges(G) ->
+ ets:info(G#digraph.etab, size).
+
+-spec edges(G) -> Edges when
+ G :: local_digraph(),
+ Edges :: [edge()].
+
+edges(G) ->
+ ets:select(G#digraph.etab, [{{'$1', '_', '_', '_'}, [], ['$1']}]).
+
+-spec edges(G, V) -> Edges when
+ G :: local_digraph(),
+ V :: vertex(),
+ Edges :: [edge()].
+
+edges(G, V) ->
+ ets:select(G#digraph.ntab, [{{{out, V},'$1'}, [], ['$1']},
+ {{{in, V}, '$1'}, [], ['$1']}]).
+
+-spec edge(G, E) -> {E, V1, V2, Label} | 'false' when
+ G :: local_digraph(),
+ E :: edge(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Label :: label().
+
+edge(G, E) ->
+ case ets:lookup(G#digraph.etab,E) of
+ [] -> false;
+ [Edge] -> Edge
+ end.
+
+%%
+%% Generate a "unique" edge identifier (relative to this graph)
+%%
+-spec new_edge_id(local_digraph()) -> edge().
+
+new_edge_id(G) ->
+ NT = G#digraph.ntab,
+ [{'$eid', K}] = ets:lookup(NT, '$eid'),
+ true = ets:delete(NT, '$eid'),
+ true = ets:insert(NT, {'$eid', K+1}),
+ ['$e' | K].
+
+%%
+%% Generate a "unique" vertex identifier (relative to this graph)
+%%
+-spec new_vertex_id(local_digraph()) -> vertex().
+
+new_vertex_id(G) ->
+ NT = G#digraph.ntab,
+ [{'$vid', K}] = ets:lookup(NT, '$vid'),
+ true = ets:delete(NT, '$vid'),
+ true = ets:insert(NT, {'$vid', K+1}),
+ ['$v' | K].
+
+%%
+%% Collect elements for a index in a tuple
+%%
+collect_elems(Keys, Table, Index) ->
+ collect_elems(Keys, Table, Index, []).
+
+collect_elems([{_,Key}|Keys], Table, Index, Acc) ->
+ collect_elems(Keys, Table, Index,
+ [ets:lookup_element(Table, Key, Index)|Acc]);
+collect_elems([], _, _, Acc) -> Acc.
+
+-spec do_add_vertex({vertex(), label()}, local_digraph()) -> vertex().
+
+do_add_vertex({V, _Label} = VL, G) ->
+ ets:insert(G#digraph.vtab, VL),
+ V.
+
+%%
+%% Collect either source or sink vertices.
+%%
+collect_vertices(G, Type) ->
+ Vs = vertices(G),
+ lists:foldl(fun(V, A) ->
+ case ets:member(G#digraph.ntab, {Type, V}) of
+ true -> A;
+ false -> [V|A]
+ end
+ end, [], Vs).
+
+%%
+%% Delete vertices
+%%
+do_del_vertices([V | Vs], G) ->
+ do_del_vertex(V, G),
+ do_del_vertices(Vs, G);
+do_del_vertices([], #digraph{}) -> true.
+
+do_del_vertex(V, G) ->
+ do_del_nedges(ets:lookup(G#digraph.ntab, {in, V}), G),
+ do_del_nedges(ets:lookup(G#digraph.ntab, {out, V}), G),
+ ets:delete(G#digraph.vtab, V).
+
+do_del_nedges([{_, E}|Ns], G) ->
+ case ets:lookup(G#digraph.etab, E) of
+ [{E, V1, V2, _}] ->
+ do_del_edge(E, V1, V2, G),
+ do_del_nedges(Ns, G);
+ [] -> % cannot happen
+ do_del_nedges(Ns, G)
+ end;
+do_del_nedges([], #digraph{}) -> true.
+
+%%
+%% Delete edges
+%%
+do_del_edges([E|Es], G) ->
+ case ets:lookup(G#digraph.etab, E) of
+ [{E,V1,V2,_}] ->
+ do_del_edge(E,V1,V2,G),
+ do_del_edges(Es, G);
+ [] ->
+ do_del_edges(Es, G)
+ end;
+do_del_edges([], #digraph{}) -> true.
+
+do_del_edge(E, V1, V2, G) ->
+ ets:select_delete(G#digraph.ntab, [{{{in, V2}, E}, [], [true]},
+ {{{out,V1}, E}, [], [true]}]),
+ ets:delete(G#digraph.etab, E).
+
+-spec rm_edges([vertex(),...], local_digraph()) -> 'true'.
+
+rm_edges([V1, V2|Vs], G) ->
+ rm_edge(V1, V2, G),
+ rm_edges([V2|Vs], G);
+rm_edges(_, _) -> true.
+
+-spec rm_edge(vertex(), vertex(), local_digraph()) -> 'ok'.
+
+rm_edge(V1, V2, G) ->
+ Es = out_edges(G, V1),
+ rm_edge_0(Es, V1, V2, G).
+
+rm_edge_0([E|Es], V1, V2, G) ->
+ case ets:lookup(G#digraph.etab, E) of
+ [{E, V1, V2, _}] ->
+ do_del_edge(E, V1, V2, G),
+ rm_edge_0(Es, V1, V2, G);
+ _ ->
+ rm_edge_0(Es, V1, V2, G)
+ end;
+rm_edge_0([], _, _, #digraph{}) -> ok.
+
+%%
+%% Check that endpoints exist
+%%
+-spec do_add_edge({edge(), vertex(), vertex(), label()}, local_digraph()) ->
+ edge() | {'error', add_edge_err_rsn()}.
+
+do_add_edge({E, V1, V2, Label}, G) ->
+ case ets:member(G#digraph.vtab, V1) of
+ false -> {error, {bad_vertex, V1}};
+ true ->
+ case ets:member(G#digraph.vtab, V2) of
+ false -> {error, {bad_vertex, V2}};
+ true ->
+ case other_edge_exists(G, E, V1, V2) of
+ true -> {error, {bad_edge, [V1, V2]}};
+ false when G#digraph.cyclic =:= false ->
+ acyclic_add_edge(E, V1, V2, Label, G);
+ false ->
+ do_insert_edge(E, V1, V2, Label, G)
+ end
+ end
+ end.
+
+other_edge_exists(#digraph{etab = ET}, E, V1, V2) ->
+ case ets:lookup(ET, E) of
+ [{E, Vert1, Vert2, _}] when Vert1 =/= V1; Vert2 =/= V2 ->
+ true;
+ _ ->
+ false
+ end.
+
+-spec do_insert_edge(edge(), vertex(), vertex(), label(), local_digraph()) -> edge().
+
+do_insert_edge(E, V1, V2, Label, #digraph{ntab=NT, etab=ET}) ->
+ ets:insert(NT, [{{out, V1}, E}, {{in, V2}, E}]),
+ ets:insert(ET, {E, V1, V2, Label}),
+ E.
+
+-spec acyclic_add_edge(edge(), vertex(), vertex(), label(), local_digraph()) ->
+ edge() | {'error', {'bad_edge', [vertex()]}}.
+
+acyclic_add_edge(_E, V1, V2, _L, _G) when V1 =:= V2 ->
+ {error, {bad_edge, [V1, V2]}};
+acyclic_add_edge(E, V1, V2, Label, G) ->
+ case get_path(G, V2, V1) of
+ false -> do_insert_edge(E, V1, V2, Label, G);
+ Path -> {error, {bad_edge, Path}}
+ end.
+
+%%
+%% Delete all paths from vertex V1 to vertex V2
+%%
+
+-spec del_path(G, V1, V2) -> 'true' when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex().
+
+del_path(G, V1, V2) ->
+ case get_path(G, V1, V2) of
+ false -> true;
+ Path ->
+ rm_edges(Path, G),
+ del_path(G, V1, V2)
+ end.
+
+%%
+%% Find a cycle through V
+%% return the cycle as list of vertices [V ... V]
+%% if no cycle exists false is returned
+%% if only a cycle of length one exists it will be
+%% returned as [V] but only after longer cycles have
+%% been searched.
+%%
+
+-spec get_cycle(G, V) -> Vertices | 'false' when
+ G :: local_digraph(),
+ V :: vertex(),
+ Vertices :: [vertex(),...].
+
+get_cycle(G, V) ->
+ case one_path(out_neighbours(G, V), V, [], [V], [V], 2, G, 1) of
+ false ->
+ case lists:member(V, out_neighbours(G, V)) of
+ true -> [V];
+ false -> false
+ end;
+ Vs -> Vs
+ end.
+
+%%
+%% Find a path from V1 to V2
+%% return the path as list of vertices [V1 ... V2]
+%% if no path exists false is returned
+%%
+
+-spec get_path(G, V1, V2) -> Vertices | 'false' when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Vertices :: [vertex(),...].
+
+get_path(G, V1, V2) ->
+ one_path(out_neighbours(G, V1), V2, [], [V1], [V1], 1, G, 1).
+
+%%
+%% prune_short_path (evaluate conditions on path)
+%% short : if path is too short
+%% ok : if path is ok
+%%
+prune_short_path(Counter, Min) when Counter < Min ->
+ short;
+prune_short_path(_Counter, _Min) ->
+ ok.
+
+one_path([W|Ws], W, Cont, Xs, Ps, Prune, G, Counter) ->
+ case prune_short_path(Counter, Prune) of
+ short -> one_path(Ws, W, Cont, Xs, Ps, Prune, G, Counter);
+ ok -> lists:reverse([W|Ps])
+ end;
+one_path([V|Vs], W, Cont, Xs, Ps, Prune, G, Counter) ->
+ case lists:member(V, Xs) of
+ true -> one_path(Vs, W, Cont, Xs, Ps, Prune, G, Counter);
+ false -> one_path(out_neighbours(G, V), W,
+ [{Vs,Ps} | Cont], [V|Xs], [V|Ps],
+ Prune, G, Counter+1)
+ end;
+one_path([], W, [{Vs,Ps}|Cont], Xs, _, Prune, G, Counter) ->
+ one_path(Vs, W, Cont, Xs, Ps, Prune, G, Counter-1);
+one_path([], _, [], _, _, _, _, _Counter) -> false.
+
+%%
+%% Like get_cycle/2, but a cycle of length one is preferred.
+%%
+
+-spec get_short_cycle(G, V) -> Vertices | 'false' when
+ G :: local_digraph(),
+ V :: vertex(),
+ Vertices :: [vertex(),...].
+
+get_short_cycle(G, V) ->
+ get_short_path(G, V, V).
+
+%%
+%% Like get_path/3, but using a breadth-first search makes it possible
+%% to find a short path.
+%%
+
+-spec get_short_path(G, V1, V2) -> Vertices | 'false' when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Vertices :: [vertex(),...].
+
+get_short_path(G, V1, V2) ->
+ T = new(),
+ add_vertex(T, V1),
+ Q = queue:new(),
+ Q1 = queue_out_neighbours(V1, G, Q),
+ L = spath(Q1, G, V2, T),
+ delete(T),
+ L.
+
+spath(Q, G, Sink, T) ->
+ case queue:out(Q) of
+ {{value, E}, Q1} ->
+ {_E, V1, V2, _Label} = edge(G, E),
+ if
+ Sink =:= V2 ->
+ follow_path(V1, T, [V2]);
+ true ->
+ case vertex(T, V2) of
+ false ->
+ add_vertex(T, V2),
+ add_edge(T, V2, V1),
+ NQ = queue_out_neighbours(V2, G, Q1),
+ spath(NQ, G, Sink, T);
+ _V ->
+ spath(Q1, G, Sink, T)
+ end
+ end;
+ {empty, _Q1} ->
+ false
+ end.
+
+follow_path(V, T, P) ->
+ P1 = [V | P],
+ case out_neighbours(T, V) of
+ [N] ->
+ follow_path(N, T, P1);
+ [] ->
+ P1
+ end.
+
+queue_out_neighbours(V, G, Q0) ->
+ lists:foldl(fun(E, Q) -> queue:in(E, Q) end, Q0, out_edges(G, V)).
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl
new file mode 100644
index 0000000000..9ecd4f92a1
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl
@@ -0,0 +1,1300 @@
+%% -*- coding: utf-8 -*-
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-2014. 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 Erlang scanner. All types are opaque, which puts some stress
+%%% on Dialyzer.
+
+-module(opaque_erl_scan).
+
+%%% External exports
+
+-export([string/1,string/2,string/3,tokens/3,tokens/4,
+ format_error/1,reserved_word/1,
+ token_info/1,token_info/2,
+ attributes_info/1,attributes_info/2,set_attribute/3]).
+
+%%% Private
+-export([continuation_location/1]).
+
+-export_type([error_info/0,
+ line/0,
+ location/0,
+ options/0,
+ return_cont/0,
+ token/0,
+ tokens_result/0]).
+
+%%%
+%%% Defines and type definitions
+%%%
+
+-define(COLUMN(C), (is_integer(C) andalso C >= 1)).
+%% Line numbers less than zero have always been allowed:
+-define(ALINE(L), is_integer(L)).
+-define(STRING(S), is_list(S)).
+-define(RESWORDFUN(F), is_function(F, 1)).
+-define(SETATTRFUN(F), is_function(F, 1)).
+
+-export_type([category/0, column/0, resword_fun/0, option/0, symbol/0,
+ info_line/0, attributes_data/0, attributes/0, tokens/0,
+ error_description/0, char_spec/0, cont_fun/0,
+ attribute_item/0, info_location/0, attribute_info/0,
+ token_item/0, token_info/0]).
+
+-opaque category() :: atom().
+-opaque column() :: pos_integer().
+-opaque line() :: integer().
+-opaque location() :: line() | {line(),column()}.
+-opaque resword_fun() :: fun((atom()) -> boolean()).
+-opaque option() :: 'return' | 'return_white_spaces' | 'return_comments'
+ | 'text' | {'reserved_word_fun', resword_fun()}.
+-opaque options() :: option() | [option()].
+-opaque symbol() :: atom() | float() | integer() | string().
+-opaque info_line() :: integer() | term().
+-opaque attributes_data()
+ :: [{'column', column()} | {'line', info_line()} | {'text', string()}]
+ | {line(), column()}.
+%% The fact that {line(),column()} is a possible attributes() type
+%% is hidden.
+-opaque attributes() :: line() | attributes_data().
+-opaque token() :: {category(), attributes(), symbol()}
+ | {category(), attributes()}.
+-opaque tokens() :: [token()].
+-opaque error_description() :: term().
+-opaque error_info() :: {location(), module(), error_description()}.
+
+%%% Local record.
+-record(erl_scan,
+ {resword_fun = fun reserved_word/1 :: resword_fun(),
+ ws = false :: boolean(),
+ comment = false :: boolean(),
+ text = false :: boolean()}).
+
+%%----------------------------------------------------------------------------
+
+-spec format_error(ErrorDescriptor) -> string() when
+ ErrorDescriptor :: error_description().
+format_error({string,Quote,Head}) ->
+ lists:flatten(["unterminated " ++ string_thing(Quote) ++
+ " starting with " ++
+ io_lib:write_string(Head, Quote)]);
+format_error({illegal,Type}) ->
+ lists:flatten(io_lib:fwrite("illegal ~w", [Type]));
+format_error(char) -> "unterminated character";
+format_error({base,Base}) ->
+ lists:flatten(io_lib:fwrite("illegal base '~w'", [Base]));
+format_error(Other) ->
+ lists:flatten(io_lib:write(Other)).
+
+-spec string(String) -> Return when
+ String :: string(),
+ Return :: {'ok', Tokens :: tokens(), EndLocation}
+ | {'error', ErrorInfo :: error_info(), ErrorLocation},
+ EndLocation :: location(),
+ ErrorLocation :: location().
+string(String) ->
+ string(String, 1, []).
+
+-spec string(String, StartLocation) -> Return when
+ String :: string(),
+ Return :: {'ok', Tokens :: tokens(), EndLocation}
+ | {'error', ErrorInfo :: error_info(), ErrorLocation},
+ StartLocation :: location(),
+ EndLocation :: location(),
+ ErrorLocation :: location().
+string(String, StartLocation) ->
+ string(String, StartLocation, []).
+
+-spec string(String, StartLocation, Options) -> Return when
+ String :: string(),
+ Options :: options(),
+ Return :: {'ok', Tokens :: tokens(), EndLocation}
+ | {'error', ErrorInfo :: error_info(), ErrorLocation},
+ StartLocation :: location(),
+ EndLocation :: location(),
+ ErrorLocation :: location().
+string(String, Line, Options) when ?STRING(String), ?ALINE(Line) ->
+ string1(String, options(Options), Line, no_col, []);
+string(String, {Line,Column}, Options) when ?STRING(String),
+ ?ALINE(Line),
+ ?COLUMN(Column) ->
+ string1(String, options(Options), Line, Column, []).
+
+-opaque char_spec() :: string() | 'eof'.
+-opaque cont_fun() :: fun((char_spec(), #erl_scan{}, line(), column(),
+ tokens(), any()) -> any()).
+-opaque return_cont() :: {erl_scan_continuation,
+ string(), column(), tokens(), line(),
+ #erl_scan{}, any(), cont_fun()}.
+-opaque tokens_result() :: {'ok', Tokens :: tokens(), EndLocation :: location()}
+ | {'eof', EndLocation :: location()}
+ | {'error', ErrorInfo :: error_info(),
+ EndLocation :: location()}.
+
+-spec tokens(Continuation, CharSpec, StartLocation) -> Return when
+ Continuation :: return_cont() | [],
+ CharSpec :: char_spec(),
+ StartLocation :: location(),
+ Return :: {'done',Result :: tokens_result(),LeftOverChars :: char_spec()}
+ | {'more', Continuation1 :: return_cont()}.
+tokens(Cont, CharSpec, StartLocation) ->
+ tokens(Cont, CharSpec, StartLocation, []).
+
+-spec tokens(Continuation, CharSpec, StartLocation, Options) -> Return when
+ Continuation :: return_cont() | [],
+ CharSpec :: char_spec(),
+ StartLocation :: location(),
+ Options :: options(),
+ Return :: {'done',Result :: tokens_result(),LeftOverChars :: char_spec()}
+ | {'more', Continuation1 :: return_cont()}.
+tokens([], CharSpec, Line, Options) when ?ALINE(Line) ->
+ tokens1(CharSpec, options(Options), Line, no_col, [], fun scan/6, []);
+tokens([], CharSpec, {Line,Column}, Options) when ?ALINE(Line),
+ ?COLUMN(Column) ->
+ tokens1(CharSpec, options(Options), Line, Column, [], fun scan/6, []);
+tokens({erl_scan_continuation,Cs,Col,Toks,Line,St,Any,Fun},
+ CharSpec, _Loc, _Opts) ->
+ tokens1(Cs++CharSpec, St, Line, Col, Toks, Fun, Any).
+
+continuation_location({erl_scan_continuation,_,no_col,_,Line,_,_,_}) ->
+ Line;
+continuation_location({erl_scan_continuation,_,Col,_,Line,_,_,_}) ->
+ {Line,Col}.
+
+-opaque attribute_item() :: 'column' | 'length' | 'line'
+ | 'location' | 'text'.
+-opaque info_location() :: location() | term().
+-opaque attribute_info() :: {'column', column()}| {'length', pos_integer()}
+ | {'line', info_line()}
+ | {'location', info_location()}
+ | {'text', string()}.
+-opaque token_item() :: 'category' | 'symbol' | attribute_item().
+-opaque token_info() :: {'category', category()} | {'symbol', symbol()}
+ | attribute_info().
+
+-spec token_info(Token) -> TokenInfo when
+ Token :: token(),
+ TokenInfo :: [TokenInfoTuple :: token_info()].
+token_info(Token) ->
+ Items = [category,column,length,line,symbol,text], % undefined order
+ token_info(Token, Items).
+
+-spec token_info(Token, TokenItem) -> TokenInfoTuple | 'undefined' when
+ Token :: token(),
+ TokenItem :: token_item(),
+ TokenInfoTuple :: token_info();
+ (Token, TokenItems) -> TokenInfo when
+ Token :: token(),
+ TokenItems :: [TokenItem :: token_item()],
+ TokenInfo :: [TokenInfoTuple :: token_info()].
+token_info(_Token, []) ->
+ [];
+token_info(Token, [Item|Items]) when is_atom(Item) ->
+ case token_info(Token, Item) of
+ undefined ->
+ token_info(Token, Items);
+ TokenInfo when is_tuple(TokenInfo) ->
+ [TokenInfo|token_info(Token, Items)]
+ end;
+token_info({Category,_Attrs}, category=Item) ->
+ {Item,Category};
+token_info({Category,_Attrs,_Symbol}, category=Item) ->
+ {Item,Category};
+token_info({Category,_Attrs}, symbol=Item) ->
+ {Item,Category};
+token_info({_Category,_Attrs,Symbol}, symbol=Item) ->
+ {Item,Symbol};
+token_info({_Category,Attrs}, Item) ->
+ attributes_info(Attrs, Item);
+token_info({_Category,Attrs,_Symbol}, Item) ->
+ attributes_info(Attrs, Item).
+
+-spec attributes_info(Attributes) -> AttributesInfo when
+ Attributes :: attributes(),
+ AttributesInfo :: [AttributeInfoTuple :: attribute_info()].
+attributes_info(Attributes) ->
+ Items = [column,length,line,text], % undefined order
+ attributes_info(Attributes, Items).
+
+-spec attributes_info
+ (Attributes, AttributeItem) -> AttributeInfoTuple | 'undefined' when
+ Attributes :: attributes(),
+ AttributeItem :: attribute_item(),
+ AttributeInfoTuple :: attribute_info();
+ (Attributes, AttributeItems) -> AttributeInfo when
+ Attributes :: attributes(),
+ AttributeItems :: [AttributeItem :: attribute_item()],
+ AttributeInfo :: [AttributeInfoTuple :: attribute_info()].
+attributes_info(_Attrs, []) ->
+ [];
+attributes_info(Attrs, [A|As]) when is_atom(A) ->
+ case attributes_info(Attrs, A) of
+ undefined ->
+ attributes_info(Attrs, As);
+ AttributeInfo when is_tuple(AttributeInfo) ->
+ [AttributeInfo|attributes_info(Attrs, As)]
+ end;
+attributes_info({Line,Column}, column=Item) when ?ALINE(Line),
+ ?COLUMN(Column) ->
+ {Item,Column};
+attributes_info(Line, column) when ?ALINE(Line) ->
+ undefined;
+attributes_info(Attrs, column=Item) ->
+ attr_info(Attrs, Item);
+attributes_info(Attrs, length=Item) ->
+ case attributes_info(Attrs, text) of
+ undefined ->
+ undefined;
+ {text,Text} ->
+ {Item,length(Text)}
+ end;
+attributes_info(Line, line=Item) when ?ALINE(Line) ->
+ {Item,Line};
+attributes_info({Line,Column}, line=Item) when ?ALINE(Line),
+ ?COLUMN(Column) ->
+ {Item,Line};
+attributes_info(Attrs, line=Item) ->
+ attr_info(Attrs, Item);
+attributes_info({Line,Column}=Location, location=Item) when ?ALINE(Line),
+ ?COLUMN(Column) ->
+ {Item,Location};
+attributes_info(Line, location=Item) when ?ALINE(Line) ->
+ {Item,Line};
+attributes_info(Attrs, location=Item) ->
+ {line,Line} = attributes_info(Attrs, line), % assume line is present
+ case attributes_info(Attrs, column) of
+ undefined ->
+ %% If set_attribute() has assigned a term such as {17,42}
+ %% to 'line', then Line will look like {Line,Column}. One
+ %% should not use 'location' but 'line' and 'column' in
+ %% such special cases.
+ {Item,Line};
+ {column,Column} ->
+ {Item,{Line,Column}}
+ end;
+attributes_info({Line,Column}, text) when ?ALINE(Line), ?COLUMN(Column) ->
+ undefined;
+attributes_info(Line, text) when ?ALINE(Line) ->
+ undefined;
+attributes_info(Attrs, text=Item) ->
+ attr_info(Attrs, Item);
+attributes_info(T1, T2) ->
+ erlang:error(badarg, [T1,T2]).
+
+-spec set_attribute(AttributeItem, Attributes, SetAttributeFun) -> Attributes when
+ AttributeItem :: 'line',
+ Attributes :: attributes(),
+ SetAttributeFun :: fun((info_line()) -> info_line()).
+set_attribute(Tag, Attributes, Fun) when ?SETATTRFUN(Fun) ->
+ set_attr(Tag, Attributes, Fun).
+
+%%%
+%%% Local functions
+%%%
+
+string_thing($') -> "atom"; %' Stupid Emacs
+string_thing(_) -> "string".
+
+-define(WHITE_SPACE(C),
+ is_integer(C) andalso
+ (C >= $\000 andalso C =< $\s orelse C >= $\200 andalso C =< $\240)).
+-define(DIGIT(C), C >= $0, C =< $9).
+-define(CHAR(C), is_integer(C), C >= 0).
+-define(UNICODE(C),
+ is_integer(C) andalso
+ (C >= 0 andalso C < 16#D800 orelse
+ C > 16#DFFF andalso C < 16#FFFE orelse
+ C > 16#FFFF andalso C =< 16#10FFFF)).
+
+-define(UNI255(C), C >= 0, C =< 16#ff).
+
+options(Opts0) when is_list(Opts0) ->
+ Opts = lists:foldr(fun expand_opt/2, [], Opts0),
+ [RW_fun] =
+ case opts(Opts, [reserved_word_fun], []) of
+ badarg ->
+ erlang:error(badarg, [Opts0]);
+ R ->
+ R
+ end,
+ Comment = proplists:get_bool(return_comments, Opts),
+ WS = proplists:get_bool(return_white_spaces, Opts),
+ Txt = proplists:get_bool(text, Opts),
+ #erl_scan{resword_fun = RW_fun,
+ comment = Comment,
+ ws = WS,
+ text = Txt};
+options(Opt) ->
+ options([Opt]).
+
+opts(Options, [Key|Keys], L) ->
+ V = case lists:keyfind(Key, 1, Options) of
+ {reserved_word_fun,F} when ?RESWORDFUN(F) ->
+ {ok,F};
+ {Key,_} ->
+ badarg;
+ false ->
+ {ok,default_option(Key)}
+ end,
+ case V of
+ badarg ->
+ badarg;
+ {ok,Value} ->
+ opts(Options, Keys, [Value|L])
+ end;
+opts(_Options, [], L) ->
+ lists:reverse(L).
+
+default_option(reserved_word_fun) ->
+ fun reserved_word/1.
+
+expand_opt(return, Os) ->
+ [return_comments,return_white_spaces|Os];
+expand_opt(O, Os) ->
+ [O|Os].
+
+attr_info(Attrs, Item) ->
+ try lists:keyfind(Item, 1, Attrs) of
+ {_Item, _Value} = T ->
+ T;
+ false ->
+ undefined
+ catch
+ _:_ ->
+ erlang:error(badarg, [Attrs, Item])
+ end.
+
+-spec set_attr('line', attributes(), fun((line()) -> line())) -> attributes().
+
+set_attr(line, Line, Fun) when ?ALINE(Line) ->
+ Ln = Fun(Line),
+ if
+ ?ALINE(Ln) ->
+ Ln;
+ true ->
+ [{line,Ln}]
+ end;
+set_attr(line, {Line,Column}, Fun) when ?ALINE(Line), ?COLUMN(Column) ->
+ Ln = Fun(Line),
+ if
+ ?ALINE(Ln) ->
+ {Ln,Column};
+ true ->
+ [{line,Ln},{column,Column}]
+ end;
+set_attr(line=Tag, Attrs, Fun) when is_list(Attrs) ->
+ {line,Line} = lists:keyfind(Tag, 1, Attrs),
+ case lists:keyreplace(Tag, 1, Attrs, {line,Fun(Line)}) of
+ [{line,Ln}] when ?ALINE(Ln) ->
+ Ln;
+ As ->
+ As
+ end;
+set_attr(T1, T2, T3) ->
+ erlang:error(badarg, [T1,T2,T3]).
+
+tokens1(Cs, St, Line, Col, Toks, Fun, Any) when ?STRING(Cs); Cs =:= eof ->
+ case Fun(Cs, St, Line, Col, Toks, Any) of
+ {more,{Cs0,Ncol,Ntoks,Nline,Nany,Nfun}} ->
+ {more,{erl_scan_continuation,Cs0,Ncol,Ntoks,Nline,St,Nany,Nfun}};
+ {ok,Toks0,eof,Nline,Ncol} ->
+ Res = case Toks0 of
+ [] ->
+ {eof,location(Nline, Ncol)};
+ _ ->
+ {ok,lists:reverse(Toks0),location(Nline,Ncol)}
+ end,
+ {done,Res,eof};
+ {ok,Toks0,Rest,Nline,Ncol} ->
+ {done,{ok,lists:reverse(Toks0),location(Nline, Ncol)},Rest};
+ {{error,_,_}=Error,Rest} ->
+ {done,Error,Rest}
+ end.
+
+string1(Cs, St, Line, Col, Toks) ->
+ case scan1(Cs, St, Line, Col, Toks) of
+ {more,{Cs0,Ncol,Ntoks,Nline,Any,Fun}} ->
+ case Fun(Cs0++eof, St, Nline, Ncol, Ntoks, Any) of
+ {ok,Toks1,_Rest,Line2,Col2} ->
+ {ok,lists:reverse(Toks1),location(Line2, Col2)};
+ {{error,_,_}=Error,_Rest} ->
+ Error
+ end;
+ {ok,Ntoks,[_|_]=Rest,Nline,Ncol} ->
+ string1(Rest, St, Nline, Ncol, Ntoks);
+ {ok,Ntoks,_,Nline,Ncol} ->
+ {ok,lists:reverse(Ntoks),location(Nline, Ncol)};
+ {{error,_,_}=Error,_Rest} ->
+ Error
+ end.
+
+scan(Cs, St, Line, Col, Toks, _) ->
+ scan1(Cs, St, Line, Col, Toks).
+
+scan1([$\s|Cs], St, Line, Col, Toks) when St#erl_scan.ws ->
+ scan_spcs(Cs, St, Line, Col, Toks, 1);
+scan1([$\s|Cs], St, Line, Col, Toks) ->
+ skip_white_space(Cs, St, Line, Col, Toks, 1);
+scan1([$\n|Cs], St, Line, Col, Toks) when St#erl_scan.ws ->
+ scan_newline(Cs, St, Line, Col, Toks);
+scan1([$\n|Cs], St, Line, Col, Toks) ->
+ skip_white_space(Cs, St, Line+1, new_column(Col, 1), Toks, 0);
+scan1([C|Cs], St, Line, Col, Toks) when C >= $A, C =< $Z ->
+ scan_variable(Cs, St, Line, Col, Toks, [C]);
+scan1([C|Cs], St, Line, Col, Toks) when C >= $a, C =< $z ->
+ scan_atom(Cs, St, Line, Col, Toks, [C]);
+%% Optimization: some very common punctuation characters:
+scan1([$,|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ",", ',', 1);
+scan1([$(|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "(", '(', 1);
+scan1([$)|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ")", ')', 1);
+scan1([${|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "{", '{', 1);
+scan1([$}|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "}", '}', 1);
+scan1([$[|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "[", '[', 1);
+scan1([$]|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "]", ']', 1);
+scan1([$;|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ";", ';', 1);
+scan1([$_=C|Cs], St, Line, Col, Toks) ->
+ scan_variable(Cs, St, Line, Col, Toks, [C]);
+%% More punctuation characters below.
+scan1([$\%|Cs], St, Line, Col, Toks) when not St#erl_scan.comment ->
+ skip_comment(Cs, St, Line, Col, Toks, 1);
+scan1([$\%=C|Cs], St, Line, Col, Toks) ->
+ scan_comment(Cs, St, Line, Col, Toks, [C]);
+scan1([C|Cs], St, Line, Col, Toks) when ?DIGIT(C) ->
+ scan_number(Cs, St, Line, Col, Toks, [C]);
+scan1("..."++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "...", '...', 3);
+scan1(".."=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1(".."++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "..", '..', 2);
+scan1("."=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1([$.=C|Cs], St, Line, Col, Toks) ->
+ scan_dot(Cs, St, Line, Col, Toks, [C]);
+scan1([$"|Cs], St, Line, Col, Toks) -> %" Emacs
+ State0 = {[],[],Line,Col},
+ scan_string(Cs, St, Line, incr_column(Col, 1), Toks, State0);
+scan1([$'|Cs], St, Line, Col, Toks) -> %' Emacs
+ State0 = {[],[],Line,Col},
+ scan_qatom(Cs, St, Line, incr_column(Col, 1), Toks, State0);
+scan1([$$|Cs], St, Line, Col, Toks) ->
+ scan_char(Cs, St, Line, Col, Toks);
+scan1([$\r|Cs], St, Line, Col, Toks) when St#erl_scan.ws ->
+ white_space_end(Cs, St, Line, Col, Toks, 1, "\r");
+scan1([C|Cs], St, Line, Col, Toks) when C >= $ß, C =< $ÿ, C =/= $÷ ->
+ scan_atom(Cs, St, Line, Col, Toks, [C]);
+scan1([C|Cs], St, Line, Col, Toks) when C >= $À, C =< $Þ, C /= $× ->
+ scan_variable(Cs, St, Line, Col, Toks, [C]);
+scan1([$\t|Cs], St, Line, Col, Toks) when St#erl_scan.ws ->
+ scan_tabs(Cs, St, Line, Col, Toks, 1);
+scan1([$\t|Cs], St, Line, Col, Toks) ->
+ skip_white_space(Cs, St, Line, Col, Toks, 1);
+scan1([C|Cs], St, Line, Col, Toks) when ?WHITE_SPACE(C) ->
+ case St#erl_scan.ws of
+ true ->
+ scan_white_space(Cs, St, Line, Col, Toks, [C]);
+ false ->
+ skip_white_space(Cs, St, Line, Col, Toks, 1)
+ end;
+%% Punctuation characters and operators, first recognise multiples.
+%% << <- <=
+scan1("<<"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "<<", '<<', 2);
+scan1("<-"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "<-", '<-', 2);
+scan1("<="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "<=", '<=', 2);
+scan1("<"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% >> >=
+scan1(">>"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ">>", '>>', 2);
+scan1(">="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ">=", '>=', 2);
+scan1(">"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% -> --
+scan1("->"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "->", '->', 2);
+scan1("--"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "--", '--', 2);
+scan1("-"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% ++
+scan1("++"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "++", '++', 2);
+scan1("+"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% =:= =/= =< ==
+scan1("=:="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=:=", '=:=', 3);
+scan1("=:"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1("=/="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=/=", '=/=', 3);
+scan1("=/"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1("=<"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=<", '=<', 2);
+scan1("=="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "==", '==', 2);
+scan1("="=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% /=
+scan1("/="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "/=", '/=', 2);
+scan1("/"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% ||
+scan1("||"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "||", '||', 2);
+scan1("|"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% :-
+scan1(":-"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ":-", ':-', 2);
+%% :: for typed records
+scan1("::"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "::", '::', 2);
+scan1(":"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% Optimization: punctuation characters less than 127:
+scan1([$=|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=", '=', 1);
+scan1([$:|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ":", ':', 1);
+scan1([$||Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "|", '|', 1);
+scan1([$#|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "#", '#', 1);
+scan1([$/|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "/", '/', 1);
+scan1([$?|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "?", '?', 1);
+scan1([$-|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "-", '-', 1);
+scan1([$+|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "+", '+', 1);
+scan1([$*|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "*", '*', 1);
+scan1([$<|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "<", '<', 1);
+scan1([$>|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ">", '>', 1);
+scan1([$!|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "!", '!', 1);
+scan1([$@|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "@", '@', 1);
+scan1([$\\|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "\\", '\\', 1);
+scan1([$^|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "^", '^', 1);
+scan1([$`|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "`", '`', 1);
+scan1([$~|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "~", '~', 1);
+scan1([$&|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "&", '&', 1);
+%% End of optimization.
+scan1([C|Cs], St, Line, Col, Toks) when ?UNI255(C) ->
+ Str = [C],
+ tok2(Cs, St, Line, Col, Toks, Str, list_to_atom(Str), 1);
+scan1([C|Cs], _St, Line, Col, _Toks) when ?CHAR(C) ->
+ Ncol = incr_column(Col, 1),
+ scan_error({illegal,character}, Line, Col, Line, Ncol, Cs);
+scan1([]=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1(eof=Cs, _St, Line, Col, Toks) ->
+ {ok,Toks,Cs,Line,Col}.
+
+scan_atom(Cs0, St, Line, Col, Toks, Ncs0) ->
+ case scan_name(Cs0, Ncs0) of
+ {more,Ncs} ->
+ {more,{[],Col,Toks,Line,Ncs,fun scan_atom/6}};
+ {Wcs,Cs} ->
+ case catch list_to_atom(Wcs) of
+ Name when is_atom(Name) ->
+ case (St#erl_scan.resword_fun)(Name) of
+ true ->
+ tok2(Cs, St, Line, Col, Toks, Wcs, Name);
+ false ->
+ tok3(Cs, St, Line, Col, Toks, atom, Wcs, Name)
+ end;
+ _Error ->
+ Ncol = incr_column(Col, length(Wcs)),
+ scan_error({illegal,atom}, Line, Col, Line, Ncol, Cs)
+ end
+ end.
+
+scan_variable(Cs0, St, Line, Col, Toks, Ncs0) ->
+ case scan_name(Cs0, Ncs0) of
+ {more,Ncs} ->
+ {more,{[],Col,Toks,Line,Ncs,fun scan_variable/6}};
+ {Wcs,Cs} ->
+ case catch list_to_atom(Wcs) of
+ Name when is_atom(Name) ->
+ tok3(Cs, St, Line, Col, Toks, var, Wcs, Name);
+ _Error ->
+ Ncol = incr_column(Col, length(Wcs)),
+ scan_error({illegal,var}, Line, Col, Line, Ncol, Cs)
+ end
+ end.
+
+scan_name([C|Cs], Ncs) when C >= $a, C =< $z ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([C|Cs], Ncs) when C >= $A, C =< $Z ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([$_=C|Cs], Ncs) ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([C|Cs], Ncs) when ?DIGIT(C) ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([$@=C|Cs], Ncs) ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([C|Cs], Ncs) when C >= $ß, C =< $ÿ, C =/= $÷ ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([C|Cs], Ncs) when C >= $À, C =< $Þ, C =/= $× ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([], Ncs) ->
+ {more,Ncs};
+scan_name(Cs, Ncs) ->
+ {lists:reverse(Ncs),Cs}.
+
+-define(STR(St, S), if St#erl_scan.text -> S; true -> [] end).
+
+scan_dot([$%|_]=Cs, St, Line, Col, Toks, Ncs) ->
+ Attrs = attributes(Line, Col, St, Ncs),
+ {ok,[{dot,Attrs}|Toks],Cs,Line,incr_column(Col, 1)};
+scan_dot([$\n=C|Cs], St, Line, Col, Toks, Ncs) ->
+ Attrs = attributes(Line, Col, St, ?STR(St, Ncs++[C])),
+ {ok,[{dot,Attrs}|Toks],Cs,Line+1,new_column(Col, 1)};
+scan_dot([C|Cs], St, Line, Col, Toks, Ncs) when ?WHITE_SPACE(C) ->
+ Attrs = attributes(Line, Col, St, ?STR(St, Ncs++[C])),
+ {ok,[{dot,Attrs}|Toks],Cs,Line,incr_column(Col, 2)};
+scan_dot(eof=Cs, St, Line, Col, Toks, Ncs) ->
+ Attrs = attributes(Line, Col, St, Ncs),
+ {ok,[{dot,Attrs}|Toks],Cs,Line,incr_column(Col, 1)};
+scan_dot(Cs, St, Line, Col, Toks, Ncs) ->
+ tok2(Cs, St, Line, Col, Toks, Ncs, '.', 1).
+
+%%% White space characters are very common, so it is worthwhile to
+%%% scan them fast and store them compactly. (The words "whitespace"
+%%% and "white space" usually mean the same thing. The Erlang
+%%% specification denotes the characters with ASCII code in the
+%%% interval 0 to 32 as "white space".)
+%%%
+%%% Convention: if there is a white newline ($\n) it will always be
+%%% the first character in the text string. As a consequence, there
+%%% cannot be more than one newline in a white_space token string.
+%%%
+%%% Some common combinations are recognized, some are not. Examples
+%%% of the latter are tab(s) followed by space(s), like "\t ".
+%%% (They will be represented by two (or more) tokens.)
+%%%
+%%% Note: the character sequence "\r\n" is *not* recognized since it
+%%% would violate the property that $\n will always be the first
+%%% character. (But since "\r\n\r\n" is common, it pays off to
+%%% recognize "\n\r".)
+
+scan_newline([$\s|Cs], St, Line, Col, Toks) ->
+ scan_nl_spcs(Cs, St, Line, Col, Toks, 2);
+scan_newline([$\t|Cs], St, Line, Col, Toks) ->
+ scan_nl_tabs(Cs, St, Line, Col, Toks, 2);
+scan_newline([$\r|Cs], St, Line, Col, Toks) ->
+ newline_end(Cs, St, Line, Col, Toks, 2, "\n\r");
+scan_newline([$\f|Cs], St, Line, Col, Toks) ->
+ newline_end(Cs, St, Line, Col, Toks, 2, "\n\f");
+scan_newline([], _St, Line, Col, Toks) ->
+ {more,{[$\n],Col,Toks,Line,[],fun scan/6}};
+scan_newline(Cs, St, Line, Col, Toks) ->
+ scan_nl_white_space(Cs, St, Line, Col, Toks, "\n").
+
+scan_nl_spcs([$\s|Cs], St, Line, Col, Toks, N) when N < 17 ->
+ scan_nl_spcs(Cs, St, Line, Col, Toks, N+1);
+scan_nl_spcs([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun scan_nl_spcs/6}};
+scan_nl_spcs(Cs, St, Line, Col, Toks, N) ->
+ newline_end(Cs, St, Line, Col, Toks, N, nl_spcs(N)).
+
+scan_nl_tabs([$\t|Cs], St, Line, Col, Toks, N) when N < 11 ->
+ scan_nl_tabs(Cs, St, Line, Col, Toks, N+1);
+scan_nl_tabs([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun scan_nl_tabs/6}};
+scan_nl_tabs(Cs, St, Line, Col, Toks, N) ->
+ newline_end(Cs, St, Line, Col, Toks, N, nl_tabs(N)).
+
+%% Note: returning {more,Cont} is meaningless here; one could just as
+%% well return several tokens. But since tokens() scans up to a full
+%% stop anyway, nothing is gained by not collecting all white spaces.
+scan_nl_white_space([$\n|Cs], #erl_scan{text = false}=St, Line, no_col=Col,
+ Toks0, Ncs) ->
+ Toks = [{white_space,Line,lists:reverse(Ncs)}|Toks0],
+ scan_newline(Cs, St, Line+1, Col, Toks);
+scan_nl_white_space([$\n|Cs], St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ Attrs = attributes(Line, Col, St, Ncs),
+ Token = {white_space,Attrs,Ncs},
+ scan_newline(Cs, St, Line+1, new_column(Col, length(Ncs)), [Token|Toks]);
+scan_nl_white_space([C|Cs], St, Line, Col, Toks, Ncs) when ?WHITE_SPACE(C) ->
+ scan_nl_white_space(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_nl_white_space([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_nl_white_space/6}};
+scan_nl_white_space(Cs, #erl_scan{text = false}=St, Line, no_col=Col,
+ Toks, Ncs) ->
+ scan1(Cs, St, Line+1, Col, [{white_space,Line,lists:reverse(Ncs)}|Toks]);
+scan_nl_white_space(Cs, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ Attrs = attributes(Line, Col, St, Ncs),
+ Token = {white_space,Attrs,Ncs},
+ scan1(Cs, St, Line+1, new_column(Col, length(Ncs)), [Token|Toks]).
+
+newline_end(Cs, #erl_scan{text = false}=St, Line, no_col=Col,
+ Toks, _N, Ncs) ->
+ scan1(Cs, St, Line+1, Col, [{white_space,Line,Ncs}|Toks]);
+newline_end(Cs, St, Line, Col, Toks, N, Ncs) ->
+ Attrs = attributes(Line, Col, St, Ncs),
+ scan1(Cs, St, Line+1, new_column(Col, N), [{white_space,Attrs,Ncs}|Toks]).
+
+scan_spcs([$\s|Cs], St, Line, Col, Toks, N) when N < 16 ->
+ scan_spcs(Cs, St, Line, Col, Toks, N+1);
+scan_spcs([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun scan_spcs/6}};
+scan_spcs(Cs, St, Line, Col, Toks, N) ->
+ white_space_end(Cs, St, Line, Col, Toks, N, spcs(N)).
+
+scan_tabs([$\t|Cs], St, Line, Col, Toks, N) when N < 10 ->
+ scan_tabs(Cs, St, Line, Col, Toks, N+1);
+scan_tabs([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun scan_tabs/6}};
+scan_tabs(Cs, St, Line, Col, Toks, N) ->
+ white_space_end(Cs, St, Line, Col, Toks, N, tabs(N)).
+
+skip_white_space([$\n|Cs], St, Line, Col, Toks, _N) ->
+ skip_white_space(Cs, St, Line+1, new_column(Col, 1), Toks, 0);
+skip_white_space([C|Cs], St, Line, Col, Toks, N) when ?WHITE_SPACE(C) ->
+ skip_white_space(Cs, St, Line, Col, Toks, N+1);
+skip_white_space([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun skip_white_space/6}};
+skip_white_space(Cs, St, Line, Col, Toks, N) ->
+ scan1(Cs, St, Line, incr_column(Col, N), Toks).
+
+%% Maybe \t and \s should break the loop.
+scan_white_space([$\n|_]=Cs, St, Line, Col, Toks, Ncs) ->
+ white_space_end(Cs, St, Line, Col, Toks, length(Ncs), lists:reverse(Ncs));
+scan_white_space([C|Cs], St, Line, Col, Toks, Ncs) when ?WHITE_SPACE(C) ->
+ scan_white_space(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_white_space([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_white_space/6}};
+scan_white_space(Cs, St, Line, Col, Toks, Ncs) ->
+ white_space_end(Cs, St, Line, Col, Toks, length(Ncs), lists:reverse(Ncs)).
+
+-compile({inline,[white_space_end/7]}).
+
+white_space_end(Cs, St, Line, Col, Toks, N, Ncs) ->
+ tok3(Cs, St, Line, Col, Toks, white_space, Ncs, Ncs, N).
+
+scan_char([$\\|Cs]=Cs0, St, Line, Col, Toks) ->
+ case scan_escape(Cs, incr_column(Col, 2)) of
+ more ->
+ {more,{[$$|Cs0],Col,Toks,Line,[],fun scan/6}};
+ {error,Ncs,Error,Ncol} ->
+ scan_error(Error, Line, Col, Line, Ncol, Ncs);
+ {eof,Ncol} ->
+ scan_error(char, Line, Col, Line, Ncol, eof);
+ {nl,Val,Str,Ncs,Ncol} ->
+ Attrs = attributes(Line, Col, St, ?STR(St, "$\\"++Str)), %"
+ Ntoks = [{char,Attrs,Val}|Toks],
+ scan1(Ncs, St, Line+1, Ncol, Ntoks);
+ {Val,Str,Ncs,Ncol} ->
+ Attrs = attributes(Line, Col, St, ?STR(St, "$\\"++Str)), %"
+ Ntoks = [{char,Attrs,Val}|Toks],
+ scan1(Ncs, St, Line, Ncol, Ntoks)
+ end;
+scan_char([$\n=C|Cs], St, Line, Col, Toks) ->
+ Attrs = attributes(Line, Col, St, ?STR(St, [$$,C])),
+ scan1(Cs, St, Line+1, new_column(Col, 1), [{char,Attrs,C}|Toks]);
+scan_char([C|Cs], St, Line, Col, Toks) when ?UNICODE(C) ->
+ Attrs = attributes(Line, Col, St, ?STR(St, [$$,C])),
+ scan1(Cs, St, Line, incr_column(Col, 2), [{char,Attrs,C}|Toks]);
+scan_char([C|_Cs], _St, Line, Col, _Toks) when ?CHAR(C) ->
+ scan_error({illegal,character}, Line, Col, Line, incr_column(Col, 1), eof);
+scan_char([], _St, Line, Col, Toks) ->
+ {more,{[$$],Col,Toks,Line,[],fun scan/6}};
+scan_char(eof, _St, Line, Col, _Toks) ->
+ scan_error(char, Line, Col, Line, incr_column(Col, 1), eof).
+
+scan_string(Cs, St, Line, Col, Toks, {Wcs,Str,Line0,Col0}) ->
+ case scan_string0(Cs, St, Line, Col, $\", Str, Wcs) of %"
+ {more,Ncs,Nline,Ncol,Nstr,Nwcs} ->
+ State = {Nwcs,Nstr,Line0,Col0},
+ {more,{Ncs,Ncol,Toks,Nline,State,fun scan_string/6}};
+ {char_error,Ncs,Error,Nline,Ncol,EndCol} ->
+ scan_error(Error, Nline, Ncol, Nline, EndCol, Ncs);
+ {error,Nline,Ncol,Nwcs,Ncs} ->
+ Estr = string:substr(Nwcs, 1, 16), % Expanded escape chars.
+ scan_error({string,$\",Estr}, Line0, Col0, Nline, Ncol, Ncs); %"
+ {Ncs,Nline,Ncol,Nstr,Nwcs} ->
+ Attrs = attributes(Line0, Col0, St, Nstr),
+ scan1(Ncs, St, Nline, Ncol, [{string,Attrs,Nwcs}|Toks])
+ end.
+
+scan_qatom(Cs, St, Line, Col, Toks, {Wcs,Str,Line0,Col0}) ->
+ case scan_string0(Cs, St, Line, Col, $\', Str, Wcs) of %'
+ {more,Ncs,Nline,Ncol,Nstr,Nwcs} ->
+ State = {Nwcs,Nstr,Line0,Col0},
+ {more,{Ncs,Ncol,Toks,Nline,State,fun scan_qatom/6}};
+ {char_error,Ncs,Error,Nline,Ncol,EndCol} ->
+ scan_error(Error, Nline, Ncol, Nline, EndCol, Ncs);
+ {error,Nline,Ncol,Nwcs,Ncs} ->
+ Estr = string:substr(Nwcs, 1, 16), % Expanded escape chars.
+ scan_error({string,$\',Estr}, Line0, Col0, Nline, Ncol, Ncs); %'
+ {Ncs,Nline,Ncol,Nstr,Nwcs} ->
+ case catch list_to_atom(Nwcs) of
+ A when is_atom(A) ->
+ Attrs = attributes(Line0, Col0, St, Nstr),
+ scan1(Ncs, St, Nline, Ncol, [{atom,Attrs,A}|Toks]);
+ _ ->
+ scan_error({illegal,atom}, Line0, Col0, Nline, Ncol, Ncs)
+ end
+ end.
+
+scan_string0(Cs, #erl_scan{text=false}, Line, no_col=Col, Q, [], Wcs) ->
+ scan_string_no_col(Cs, Line, Col, Q, Wcs);
+scan_string0(Cs, #erl_scan{text=true}, Line, no_col=Col, Q, Str, Wcs) ->
+ scan_string1(Cs, Line, Col, Q, Str, Wcs);
+scan_string0(Cs, St, Line, Col, Q, [], Wcs) ->
+ scan_string_col(Cs, St, Line, Col, Q, Wcs);
+scan_string0(Cs, _St, Line, Col, Q, Str, Wcs) ->
+ scan_string1(Cs, Line, Col, Q, Str, Wcs).
+
+%% Optimization. Col =:= no_col.
+scan_string_no_col([Q|Cs], Line, Col, Q, Wcs) ->
+ {Cs,Line,Col,_DontCare=[],lists:reverse(Wcs)};
+scan_string_no_col([$\n=C|Cs], Line, Col, Q, Wcs) ->
+ scan_string_no_col(Cs, Line+1, Col, Q, [C|Wcs]);
+scan_string_no_col([C|Cs], Line, Col, Q, Wcs) when C =/= $\\, ?UNICODE(C) ->
+ scan_string_no_col(Cs, Line, Col, Q, [C|Wcs]);
+scan_string_no_col(Cs, Line, Col, Q, Wcs) ->
+ scan_string1(Cs, Line, Col, Q, Wcs, Wcs).
+
+%% Optimization. Col =/= no_col.
+scan_string_col([Q|Cs], St, Line, Col, Q, Wcs0) ->
+ Wcs = lists:reverse(Wcs0),
+ Str = ?STR(St, [Q|Wcs++[Q]]),
+ {Cs,Line,Col+1,Str,Wcs};
+scan_string_col([$\n=C|Cs], St, Line, _xCol, Q, Wcs) ->
+ scan_string_col(Cs, St, Line+1, 1, Q, [C|Wcs]);
+scan_string_col([C|Cs], St, Line, Col, Q, Wcs) when C =/= $\\, ?UNICODE(C) ->
+ scan_string_col(Cs, St, Line, Col+1, Q, [C|Wcs]);
+scan_string_col(Cs, _St, Line, Col, Q, Wcs) ->
+ scan_string1(Cs, Line, Col, Q, Wcs, Wcs).
+
+%% Note: in those cases when a 'char_error' tuple is returned below it
+%% is tempting to skip over characters up to the first Q character,
+%% but then the end location of the error tuple would not correspond
+%% to the start location of the returned Rest string. (Maybe the end
+%% location could be modified, but that too is ugly.)
+scan_string1([Q|Cs], Line, Col, Q, Str0, Wcs0) ->
+ Wcs = lists:reverse(Wcs0),
+ Str = [Q|lists:reverse(Str0, [Q])],
+ {Cs,Line,incr_column(Col, 1),Str,Wcs};
+scan_string1([$\n=C|Cs], Line, Col, Q, Str, Wcs) ->
+ Ncol = new_column(Col, 1),
+ scan_string1(Cs, Line+1, Ncol, Q, [C|Str], [C|Wcs]);
+scan_string1([$\\|Cs]=Cs0, Line, Col, Q, Str, Wcs) ->
+ case scan_escape(Cs, Col) of
+ more ->
+ {more,Cs0,Line,Col,Str,Wcs};
+ {error,Ncs,Error,Ncol} ->
+ {char_error,Ncs,Error,Line,Col,incr_column(Ncol, 1)};
+ {eof,Ncol} ->
+ {error,Line,incr_column(Ncol, 1),lists:reverse(Wcs),eof};
+ {nl,Val,ValStr,Ncs,Ncol} ->
+ Nstr = lists:reverse(ValStr, [$\\|Str]),
+ Nwcs = [Val|Wcs],
+ scan_string1(Ncs, Line+1, Ncol, Q, Nstr, Nwcs);
+ {Val,ValStr,Ncs,Ncol} ->
+ Nstr = lists:reverse(ValStr, [$\\|Str]),
+ Nwcs = [Val|Wcs],
+ scan_string1(Ncs, Line, incr_column(Ncol, 1), Q, Nstr, Nwcs)
+ end;
+scan_string1([C|Cs], Line, no_col=Col, Q, Str, Wcs) when ?UNICODE(C) ->
+ scan_string1(Cs, Line, Col, Q, [C|Str], [C|Wcs]);
+scan_string1([C|Cs], Line, Col, Q, Str, Wcs) when ?UNICODE(C) ->
+ scan_string1(Cs, Line, Col+1, Q, [C|Str], [C|Wcs]);
+scan_string1([C|Cs], Line, Col, _Q, _Str, _Wcs) when ?CHAR(C) ->
+ {char_error,Cs,{illegal,character},Line,Col,incr_column(Col, 1)};
+scan_string1([]=Cs, Line, Col, _Q, Str, Wcs) ->
+ {more,Cs,Line,Col,Str,Wcs};
+scan_string1(eof, Line, Col, _Q, _Str, Wcs) ->
+ {error,Line,Col,lists:reverse(Wcs),eof}.
+
+-define(OCT(C), C >= $0, C =< $7).
+-define(HEX(C), C >= $0 andalso C =< $9 orelse
+ C >= $A andalso C =< $F orelse
+ C >= $a andalso C =< $f).
+
+%% \<1-3> octal digits
+scan_escape([O1,O2,O3|Cs], Col) when ?OCT(O1), ?OCT(O2), ?OCT(O3) ->
+ Val = (O1*8 + O2)*8 + O3 - 73*$0,
+ {Val,[O1,O2,O3],Cs,incr_column(Col, 3)};
+scan_escape([O1,O2], _Col) when ?OCT(O1), ?OCT(O2) ->
+ more;
+scan_escape([O1,O2|Cs], Col) when ?OCT(O1), ?OCT(O2) ->
+ Val = (O1*8 + O2) - 9*$0,
+ {Val,[O1,O2],Cs,incr_column(Col, 2)};
+scan_escape([O1], _Col) when ?OCT(O1) ->
+ more;
+scan_escape([O1|Cs], Col) when ?OCT(O1) ->
+ {O1 - $0,[O1],Cs,incr_column(Col, 1)};
+%% \x{<hex digits>}
+scan_escape([$x,${|Cs], Col) ->
+ scan_hex(Cs, incr_column(Col, 2), []);
+scan_escape([$x], _Col) ->
+ more;
+scan_escape([$x|eof], Col) ->
+ {eof,incr_column(Col, 1)};
+%% \x<2> hexadecimal digits
+scan_escape([$x,H1,H2|Cs], Col) when ?HEX(H1), ?HEX(H2) ->
+ Val = erlang:list_to_integer([H1,H2], 16),
+ {Val,[$x,H1,H2],Cs,incr_column(Col, 3)};
+scan_escape([$x,H1], _Col) when ?HEX(H1) ->
+ more;
+scan_escape([$x|Cs], Col) ->
+ {error,Cs,{illegal,character},incr_column(Col, 1)};
+%% \^X -> CTL-X
+scan_escape([$^=C0,$\n=C|Cs], Col) ->
+ {nl,C,[C0,C],Cs,new_column(Col, 1)};
+scan_escape([$^=C0,C|Cs], Col) when ?CHAR(C) ->
+ Val = C band 31,
+ {Val,[C0,C],Cs,incr_column(Col, 2)};
+scan_escape([$^], _Col) ->
+ more;
+scan_escape([$^|eof], Col) ->
+ {eof,incr_column(Col, 1)};
+scan_escape([$\n=C|Cs], Col) ->
+ {nl,C,[C],Cs,new_column(Col, 1)};
+scan_escape([C0|Cs], Col) when ?UNICODE(C0) ->
+ C = escape_char(C0),
+ {C,[C0],Cs,incr_column(Col, 1)};
+scan_escape([C|Cs], Col) when ?CHAR(C) ->
+ {error,Cs,{illegal,character},incr_column(Col, 1)};
+scan_escape([], _Col) ->
+ more;
+scan_escape(eof, Col) ->
+ {eof,Col}.
+
+scan_hex([C|Cs], no_col=Col, Wcs) when ?HEX(C) ->
+ scan_hex(Cs, Col, [C|Wcs]);
+scan_hex([C|Cs], Col, Wcs) when ?HEX(C) ->
+ scan_hex(Cs, Col+1, [C|Wcs]);
+scan_hex(Cs, Col, Wcs) ->
+ scan_esc_end(Cs, Col, Wcs, 16, "x{").
+
+scan_esc_end([$}|Cs], Col, Wcs0, B, Str0) ->
+ Wcs = lists:reverse(Wcs0),
+ case catch erlang:list_to_integer(Wcs, B) of
+ Val when ?UNICODE(Val) ->
+ {Val,Str0++Wcs++[$}],Cs,incr_column(Col, 1)};
+ _ ->
+ {error,Cs,{illegal,character},incr_column(Col, 1)}
+ end;
+scan_esc_end([], _Col, _Wcs, _B, _Str0) ->
+ more;
+scan_esc_end(eof, Col, _Wcs, _B, _Str0) ->
+ {eof,Col};
+scan_esc_end(Cs, Col, _Wcs, _B, _Str0) ->
+ {error,Cs,{illegal,character},Col}.
+
+escape_char($n) -> $\n; % \n = LF
+escape_char($r) -> $\r; % \r = CR
+escape_char($t) -> $\t; % \t = TAB
+escape_char($v) -> $\v; % \v = VT
+escape_char($b) -> $\b; % \b = BS
+escape_char($f) -> $\f; % \f = FF
+escape_char($e) -> $\e; % \e = ESC
+escape_char($s) -> $\s; % \s = SPC
+escape_char($d) -> $\d; % \d = DEL
+escape_char(C) -> C.
+
+scan_number([C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
+ scan_number(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_number([$.,C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
+ scan_fraction(Cs, St, Line, Col, Toks, [C,$.|Ncs]);
+scan_number([$.]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_number/6}};
+scan_number([$#|Cs]=Cs0, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ case catch list_to_integer(Ncs) of
+ B when B >= 2, B =< 1+$Z-$A+10 ->
+ Bcs = ?STR(St, Ncs++[$#]),
+ scan_based_int(Cs, St, Line, Col, Toks, {B,[],Bcs});
+ B ->
+ Len = length(Ncs),
+ scan_error({base,B}, Line, Col, Line, incr_column(Col, Len), Cs0)
+ end;
+scan_number([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_number/6}};
+scan_number(Cs, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ case catch list_to_integer(Ncs) of
+ N when is_integer(N) ->
+ tok3(Cs, St, Line, Col, Toks, integer, Ncs, N);
+ _ ->
+ Ncol = incr_column(Col, length(Ncs)),
+ scan_error({illegal,integer}, Line, Col, Line, Ncol, Cs)
+ end.
+
+scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
+ when ?DIGIT(C), C < $0+B ->
+ scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
+scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
+ when C >= $A, B > 10, C < $A+B-10 ->
+ scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
+scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
+ when C >= $a, B > 10, C < $a+B-10 ->
+ scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
+scan_based_int([]=Cs, _St, Line, Col, Toks, State) ->
+ {more,{Cs,Col,Toks,Line,State,fun scan_based_int/6}};
+scan_based_int(Cs, St, Line, Col, Toks, {B,Ncs0,Bcs}) ->
+ Ncs = lists:reverse(Ncs0),
+ case catch erlang:list_to_integer(Ncs, B) of
+ N when is_integer(N) ->
+ tok3(Cs, St, Line, Col, Toks, integer, ?STR(St, Bcs++Ncs), N);
+ _ ->
+ Len = length(Bcs)+length(Ncs),
+ Ncol = incr_column(Col, Len),
+ scan_error({illegal,integer}, Line, Col, Line, Ncol, Cs)
+ end.
+
+scan_fraction([C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
+ scan_fraction(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_fraction([E|Cs], St, Line, Col, Toks, Ncs) when E =:= $e; E =:= $E ->
+ scan_exponent_sign(Cs, St, Line, Col, Toks, [E|Ncs]);
+scan_fraction([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_fraction/6}};
+scan_fraction(Cs, St, Line, Col, Toks, Ncs) ->
+ float_end(Cs, St, Line, Col, Toks, Ncs).
+
+scan_exponent_sign([C|Cs], St, Line, Col, Toks, Ncs) when C =:= $+; C =:= $- ->
+ scan_exponent(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_exponent_sign([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_exponent_sign/6}};
+scan_exponent_sign(Cs, St, Line, Col, Toks, Ncs) ->
+ scan_exponent(Cs, St, Line, Col, Toks, Ncs).
+
+scan_exponent([C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
+ scan_exponent(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_exponent([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_exponent/6}};
+scan_exponent(Cs, St, Line, Col, Toks, Ncs) ->
+ float_end(Cs, St, Line, Col, Toks, Ncs).
+
+float_end(Cs, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ case catch list_to_float(Ncs) of
+ F when is_float(F) ->
+ tok3(Cs, St, Line, Col, Toks, float, Ncs, F);
+ _ ->
+ Ncol = incr_column(Col, length(Ncs)),
+ scan_error({illegal,float}, Line, Col, Line, Ncol, Cs)
+ end.
+
+skip_comment([C|Cs], St, Line, Col, Toks, N) when C =/= $\n, ?CHAR(C) ->
+ case ?UNICODE(C) of
+ true ->
+ skip_comment(Cs, St, Line, Col, Toks, N+1);
+ false ->
+ Ncol = incr_column(Col, N+1),
+ scan_error({illegal,character}, Line, Col, Line, Ncol, Cs)
+ end;
+skip_comment([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun skip_comment/6}};
+skip_comment(Cs, St, Line, Col, Toks, N) ->
+ scan1(Cs, St, Line, incr_column(Col, N), Toks).
+
+scan_comment([C|Cs], St, Line, Col, Toks, Ncs) when C =/= $\n, ?CHAR(C) ->
+ case ?UNICODE(C) of
+ true ->
+ scan_comment(Cs, St, Line, Col, Toks, [C|Ncs]);
+ false ->
+ Ncol = incr_column(Col, length(Ncs)+1),
+ scan_error({illegal,character}, Line, Col, Line, Ncol, Cs)
+ end;
+scan_comment([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_comment/6}};
+scan_comment(Cs, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ tok3(Cs, St, Line, Col, Toks, comment, Ncs, Ncs).
+
+tok2(Cs, #erl_scan{text = false}=St, Line, no_col=Col, Toks, _Wcs, P) ->
+ scan1(Cs, St, Line, Col, [{P,Line}|Toks]);
+tok2(Cs, St, Line, Col, Toks, Wcs, P) ->
+ Attrs = attributes(Line, Col, St, Wcs),
+ scan1(Cs, St, Line, incr_column(Col, length(Wcs)), [{P,Attrs}|Toks]).
+
+tok2(Cs, #erl_scan{text = false}=St, Line, no_col=Col, Toks, _Wcs, P, _N) ->
+ scan1(Cs, St, Line, Col, [{P,Line}|Toks]);
+tok2(Cs, St, Line, Col, Toks, Wcs, P, N) ->
+ Attrs = attributes(Line, Col, St, Wcs),
+ scan1(Cs, St, Line, incr_column(Col, N), [{P,Attrs}|Toks]).
+
+tok3(Cs, #erl_scan{text = false}=St, Line, no_col=Col, Toks, Item, _S, Sym) ->
+ scan1(Cs, St, Line, Col, [{Item,Line,Sym}|Toks]);
+tok3(Cs, St, Line, Col, Toks, Item, String, Sym) ->
+ Token = {Item,attributes(Line, Col, St, String),Sym},
+ scan1(Cs, St, Line, incr_column(Col, length(String)), [Token|Toks]).
+
+tok3(Cs, #erl_scan{text = false}=St, Line, no_col=Col, Toks, Item,
+ _String, Sym, _Length) ->
+ scan1(Cs, St, Line, Col, [{Item,Line,Sym}|Toks]);
+tok3(Cs, St, Line, Col, Toks, Item, String, Sym, Length) ->
+ Token = {Item,attributes(Line, Col, St, String),Sym},
+ scan1(Cs, St, Line, incr_column(Col, Length), [Token|Toks]).
+
+scan_error(Error, Line, Col, EndLine, EndCol, Rest) ->
+ Loc = location(Line, Col),
+ EndLoc = location(EndLine, EndCol),
+ scan_error(Error, Loc, EndLoc, Rest).
+
+scan_error(Error, ErrorLoc, EndLoc, Rest) ->
+ {{error,{ErrorLoc,?MODULE,Error},EndLoc},Rest}.
+
+-compile({inline,[attributes/4]}).
+
+attributes(Line, no_col, #erl_scan{text = false}, _String) ->
+ Line;
+attributes(Line, no_col, #erl_scan{text = true}, String) ->
+ [{line,Line},{text,String}];
+attributes(Line, Col, #erl_scan{text = false}, _String) ->
+ {Line,Col};
+attributes(Line, Col, #erl_scan{text = true}, String) ->
+ [{line,Line},{column,Col},{text,String}].
+
+location(Line, no_col) ->
+ Line;
+location(Line, Col) when is_integer(Col) ->
+ {Line,Col}.
+
+-compile({inline,[incr_column/2,new_column/2]}).
+
+incr_column(no_col=Col, _N) ->
+ Col;
+incr_column(Col, N) when is_integer(Col) ->
+ Col + N.
+
+new_column(no_col=Col, _Ncol) ->
+ Col;
+new_column(Col, Ncol) when is_integer(Col) ->
+ Ncol.
+
+nl_spcs(2) -> "\n ";
+nl_spcs(3) -> "\n ";
+nl_spcs(4) -> "\n ";
+nl_spcs(5) -> "\n ";
+nl_spcs(6) -> "\n ";
+nl_spcs(7) -> "\n ";
+nl_spcs(8) -> "\n ";
+nl_spcs(9) -> "\n ";
+nl_spcs(10) -> "\n ";
+nl_spcs(11) -> "\n ";
+nl_spcs(12) -> "\n ";
+nl_spcs(13) -> "\n ";
+nl_spcs(14) -> "\n ";
+nl_spcs(15) -> "\n ";
+nl_spcs(16) -> "\n ";
+nl_spcs(17) -> "\n ".
+
+spcs(1) -> " ";
+spcs(2) -> " ";
+spcs(3) -> " ";
+spcs(4) -> " ";
+spcs(5) -> " ";
+spcs(6) -> " ";
+spcs(7) -> " ";
+spcs(8) -> " ";
+spcs(9) -> " ";
+spcs(10) -> " ";
+spcs(11) -> " ";
+spcs(12) -> " ";
+spcs(13) -> " ";
+spcs(14) -> " ";
+spcs(15) -> " ";
+spcs(16) -> " ".
+
+nl_tabs(2) -> "\n\t";
+nl_tabs(3) -> "\n\t\t";
+nl_tabs(4) -> "\n\t\t\t";
+nl_tabs(5) -> "\n\t\t\t\t";
+nl_tabs(6) -> "\n\t\t\t\t\t";
+nl_tabs(7) -> "\n\t\t\t\t\t\t";
+nl_tabs(8) -> "\n\t\t\t\t\t\t\t";
+nl_tabs(9) -> "\n\t\t\t\t\t\t\t\t";
+nl_tabs(10) -> "\n\t\t\t\t\t\t\t\t\t";
+nl_tabs(11) -> "\n\t\t\t\t\t\t\t\t\t\t".
+
+tabs(1) -> "\t";
+tabs(2) -> "\t\t";
+tabs(3) -> "\t\t\t";
+tabs(4) -> "\t\t\t\t";
+tabs(5) -> "\t\t\t\t\t";
+tabs(6) -> "\t\t\t\t\t\t";
+tabs(7) -> "\t\t\t\t\t\t\t";
+tabs(8) -> "\t\t\t\t\t\t\t\t";
+tabs(9) -> "\t\t\t\t\t\t\t\t\t";
+tabs(10) -> "\t\t\t\t\t\t\t\t\t\t".
+
+-spec reserved_word(Atom :: atom()) -> boolean().
+reserved_word('after') -> true;
+reserved_word('begin') -> true;
+reserved_word('case') -> true;
+reserved_word('try') -> true;
+reserved_word('cond') -> true;
+reserved_word('catch') -> true;
+reserved_word('andalso') -> true;
+reserved_word('orelse') -> true;
+reserved_word('end') -> true;
+reserved_word('fun') -> true;
+reserved_word('if') -> true;
+reserved_word('let') -> true;
+reserved_word('of') -> true;
+reserved_word('receive') -> true;
+reserved_word('when') -> true;
+reserved_word('bnot') -> true;
+reserved_word('not') -> true;
+reserved_word('div') -> true;
+reserved_word('rem') -> true;
+reserved_word('band') -> true;
+reserved_word('and') -> true;
+reserved_word('bor') -> true;
+reserved_word('bxor') -> true;
+reserved_word('bsl') -> true;
+reserved_word('bsr') -> true;
+reserved_word('or') -> true;
+reserved_word('xor') -> true;
+reserved_word(_) -> false.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl
index 3456f0e9c6..cdcaa5f9e8 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl
@@ -3,6 +3,8 @@
-opaque abc() :: 'a' | 'b' | 'c'.
+-spec atom_or_list(_) -> abc() | list().
+
atom_or_list(1) -> a;
atom_or_list(2) -> b;
atom_or_list(3) -> c;
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_adt.erl
new file mode 100644
index 0000000000..7103847ae7
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_adt.erl
@@ -0,0 +1,17 @@
+-module(exact_adt).
+
+-export([exact_adt_set_type/1, exact_adt_set_type2/1]).
+
+-export_type([exact_adt/0]).
+
+-record(exact_adt, {}).
+
+-opaque exact_adt() :: #exact_adt{}.
+
+-spec exact_adt_set_type(_) -> exact_adt().
+
+exact_adt_set_type(G) -> G.
+
+-spec exact_adt_set_type2(exact_adt()) -> exact_adt().
+
+exact_adt_set_type2(G) -> G.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl
new file mode 100644
index 0000000000..5f7ab4f3aa
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl
@@ -0,0 +1,60 @@
+-module(exact_api).
+
+-export([new/0, exact_api_test/1, exact_api_new/1,
+ exact_adt_test/1, exact_adt_new/1]).
+
+-export_type([exact_api/0]).
+
+-record(digraph, {vtab = notable :: ets:tab(),
+ etab = notable :: ets:tab(),
+ ntab = notable :: ets:tab(),
+ cyclic = true :: boolean()}).
+
+-spec new() -> digraph().
+
+new() ->
+ A = #digraph{},
+ set_type(A), % does not have an opaque term as 1st argument
+ A.
+
+-spec set_type(digraph()) -> true.
+
+set_type(G) ->
+ digraph:delete(G).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% The derived spec of exact_api_new() is
+%%% -spec exact_api_new(exact_api:exact_api()) -> exact_api:exact_api().
+%%% This won't happen unless dialyzer_typesig uses
+%%% t_is_exactly_equal() rather than t_is_equal().
+%%% [As of R17B the latter considers two types equal if nothing but
+%%% their ?opaque tags differ.]
+
+-record(exact_api, {}).
+
+-opaque exact_api() :: #exact_api{}.
+
+exact_api_test(X) ->
+ #exact_api{} = exact_api_set_type(X). % OK
+
+exact_api_new(A) ->
+ A = #exact_api{},
+ _ = exact_api_set_type(A), % OK (the opaque type is local)
+ A.
+
+-spec exact_api_set_type(exact_api()) -> exact_api().
+
+exact_api_set_type(#exact_api{}=E) -> E.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+-record(exact_adt, {}).
+
+exact_adt_test(X) ->
+ #exact_adt{} = exact_adt:exact_adt_set_type(X). % breaks the opaqueness
+
+exact_adt_new(A) ->
+ A = #exact_adt{},
+ _ = exact_adt:exact_adt_set_type2(A), % does not have an opaque term as 1st argument
+ A.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl
new file mode 100644
index 0000000000..2b157483bc
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl
@@ -0,0 +1,65 @@
+-module(is_rec).
+
+-export([ri1/0, ri11/0, ri13/0, ri14/0, ri2/0, ri3/0, ri4/0, ri5/0,
+ ri6/0, ri7/0, ri8/0]).
+
+-record(r, {f1 :: integer()}).
+
+ri1() ->
+ A = simple1_adt:d1(),
+ is_record(A, r). % opaque term 1
+
+ri11() ->
+ A = simple1_adt:d1(),
+ I = '1-3'(),
+ is_record(A, r, I). % opaque term 1
+
+ri13() ->
+ A = simple1_adt:d1(),
+ if is_record(A, r) -> true end. % breaks the opaqueness
+
+ri14() ->
+ A = simple1_adt:d1(),
+ if is_record({A, 1}, r) -> true end. % breaks the opaqueness
+
+-type '1-3-t'() :: 1..3.
+
+-spec '1-3'() -> '1-3-t'().
+
+'1-3'() ->
+ random:uniform(3).
+
+
+-spec 'Atom'() -> atom().
+
+'Atom'() ->
+ a.
+
+ri2() ->
+ A = simple1_adt:d1(),
+ R = 'Atom'(),
+ is_record(A, R). % opaque term 1
+
+ri3() ->
+ A = simple1_adt:d1(),
+ is_record(A, A, 1). % opaque term 2
+
+ri4() ->
+ A = simple1_adt:d1(),
+ is_record(A, hipp:hopp(), 1). % opaque term 1
+
+ri5() ->
+ A = simple1_adt:d1(),
+ is_record(A, A, hipp:hopp()). % opaque term 2
+
+ri6() ->
+ A = simple1_adt:d1(),
+ if is_record(A, r) -> true end. % breaks opaqueness
+
+ri7() ->
+ A = simple1_adt:d1(),
+ if is_record({r, A}, r) -> true end. % A violates #r{}
+
+ri8() ->
+ A = simple1_adt:d1(),
+ is_record({A, 1}, r). % opaque term 1
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_adt.erl
new file mode 100644
index 0000000000..ff80d6e99b
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_adt.erl
@@ -0,0 +1,28 @@
+-module(rec_adt).
+
+-export([f/0, r1/0]).
+
+-export_type([r1/0]).
+
+-export_type([f/0, op_t/0, a/0]).
+
+-opaque a() :: a | b.
+
+-record(r1,
+ {f1 :: a()}).
+
+-opaque r1() :: #r1{}.
+
+-opaque f() :: fun((_) -> _).
+
+-opaque op_t() :: integer().
+
+-spec f() -> f().
+
+f() ->
+ fun(_) -> 3 end.
+
+-spec r1() -> r1().
+
+r1() ->
+ #r1{f1 = a}.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl
new file mode 100644
index 0000000000..d9b1d59f0c
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl
@@ -0,0 +1,77 @@
+-module(rec_api).
+
+-export([t1/0, t2/0, adt_t1/0, adt_t1/1, adt_r1/0,
+ t/1, t_adt/0, r/0, r_adt/0]).
+
+-export_type([{a,0},{r1,0}]).
+
+-export_type([f/0, op_t/0, r/0, tup/0]).
+
+-opaque a() :: a | b.
+
+-record(r1,
+ {f1 :: a()}).
+
+-opaque r1() :: #r1{}.
+
+t1() ->
+ A = #r1{f1 = a},
+ {r1, a} = A.
+
+t2() ->
+ A = {r1, 10}, % violates the type of #r1{}
+ {r1, 10} = A. % violates the type of #r1{}
+
+adt_t1() ->
+ R = rec_adt:r1(),
+ {r1, a} = R. % breaks the opaqueness
+
+-spec adt_t1(rec_adt:r1()) -> rec_adt:r1(). % invalid type spec
+
+adt_t1(R) ->
+ {r1, a} = R.
+
+-spec adt_r1() -> rec_adt:r1(). % invalid type spec
+
+adt_r1() ->
+ #r1{f1 = a}.
+
+-opaque f() :: fun((_) -> _).
+
+-opaque op_t() :: integer().
+
+-spec t(f()) -> _.
+
+t(A) ->
+ T = term(),
+ %% 3(T), % cannot test this: dialyzer_dep deliberately crashes
+ A(T).
+
+-spec term() -> op_t().
+
+term() ->
+ 3.
+
+t_adt() ->
+ A = rec_adt:f(),
+ T = term(),
+ A(T).
+
+-record(r, {f = fun(_) -> 3 end :: f(), o = 1 :: op_t()}).
+
+-opaque r() :: #r{}.
+
+-opaque tup() :: {'r', f(), op_t()}.
+
+-spec r() -> _.
+
+r() ->
+ {r, f(), 2}. % OK, f() is a local opaque type
+
+-spec f() -> f().
+
+f() ->
+ fun(_) -> 3 end.
+
+r_adt() ->
+ {r, rec_adt:f(), 2}. % breaks the opaqueness
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_adt.erl
new file mode 100644
index 0000000000..21a277c1e9
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_adt.erl
@@ -0,0 +1,138 @@
+-module(simple1_adt).
+
+-export([d1/0, d2/0, i/0, n1/0, n2/0, o1/0, o2/0,
+ c1/0, c2/0, bit1/0, a/0, i1/0, tuple/0,
+ b1/0, b2/0, ty_i1/0]).
+
+-export_type([o1/0, o2/0, d1/0, d2/0]).
+
+-export_type([i1/0, i2/0, di1/0, di2/0]).
+
+-export_type([ty_i1/0, c1/0, c2/0]).
+
+-export_type([b1/0, b2/0]).
+
+-export_type([bit1/0]).
+
+-export_type([tuple1/0, a/0, i/0]).
+
+%% Equal:
+
+-opaque o1() :: a | b | c.
+
+-opaque o2() :: a | b | c.
+
+%% Disjoint:
+
+-opaque d1() :: a | b | c.
+
+-opaque d2() :: d | e | f.
+
+%% One common element:
+
+-opaque c1() :: a | b | c.
+
+-opaque c2() :: c | e | f.
+
+%% Equal integer range:
+
+-opaque i1() :: 1 | 2.
+
+-opaque i2() :: 1 | 2.
+
+%% Disjoint integer range:
+
+-opaque di1() :: 1 | 2.
+
+-opaque di2() :: 3 | 4.
+
+
+-type ty_i1() :: 1 | 2.
+
+%% Boolean types
+
+-opaque b1() :: boolean().
+
+-opaque b2() :: boolean().
+
+%% Binary types
+
+-opaque bit1() :: binary().
+
+%% Tuple types
+
+-opaque tuple1() :: tuple().
+
+%% Atom type
+
+-opaque a() :: atom().
+
+-opaque i() :: integer().
+
+-spec d1() -> d1().
+
+d1() -> a.
+
+-spec d2() -> d2().
+
+d2() -> d.
+
+-spec i() -> i().
+
+i() ->
+ 1.
+
+-spec n1() -> o1().
+
+n1() -> a.
+
+-spec n2() -> o2().
+
+n2() -> a.
+
+-spec o1() -> o1().
+
+o1() -> a.
+
+-spec o2() -> o2().
+
+o2() -> a.
+
+-spec c1() -> c1().
+
+c1() -> a.
+
+-spec c2() -> c2().
+
+c2() -> e.
+
+-spec bit1() -> bit1().
+
+bit1() ->
+ <<"hej">>.
+
+-spec a() -> a().
+
+a() ->
+ e.
+
+-spec i1() -> i1().
+
+i1() -> 1.
+
+-spec tuple() -> tuple1().
+
+tuple() -> {1,2}.
+
+-spec b1() -> b1().
+
+b1() -> true.
+
+-spec b2() -> b2().
+
+b2() -> false.
+
+-spec ty_i1() -> ty_i1().
+
+ty_i1() ->
+ 1.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl
new file mode 100644
index 0000000000..5135eb8e59
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl
@@ -0,0 +1,571 @@
+-module(simple1_api).
+
+-export([t1/1, adt_t1/1, t2/1, adt_t2/1, tup/0, t3/0, t4/0, t5/0, t6/0, t7/0,
+ t8/0, adt_t3/0, adt_t4/0, adt_t7/0, adt_t8/0, adt_t5/0,
+ c1/2, c2/2, c2/0, c3/0, c4/0, tt1/0, tt2/0,
+ cmp1/0, cmp2/0, cmp3/0, cmp4/0,
+ ty_cmp1/0, ty_cmp2/0, ty_cmp3/0, ty_cmp4/0,
+ f1/0, f2/0, adt_f1/0, adt_f2/0, f3/0, f4/0, adt_f3/0, adt_f4/0,
+ adt_f4_a/0, adt_f4_b/0,
+ bool_t1/0, bool_t2/0, bool_t3/0, bool_t4/0, bool_t5/1, bool_t6/1,
+ bool_t7/0, bool_adt_t1/0, bool_adt_t2/0, bool_adt_t5/1,
+ bool_adt_t6/1, bool_t8/0, bool_adt_t8/2, bool_t9/0, bool_adt_t9/2,
+ bit_t1/0, bit_adt_t1/0, bit_t3/1, bit_adt_t2/0, bit_adt_t3/1,
+ bit_t5/1, bit_t4/1, bit_adt_t4/1, bit_t5/0, bit_adt_t5/0,
+ call_f/1, call_f_adt/1, call_m_adt/1, call_m/1, call_f_i/1,
+ call_m_i/1, call_m_adt_i/1, call_f_adt_i/1,
+ eq1/0, eq2/0, c5/0, c6/2, c7/2, c8/0]).
+
+%%% Equal opaque types
+
+-export_type([o1/0, o2/0]).
+
+-export_type([d1/0, d2/0]).
+
+-opaque o1() :: a | b | c.
+
+-opaque o2() :: a | b | c.
+
+-export_type([i1/0, i2/0, di1/0, di2/0]).
+
+-export_type([b1/0, b2/0]).
+
+-export_type([bit1/0]).
+
+-export_type([a/0, i/0]).
+
+%% The derived spec is
+%% -spec t1('a' | 'b') -> simple1_api:o1('a') | simple1_api:o2('a').
+%% but that is not tested...
+
+t1(a) ->
+ o1();
+t1(b) ->
+ o2().
+
+-spec o1() -> o1().
+
+o1() -> a.
+
+-spec o2() -> o2().
+
+o2() -> a.
+
+%% The derived spec is
+%% -spec adt_t1('a' | 'b') -> simple1_adt:o1('a') | simple1_adt:o2('a').
+%% but that is not tested...
+
+adt_t1(a) ->
+ simple1_adt:o1();
+adt_t1(b) ->
+ simple1_adt:o2().
+
+%%% Disjunct opaque types
+
+-opaque d1() :: a | b | c.
+
+-opaque d2() :: d | e | f.
+
+%% -spec t2('a' | 'b') -> simple1_api:d1('a') | simple1_api:d2('d').
+
+t2(a) ->
+ d1();
+t2(b) ->
+ d2().
+
+-spec d1() -> d1().
+
+d1() -> a.
+
+-spec d2() -> d2().
+
+d2() -> d.
+
+%% -spec adt_t2('a' | 'b') -> simple1_adt:d1('a') | simple1_adt:d2('d').
+
+adt_t2(a) ->
+ simple1_adt:d1();
+adt_t2(b) ->
+ simple1_adt:d2().
+
+-spec tup() -> simple1_adt:tuple1(). % invalid type spec
+
+tup() ->
+ {a, b}.
+
+%%% Matching equal opaque types with different names
+
+t3() ->
+ A = n1(),
+ B = n2(),
+ A = A, % OK, of course
+ A = B. % OK since o1() and o2() are local opaque types
+
+t4() ->
+ A = n1(),
+ B = n2(),
+ true = A =:= A, % OK, of course
+ A =:= B. % OK since o1() and o2() are local opaque types
+
+t5() ->
+ A = d1(),
+ B = d2(),
+ A =:= B. % can never evaluate to true
+
+t6() ->
+ A = d1(),
+ B = d2(),
+ A = B. % can never succeed
+
+t7() ->
+ A = d1(),
+ B = d2(),
+ A =/= B. % OK (always true?)
+
+t8() ->
+ A = d1(),
+ B = d2(),
+ A /= B. % OK (always true?)
+
+-spec n1() -> o1().
+
+n1() -> a.
+
+-spec n2() -> o2().
+
+n2() -> a.
+
+adt_t3() ->
+ A = simple1_adt:n1(),
+ B = simple1_adt:n2(),
+ true = A =:= A, % OK.
+ A =:= B. % opaque test, not OK
+
+adt_t4() ->
+ A = simple1_adt:n1(),
+ B = simple1_adt:n2(),
+ A = A, % OK
+ A = B. % opaque term
+
+adt_t7() ->
+ A = simple1_adt:n1(),
+ B = simple1_adt:n2(),
+ false = A =/= A, % OK
+ A =/= B. % opaque test, not OK
+
+adt_t8() ->
+ A = simple1_adt:n1(),
+ B = simple1_adt:n2(),
+ false = A /= A, % OK
+ A /= B. % opaque test, not OK
+
+adt_t5() ->
+ A = simple1_adt:c1(),
+ B = simple1_adt:c2(),
+ A =:= B. % opaque test, not OK
+
+%% Comparison in guard
+
+-spec c1(simple1_adt:d1(), simple1_adt:d2()) -> boolean().
+
+c1(A, B) when A =< B -> true. % succ type of A and B is any() (type spec is OK)
+
+-spec c2(simple1_adt:d1(), simple1_adt:d2()) -> boolean().
+
+c2(A, B) ->
+ if A =< B -> true end. % succ type of A and B is any() (type spec is OK)
+
+c2() ->
+ A = simple1_adt:d1(),
+ B = simple1_adt:d2(),
+ if A =< B -> ok end. % opaque term
+
+c3() ->
+ B = simple1_adt:d2(),
+ if a =< B -> ok end. % opaque term
+
+c4() ->
+ A = simple1_adt:d1(),
+ if A =< d -> ok end. % opaque term
+
+tt1() ->
+ A = o1(),
+ is_integer(A). % OK
+
+tt2() ->
+ A = simple1_adt:d1(),
+ is_integer(A). % breaks the opaqueness
+
+%% Comparison with integers
+
+-opaque i1() :: 1 | 2.
+
+-opaque i2() :: 1 | 2.
+
+-opaque di1() :: 1 | 2.
+
+-opaque di2() :: 3 | 4.
+
+-spec i1() -> i1().
+
+i1() -> 1.
+
+-type ty_i1() :: 1 | 2.
+
+-spec ty_i1() -> ty_i1().
+
+ty_i1() -> 1.
+
+cmp1() ->
+ A = i1(),
+ if A > 3 -> ok end. % can never succeed
+
+cmp2() ->
+ A = simple1_adt:i1(),
+ if A > 3 -> ok end. % opaque term
+
+cmp3() ->
+ A = i1(),
+ if A < 3 -> ok end.
+
+cmp4() ->
+ A = simple1_adt:i1(),
+ if A < 3 -> ok end. % opaque term
+
+%% -type
+
+ty_cmp1() ->
+ A = ty_i1(),
+ if A > 3 -> ok end. % can never succeed
+
+ty_cmp2() ->
+ A = simple1_adt:ty_i1(),
+ if A > 3 -> ok end. % can never succeed
+
+ty_cmp3() ->
+ A = ty_i1(),
+ if A < 3 -> ok end.
+
+ty_cmp4() ->
+ A = simple1_adt:ty_i1(),
+ if A < 3 -> ok end.
+
+%% is_function
+
+f1() ->
+ T = n1(),
+ if is_function(T) -> ok end. % can never succeed
+
+f2() ->
+ T = n1(),
+ is_function(T). % ok
+
+adt_f1() ->
+ T = simple1_adt:n1(),
+ if is_function(T) -> ok end. % breaks the opaqueness
+
+adt_f2() ->
+ T = simple1_adt:n1(),
+ is_function(T). % breaks the opaqueness
+
+f3() ->
+ A = i1(),
+ T = n1(),
+ if is_function(T, A) -> ok end. % can never succeed
+
+f4() ->
+ A = i1(),
+ T = n1(),
+ is_function(T, A). % ok
+
+adt_f3() ->
+ A = simple1_adt:i1(),
+ T = simple1_adt:n1(),
+ if is_function(T, A) -> ok end. % breaks the opaqueness
+
+adt_f4() ->
+ A = simple1_adt:i1(),
+ T = simple1_adt:n1(),
+ is_function(T, A). % breaks the opaqueness
+
+adt_f4_a() ->
+ A = simple1_adt:i1(),
+ T = n1(),
+ is_function(T, A). % opaque term
+
+
+adt_f4_b() ->
+ A = i1(),
+ T = simple1_adt:n1(),
+ is_function(T, A). % breaks the opaqueness
+
+%% A few Boolean examples
+
+bool_t1() ->
+ B = b2(),
+ if B -> ok end. % B =:= true can never succeed
+
+bool_t2() ->
+ A = b1(),
+ B = b2(),
+ if A and not B -> ok end.
+
+bool_t3() ->
+ A = b1(),
+ if not A -> ok end. % can never succeed
+
+bool_t4() ->
+ A = n1(),
+ if not ((A >= 1) and not (A < 1)) -> ok end. % can never succeed
+
+-spec bool_t5(i1()) -> integer().
+
+bool_t5(A) ->
+ if [not (A > 1)] =:=
+ [false]-> 1 end.
+
+-spec bool_t6(b1()) -> integer().
+
+bool_t6(A) ->
+ if [not A] =:=
+ [false]-> 1 end.
+
+-spec bool_t7() -> integer().
+
+bool_t7() ->
+ A = i1(),
+ if [not A] =:= % cannot succeed
+ [false]-> 1 end.
+
+bool_adt_t1() ->
+ B = simple1_adt:b2(),
+ if B -> ok end. % opaque term
+
+bool_adt_t2() ->
+ A = simple1_adt:b1(),
+ B = simple1_adt:b2(),
+ if A and not B -> ok end. % opaque term
+
+-spec bool_adt_t5(simple1_adt:i1()) -> integer().
+
+bool_adt_t5(A) ->
+ if [not (A > 1)] =:= % succ type of A is any() (type spec is OK)
+ [false]-> 1 end.
+
+-spec bool_adt_t6(simple1_adt:b1()) -> integer(). % invalid type spec
+
+bool_adt_t6(A) ->
+ if [not A] =:= % succ type of A is 'true'
+ [false]-> 1 end.
+
+-spec bool_t8() -> integer().
+
+bool_t8() ->
+ A = i1(),
+ if [A and A] =:= % cannot succeed
+ [false]-> 1 end.
+
+-spec bool_adt_t8(simple1_adt:b1(), simple1_adt:b2()) -> integer(). % invalid
+
+bool_adt_t8(A, B) ->
+ if [A and B] =:=
+ [false]-> 1 end.
+
+-spec bool_t9() -> integer().
+
+bool_t9() ->
+ A = i1(),
+ if [A or A] =:= % cannot succeed
+ [false]-> 1 end.
+
+-spec bool_adt_t9(simple1_adt:b1(), simple1_adt:b2()) -> integer(). % invalid
+
+bool_adt_t9(A, B) ->
+ if [A or B] =:=
+ [false]-> 1 end.
+
+-opaque b1() :: boolean().
+
+-opaque b2() :: boolean().
+
+-spec b1() -> b1().
+
+b1() -> true.
+
+-spec b2() -> b2().
+
+b2() -> false.
+
+%% Few (very few...) examples with bit syntax
+
+bit_t1() ->
+ A = i1(),
+ <<100:(A)>>.
+
+bit_adt_t1() ->
+ A = simple1_adt:i1(),
+ <<100:(A)>>. % breaks the opaqueness
+
+bit_t3(A) ->
+ B = i1(),
+ case none:none() of
+ <<A:B>> -> 1
+ end.
+
+bit_adt_t2() ->
+ A = simple1_adt:i1(),
+ case <<"hej">> of
+ <<_:A>> -> ok % breaks the opaqueness (but the message is strange)
+ end.
+
+
+bit_adt_t3(A) ->
+ B = simple1_adt:i1(),
+ case none:none() of
+ <<A: % breaks the opaqueness (the message is less than perfect)
+ B>> -> 1
+ end.
+
+bit_t5(A) ->
+ B = o1(),
+ case none:none() of
+ <<A:B>> -> 1 % breaks the opaqueness
+ end.
+
+-spec bit_t4(<<_:1>>) -> integer().
+
+bit_t4(A) ->
+ Sz = i1(),
+ case A of
+ <<_:Sz>> -> 1
+ end.
+
+-spec bit_adt_t4(<<_:1>>) -> integer().
+
+bit_adt_t4(A) ->
+ Sz = simple1_adt:i1(),
+ case A of
+ <<_:Sz>> -> 1 % breaks the opaqueness
+ end.
+
+bit_t5() ->
+ A = bit1(),
+ case A of
+ <<_/binary>> -> 1
+ end.
+
+bit_adt_t5() ->
+ A = simple1_adt:bit1(),
+ case A of
+ <<_/binary>> -> 1 % breaks the opaqueness
+ end.
+
+-opaque bit1() :: binary().
+
+-spec bit1() -> bit1().
+
+bit1() ->
+ <<"hej">>.
+
+%% Calls with variable module or function
+
+call_f(A) ->
+ A = a(),
+ foo:A(A).
+
+call_f_adt(A) ->
+ A = simple1_adt:a(),
+ foo:A(A). % breaks the opaqueness
+
+call_m(A) ->
+ A = a(),
+ A:foo(A).
+
+call_m_adt(A) ->
+ A = simple1_adt:a(),
+ A:foo(A). % breaks the opaqueness
+
+-opaque a() :: atom().
+
+-opaque i() :: integer().
+
+-spec a() -> a().
+
+a() ->
+ e.
+
+call_f_i(A) ->
+ A = i(),
+ foo:A(A). % A is not atom() but i()
+
+call_f_adt_i(A) ->
+ A = simple1_adt:i(),
+ foo:A(A). % A is not atom() but simple1_adt:i()
+
+call_m_i(A) ->
+ A = i(),
+ A:foo(A). % A is not atom() but i()
+
+call_m_adt_i(A) ->
+ A = simple1_adt:i(),
+ A:foo(A). % A is not atom() but simple1_adt:i()
+
+-spec eq1() -> integer().
+
+eq1() ->
+ A = simple1_adt:d2(),
+ B = simple1_adt:d1(),
+ if
+ A == B -> % opaque term
+ 0;
+ A == A ->
+ 1;
+ A =:= A -> % compiler finds this one cannot match
+ 2;
+ true -> % compiler finds this one cannot match
+ 3
+ end.
+
+eq2() ->
+ A = simple1_adt:d1(),
+ if
+ {A} >= {A} ->
+ 1;
+ A >= 3 -> % opaque term
+ 2;
+ A == 3 -> % opaque term
+ 3;
+ A =:= 3 -> % opaque term
+ 4;
+ A == A ->
+ 5;
+ A =:= A -> % compiler finds this one cannot match
+ 6
+ end.
+
+c5() ->
+ A = simple1_adt:d1(),
+ A < 3. % opaque term
+
+c6(A, B) ->
+ A = simple1_adt:d1(),
+ B = simple1_adt:d1(),
+ A =< B. % same type - no warning
+
+c7(A, B) ->
+ A = simple1_adt:d1(),
+ B = simple1_adt:d2(),
+ A =< B. % opaque term
+
+c8() ->
+ D = digraph:new(),
+ E = ets:new(foo, []),
+ if {D, a} > {D, E} -> true; % OK
+ {1.0, 2} > {{D}, {E}} -> true; % OK
+ {D, 3} > {D, E} -> true % opaque term 2
+ end.
+
+-spec i() -> i().
+
+i() ->
+ 1.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple2_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple2_api.erl
new file mode 100644
index 0000000000..c86f6fd0b5
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple2_api.erl
@@ -0,0 +1,125 @@
+-module(simple2_api).
+
+-export([c1/2, c2/0, c3/0, c4/1, c5/1, c6/0, c6_b/0, c7/0, c7_b/0,
+ c7_c/0, c8/0, c9/0, c10/0, c11/0, c12/0, c13/0, c14/0, c15/0,
+ c16/0, c17/0, c18/0, c19/0, c20/0, c21/0, c22/0, c23/0,
+ c24/0, c25/0, c26/0]).
+
+-spec c1(simple1_adt:d1(), simple1_adt:d2()) -> boolean().
+
+c1(A, B) ->
+ {A} =< {B}. % succ type of A and B is any()
+
+c2() ->
+ A = simple1_adt:d1(),
+ erlang:make_tuple(1, A). % ok
+
+c3() ->
+ A = simple1_adt:d1(),
+ setelement(1, {A}, A). % ok
+
+c4(_) ->
+ A = simple1_adt:d1(),
+ halt(A). % ok (BIF fails...)
+
+c5(_) ->
+ A = simple1_adt:d1(),
+ [A] -- [A]. % ok
+
+c6() ->
+ A = simple1_adt:d1(),
+ A ! foo. % opaque term
+
+c6_b() ->
+ A = simple1_adt:d1(),
+ erlang:send(A, foo). % opaque term
+
+c7() ->
+ A = simple1_adt:d1(),
+ foo ! A. % ok
+
+c7_b() ->
+ A = simple1_adt:d1(),
+ erlang:send(foo, A). % ok
+
+c7_c() ->
+ A = simple1_adt:d1(),
+ erlang:send(foo, A, []). % ok
+
+c8() ->
+ A = simple1_adt:d1(),
+ A < 3. % opaque term
+
+c9() ->
+ A = simple1_adt:d1(),
+ lists:keysearch(A, 1, []). % ok
+
+c10() ->
+ A = simple1_adt:d1(),
+ lists:keysearch(1, A, []). % opaque term 2
+
+c11() ->
+ A = simple1_adt:tuple(),
+ lists:keysearch(key, 1, [A]). % ok
+
+c12() ->
+ A = simple1_adt:tuple(),
+ lists:keysearch(key, 1, A). % opaque term 3
+
+c13() ->
+ A = simple1_adt:tuple(),
+ lists:keysearch(key, 1, [{A,2}]). % ok
+
+c14() ->
+ A = simple1_adt:tuple(),
+ lists:keysearch(key, 1, [{2,A}]). % ok
+
+c15() ->
+ A = simple1_adt:d1(),
+ lists:keysearch(key, 1, [A]). % ok
+
+c16() ->
+ A = simple1_adt:tuple(),
+ erlang:send(foo, A). % ok
+
+c17() ->
+ A = simple1_adt:tuple(),
+ lists:reverse([A]). % ok
+
+c18() ->
+ A = simple1_adt:tuple(),
+ lists:keyreplace(a, 1, [A], {1,2}). % ok
+
+c19() ->
+ A = simple1_adt:tuple(),
+ %% Problem. The spec says argument 4 is a tuple(). Fix that!
+ lists:keyreplace(a, 1, [{1,2}], A). % opaque term 4
+
+c20() ->
+ A = simple1_adt:tuple(),
+ lists:flatten(A). % opaque term 1
+
+c21() ->
+ A = simple1_adt:tuple(),
+ lists:flatten([[{A}]]). % ok
+
+c22() ->
+ A = simple1_adt:tuple(),
+ lists:flatten([[A]]). % ok
+
+c23() ->
+ A = simple1_adt:tuple(),
+ lists:flatten([A]). % ok
+
+c24() ->
+ A = simple1_adt:tuple(),
+ lists:flatten({A}). % will never return
+
+c25() ->
+ A = simple1_adt:d1(),
+ B = simple1_adt:tuple(),
+ if {A,3} > {A,B} -> true end. % opaque 2nd argument
+
+c26() ->
+ B = simple1_adt:tuple(),
+ tuple_to_list(B). % opaque term 1
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl
index 5ca3202bba..d88f238190 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl
@@ -1,10 +1,15 @@
-module(union_adt).
-export([new/1, new_a/1, new_rec/1]).
+%% Now (R17) that opaque types are no longer recognized by their shape
+%% this test case is rather meaningless.
+
-record(rec, {x = 42 :: integer()}).
-opaque u() :: 'aaa' | 'bbb' | #rec{}.
+-spec new(_) -> u().
+
new(a) -> aaa;
new(b) -> bbb;
new(X) when is_integer(X) ->
@@ -13,7 +18,11 @@ new(X) when is_integer(X) ->
%% the following two functions (and their uses in union_use.erl) test
%% that the return type is the opaque one and not just a subtype of it
+-spec new_a(_) -> u().
+
new_a(a) -> aaa.
+-spec new_rec(_) -> u().
+
new_rec(X) when is_integer(X) ->
#rec{x = X}.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_adt.erl
new file mode 100644
index 0000000000..c742990c6a
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_adt.erl
@@ -0,0 +1,5 @@
+-module(zoltan_adt).
+
+-export_type([id/0]).
+
+-opaque id() :: string().
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl b/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl
index b62b9de576..07c9f0a270 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl
@@ -2,13 +2,13 @@
-export([f/0, gen/0]).
--opaque id() :: string().
+%-opaque id() :: string().
-spec f() -> char().
%% List pattern matching issue
f() -> [H|_T] = gen(), H.
--spec gen() -> id().
+-spec gen() -> zoltan_adt:id().
gen() -> "Dummy".
diff --git a/lib/dialyzer/vsn.mk b/lib/dialyzer/vsn.mk
index af32c5b901..95d2464e1d 100644
--- a/lib/dialyzer/vsn.mk
+++ b/lib/dialyzer/vsn.mk
@@ -1 +1 @@
-DIALYZER_VSN = 2.6.1
+DIALYZER_VSN = 2.7
diff --git a/lib/diameter/bin/diameterc b/lib/diameter/bin/diameterc
index d31f341c36..2c9a8f555c 100755
--- a/lib/diameter/bin/diameterc
+++ b/lib/diameter/bin/diameterc
@@ -4,7 +4,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -74,7 +74,7 @@ compile(#argv{file = File, options = Opts, output = Out}) ->
ok ->
0;
{error, Reason} ->
- error_msg(Reason, []),
+ error_msg(diameter_make:format_error(Reason), []),
1
catch
error: Reason ->
diff --git a/lib/diameter/doc/src/diameter.xml b/lib/diameter/doc/src/diameter.xml
index 4804b07b30..7d6a28e51c 100644
--- a/lib/diameter/doc/src/diameter.xml
+++ b/lib/diameter/doc/src/diameter.xml
@@ -20,7 +20,8 @@
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year>
+<year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -355,8 +356,8 @@ question communicates an address list as described in
<tag><c>{'Origin-State-Id', &dict_Unsigned32;}</c></tag>
<item>
<p>
-Origin-State-Id is optional but will be included in outgoing messages
-sent by diameter itself: CER/CEA, DWR/DWA and DPR/DPA.
+Origin-State-Id is optional but, if configured, will be included in
+outgoing CER/CEA and DWR/DWA messages.
Setting a value of <c>0</c> (zero) is equivalent to not setting a
value, as documented in &the_rfc;.
The function &origin_state_id;
diff --git a/lib/diameter/doc/src/diameter_make.xml b/lib/diameter/doc/src/diameter_make.xml
index e1673378df..13ec5bbfc1 100644
--- a/lib/diameter/doc/src/diameter_make.xml
+++ b/lib/diameter/doc/src/diameter_make.xml
@@ -16,7 +16,7 @@
<header>
<copyright>
<year>2012</year>
-<year>2013</year>
+<year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -175,6 +175,10 @@ Note that a dictionary's <c>&dict_name;</c>, together with the
The <c>&dict_name;</c> of a literal input dictionary defaults to
<c>dictionary</c>.</p>
+<p>
+A returned error reason can be converted into a readable string using
+&format_error;.</p>
+
</desc>
</func>
@@ -206,6 +210,18 @@ The return value is also a parsed dictionary.</p>
</desc>
</func>
+<!-- ===================================================================== -->
+
+<func>
+<name>format_error(Reason) -> string()</name>
+<fsummary>Turn an error reason into a readable string.</fsummary>
+<desc>
+
+<p>
+Turn an error reason returned by &codec; into a readable string.</p>
+</desc>
+</func>
+
</funcs>
<!-- ===================================================================== -->
diff --git a/lib/diameter/doc/src/diameter_sctp.xml b/lib/diameter/doc/src/diameter_sctp.xml
index fb7075f2cd..6302cb1435 100644
--- a/lib/diameter/doc/src/diameter_sctp.xml
+++ b/lib/diameter/doc/src/diameter_sctp.xml
@@ -15,7 +15,8 @@
<erlref>
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year>
+<year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -113,7 +114,7 @@ and port respectively.</p>
<p>
Multiple <c>ip</c> options can be specified for a multihomed peer.
If none are specified then the values of <c>Host-IP-Address</c>
-in the <c>#diameter_service{}</c> record are used.
+in the <c>diameter_service</c> record are used.
(In particular, one of these must be specified.)
Option <c>port</c> defaults to 3868 for a listening transport and 0 for a
connecting transport.</p>
@@ -131,25 +132,18 @@ the buffer size.</p>
</warning>
<p>
-diameter_sctp uses the <c>transport_data</c> field of
-the <c>#diameter_packet{}</c> record to communicate the stream on which an
-inbound message has been received, or on which an outbound message
-should be sent: the value will be of the form <c>{stream, Id}</c>
-on an inbound message passed to a &app_handle_request; or
-&app_handle_answer; callback.
-For an outbound message, either <c>undefined</c> (explicitly or
-by receiving the outbound message as a <c>binary()</c>) or a tuple
-should be set in the return value of &app_handle_request;
-(typically by retaining the value passed into this function)
-or &app_prepare_request;.
-The value <c>undefined</c> uses a "next outbound stream" id and
-increments this modulo the total number outbound streams.
-That is, successive values of <c>undefined</c> cycle through all
-outbound streams.</p>
-
-<!-- TODO: Some way of getting at the number of available outbound -->
-<!-- streams. -->
-
+The <c>transport_data</c> field of record <c>diameter_packet</c>
+is used to communicate the stream on which an inbound message
+has been received, or on which an outbound message should be sent.
+The value will be of the form <c>{stream, Id}</c> for an inbound
+message passed to a &app_handle_request; or &app_handle_answer;
+callback.
+For an outbound message, <c>{outstream, Id}</c> in the return value of
+&app_handle_request; or &app_prepare_retransmit; sets the outbound
+stream, the stream id being interpreted modulo the number of outbound
+streams.
+Any other value, or not setting a value, causes successive such sends
+to cycle though all outbound streams.</p>
</desc>
</func>
diff --git a/lib/diameter/doc/src/seealso.ent b/lib/diameter/doc/src/seealso.ent
index 7bf7460351..44541afb9b 100644
--- a/lib/diameter/doc/src/seealso.ent
+++ b/lib/diameter/doc/src/seealso.ent
@@ -4,7 +4,7 @@
%CopyrightBegin%
-Copyright Ericsson AB 2012-2013. All Rights Reserved.
+Copyright Ericsson AB 2012-2014. 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
@@ -117,6 +117,7 @@ significant.
<!ENTITY make_codec '<seealso marker="diameter_make#codec-2">diameter_make:codec/2</seealso>'>
<!ENTITY make_format '<seealso marker="diameter_make#format-1">diameter_make:format/1</seealso>'>
<!ENTITY make_flatten '<seealso marker="diameter_make#flatten-1">diameter_make:flatten/1</seealso>'>
+<!ENTITY make_format_error '<seealso marker="diameter_make#format_error-1">diameter_make:format_error/1</seealso>'>
<!-- diameter_transport -->
diff --git a/lib/diameter/src/base/diameter_peer_fsm.erl b/lib/diameter/src/base/diameter_peer_fsm.erl
index 282276827f..f76bd96c3c 100644
--- a/lib/diameter/src/base/diameter_peer_fsm.erl
+++ b/lib/diameter/src/base/diameter_peer_fsm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -189,11 +189,7 @@ i({Ack, WPid, {M, Ref} = T, Opts, {Mask, Nodes, Dict0, Svc}}) ->
putr(?RESTRICT_KEY, Nodes),
Tmo = proplists:get_value(capx_timeout, Opts, ?EVENT_TIMEOUT),
- ?IS_TIMEOUT(Tmo) orelse ?ERROR({invalid, {capx_timeout, Tmo}}),
OnLengthErr = proplists:get_value(length_errors, Opts, exit),
- lists:member(OnLengthErr, [exit, handle, discard])
- orelse ?ERROR({invalid, {length_errors, OnLengthErr}}),
- %% Error checking is for configuration added in old code.
{TPid, Addrs} = start_transport(T, Rest, Svc),
@@ -782,10 +778,6 @@ set([_|_] = Ans, FailedAvp) ->
result_code(#diameter_header{is_error = true}, _) ->
{3008, []}; %% DIAMETER_INVALID_HDR_BITS
-result_code(_, [Bs|_])
- when is_bitstring(Bs) -> %% from old code
- {3009, []}; %% DIAMETER_INVALID_HDR_BITS
-
result_code(#diameter_header{version = ?DIAMETER_VERSION}, Es) ->
rc(Es);
diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl
index 70e66537ed..1274e0fc48 100644
--- a/lib/diameter/src/base/diameter_service.erl
+++ b/lib/diameter/src/base/diameter_service.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -701,8 +701,7 @@ notify(Share, SvcName, T) ->
Nodes = remotes(Share),
[] /= Nodes andalso diameter_peer:notify(Nodes, SvcName, T).
%% Test for the empty list for upgrade reasons: there's no
-%% diameter_peer:notify/3 in old code so no call means no load order
-%% requirement.
+%% diameter_peer:notify/3 in old code.
remotes(false) ->
[];
diff --git a/lib/diameter/src/base/diameter_stats.erl b/lib/diameter/src/base/diameter_stats.erl
index b68d4af11f..8353613d32 100644
--- a/lib/diameter/src/base/diameter_stats.erl
+++ b/lib/diameter/src/base/diameter_stats.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -245,9 +245,6 @@ handle_call({read, Refs, Del}, _From, State) ->
handle_call({read, Refs}, _, State) ->
{reply, read_refs(Refs), State};
-handle_call({flush, Refs}, _From, State) -> %% from old code
- {reply, to_refdict(read(Refs, true)), State};
-
handle_call(Req, From, State) ->
?UNEXPECTED([Req, From]),
{reply, nok, State}.
diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl
index 8b6f026b34..7fbb306b02 100644
--- a/lib/diameter/src/base/diameter_traffic.erl
+++ b/lib/diameter/src/base/diameter_traffic.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2014. 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
@@ -90,9 +90,6 @@ make_recvdata([SvcName, PeerT, Apps, Mask | _]) ->
peerT = PeerT,
apps = Apps,
sequence = Mask}.
-%% Take a list so that the caller (diameter_service) can be upgraded
-%% first if new members are added. Note that receive_message/4 might
-%% still get an old term from any watchdog started in old code.
%% ---------------------------------------------------------------------------
%% peer_up/1
@@ -305,15 +302,6 @@ errors(_, #diameter_packet{header = #diameter_header{version = V},
when V /= ?DIAMETER_VERSION ->
Pkt#diameter_packet{errors = [5011 | Es]};
-%% DIAMETER_INVALID_AVP_BITS 3009
-%% A request was received that included an AVP whose flag bits are
-%% set to an unrecognized value, or that is inconsistent with the
-%% AVP's definition.
-
-errors(_, #diameter_packet{errors = [Bs | Es]} = Pkt)
- when is_bitstring(Bs) -> %% from old code
- Pkt#diameter_packet{errors = [3009 | Es]};
-
%% DIAMETER_COMMAND_UNSUPPORTED 3001
%% The Request contained a Command-Code that the receiver did not
%% recognize or support. This MUST be used when a Diameter node
diff --git a/lib/diameter/src/base/diameter_watchdog.erl b/lib/diameter/src/base/diameter_watchdog.erl
index 9a1c8b6585..53e659e3f6 100644
--- a/lib/diameter/src/base/diameter_watchdog.erl
+++ b/lib/diameter/src/base/diameter_watchdog.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -157,8 +157,7 @@ wait(Ref, Pid) ->
config(Opts) ->
Config = proplists:get_value(watchdog_config, Opts, []),
- is_list(Config) orelse config_error({watchdog_config, Config}),
- lists:foldl(fun config/2, #config{}, Config). %% ^ added in old code
+ lists:foldl(fun config/2, #config{}, Config).
config({suspect, N}, Rec)
when ?IS_NATURAL(N) ->
@@ -166,10 +165,7 @@ config({suspect, N}, Rec)
config({okay, N}, Rec)
when ?IS_NATURAL(N) ->
- Rec#config{okay = N};
-
-config(T, _) -> %% added in old code
- config_error(T).
+ Rec#config{okay = N}.
%% start/5
@@ -252,17 +248,6 @@ handle_info(T, #watchdog{} = State) ->
?LOG(stop, T),
event(T, State, State#watchdog{status = down}),
{stop, {shutdown, T}, State}
- end;
-
-handle_info(T, State) -> %% started in old code
- handle_info(T, upgrade(State)).
-
-upgrade(State) ->
- case erlang:append_element(State, #config{}) of
- #watchdog{status = okay, config = #config{suspect = OS}} = S ->
- S#watchdog{num_dwa = OS};
- #watchdog{} = S ->
- S
end.
close({'DOWN', _, process, TPid, {shutdown, Reason}},
diff --git a/lib/diameter/src/compiler/diameter_dict_util.erl b/lib/diameter/src/compiler/diameter_dict_util.erl
index 3941f30e03..136bba16cb 100644
--- a/lib/diameter/src/compiler/diameter_dict_util.erl
+++ b/lib/diameter/src/compiler/diameter_dict_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -155,6 +155,8 @@ fmt(grouped_avp_has_wrong_type) ->
"Grouped AVP ~s at line ~p defined with type ~s at line ~p";
fmt(grouped_avp_not_defined) ->
"Grouped AVP ~s on line ~p not defined in @avp_types";
+fmt(grouped_avp_not_grouped) ->
+ "Grouped AVP ~s on line ~p not defined in @grouped";
fmt(grouped_vendor_id_without_flag) ->
"Grouped AVP ~s at line ~p has vendor id "
"but definition at line ~p does not specify V flag";
@@ -401,9 +403,9 @@ read(File) ->
{ok, iolist_to_binary([File])}.
make_dict(Parse, Opts) ->
- make_orddict(pass4(pass3(pass2(pass1(reset(make_dict(Parse),
- Opts))),
- Opts))).
+ Dict = pass3(pass2(pass1(reset(make_dict(Parse), Opts))), Opts),
+ ok = examine(Dict),
+ make_orddict(Dict).
%% make_orddict/1
@@ -1168,7 +1170,7 @@ import_avps(Dict, Opts) ->
Import = inherit(Dict, Opts),
report(imported, Import),
- %% pass4/1 tests that all referenced AVP's are either defined
+ %% examine/1 tests that all referenced AVP's are either defined
%% or imported.
dict:store(import_avps,
@@ -1276,21 +1278,21 @@ dict(Mod) ->
end.
%% ===========================================================================
-%% pass4/1
+%% examine/1
%%
%% Sanity checks.
-pass4(Dict) ->
- dict:fold(fun(K, V, _) -> p4(K, V, Dict) end, ok, Dict),
- Dict.
+examine(Dict) ->
+ dict:fold(fun(K, V, _) -> x(K, V, Dict) end, ok, Dict),
+ ok.
%% Ensure enum AVP's have type Enumerated.
-p4({enum, Name}, [Line | _], Dict)
+x({enum, Name}, [Line | _], Dict)
when is_list(Name) ->
true = is_enumerated_avp(Name, Dict, Line);
%% Ensure all referenced AVP's are either defined locally or imported.
-p4({K, {Name, AvpName}}, [Line | _], Dict)
+x({K, {Name, AvpName}}, [Line | _], Dict)
when (K == grouped orelse K == messages),
is_list(Name),
is_list(AvpName),
@@ -1298,13 +1300,22 @@ p4({K, {Name, AvpName}}, [Line | _], Dict)
true = avp_is_defined(AvpName, Dict, Line);
%% Ditto.
-p4({K, AvpName}, [Line | _], Dict)
+x({K, AvpName}, [Line | _], Dict)
when K == avp_vendor_id;
K == custom_types;
K == codecs ->
true = avp_is_defined(AvpName, Dict, Line);
-p4(_, _, _) ->
+%% Ensure that all local AVP's of type Grouped are also present in @grouped.
+x({avp_types, Name}, [Line | Toks], Dict)
+ when 0 < Line, is_list(Name) ->
+ [{number, _, _Code}, {word, _, Type}, {word, _, _Flags}] = Toks,
+ "Grouped" == Type
+ andalso error == dict:find({grouped, Name}, Dict)
+ andalso ?RETURN(grouped_avp_not_grouped, [Name, Line]),
+ ok;
+
+x(_, _, _) ->
ok.
%% has_enumerated_type/3
diff --git a/lib/diameter/src/compiler/diameter_make.erl b/lib/diameter/src/compiler/diameter_make.erl
index 2f314b7e57..adc7808e49 100644
--- a/lib/diameter/src/compiler/diameter_make.erl
+++ b/lib/diameter/src/compiler/diameter_make.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -33,7 +33,8 @@
-export([codec/2,
codec/1,
format/1,
- flatten/1]).
+ flatten/1,
+ format_error/1]).
-export_type([opt/0]).
@@ -81,8 +82,8 @@ codec(File, Opts) ->
case parse(Dict, Opts) of
{ok, ParseD} ->
make(Path, default(Opts), ParseD);
- {error = E, Reason} ->
- {E, diameter_dict_util:format_error(Reason)}
+ {error, _} = E ->
+ E
end.
codec(File) ->
@@ -115,6 +116,11 @@ flatten([?VERSION = V | Dict]) ->
[grouped, import_groups],
[enum, import_enums]])].
+%% format_error/1
+
+format_error(T) ->
+ diameter_dict_util:format_error(T).
+
%% ===========================================================================
%% flatten/2
diff --git a/lib/diameter/src/diameter.appup.src b/lib/diameter/src/diameter.appup.src
index c7ae8a2828..0d421c229e 100644
--- a/lib/diameter/src/diameter.appup.src
+++ b/lib/diameter/src/diameter.appup.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -20,62 +20,37 @@
{"%VSN%",
[
- {"0.9", [{restart_application, diameter}]}, %% R14B03
- {"0.10", [{restart_application, diameter}]}, %% R14B04
- {"1.0", [{restart_application, diameter}]}, %% R15B
- {"1.1", [{restart_application, diameter}]}, %% R15B01
- {"1.2", [{restart_application, diameter}]}, %% R15B02
- {"1.2.1", [{restart_application, diameter}]},
- {"1.3", [{restart_application, diameter}]}, %% R15B03
- {"1.3.1", [{restart_application, diameter}]},
- {"1.4", [{restart_application, diameter}]}, %% R16A
- {"1.4.1", [{restart_application, diameter}]}, %% R16B
+ {"0.9", [{restart_application, diameter}]}, %% R14B03
+ {"0.10", [{restart_application, diameter}]}, %% R14B04
+ {"1.0", [{restart_application, diameter}]}, %% R15B
+ {"1.1", [{restart_application, diameter}]}, %% R15B01
+ {"1.2", [{restart_application, diameter}]}, %% R15B02
+ {"1.2.1", [{restart_application, diameter}]},
+ {"1.3", [{restart_application, diameter}]}, %% R15B03
+ {"1.3.1", [{restart_application, diameter}]},
+ {"1.4", [{restart_application, diameter}]}, %% R16A
+ {"1.4.1", [{restart_application, diameter}]}, %% R16B
{"1.4.1.1", [{restart_application, diameter}]},
- {"1.4.2", [{load_module, diameter_codec}, %% R16B01
- {load_module, diameter_types},
- {load_module, diameter_config},
- {load_module, diameter_capx},
- {load_module, diameter_service},
- {load_module, diameter_peer_fsm},
- {load_module, diameter_watchdog},
- {load_module, diameter}]},
- {"1.4.3", [{load_module, diameter_capx}, %% R16B02
- {load_module, diameter_service},
- {load_module, diameter_watchdog},
- {load_module, diameter_codec},
- {load_module, diameter_types},
- {load_module, diameter_config},
- {load_module, diameter}]},
- {"1.4.4", [{load_module, diameter_capx},
- {load_module, diameter_service},
- {load_module, diameter_watchdog},
- {load_module, diameter_config},
- {load_module, diameter}]}
+ {"1.4.2", [{restart_application, diameter}]}, %% R16B01
+ {"1.4.3", [{restart_application, diameter}]}, %% R16B02
+ {"1.4.4", [{restart_application, diameter}]},
+ {"1.5", [{restart_application, diameter}]} %% R16B03
],
[
- {"0.9", [{restart_application, diameter}]},
- {"0.10", [{restart_application, diameter}]},
- {"1.0", [{restart_application, diameter}]},
- {"1.1", [{restart_application, diameter}]},
- {"1.2", [{restart_application, diameter}]},
- {"1.2.1", [{restart_application, diameter}]},
- {"1.3", [{restart_application, diameter}]},
- {"1.3.1", [{restart_application, diameter}]},
- {"1.4", [{restart_application, diameter}]},
- {"1.4.1", [{restart_application, diameter}]},
+ {"0.9", [{restart_application, diameter}]},
+ {"0.10", [{restart_application, diameter}]},
+ {"1.0", [{restart_application, diameter}]},
+ {"1.1", [{restart_application, diameter}]},
+ {"1.2", [{restart_application, diameter}]},
+ {"1.2.1", [{restart_application, diameter}]},
+ {"1.3", [{restart_application, diameter}]},
+ {"1.3.1", [{restart_application, diameter}]},
+ {"1.4", [{restart_application, diameter}]},
+ {"1.4.1", [{restart_application, diameter}]},
{"1.4.1.1", [{restart_application, diameter}]},
- {"1.4.2", [{restart_application, diameter}]},
- {"1.4.3", [{load_module, diameter_types},
- {load_module, diameter_config},
- {load_module, diameter_codec},
- {load_module, diameter_service},
- {load_module, diameter_watchdog},
- {load_module, diameter_capx},
- {load_module, diameter}]},
- {"1.4.4", [{load_module, diameter_capx},
- {load_module, diameter_config},
- {load_module, diameter_service},
- {load_module, diameter_watchdog},
- {load_module, diameter}]}
+ {"1.4.2", [{restart_application, diameter}]},
+ {"1.4.3", [{restart_application, diameter}]},
+ {"1.4.4", [{restart_application, diameter}]},
+ {"1.5", [{restart_application, diameter}]}
]
}.
diff --git a/lib/diameter/src/transport/diameter_sctp.erl b/lib/diameter/src/transport/diameter_sctp.erl
index 49a530b4eb..f5275e66b5 100644
--- a/lib/diameter/src/transport/diameter_sctp.erl
+++ b/lib/diameter/src/transport/diameter_sctp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -70,14 +70,14 @@
-type connect_option() :: {raddr, inet:ip_address()}
| {rport, inet:port_number()}
- | gen_sctp:open_option().
+ | term(). %% gen_sctp:open_option().
-type match() :: inet:ip_address()
| string()
| [match()].
-type listen_option() :: {accept, match()}
- | gen_sctp:open_option().
+ | term(). %% gen_sctp:open_option().
-type uint() :: non_neg_integer().
@@ -338,9 +338,6 @@ handle_call({{accept, Ref}, Pid}, _, #listener{ref = Ref,
{TPid, NewS} = accept(Ref, Pid, S),
{reply, {ok, TPid}, NewS#listener{count = N+1}};
-handle_call(T, From, {listener,_,_,_,_,_,_} = S) -> % started in old code
- handle_call(T, From, upgrade(S));
-
handle_call(_, _, State) ->
{reply, nok, State}.
@@ -359,10 +356,7 @@ handle_info(T, #transport{} = S) ->
{noreply, #transport{} = t(T,S)};
handle_info(T, #listener{} = S) ->
- {noreply, #listener{} = l(T,S)};
-
-handle_info(T, {listener,_,_,_,_,_,_} = S) -> % started in old code
- handle_info(T, upgrade(S)).
+ {noreply, #listener{} = l(T,S)}.
%% ---------------------------------------------------------------------------
%% # code_change/3
@@ -396,9 +390,6 @@ terminate(_, #listener{socket = Sock}) ->
%% ---------------------------------------------------------------------------
-upgrade(S) ->
- #listener{} = erlang:append_element(S, ?DEFAULT_ACCEPT).
-
putr(Key, Val) ->
put({?MODULE, Key}, Val).
@@ -502,8 +493,6 @@ transition({peeloff, Sock, {sctp, LSock, _RA, _RP, _Data} = Msg, Matches},
= S) ->
ok = accept_peer(Sock, Matches),
transition(Msg, S#transport{socket = Sock});
-transition({peeloff = T, _Sock, _Msg} = T, #transport{} = S) ->% from old code
- transition(erlang:append_element(T, ?DEFAULT_ACCEPT), S);
%% Incoming message.
transition({sctp, _Sock, _RA, _RP, Data}, #transport{socket = Sock} = S) ->
@@ -605,11 +594,13 @@ accept(_, Pid, #listener{ref = Ref, pending = {N,Q}} = S) ->
%% send/2
%% Outbound Diameter message on a specified stream ...
-send(#diameter_packet{bin = Bin, transport_data = {stream, SId}}, S) ->
- send(SId, Bin, S),
+send(#diameter_packet{bin = Bin, transport_data = {outstream, SId}},
+ #transport{streams = {_, OS}}
+ = S) ->
+ send(SId rem OS, Bin, S),
S;
-%% ... or not: rotate through all steams.
+%% ... or not: rotate through all streams.
send(Bin, #transport{streams = {_, OS},
os = N}
= S)
diff --git a/lib/diameter/test/diameter_compiler_SUITE.erl b/lib/diameter/test/diameter_compiler_SUITE.erl
index ed369e8af3..df4dde6240 100644
--- a/lib/diameter/test/diameter_compiler_SUITE.erl
+++ b/lib/diameter/test/diameter_compiler_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. 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
@@ -138,6 +138,9 @@
{grouped_avp_not_defined,
"Failed-AVP *.*",
""},
+ {grouped_avp_not_grouped,
+ "Failed-AVP ::=.*\n.*}",
+ ""},
{grouped_vendor_id_without_flag,
"(Failed-AVP .*)>",
"\\1 668>"},
@@ -397,8 +400,8 @@ replace({E, Mods}, Bin) ->
case {E, parse(B, [{include, here()}]), Mods} of
{ok, {ok, Dict}, _} ->
Dict;
- {_, {error, S}, _} ->
- S
+ {_, {error, {E,_} = T}, _} when E /= ok ->
+ diameter_make:format_error(T)
end.
re({RE, Repl}, Bin) ->
diff --git a/lib/diameter/vsn.mk b/lib/diameter/vsn.mk
index 9fda067f2b..54019fa46c 100644
--- a/lib/diameter/vsn.mk
+++ b/lib/diameter/vsn.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2013. All Rights Reserved.
+# Copyright Ericsson AB 2010-2014. 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
@@ -18,5 +18,5 @@
# %CopyrightEnd%
APPLICATION = diameter
-DIAMETER_VSN = 1.5
+DIAMETER_VSN = 1.6
APP_VSN = $(APPLICATION)-$(DIAMETER_VSN)$(PRE_VSN)
diff --git a/lib/hipe/cerl/erl_bif_types.erl b/lib/hipe/cerl/erl_bif_types.erl
index 42c7e360c1..32a502e212 100644
--- a/lib/hipe/cerl/erl_bif_types.erl
+++ b/lib/hipe/cerl/erl_bif_types.erl
@@ -30,19 +30,17 @@
%-define(BITS, (hipe_rtl_arch:word_size() * 8) - ?TAG_IMMED1_SIZE).
-define(BITS, 128). %This is only in bsl to convert answer to pos_inf/neg_inf.
--define(TAG_IMMED1_SIZE, 4).
+-export([type/3, type/4, type/5, arg_types/3,
+ is_known/3, opaque_args/5, infinity_add/2]).
--export([type/3, type/4, arg_types/3,
- is_known/3, structure_inspecting_args/3, infinity_add/2]).
-
--import(erl_types, [number_max/1,
- number_min/1,
+-import(erl_types, [number_max/2,
+ number_min/2,
t_any/0,
t_arity/0,
t_atom/0,
t_atom/1,
t_atoms/1,
- t_atom_vals/1,
+ t_atom_vals/2,
t_binary/0,
t_bitstr/0,
t_boolean/0,
@@ -60,10 +58,11 @@
t_from_term/1,
t_fun/0,
t_fun/2,
- t_fun_args/1,
- t_fun_range/1,
+ t_fun_args/2,
+ t_fun_range/2,
t_identifier/0,
- t_inf/2,
+ t_has_opaque_subtype/2,
+ t_inf/3,
t_integer/0,
t_integer/1,
t_non_neg_fixnum/0,
@@ -71,30 +70,28 @@
t_pos_integer/0,
t_integers/1,
t_is_any/1,
- t_is_atom/1,
- t_is_binary/1,
- t_is_bitstr/1,
- t_is_boolean/1,
- t_is_cons/1,
- t_is_float/1,
- t_is_float/1,
- t_is_fun/1,
- t_is_integer/1,
- t_is_integer/1,
- t_is_nil/1,
+ t_is_atom/2,
+ t_is_binary/2,
+ t_is_bitstr/2,
+ t_is_boolean/2,
+ t_is_cons/2,
+ t_is_float/2,
+ t_is_fun/2,
+ t_is_integer/2,
+ t_is_nil/1, t_is_nil/2,
t_is_none/1,
t_is_none_or_unit/1,
- t_is_number/1,
- t_is_pid/1,
- t_is_port/1,
- t_is_maybe_improper_list/1,
- t_is_reference/1,
+ t_is_number/2,
+ t_is_pid/2,
+ t_is_port/2,
+ t_is_maybe_improper_list/2,
+ t_is_reference/2,
t_is_string/1,
t_is_subtype/2,
- t_is_tuple/1,
+ t_is_tuple/2,
t_list/0,
t_list/1,
- t_list_elements/1,
+ t_list_elements/2,
t_list_termination/1,
t_mfa/0,
t_module/0,
@@ -104,7 +101,7 @@
t_nonempty_list/0,
t_nonempty_list/1,
t_number/0,
- t_number_vals/1,
+ t_number_vals/2,
t_pid/0,
t_port/0,
t_maybe_improper_list/0,
@@ -115,9 +112,9 @@
t_sup/2,
t_tuple/0,
t_tuple/1,
- t_tuple_args/1,
- t_tuple_size/1,
- t_tuple_subtypes/1
+ t_tuple_args/2,
+ t_tuple_size/2,
+ t_tuple_subtypes/2
]).
-ifdef(DO_ERL_BIF_TYPES_TEST).
@@ -129,47 +126,61 @@
-spec type(atom(), atom(), arity()) -> erl_types:erl_type().
type(M, F, A) ->
- type(M, F, A, any_list(A)).
+ type(M, F, A, any_list(A), []).
%% Arguments should be checked for undefinedness, so we do not make
%% unnecessary overapproximations.
-spec type(atom(), atom(), arity(), [erl_types:erl_type()]) -> erl_types:erl_type().
+type(M, F, A, Xs) ->
+ type(M, F, A, Xs, 'universe').
+
+-type opaques() :: 'universe' | [erl_types:erl_type()].
+
+-type arg_types() :: [erl_types:erl_type()].
+
+-spec type(atom(), atom(), arity(), arg_types(), opaques()) ->
+ erl_types:erl_type().
+
%%-- erlang -------------------------------------------------------------------
-type(erlang, halt, 0, _) -> t_none();
-type(erlang, halt, 1, _) -> t_none();
-type(erlang, halt, 2, _) -> t_none();
-type(erlang, exit, 1, _) -> t_none();
-type(erlang, error, 1, _) -> t_none();
-type(erlang, error, 2, _) -> t_none();
-type(erlang, throw, 1, _) -> t_none();
-type(erlang, '==', 2, Xs = [X1, X2]) ->
- case t_is_atom(X1) andalso t_is_atom(X2) of
- true -> type(erlang, '=:=', 2, Xs);
+type(erlang, halt, 0, _, _) -> t_none();
+type(erlang, halt, 1, _, _) -> t_none();
+type(erlang, halt, 2, _, _) -> t_none();
+type(erlang, exit, 1, _, _) -> t_none();
+type(erlang, error, 1, _, _) -> t_none();
+type(erlang, error, 2, _, _) -> t_none();
+type(erlang, throw, 1, _, _) -> t_none();
+type(erlang, '==', 2, Xs = [X1, X2], Opaques) ->
+ case
+ t_is_atom(X1, Opaques) andalso t_is_atom(X2, Opaques)
+ of
+ true -> type(erlang, '=:=', 2, Xs, Opaques);
false ->
- case t_is_integer(X1) andalso t_is_integer(X2) of
- true -> type(erlang, '=:=', 2, Xs);
- false -> strict(Xs, t_boolean())
+ case t_is_integer(X1, Opaques) andalso t_is_integer(X2, Opaques) of
+ true -> type(erlang, '=:=', 2, Xs, Opaques);
+ false -> strict2(Xs, t_boolean())
end
end;
-type(erlang, '/=', 2, Xs = [X1, X2]) ->
- case t_is_atom(X1) andalso t_is_atom(X2) of
- true -> type(erlang, '=/=', 2, Xs);
+type(erlang, '/=', 2, Xs = [X1, X2], Opaques) ->
+ case
+ t_is_atom(X1, Opaques) andalso t_is_atom(X2, Opaques)
+ of
+ true -> type(erlang, '=/=', 2, Xs, Opaques);
false ->
- case t_is_integer(X1) andalso t_is_integer(X2) of
- true -> type(erlang, '=/=', 2, Xs);
- false -> strict(Xs, t_boolean())
+ case t_is_integer(X1, Opaques) andalso t_is_integer(X2, Opaques) of
+ true -> type(erlang, '=/=', 2, Xs, Opaques);
+ false -> strict2(Xs, t_boolean())
end
end;
-type(erlang, '=:=', 2, Xs = [Lhs, Rhs]) ->
+type(erlang, '=:=', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_none(t_inf(Lhs, Rhs)) of
+ case t_is_none(t_inf(Lhs, Rhs, Opaques)) of
true -> t_atom('false');
false ->
- case t_is_atom(Lhs) andalso t_is_atom(Rhs) of
+ case t_is_atom(Lhs, Opaques) andalso t_is_atom(Rhs, Opaques) of
true ->
- case {t_atom_vals(Lhs), t_atom_vals(Rhs)} of
+ case {t_atom_vals(Lhs, Opaques), t_atom_vals(Rhs, Opaques)} of
{unknown, _} -> t_boolean();
{_, unknown} -> t_boolean();
{[X], [X]} -> t_atom('true');
@@ -181,16 +192,20 @@ type(erlang, '=:=', 2, Xs = [Lhs, Rhs]) ->
end
end;
false ->
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case
+ t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques)
+ of
false -> t_boolean();
true ->
- case {t_number_vals(Lhs), t_number_vals(Rhs)} of
+ case
+ {t_number_vals(Lhs, Opaques), t_number_vals(Rhs, Opaques)}
+ of
{[X], [X]} when is_integer(X) -> t_atom('true');
_ ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
Ans1 = (is_integer(LhsMin)
andalso is_integer(RhsMax)
andalso (LhsMin > RhsMax)),
@@ -205,15 +220,15 @@ type(erlang, '=:=', 2, Xs = [Lhs, Rhs]) ->
end
end
end,
- strict(Xs, Ans);
-type(erlang, '=/=', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '=/=', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_none(t_inf(Lhs, Rhs)) of
+ case t_is_none(t_inf(Lhs, Rhs, Opaques)) of
true -> t_atom('true');
false ->
- case t_is_atom(Lhs) andalso t_is_atom(Rhs) of
+ case t_is_atom(Lhs, Opaques) andalso t_is_atom(Rhs, Opaques) of
true ->
- case {t_atom_vals(Lhs), t_atom_vals(Rhs)} of
+ case {t_atom_vals(Lhs, Opaques), t_atom_vals(Rhs, Opaques)} of
{unknown, _} -> t_boolean();
{_, unknown} -> t_boolean();
{[Val], [Val]} -> t_atom('false');
@@ -221,13 +236,15 @@ type(erlang, '=/=', 2, Xs = [Lhs, Rhs]) ->
t_sup([t_from_term(X =/= Y) || X <- LhsVals, Y <- RhsVals])
end;
false ->
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case
+ t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques)
+ of
false -> t_boolean();
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
Ans1 = (is_integer(LhsMin) andalso is_integer(RhsMax)
andalso (LhsMin > RhsMax)),
Ans2 = (is_integer(LhsMax) andalso is_integer(RhsMin)
@@ -244,15 +261,15 @@ type(erlang, '=/=', 2, Xs = [Lhs, Rhs]) ->
end
end
end,
- strict(Xs, Ans);
-type(erlang, '>', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '>', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques) of
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
T = t_atom('true'),
F = t_atom('false'),
if
@@ -260,17 +277,17 @@ type(erlang, '>', 2, Xs = [Lhs, Rhs]) ->
is_integer(LhsMax), is_integer(RhsMin), RhsMin >= LhsMax -> F;
true -> t_boolean()
end;
- false -> compare('>', Lhs, Rhs)
+ false -> compare('>', Lhs, Rhs, Opaques)
end,
- strict(Xs, Ans);
-type(erlang, '>=', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '>=', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques) of
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
T = t_atom('true'),
F = t_atom('false'),
if
@@ -278,17 +295,17 @@ type(erlang, '>=', 2, Xs = [Lhs, Rhs]) ->
is_integer(LhsMax), is_integer(RhsMin), RhsMin > LhsMax -> F;
true -> t_boolean()
end;
- false -> compare('>=', Lhs, Rhs)
+ false -> compare('>=', Lhs, Rhs, Opaques)
end,
- strict(Xs, Ans);
-type(erlang, '<', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '<', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques) of
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
T = t_atom('true'),
F = t_atom('false'),
if
@@ -296,17 +313,17 @@ type(erlang, '<', 2, Xs = [Lhs, Rhs]) ->
is_integer(LhsMin), is_integer(RhsMax), RhsMax =< LhsMin -> F;
true -> t_boolean()
end;
- false -> compare('<', Lhs, Rhs)
+ false -> compare('<', Lhs, Rhs, Opaques)
end,
- strict(Xs, Ans);
-type(erlang, '=<', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '=<', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques) of
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
T = t_atom('true'),
F = t_atom('false'),
if
@@ -314,232 +331,237 @@ type(erlang, '=<', 2, Xs = [Lhs, Rhs]) ->
is_integer(LhsMin), is_integer(RhsMax), RhsMax < LhsMin -> F;
true -> t_boolean()
end;
- false -> compare('=<', Lhs, Rhs)
+ false -> compare('=<', Lhs, Rhs, Opaques)
end,
- strict(Xs, Ans);
-type(erlang, '+', 1, Xs) ->
- strict(arg_types(erlang, '+', 1), Xs,
- fun ([X]) -> X end);
-type(erlang, '-', 1, Xs) ->
- strict(arg_types(erlang, '-', 1), Xs,
+ strict2(Xs, Ans);
+type(erlang, '+', 1, Xs, Opaques) ->
+ strict(erlang, '+', 1, Xs, fun ([X]) -> X end, Opaques);
+type(erlang, '-', 1, Xs, Opaques) ->
+ strict(erlang, '-', 1, Xs,
fun ([X]) ->
- case t_is_integer(X) of
+ case t_is_integer(X, Opaques) of
true -> type(erlang, '-', 2, [t_integer(0), X]);
false -> X
end
- end);
-type(erlang, '!', 2, Xs) ->
- strict(arg_types(erlang, '!', 2), Xs, fun ([_, X2]) -> X2 end);
-type(erlang, '+', 2, Xs) ->
- strict(arg_types(erlang, '+', 2), Xs,
+ end, Opaques);
+type(erlang, '!', 2, Xs, Opaques) ->
+ strict(erlang, '!', 2, Xs, fun ([_, X2]) -> X2 end, Opaques);
+type(erlang, '+', 2, Xs, Opaques) ->
+ strict(erlang, '+', 2, Xs,
fun ([X1, X2]) ->
- case arith('+', X1, X2) of
+ case arith('+', X1, X2, Opaques) of
{ok, T} -> T;
error ->
- case t_is_float(X1) orelse t_is_float(X2) of
+ case
+ t_is_float(X1, Opaques) orelse t_is_float(X2, Opaques)
+ of
true -> t_float();
false -> t_number()
end
end
- end);
-type(erlang, '-', 2, Xs) ->
- strict(arg_types(erlang, '-', 2), Xs,
+ end, Opaques);
+type(erlang, '-', 2, Xs, Opaques) ->
+ strict(erlang, '-', 2, Xs,
fun ([X1, X2]) ->
- case arith('-', X1, X2) of
+ case arith('-', X1, X2, Opaques) of
{ok, T} -> T;
error ->
- case t_is_float(X1) orelse t_is_float(X2) of
+ case
+ t_is_float(X1, Opaques) orelse t_is_float(X2, Opaques)
+ of
true -> t_float();
false -> t_number()
end
end
- end);
-type(erlang, '*', 2, Xs) ->
- strict(arg_types(erlang, '*', 2), Xs,
+ end, Opaques);
+type(erlang, '*', 2, Xs, Opaques) ->
+ strict(erlang, '*', 2, Xs,
fun ([X1, X2]) ->
- case arith('*', X1, X2) of
+ case arith('*', X1, X2, Opaques) of
{ok, T} -> T;
error ->
- case t_is_float(X1) orelse t_is_float(X2) of
+ case
+ t_is_float(X1, Opaques) orelse t_is_float(X2, Opaques)
+ of
true -> t_float();
false -> t_number()
end
end
- end);
-type(erlang, '/', 2, Xs) ->
- strict(arg_types(erlang, '/', 2), Xs,
- fun (_) -> t_float() end);
-type(erlang, 'div', 2, Xs) ->
- strict(arg_types(erlang, 'div', 2), Xs,
+ end, Opaques);
+type(erlang, '/', 2, Xs, Opaques) ->
+ strict(erlang, '/', 2, Xs, fun (_) -> t_float() end, Opaques);
+type(erlang, 'div', 2, Xs, Opaques) ->
+ strict(erlang, 'div', 2, Xs,
fun ([X1, X2]) ->
- case arith('div', X1, X2) of
+ case arith('div', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
-type(erlang, 'rem', 2, Xs) ->
- strict(arg_types(erlang, 'rem', 2), Xs,
+ end, Opaques);
+type(erlang, 'rem', 2, Xs, Opaques) ->
+ strict(erlang, 'rem', 2, Xs,
fun ([X1, X2]) ->
- case arith('rem', X1, X2) of
+ case arith('rem', X1, X2, Opaques) of
error -> t_non_neg_integer();
{ok, T} -> T
end
- end);
-type(erlang, '++', 2, Xs) ->
- strict(arg_types(erlang, '++', 2), Xs,
+ end, Opaques);
+type(erlang, '++', 2, Xs, Opaques) ->
+ strict(erlang, '++', 2, Xs,
fun ([X1, X2]) ->
- case t_is_nil(X1) of
+ case t_is_nil(X1, Opaques) of
true -> X2; % even if X2 is not a list
false ->
- case t_is_nil(X2) of
+ case t_is_nil(X2, Opaques) of
true -> X1;
false ->
- E1 = t_list_elements(X1),
- case t_is_cons(X1) of
+ E1 = t_list_elements(X1, Opaques),
+ case t_is_cons(X1, Opaques) of
true -> t_cons(E1, X2);
false ->
t_sup(X2, t_cons(E1, X2))
end
end
end
- end);
-type(erlang, '--', 2, Xs) ->
+ end, Opaques);
+type(erlang, '--', 2, Xs, Opaques) ->
%% We don't know which elements (if any) in X2 will be found and
%% removed from X1, even if they would have the same type. Thus, we
%% must assume that X1 can remain unchanged. However, if we succeed,
%% we know that X1 must be a proper list, but the result could
%% possibly be empty even if X1 is nonempty.
- strict(arg_types(erlang, '--', 2), Xs,
+ strict(erlang, '--', 2, Xs,
fun ([X1, X2]) ->
- case t_is_nil(X1) of
+ case t_is_nil(X1, Opaques) of
true -> t_nil();
false ->
- case t_is_nil(X2) of
+ case t_is_nil(X2, Opaques) of
true -> X1;
- false -> t_list(t_list_elements(X1))
+ false -> t_list(t_list_elements(X1, Opaques))
end
end
- end);
-type(erlang, 'and', 2, Xs) ->
- strict(arg_types(erlang, 'and', 2), Xs, fun (_) -> t_boolean() end);
-type(erlang, 'or', 2, Xs) ->
- strict(arg_types(erlang, 'or', 2), Xs, fun (_) -> t_boolean() end);
-type(erlang, 'xor', 2, Xs) ->
- strict(arg_types(erlang, 'xor', 2), Xs, fun (_) -> t_boolean() end);
-type(erlang, 'not', 1, Xs) ->
- strict(arg_types(erlang, 'not', 1), Xs, fun (_) -> t_boolean() end);
-type(erlang, 'band', 2, Xs) ->
- strict(arg_types(erlang, 'band', 2), Xs,
+ end, Opaques);
+type(erlang, 'and', 2, Xs, Opaques) ->
+ strict(erlang, 'and', 2, Xs, fun (_) -> t_boolean() end, Opaques);
+type(erlang, 'or', 2, Xs, Opaques) ->
+ strict(erlang, 'or', 2, Xs, fun (_) -> t_boolean() end, Opaques);
+type(erlang, 'xor', 2, Xs, Opaques) ->
+ strict(erlang, 'xor', 2, Xs, fun (_) -> t_boolean() end, Opaques);
+type(erlang, 'not', 1, Xs, Opaques) ->
+ strict(erlang, 'not', 1, Xs, fun (_) -> t_boolean() end, Opaques);
+type(erlang, 'band', 2, Xs, Opaques) ->
+ strict(erlang, 'band', 2, Xs,
fun ([X1, X2]) ->
- case arith('band', X1, X2) of
+ case arith('band', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% The result is not wider than the smallest argument. We need to
%% kill any value-sets in the result.
-%% strict(arg_types(erlang, 'band', 2), Xs,
-%% fun ([X1, X2]) -> t_sup(t_inf(X1, X2), t_byte()) end);
-type(erlang, 'bor', 2, Xs) ->
- strict(arg_types(erlang, 'bor', 2), Xs,
+%% strict(erlang, 'band', 2, Xs,
+%% fun ([X1, X2]) -> t_sup(t_inf(X1, X2, Opaques), t_byte()) end, Opaques);
+type(erlang, 'bor', 2, Xs, Opaques) ->
+ strict(erlang, 'bor', 2, Xs,
fun ([X1, X2]) ->
- case arith('bor', X1, X2) of
+ case arith('bor', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% The result is not wider than the largest argument. We need to
%% kill any value-sets in the result.
-%% strict(arg_types(erlang, 'bor', 2), Xs,
-%% fun ([X1, X2]) -> t_sup(t_sup(X1, X2), t_byte()) end);
-type(erlang, 'bxor', 2, Xs) ->
- strict(arg_types(erlang, 'bxor', 2), Xs,
+%% strict(erlang, 'bor', 2, Xs,
+%% fun ([X1, X2]) -> t_sup(t_sup(X1, X2), t_byte()) end, Opaques);
+type(erlang, 'bxor', 2, Xs, Opaques) ->
+ strict(erlang, 'bxor', 2, Xs,
fun ([X1, X2]) ->
- case arith('bxor', X1, X2) of
+ case arith('bxor', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% The result is not wider than the largest argument. We need to
%% kill any value-sets in the result.
-%% strict(arg_types(erlang, 'bxor', 2), Xs,
-%% fun ([X1, X2]) -> t_sup(t_sup(X1, X2), t_byte()) end);
-type(erlang, 'bsr', 2, Xs) ->
- strict(arg_types(erlang, 'bsr', 2), Xs,
+%% strict(erlang, 'bxor', 2, Xs,
+%% fun ([X1, X2]) -> t_sup(t_sup(X1, X2), t_byte()) end, Opaques);
+type(erlang, 'bsr', 2, Xs, Opaques) ->
+ strict(erlang, 'bsr', 2, Xs,
fun ([X1, X2]) ->
- case arith('bsr', X1, X2) of
+ case arith('bsr', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% If the first argument is unsigned (which is the case for
%% characters and bytes), the result is never wider. We need to kill
%% any value-sets in the result.
-%% strict(arg_types(erlang, 'bsr', 2), Xs,
-%% fun ([X, _]) -> t_sup(X, t_byte()) end);
-type(erlang, 'bsl', 2, Xs) ->
- strict(arg_types(erlang, 'bsl', 2), Xs,
+%% strict(erlang, 'bsr', 2, Xs,
+%% fun ([X, _]) -> t_sup(X, t_byte()) end, Opaques);
+type(erlang, 'bsl', 2, Xs, Opaques) ->
+ strict(erlang, 'bsl', 2, Xs,
fun ([X1, X2]) ->
- case arith('bsl', X1, X2) of
+ case arith('bsl', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% Not worth doing anything special here.
-%% strict(arg_types(erlang, 'bsl', 2), Xs, fun (_) -> t_integer() end);
-type(erlang, 'bnot', 1, Xs) ->
- strict(arg_types(erlang, 'bnot', 1), Xs,
+%% strict(erlang, 'bsl', 2, Xs, fun (_) -> t_integer() end, Opaques);
+type(erlang, 'bnot', 1, Xs, Opaques) ->
+ strict(erlang, 'bnot', 1, Xs,
fun ([X1]) ->
- case arith('bnot', X1) of
+ case arith('bnot', X1, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, abs, 1, Xs) ->
- strict(arg_types(erlang, abs, 1), Xs, fun ([X]) -> X end);
+type(erlang, abs, 1, Xs, Opaques) ->
+ strict(erlang, abs, 1, Xs, fun ([X]) -> X end, Opaques);
%% This returns (-X)-1, so it often gives a negative result.
-%% strict(arg_types(erlang, 'bnot', 1), Xs, fun (_) -> t_integer() end);
-type(erlang, append, 2, Xs) -> type(erlang, '++', 2, Xs); % alias
-type(erlang, apply, 2, Xs) ->
+%% strict(erlang, 'bnot', 1, Xs, fun (_) -> t_integer() end, Opaques);
+type(erlang, append, 2, Xs, _Opaques) -> type(erlang, '++', 2, Xs); % alias
+type(erlang, apply, 2, Xs, Opaques) ->
Fun = fun ([X, _Y]) ->
- case t_is_fun(X) of
+ case t_is_fun(X, Opaques) of
true ->
- t_fun_range(X);
+ t_fun_range(X, Opaques);
false ->
t_any()
end
end,
- strict(arg_types(erlang, apply, 2), Xs, Fun);
-type(erlang, apply, 3, Xs) ->
- strict(arg_types(erlang, apply, 3), Xs, fun (_) -> t_any() end);
+ strict(erlang, apply, 2, Xs, Fun, Opaques);
+type(erlang, apply, 3, Xs, Opaques) ->
+ strict(erlang, apply, 3, Xs, fun (_) -> t_any() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, binary_part, 2, Xs) ->
- strict(arg_types(erlang, binary_part, 2), Xs, fun (_) -> t_binary() end);
+type(erlang, binary_part, 2, Xs, Opaques) ->
+ strict(erlang, binary_part, 2, Xs, fun (_) -> t_binary() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, binary_part, 3, Xs) ->
- strict(arg_types(erlang, binary_part, 3), Xs, fun (_) -> t_binary() end);
+type(erlang, binary_part, 3, Xs, Opaques) ->
+ strict(erlang, binary_part, 3, Xs, fun (_) -> t_binary() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, bit_size, 1, Xs) ->
- strict(arg_types(erlang, bit_size, 1), Xs,
- fun (_) -> t_non_neg_integer() end);
+type(erlang, bit_size, 1, Xs, Opaques) ->
+ strict(erlang, bit_size, 1, Xs,
+ fun (_) -> t_non_neg_integer() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, byte_size, 1, Xs) ->
- strict(arg_types(erlang, byte_size, 1), Xs,
- fun (_) -> t_non_neg_integer() end);
-type(erlang, disconnect_node, 1, Xs) ->
- strict(arg_types(erlang, disconnect_node, 1), Xs, fun (_) -> t_sup([t_boolean(), t_atom('ignored')]) end);
+type(erlang, byte_size, 1, Xs, Opaques) ->
+ strict(erlang, byte_size, 1, Xs,
+ fun (_) -> t_non_neg_integer() end, Opaques);
+type(erlang, disconnect_node, 1, Xs, Opaques) ->
+ strict(erlang, disconnect_node, 1, Xs,
+ fun (_) -> t_sup([t_boolean(), t_atom('ignored')]) end, Opaques);
%% Guard bif, needs to be here.
%% Also much more expressive than anything you could write in a spec...
-type(erlang, element, 2, Xs) ->
- strict(arg_types(erlang, element, 2), Xs,
+type(erlang, element, 2, Xs, Opaques) ->
+ strict(erlang, element, 2, Xs,
fun ([X1, X2]) ->
- case t_tuple_subtypes(X2) of
+ case t_tuple_subtypes(X2, Opaques) of
unknown -> t_any();
[_] ->
- Sz = t_tuple_size(X2),
- As = t_tuple_args(X2),
- case t_number_vals(X1) of
+ Sz = t_tuple_size(X2, Opaques),
+ As = t_tuple_args(X2, Opaques),
+ case t_number_vals(X1, Opaques) of
unknown -> t_sup(As);
Ns when is_list(Ns) ->
Fun = fun
@@ -553,165 +575,161 @@ type(erlang, element, 2, Xs) ->
Ts when is_list(Ts) ->
t_sup([type(erlang, element, 2, [X1, Y]) || Y <- Ts])
end
- end);
+ end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, float, 1, Xs) ->
- strict(arg_types(erlang, float, 1), Xs, fun (_) -> t_float() end);
-type(erlang, fun_info, 1, Xs) ->
- strict(arg_types(erlang, fun_info, 1), Xs,
- fun (_) -> t_list(t_tuple([t_atom(), t_any()])) end);
-type(erlang, get_cookie, 0, _) -> t_atom(); % | t_atom('nocookie')
+type(erlang, float, 1, Xs, Opaques) ->
+ strict(erlang, float, 1, Xs, fun (_) -> t_float() end, Opaques);
+type(erlang, fun_info, 1, Xs, Opaques) ->
+ strict(erlang, fun_info, 1, Xs,
+ fun (_) -> t_list(t_tuple([t_atom(), t_any()])) end, Opaques);
+type(erlang, get_cookie, 0, _, _Opaques) -> t_atom(); % | t_atom('nocookie')
%% Guard bif, needs to be here.
-type(erlang, hd, 1, Xs) ->
- strict(arg_types(erlang, hd, 1), Xs, fun ([X]) -> t_cons_hd(X) end);
-type(erlang, integer_to_list, 2, Xs) ->
- strict(arg_types(erlang, integer_to_list, 2), Xs,
- fun (_) -> t_string() end);
-type(erlang, info, 1, Xs) -> type(erlang, system_info, 1, Xs); % alias
+type(erlang, hd, 1, Xs, Opaques) ->
+ strict(erlang, hd, 1, Xs, fun ([X]) -> t_cons_hd(X) end, Opaques);
+type(erlang, integer_to_list, 2, Xs, Opaques) ->
+ strict(erlang, integer_to_list, 2, Xs,
+ fun (_) -> t_string() end, Opaques);
+type(erlang, info, 1, Xs, _) -> type(erlang, system_info, 1, Xs); % alias
%% All type tests are guard BIF's and may be implemented in ways that
%% cannot be expressed in a type spec, why they are kept in erl_bif_types.
-type(erlang, is_atom, 1, Xs) ->
- Fun = fun (X) -> check_guard(X, fun (Y) -> t_is_atom(Y) end, t_atom()) end,
- strict(arg_types(erlang, is_atom, 1), Xs, Fun);
-type(erlang, is_binary, 1, Xs) ->
+type(erlang, is_atom, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_atom(Y, Opaques) end,
+ t_atom(), Opaques)
+ end,
+ strict(erlang, is_atom, 1, Xs, Fun, Opaques);
+type(erlang, is_binary, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_binary(Y) end, t_binary())
+ check_guard(X, fun (Y) -> t_is_binary(Y, Opaques) end,
+ t_binary(), Opaques)
end,
- strict(arg_types(erlang, is_binary, 1), Xs, Fun);
-type(erlang, is_bitstring, 1, Xs) ->
+ strict(erlang, is_binary, 1, Xs, Fun, Opaques);
+type(erlang, is_bitstring, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_bitstr(Y) end, t_bitstr())
+ check_guard(X, fun (Y) -> t_is_bitstr(Y, Opaques) end,
+ t_bitstr(), Opaques)
end,
- strict(arg_types(erlang, is_bitstring, 1), Xs, Fun);
-type(erlang, is_boolean, 1, Xs) ->
+ strict(erlang, is_bitstring, 1, Xs, Fun, Opaques);
+type(erlang, is_boolean, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_boolean(Y) end, t_boolean())
+ check_guard(X, fun (Y) -> t_is_boolean(Y, Opaques) end,
+ t_boolean(), Opaques)
end,
- strict(arg_types(erlang, is_boolean, 1), Xs, Fun);
-type(erlang, is_float, 1, Xs) ->
+ strict(erlang, is_boolean, 1, Xs, Fun, Opaques);
+type(erlang, is_float, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_float(Y) end, t_float())
+ check_guard(X, fun (Y) -> t_is_float(Y, Opaques) end,
+ t_float(), Opaques)
end,
- strict(arg_types(erlang, is_float, 1), Xs, Fun);
-type(erlang, is_function, 1, Xs) ->
- Fun = fun (X) -> check_guard(X, fun (Y) -> t_is_fun(Y) end, t_fun()) end,
- strict(arg_types(erlang, is_function, 1), Xs, Fun);
-type(erlang, is_function, 2, Xs) ->
+ strict(erlang, is_float, 1, Xs, Fun, Opaques);
+type(erlang, is_function, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_fun(Y, Opaques) end,
+ t_fun(), Opaques)
+ end,
+ strict(erlang, is_function, 1, Xs, Fun, Opaques);
+type(erlang, is_function, 2, Xs, Opaques) ->
Fun = fun ([FunType, ArityType]) ->
- case t_number_vals(ArityType) of
+ case t_number_vals(ArityType, Opaques) of
unknown -> t_boolean();
[Val] ->
FunConstr = t_fun(any_list(Val), t_any()),
Fun2 = fun (X) ->
t_is_subtype(X, FunConstr) andalso (not t_is_none(X))
end,
- check_guard_single(FunType, Fun2, FunConstr);
+ check_guard_single(FunType, Fun2, FunConstr, Opaques);
IntList when is_list(IntList) -> t_boolean() %% true?
end
end,
- strict(arg_types(erlang, is_function, 2), Xs, Fun);
-type(erlang, is_integer, 1, Xs) ->
+ strict(erlang, is_function, 2, Xs, Fun, Opaques);
+type(erlang, is_integer, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_integer(Y) end, t_integer())
+ check_guard(X, fun (Y) -> t_is_integer(Y, Opaques) end,
+ t_integer(), Opaques)
end,
- strict(arg_types(erlang, is_integer, 1), Xs, Fun);
-type(erlang, is_list, 1, Xs) ->
+ strict(erlang, is_integer, 1, Xs, Fun, Opaques);
+type(erlang, is_list, 1, Xs, Opaques) ->
Fun = fun (X) ->
- Fun2 = fun (Y) -> t_is_maybe_improper_list(Y) end,
- check_guard(X, Fun2, t_maybe_improper_list())
+ Fun2 = fun (Y) -> t_is_maybe_improper_list(Y, Opaques) end,
+ check_guard(X, Fun2, t_maybe_improper_list(), Opaques)
end,
- strict(arg_types(erlang, is_list, 1), Xs, Fun);
-type(erlang, is_number, 1, Xs) ->
+ strict(erlang, is_list, 1, Xs, Fun, Opaques);
+type(erlang, is_number, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_number(Y) end, t_number())
+ check_guard(X, fun (Y) -> t_is_number(Y, Opaques) end,
+ t_number(), Opaques)
end,
- strict(arg_types(erlang, is_number, 1), Xs, Fun);
-type(erlang, is_pid, 1, Xs) ->
- Fun = fun (X) -> check_guard(X, fun (Y) -> t_is_pid(Y) end, t_pid()) end,
- strict(arg_types(erlang, is_pid, 1), Xs, Fun);
-type(erlang, is_port, 1, Xs) ->
- Fun = fun (X) -> check_guard(X, fun (Y) -> t_is_port(Y) end, t_port()) end,
- strict(arg_types(erlang, is_port, 1), Xs, Fun);
-type(erlang, is_record, 2, Xs) ->
+ strict(erlang, is_number, 1, Xs, Fun, Opaques);
+type(erlang, is_pid, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_pid(Y, Opaques) end,
+ t_pid(), Opaques)
+ end,
+ strict(erlang, is_pid, 1, Xs, Fun, Opaques);
+type(erlang, is_port, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_port(Y, Opaques) end,
+ t_port(), Opaques)
+ end,
+ strict(erlang, is_port, 1, Xs, Fun, Opaques);
+type(erlang, is_record, 2, Xs, Opaques) ->
Fun = fun ([X, Y]) ->
- case t_is_tuple(X) of
+ case t_is_tuple(X, Opaques) of
false ->
- case t_is_none(t_inf(t_tuple(), X)) of
- true -> t_atom('false');
+ case t_is_none(t_inf(t_tuple(), X, Opaques)) of
+ true ->
+ case t_has_opaque_subtype(X, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
false -> t_boolean()
end;
true ->
- case t_tuple_subtypes(X) of
+ case t_tuple_subtypes(X, Opaques) of
unknown -> t_boolean();
[Tuple] ->
- case t_tuple_args(Tuple) of
+ case t_tuple_args(Tuple, Opaques) of
%% any -> t_boolean();
- [Tag|_] ->
- case t_is_atom(Tag) of
- false ->
- TagAtom = t_inf(Tag, t_atom()),
- case t_is_none(TagAtom) of
- true -> t_atom('false');
- false -> t_boolean()
- end;
- true ->
- case t_atom_vals(Tag) of
- [RealTag] ->
- case t_atom_vals(Y) of
- [RealTag] -> t_atom('true');
- _ -> t_boolean()
- end;
- _ -> t_boolean()
- end
- end
+ [Tag|_] -> check_record_tag(Tag, Y, Opaques)
end;
List when length(List) >= 2 ->
t_sup([type(erlang, is_record, 2, [T, Y]) || T <- List])
end
end
end,
- strict(arg_types(erlang, is_record, 2), Xs, Fun);
-type(erlang, is_record, 3, Xs) ->
+ strict(erlang, is_record, 2, Xs, Fun, Opaques);
+type(erlang, is_record, 3, Xs, Opaques) ->
Fun = fun ([X, Y, Z]) ->
- Arity = t_number_vals(Z),
- case t_is_tuple(X) of
+ Arity = t_number_vals(Z, Opaques),
+ case t_is_tuple(X, Opaques) of
false when length(Arity) =:= 1 ->
[RealArity] = Arity,
- case t_is_none(t_inf(t_tuple(RealArity), X)) of
- true -> t_atom('false');
+ case t_is_none(t_inf(t_tuple(RealArity), X, Opaques)) of
+ true ->
+ case t_has_opaque_subtype(X, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
false -> t_boolean()
end;
false ->
- case t_is_none(t_inf(t_tuple(), X)) of
- true -> t_atom('false');
+ case t_is_none(t_inf(t_tuple(), X, Opaques)) of
+ true ->
+ case t_has_opaque_subtype(X, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
false -> t_boolean()
end;
true when length(Arity) =:= 1 ->
[RealArity] = Arity,
- case t_tuple_subtypes(X) of
+ case t_tuple_subtypes(X, Opaques) of
unknown -> t_boolean();
[Tuple] ->
- case t_tuple_args(Tuple) of
+ case t_tuple_args(Tuple, Opaques) of
%% any -> t_boolean();
Args when length(Args) =:= RealArity ->
- Tag = hd(Args),
- case t_is_atom(Tag) of
- false ->
- TagAtom = t_inf(Tag, t_atom()),
- case t_is_none(TagAtom) of
- true -> t_atom('false');
- false -> t_boolean()
- end;
- true ->
- case t_atom_vals(Tag) of
- [RealTag] ->
- case t_atom_vals(Y) of
- [RealTag] -> t_atom('true');
- _ -> t_boolean()
- end;
- _ -> t_boolean()
- end
- end;
+ check_record_tag(hd(Args), Y, Opaques);
Args when length(Args) =/= RealArity ->
t_atom('false')
end;
@@ -722,62 +740,66 @@ type(erlang, is_record, 3, Xs) ->
t_boolean()
end
end,
- strict(arg_types(erlang, is_record, 3), Xs, Fun);
-type(erlang, is_reference, 1, Xs) ->
+ strict(erlang, is_record, 3, Xs, Fun, Opaques);
+type(erlang, is_reference, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_reference(Y) end, t_reference())
+ check_guard(X, fun (Y) -> t_is_reference(Y, Opaques) end,
+ t_reference(), Opaques)
end,
- strict(arg_types(erlang, is_reference, 1), Xs, Fun);
-type(erlang, is_tuple, 1, Xs) ->
+ strict(erlang, is_reference, 1, Xs, Fun, Opaques);
+type(erlang, is_tuple, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_tuple(Y) end, t_tuple())
+ check_guard(X, fun (Y) -> t_is_tuple(Y, Opaques) end,
+ t_tuple(), Opaques)
end,
- strict(arg_types(erlang, is_tuple, 1), Xs, Fun);
+ strict(erlang, is_tuple, 1, Xs, Fun, Opaques);
%% Guard bif, needs to be here.
-type(erlang, length, 1, Xs) ->
- strict(arg_types(erlang, length, 1), Xs, fun (_) -> t_non_neg_fixnum() end);
-type(erlang, make_tuple, 2, Xs) ->
- strict(arg_types(erlang, make_tuple, 2), Xs,
+type(erlang, length, 1, Xs, Opaques) ->
+ strict(erlang, length, 1, Xs, fun (_) -> t_non_neg_fixnum() end, Opaques);
+type(erlang, make_tuple, 2, Xs, Opaques) ->
+ strict(erlang, make_tuple, 2, Xs,
fun ([Int, _]) ->
- case t_number_vals(Int) of
+ case t_number_vals(Int, Opaques) of
[N] when is_integer(N), N >= 0 -> t_tuple(N);
_Other -> t_tuple()
end
- end);
-type(erlang, make_tuple, 3, Xs) ->
- strict(arg_types(erlang, make_tuple, 3), Xs,
+ end, Opaques);
+type(erlang, make_tuple, 3, Xs, Opaques) ->
+ strict(erlang, make_tuple, 3, Xs,
fun ([Int, _, _]) ->
- case t_number_vals(Int) of
+ case t_number_vals(Int, Opaques) of
[N] when is_integer(N), N >= 0 -> t_tuple(N);
_Other -> t_tuple()
end
- end);
-type(erlang, memory, 0, _) -> t_list(t_tuple([t_atom(), t_non_neg_fixnum()]));
-type(erlang, nif_error, 1, _) ->
- t_any(); % this BIF and the next one are stubs for NIFs and never return
-type(erlang, nif_error, 2, Xs) ->
- strict(arg_types(erlang, nif_error, 2), Xs, fun (_) -> t_any() end);
+ end, Opaques);
+type(erlang, memory, 0, _, _Opaques) ->
+ t_list(t_tuple([t_atom(), t_non_neg_fixnum()]));
+type(erlang, nif_error, 1, Xs, Opaques) ->
+ %% this BIF and the next one are stubs for NIFs and never return
+ strict(erlang, nif_error, 1, Xs, fun (_) -> t_any() end, Opaques);
+type(erlang, nif_error, 2, Xs, Opaques) ->
+ strict(erlang, nif_error, 2, Xs, fun (_) -> t_any() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, node, 0, _) -> t_node();
+type(erlang, node, 0, _, _Opaques) -> t_node();
%% Guard bif, needs to be here.
-type(erlang, node, 1, Xs) ->
- strict(arg_types(erlang, node, 1), Xs, fun (_) -> t_node() end);
+type(erlang, node, 1, Xs, Opaques) ->
+ strict(erlang, node, 1, Xs, fun (_) -> t_node() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, round, 1, Xs) ->
- strict(arg_types(erlang, round, 1), Xs, fun (_) -> t_integer() end);
+type(erlang, round, 1, Xs, Opaques) ->
+ strict(erlang, round, 1, Xs, fun (_) -> t_integer() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, self, 0, _) -> t_pid();
-type(erlang, set_cookie, 2, Xs) ->
- strict(arg_types(erlang, set_cookie, 2), Xs, fun (_) -> t_atom('true') end);
-type(erlang, setelement, 3, Xs) ->
- strict(arg_types(erlang, setelement, 3), Xs,
+type(erlang, self, 0, _, _Opaques) -> t_pid();
+type(erlang, set_cookie, 2, Xs, Opaques) ->
+ strict(erlang, set_cookie, 2, Xs, fun (_) -> t_atom('true') end, Opaques);
+type(erlang, setelement, 3, Xs, Opaques) ->
+ strict(erlang, setelement, 3, Xs,
fun ([X1, X2, X3]) ->
- case t_tuple_subtypes(X2) of
+ case t_tuple_subtypes(X2, Opaques) of
unknown -> t_tuple();
[_] ->
- Sz = t_tuple_size(X2),
- As = t_tuple_args(X2),
- case t_number_vals(X1) of
+ Sz = t_tuple_size(X2, Opaques),
+ As = t_tuple_args(X2, Opaques),
+ case t_number_vals(X1, Opaques) of
unknown ->
t_tuple([t_sup(X, X3) || X <- As]);
[N] when is_integer(N), 1 =< N, N =< Sz ->
@@ -799,29 +821,29 @@ type(erlang, setelement, 3, Xs) ->
Ts when is_list(Ts) ->
t_sup([type(erlang, setelement, 3, [X1, Y, X3]) || Y <- Ts])
end
- end);
+ end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, size, 1, Xs) ->
- strict(arg_types(erlang, size, 1), Xs, fun (_) -> t_non_neg_integer() end);
-type(erlang, spawn, 1, Xs) ->
- strict(arg_types(erlang, spawn, 1), Xs, fun (_) -> t_pid() end);
-type(erlang, spawn, 2, Xs) ->
- strict(arg_types(erlang, spawn, 2), Xs, fun (_) -> t_pid() end);
-type(erlang, spawn, 4, Xs) ->
- strict(arg_types(erlang, spawn, 4), Xs, fun (_) -> t_pid() end);
-type(erlang, spawn_link, 1, Xs) -> type(erlang, spawn, 1, Xs); % same
-type(erlang, spawn_link, 2, Xs) -> type(erlang, spawn, 2, Xs); % same
-type(erlang, spawn_link, 4, Xs) -> type(erlang, spawn, 4, Xs); % same
-type(erlang, subtract, 2, Xs) -> type(erlang, '--', 2, Xs); % alias
-type(erlang, suspend_process, 1, Xs) ->
- strict(arg_types(erlang, suspend_process, 1), Xs,
- fun (_) -> t_atom('true') end);
-type(erlang, system_info, 1, Xs) ->
- strict(arg_types(erlang, system_info, 1), Xs,
+type(erlang, size, 1, Xs, Opaques) ->
+ strict(erlang, size, 1, Xs, fun (_) -> t_non_neg_integer() end, Opaques);
+type(erlang, spawn, 1, Xs, Opaques) ->
+ strict(erlang, spawn, 1, Xs, fun (_) -> t_pid() end, Opaques);
+type(erlang, spawn, 2, Xs, Opaques) ->
+ strict(erlang, spawn, 2, Xs, fun (_) -> t_pid() end, Opaques);
+type(erlang, spawn, 4, Xs, Opaques) ->
+ strict(erlang, spawn, 4, Xs, fun (_) -> t_pid() end, Opaques);
+type(erlang, spawn_link, 1, Xs, _) -> type(erlang, spawn, 1, Xs); % same
+type(erlang, spawn_link, 2, Xs, _) -> type(erlang, spawn, 2, Xs); % same
+type(erlang, spawn_link, 4, Xs, _) -> type(erlang, spawn, 4, Xs); % same
+type(erlang, subtract, 2, Xs, _Opaques) -> type(erlang, '--', 2, Xs); % alias
+type(erlang, suspend_process, 1, Xs, Opaques) ->
+ strict(erlang, suspend_process, 1, Xs,
+ fun (_) -> t_atom('true') end, Opaques);
+type(erlang, system_info, 1, Xs, Opaques) ->
+ strict(erlang, system_info, 1, Xs,
fun ([Type]) ->
- case t_is_atom(Type) of
+ case t_is_atom(Type, Opaques) of
true ->
- case t_atom_vals(Type) of
+ case t_atom_vals(Type, Opaques) of
['allocated_areas'] ->
t_list(t_sup([t_tuple([t_atom(),t_non_neg_integer()]),
t_tuple([t_atom(),
@@ -936,26 +958,28 @@ type(erlang, system_info, 1, Xs) ->
false -> %% This currently handles only {allocator, Alloc}
t_any() %% overapproximation as the return value might change
end
- end);
+ end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, tl, 1, Xs) ->
- strict(arg_types(erlang, tl, 1), Xs, fun ([X]) -> t_cons_tl(X) end);
+type(erlang, tl, 1, Xs, Opaques) ->
+ strict(erlang, tl, 1, Xs, fun ([X]) -> t_cons_tl(X) end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, trunc, 1, Xs) ->
- strict(arg_types(erlang, trunc, 1), Xs, fun (_) -> t_integer() end);
+type(erlang, trunc, 1, Xs, Opaques) ->
+ strict(erlang, trunc, 1, Xs, fun (_) -> t_integer() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, tuple_size, 1, Xs) ->
- strict(arg_types(erlang, tuple_size, 1), Xs, fun (_) -> t_non_neg_integer() end);
-type(erlang, tuple_to_list, 1, Xs) ->
- strict(arg_types(erlang, tuple_to_list, 1), Xs,
+type(erlang, tuple_size, 1, Xs, Opaques) ->
+ strict(erlang, tuple_size, 1, Xs,
+ fun (_) -> t_non_neg_integer() end, Opaques);
+type(erlang, tuple_to_list, 1, Xs, Opaques) ->
+ strict(erlang, tuple_to_list, 1, Xs,
fun ([X]) ->
- case t_tuple_subtypes(X) of
+ case t_tuple_subtypes(X, Opaques) of
unknown -> t_list();
SubTypes ->
- Args = lists:flatten([t_tuple_args(ST) || ST <- SubTypes]),
+ Args = lists:append([t_tuple_args(ST, Opaques) ||
+ ST <- SubTypes]),
%% Can be nil if the tuple can be {}
case lists:any(fun (T) ->
- t_tuple_size(T) =:= 0
+ t_tuple_size(T, Opaques) =:= 0
end, SubTypes) of
true ->
%% Be careful here. If we had only {} we need to
@@ -965,279 +989,284 @@ type(erlang, tuple_to_list, 1, Xs) ->
t_nonempty_list(t_sup(Args))
end
end
- end);
-type(erlang, yield, 0, _) -> t_atom('true');
+ end, Opaques);
+type(erlang, yield, 0, _, _Opaques) -> t_atom('true');
%%-- ets ----------------------------------------------------------------------
-type(ets, rename, 2, Xs) ->
- strict(arg_types(ets, rename, 2), Xs, fun ([_, Name]) -> Name end);
+type(ets, rename, 2, Xs, Opaques) ->
+ strict(ets, rename, 2, Xs, fun ([_, Name]) -> Name end, Opaques);
%%-- hipe_bifs ----------------------------------------------------------------
-type(hipe_bifs, add_ref, 2, Xs) ->
- strict(arg_types(hipe_bifs, add_ref, 2), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, alloc_data, 2, Xs) ->
- strict(arg_types(hipe_bifs, alloc_data, 2), Xs,
- fun (_) -> t_integer() end); % address
-type(hipe_bifs, array, 2, Xs) ->
- strict(arg_types(hipe_bifs, array, 2), Xs, fun (_) -> t_immarray() end);
-type(hipe_bifs, array_length, 1, Xs) ->
- strict(arg_types(hipe_bifs, array_length, 1), Xs,
- fun (_) -> t_non_neg_fixnum() end);
-type(hipe_bifs, array_sub, 2, Xs) ->
- strict(arg_types(hipe_bifs, array_sub, 2), Xs, fun (_) -> t_immediate() end);
-type(hipe_bifs, array_update, 3, Xs) ->
- strict(arg_types(hipe_bifs, array_update, 3), Xs,
- fun (_) -> t_immarray() end);
-type(hipe_bifs, atom_to_word, 1, Xs) ->
- strict(arg_types(hipe_bifs, atom_to_word, 1), Xs,
- fun (_) -> t_integer() end);
-type(hipe_bifs, bif_address, 3, Xs) ->
- strict(arg_types(hipe_bifs, bif_address, 3), Xs,
- fun (_) -> t_sup(t_integer(), t_atom('false')) end);
-type(hipe_bifs, bitarray, 2, Xs) ->
- strict(arg_types(hipe_bifs, bitarray, 2), Xs, fun (_) -> t_bitarray() end);
-type(hipe_bifs, bitarray_sub, 2, Xs) ->
- strict(arg_types(hipe_bifs, bitarray_sub, 2), Xs, fun (_) -> t_boolean() end);
-type(hipe_bifs, bitarray_update, 3, Xs) ->
- strict(arg_types(hipe_bifs, bitarray_update, 3), Xs,
- fun (_) -> t_bitarray() end);
-type(hipe_bifs, bytearray, 2, Xs) ->
- strict(arg_types(hipe_bifs, bytearray, 2), Xs, fun (_) -> t_bytearray() end);
-type(hipe_bifs, bytearray_sub, 2, Xs) ->
- strict(arg_types(hipe_bifs, bytearray_sub, 2), Xs, fun (_) -> t_byte() end);
-type(hipe_bifs, bytearray_update, 3, Xs) ->
- strict(arg_types(hipe_bifs, bytearray_update, 3), Xs,
- fun (_) -> t_bytearray() end);
-type(hipe_bifs, call_count_clear, 1, Xs) ->
- strict(arg_types(hipe_bifs, call_count_clear, 1), Xs,
- fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end);
-type(hipe_bifs, call_count_get, 1, Xs) ->
- strict(arg_types(hipe_bifs, call_count_get, 1), Xs,
- fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end);
-type(hipe_bifs, call_count_off, 1, Xs) ->
- strict(arg_types(hipe_bifs, call_count_off, 1), Xs,
- fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end);
-type(hipe_bifs, call_count_on, 1, Xs) ->
- strict(arg_types(hipe_bifs, call_count_on, 1), Xs,
- fun (_) -> t_sup(t_atom('true'), t_nil()) end);
-type(hipe_bifs, check_crc, 1, Xs) ->
- strict(arg_types(hipe_bifs, check_crc, 1), Xs, fun (_) -> t_boolean() end);
-type(hipe_bifs, enter_code, 2, Xs) ->
- strict(arg_types(hipe_bifs, enter_code, 2), Xs,
+type(hipe_bifs, add_ref, 2, Xs, Opaques) ->
+ strict(hipe_bifs, add_ref, 2, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, alloc_data, 2, Xs, Opaques) ->
+ strict(hipe_bifs, alloc_data, 2, Xs,
+ fun (_) -> t_integer() end, Opaques); % address
+type(hipe_bifs, array, 2, Xs, Opaques) ->
+ strict(hipe_bifs, array, 2, Xs, fun (_) -> t_immarray() end, Opaques);
+type(hipe_bifs, array_length, 1, Xs, Opaques) ->
+ strict(hipe_bifs, array_length, 1, Xs,
+ fun (_) -> t_non_neg_fixnum() end, Opaques);
+type(hipe_bifs, array_sub, 2, Xs, Opaques) ->
+ strict(hipe_bifs, array_sub, 2, Xs, fun (_) -> t_immediate() end, Opaques);
+type(hipe_bifs, array_update, 3, Xs, Opaques) ->
+ strict(hipe_bifs, array_update, 3, Xs,
+ fun (_) -> t_immarray() end, Opaques);
+type(hipe_bifs, atom_to_word, 1, Xs, Opaques) ->
+ strict(hipe_bifs, atom_to_word, 1, Xs,
+ fun (_) -> t_integer() end, Opaques);
+type(hipe_bifs, bif_address, 3, Xs, Opaques) ->
+ strict(hipe_bifs, bif_address, 3, Xs,
+ fun (_) -> t_sup(t_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, bitarray, 2, Xs, Opaques) ->
+ strict(hipe_bifs, bitarray, 2, Xs, fun (_) -> t_bitarray() end, Opaques);
+type(hipe_bifs, bitarray_sub, 2, Xs, Opaques) ->
+ strict(hipe_bifs, bitarray_sub, 2, Xs,
+ fun (_) -> t_boolean() end, Opaques);
+type(hipe_bifs, bitarray_update, 3, Xs, Opaques) ->
+ strict(hipe_bifs, bitarray_update, 3, Xs,
+ fun (_) -> t_bitarray() end, Opaques);
+type(hipe_bifs, bytearray, 2, Xs, Opaques) ->
+ strict(hipe_bifs, bytearray, 2, Xs, fun (_) -> t_bytearray() end, Opaques);
+type(hipe_bifs, bytearray_sub, 2, Xs, Opaques) ->
+ strict(hipe_bifs, bytearray_sub, 2, Xs, fun (_) -> t_byte() end, Opaques);
+type(hipe_bifs, bytearray_update, 3, Xs, Opaques) ->
+ strict(hipe_bifs, bytearray_update, 3, Xs,
+ fun (_) -> t_bytearray() end, Opaques);
+type(hipe_bifs, call_count_clear, 1, Xs, Opaques) ->
+ strict(hipe_bifs, call_count_clear, 1, Xs,
+ fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, call_count_get, 1, Xs, Opaques) ->
+ strict(hipe_bifs, call_count_get, 1, Xs,
+ fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, call_count_off, 1, Xs, Opaques) ->
+ strict(hipe_bifs, call_count_off, 1, Xs,
+ fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, call_count_on, 1, Xs, Opaques) ->
+ strict(hipe_bifs, call_count_on, 1, Xs,
+ fun (_) -> t_sup(t_atom('true'), t_nil()) end, Opaques);
+type(hipe_bifs, check_crc, 1, Xs, Opaques) ->
+ strict(hipe_bifs, check_crc, 1, Xs, fun (_) -> t_boolean() end, Opaques);
+type(hipe_bifs, enter_code, 2, Xs, Opaques) ->
+ strict(hipe_bifs, enter_code, 2, Xs,
fun (_) -> t_tuple([t_integer(),
%% XXX: The tuple below contains integers and
%% is of size same as the length of the MFA list
- t_sup(t_nil(), t_binary())]) end);
-type(hipe_bifs, enter_sdesc, 1, Xs) ->
- strict(arg_types(hipe_bifs, enter_sdesc, 1), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, find_na_or_make_stub, 2, Xs) ->
- strict(arg_types(hipe_bifs, find_na_or_make_stub, 2), Xs,
- fun (_) -> t_integer() end); % address
-type(hipe_bifs, fun_to_address, 1, Xs) ->
- strict(arg_types(hipe_bifs, fun_to_address, 1), Xs,
- fun (_) -> t_integer() end);
-%% type(hipe_bifs, get_emu_address, 1, Xs) ->
-%% strict(arg_types(hipe_bifs, get_emu_address, 1), Xs,
-%% fun (_) -> t_integer() end); % address
-type(hipe_bifs, get_rts_param, 1, Xs) ->
- strict(arg_types(hipe_bifs, get_rts_param, 1), Xs,
- fun (_) -> t_sup(t_integer(), t_nil()) end);
-type(hipe_bifs, invalidate_funinfo_native_addresses, 1, Xs) ->
- strict(arg_types(hipe_bifs, invalidate_funinfo_native_addresses, 1), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, make_fe, 3, Xs) ->
- strict(arg_types(hipe_bifs, make_fe, 3), Xs, fun (_) -> t_integer() end);
-%% type(hipe_bifs, make_native_stub, 2, Xs) ->
-%% strict(arg_types(hipe_bifs, make_native_stub, 2), Xs,
-%% fun (_) -> t_integer() end); % address
-type(hipe_bifs, mark_referred_from, 1, Xs) ->
- strict(arg_types(hipe_bifs, mark_referred_from, 1), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, merge_term, 1, Xs) ->
- strict(arg_types(hipe_bifs, merge_term, 1), Xs, fun ([X]) -> X end);
-type(hipe_bifs, nstack_used_size, 0, _) ->
+ t_sup(t_nil(), t_binary())]) end, Opaques);
+type(hipe_bifs, enter_sdesc, 1, Xs, Opaques) ->
+ strict(hipe_bifs, enter_sdesc, 1, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, find_na_or_make_stub, 2, Xs, Opaques) ->
+ strict(hipe_bifs, find_na_or_make_stub, 2, Xs,
+ fun (_) -> t_integer() end, Opaques); % address
+type(hipe_bifs, fun_to_address, 1, Xs, Opaques) ->
+ strict(hipe_bifs, fun_to_address, 1, Xs,
+ fun (_) -> t_integer() end, Opaques);
+%% type(hipe_bifs, get_emu_address, 1, Xs, Opaques) ->
+%% strict(hipe_bifs, get_emu_address, 1, Xs,
+%% fun (_) -> t_integer() end, Opaques); % address
+type(hipe_bifs, get_rts_param, 1, Xs, Opaques) ->
+ strict(hipe_bifs, get_rts_param, 1, Xs,
+ fun (_) -> t_sup(t_integer(), t_nil()) end, Opaques);
+type(hipe_bifs, invalidate_funinfo_native_addresses, 1, Xs, Opaques) ->
+ strict(hipe_bifs, invalidate_funinfo_native_addresses, 1, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, make_fe, 3, Xs, Opaques) ->
+ strict(hipe_bifs, make_fe, 3, Xs, fun (_) -> t_integer() end, Opaques);
+%% type(hipe_bifs, make_native_stub, 2, Xs, Opaques) ->
+%% strict(hipe_bifs, make_native_stub, 2, Xs,
+%% fun (_) -> t_integer() end, Opaques); % address
+type(hipe_bifs, mark_referred_from, 1, Xs, Opaques) ->
+ strict(hipe_bifs, mark_referred_from, 1, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, merge_term, 1, Xs, Opaques) ->
+ strict(hipe_bifs, merge_term, 1, Xs, fun ([X]) -> X end, Opaques);
+type(hipe_bifs, nstack_used_size, 0, _, _Opaques) ->
t_non_neg_fixnum();
-type(hipe_bifs, patch_call, 3, Xs) ->
- strict(arg_types(hipe_bifs, patch_call, 3), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, patch_insn, 3, Xs) ->
- strict(arg_types(hipe_bifs, patch_insn, 3), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, primop_address, 1, Xs) ->
- strict(arg_types(hipe_bifs, primop_address, 1), Xs,
- fun (_) -> t_sup(t_integer(), t_atom('false')) end);
-type(hipe_bifs, redirect_referred_from, 1, Xs) ->
- strict(arg_types(hipe_bifs, redirect_referred_from, 1), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, ref, 1, Xs) ->
- strict(arg_types(hipe_bifs, ref, 1), Xs, fun (_) -> t_immarray() end);
-type(hipe_bifs, ref_get, 1, Xs) ->
- strict(arg_types(hipe_bifs, ref_get, 1), Xs, fun (_) -> t_immediate() end);
-type(hipe_bifs, ref_set, 2, Xs) ->
- strict(arg_types(hipe_bifs, ref_set, 2), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, remove_refs_from, 1, Xs) ->
- strict(arg_types(hipe_bifs, remove_refs_from, 1), Xs,
- fun (_) -> t_atom('ok') end);
-type(hipe_bifs, set_funinfo_native_address, 3, Xs) ->
- strict(arg_types(hipe_bifs, set_funinfo_native_address, 3), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, set_native_address, 3, Xs) ->
- strict(arg_types(hipe_bifs, set_native_address, 3), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, system_crc, 1, Xs) ->
- strict(arg_types(hipe_bifs, system_crc, 1), Xs, fun (_) -> t_crc32() end);
-type(hipe_bifs, term_to_word, 1, Xs) ->
- strict(arg_types(hipe_bifs, term_to_word, 1), Xs,
- fun (_) -> t_integer() end);
-type(hipe_bifs, update_code_size, 3, Xs) ->
- strict(arg_types(hipe_bifs, update_code_size, 3), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, write_u8, 2, Xs) ->
- strict(arg_types(hipe_bifs, write_u8, 2), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, write_u32, 2, Xs) ->
- strict(arg_types(hipe_bifs, write_u32, 2), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, write_u64, 2, Xs) ->
- strict(arg_types(hipe_bifs, write_u64, 2), Xs, fun (_) -> t_nil() end);
+type(hipe_bifs, patch_call, 3, Xs, Opaques) ->
+ strict(hipe_bifs, patch_call, 3, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, patch_insn, 3, Xs, Opaques) ->
+ strict(hipe_bifs, patch_insn, 3, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, primop_address, 1, Xs, Opaques) ->
+ strict(hipe_bifs, primop_address, 1, Xs,
+ fun (_) -> t_sup(t_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, redirect_referred_from, 1, Xs, Opaques) ->
+ strict(hipe_bifs, redirect_referred_from, 1, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, ref, 1, Xs, Opaques) ->
+ strict(hipe_bifs, ref, 1, Xs, fun (_) -> t_immarray() end, Opaques);
+type(hipe_bifs, ref_get, 1, Xs, Opaques) ->
+ strict(hipe_bifs, ref_get, 1, Xs, fun (_) -> t_immediate() end, Opaques);
+type(hipe_bifs, ref_set, 2, Xs, Opaques) ->
+ strict(hipe_bifs, ref_set, 2, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, remove_refs_from, 1, Xs, Opaques) ->
+ strict(hipe_bifs, remove_refs_from, 1, Xs,
+ fun (_) -> t_atom('ok') end, Opaques);
+type(hipe_bifs, set_funinfo_native_address, 3, Xs, Opaques) ->
+ strict(hipe_bifs, set_funinfo_native_address, 3, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, set_native_address, 3, Xs, Opaques) ->
+ strict(hipe_bifs, set_native_address, 3, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, system_crc, 1, Xs, Opaques) ->
+ strict(hipe_bifs, system_crc, 1, Xs, fun (_) -> t_crc32() end, Opaques);
+type(hipe_bifs, term_to_word, 1, Xs, Opaques) ->
+ strict(hipe_bifs, term_to_word, 1, Xs,
+ fun (_) -> t_integer() end, Opaques);
+type(hipe_bifs, update_code_size, 3, Xs, Opaques) ->
+ strict(hipe_bifs, update_code_size, 3, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, write_u8, 2, Xs, Opaques) ->
+ strict(hipe_bifs, write_u8, 2, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, write_u32, 2, Xs, Opaques) ->
+ strict(hipe_bifs, write_u32, 2, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, write_u64, 2, Xs, Opaques) ->
+ strict(hipe_bifs, write_u64, 2, Xs, fun (_) -> t_nil() end, Opaques);
%%-- lists --------------------------------------------------------------------
-type(lists, all, 2, Xs) ->
- strict(arg_types(lists, all, 2), Xs,
+type(lists, all, 2, Xs, Opaques) ->
+ strict(lists, all, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_atom('true');
false ->
- El = t_list_elements(L),
- case check_fun_application(F, [El]) of
+ El = t_list_elements(L, Opaques),
+ case check_fun_application(F, [El], Opaques) of
ok ->
- case t_is_cons(L) of
- true -> t_fun_range(F);
+ case t_is_cons(L, Opaques) of
+ true -> t_fun_range(F, Opaques);
false ->
%% The list can be empty.
- t_sup(t_atom('true'), t_fun_range(F))
+ t_sup(t_atom('true'), t_fun_range(F, Opaques))
end;
error ->
- case t_is_cons(L) of
+ case t_is_cons(L, Opaques) of
true -> t_none();
- false -> t_fun_range(F)
+ false -> t_fun_range(F, Opaques)
end
end
end
- end);
-type(lists, any, 2, Xs) ->
- strict(arg_types(lists, any, 2), Xs,
+ end, Opaques);
+type(lists, any, 2, Xs, Opaques) ->
+ strict(lists, any, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_atom('false');
false ->
- El = t_list_elements(L),
- case check_fun_application(F, [El]) of
+ El = t_list_elements(L, Opaques),
+ case check_fun_application(F, [El], Opaques) of
ok ->
- case t_is_cons(L) of
- true -> t_fun_range(F);
+ case t_is_cons(L, Opaques) of
+ true -> t_fun_range(F, Opaques);
false ->
%% The list can be empty
- t_sup(t_atom('false'), t_fun_range(F))
+ t_sup(t_atom('false'), t_fun_range(F, Opaques))
end;
error ->
- case t_is_cons(L) of
+ case t_is_cons(L, Opaques) of
true -> t_none();
- false -> t_fun_range(F)
+ false -> t_fun_range(F, Opaques)
end
end
end
- end);
-type(lists, append, 2, Xs) -> type(erlang, '++', 2, Xs); % alias
-type(lists, delete, 2, Xs) ->
- strict(arg_types(lists, delete, 2), Xs,
+ end, Opaques);
+type(lists, append, 2, Xs, _Opaques) -> type(erlang, '++', 2, Xs); % alias
+type(lists, delete, 2, Xs, Opaques) ->
+ strict(lists, delete, 2, Xs,
fun ([_, List]) ->
- case t_is_cons(List) of
+ case t_is_cons(List, Opaques) of
true -> t_cons_tl(List);
false -> List
end
- end);
-type(lists, dropwhile, 2, Xs) ->
- strict(arg_types(lists, dropwhile, 2), Xs,
+ end, Opaques);
+type(lists, dropwhile, 2, Xs, Opaques) ->
+ strict(lists, dropwhile, 2, Xs,
fun ([F, X]) ->
- case t_is_nil(X) of
+ case t_is_nil(X, Opaques) of
true -> t_nil();
false ->
- X1 = t_list_elements(X),
- case check_fun_application(F, [X1]) of
+ X1 = t_list_elements(X, Opaques),
+ case check_fun_application(F, [X1], Opaques) of
ok ->
- case t_atom_vals(t_fun_range(F)) of
+ case t_atom_vals(t_fun_range(F, Opaques), Opaques) of
['true'] ->
- case t_is_none(t_inf(t_list(), X)) of
+ case t_is_none(t_inf(t_list(), X, Opaques)) of
true -> t_none();
false -> t_nil()
end;
['false'] ->
- case t_is_none(t_inf(t_list(), X)) of
+ case t_is_none(t_inf(t_list(), X, Opaques)) of
true -> t_none();
false -> X
end;
_ ->
- t_inf(t_cons_tl(t_inf(X, t_cons())),
- t_maybe_improper_list())
+ t_inf(t_cons_tl(t_inf(X, t_cons(), Opaques)),
+ t_maybe_improper_list(), Opaques)
end;
error ->
- case t_is_cons(X) of
+ case t_is_cons(X, Opaques) of
true -> t_none();
false -> t_nil()
end
end
end
- end);
-type(lists, filter, 2, Xs) ->
- strict(arg_types(lists, filter, 2), Xs,
+ end, Opaques);
+type(lists, filter, 2, Xs, Opaques) ->
+ strict(lists, filter, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_nil();
false ->
- T = t_list_elements(L),
- case check_fun_application(F, [T]) of
+ T = t_list_elements(L, Opaques),
+ case check_fun_application(F, [T], Opaques) of
ok ->
- case t_atom_vals(t_fun_range(F)) =:= ['false'] of
+ RangeVals = t_atom_vals(t_fun_range(F, Opaques), Opaques),
+ case RangeVals =:= ['false'] of
true -> t_nil();
false ->
- case t_atom_vals(t_fun_range(F)) =:= ['true'] of
+ case RangeVals =:= ['true'] of
true -> L;
false -> t_list(T)
end
end;
error ->
- case t_is_cons(L) of
+ case t_is_cons(L, Opaques) of
true -> t_none();
false -> t_nil()
end
end
end
- end);
-type(lists, flatten, 1, Xs) ->
- strict(arg_types(lists, flatten, 1), Xs,
+ end, Opaques);
+type(lists, flatten, 1, Xs, Opaques) ->
+ strict(lists, flatten, 1, Xs,
fun ([L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> L; % (nil has undefined elements)
false ->
%% Avoiding infinite recursion is tricky
- X1 = t_list_elements(L),
+ X1 = t_list_elements(L, Opaques),
case t_is_any(X1) of
true ->
t_list();
false ->
- X2 = type(lists, flatten, 1, [t_inf(X1, t_list())]),
+ X2 = type(lists, flatten, 1, [t_inf(X1, t_list(), Opaques)]),
t_sup(t_list(t_subtract(X1, t_list())), X2)
end
end
- end);
-type(lists, flatmap, 2, Xs) ->
- strict(arg_types(lists, flatmap, 2), Xs,
+ end, Opaques);
+type(lists, flatmap, 2, Xs, Opaques) ->
+ strict(lists, flatmap, 2, Xs,
fun ([F, List]) ->
- case t_is_nil(List) of
+ case t_is_nil(List, Opaques) of
true -> t_nil();
false ->
- case check_fun_application(F, [t_list_elements(List)]) of
+ case
+ check_fun_application(F, [t_list_elements(List, Opaques)],
+ Opaques)
+ of
ok ->
- R = t_fun_range(F),
+ R = t_fun_range(F, Opaques),
case t_is_nil(R) of
true -> t_nil();
false ->
- Elems = t_list_elements(R),
- case t_is_cons(List) of
+ Elems = t_list_elements(R, Opaques),
+ case t_is_cons(List, Opaques) of
true ->
case t_is_subtype(t_nil(), R) of
true -> t_list(Elems);
@@ -1247,58 +1276,65 @@ type(lists, flatmap, 2, Xs) ->
end
end;
error ->
- case t_is_cons(List) of
+ case t_is_cons(List, Opaques) of
true -> t_none();
false -> t_nil()
end
end
end
- end);
-type(lists, foreach, 2, Xs) ->
- strict(arg_types(lists, foreach, 2), Xs,
+ end, Opaques);
+type(lists, foreach, 2, Xs, Opaques) ->
+ strict(lists, foreach, 2, Xs,
fun ([F, List]) ->
- case t_is_cons(List) of
+ case t_is_cons(List, Opaques) of
true ->
- case check_fun_application(F, [t_list_elements(List)]) of
+ case
+ check_fun_application(F, [t_list_elements(List, Opaques)],
+ Opaques)
+ of
ok -> t_atom('ok');
error -> t_none()
end;
false ->
t_atom('ok')
end
- end);
-type(lists, foldl, 3, Xs) ->
- strict(arg_types(lists, foldl, 3), Xs,
+ end, Opaques);
+type(lists, foldl, 3, Xs, Opaques) ->
+ strict(lists, foldl, 3, Xs,
fun ([F, Acc, List]) ->
- case t_is_nil(List) of
+ case t_is_nil(List, Opaques) of
true -> Acc;
false ->
- case check_fun_application(F, [t_list_elements(List), Acc]) of
+ case
+ check_fun_application(F,
+ [t_list_elements(List, Opaques),Acc],
+ Opaques)
+ of
ok ->
- case t_is_cons(List) of
- true -> t_fun_range(F);
- false -> t_sup(t_fun_range(F), Acc)
+ case t_is_cons(List, Opaques) of
+ true -> t_fun_range(F, Opaques);
+ false -> t_sup(t_fun_range(F, Opaques), Acc)
end;
error ->
- case t_is_cons(List) of
+ case t_is_cons(List, Opaques) of
true -> t_none();
false -> Acc
end
end
end
- end);
-type(lists, foldr, 3, Xs) -> type(lists, foldl, 3, Xs); % same
-type(lists, keydelete, 3, Xs) ->
- strict(arg_types(lists, keydelete, 3), Xs,
+ end, Opaques);
+type(lists, foldr, 3, Xs, _Opaques) -> type(lists, foldl, 3, Xs); % same
+type(lists, keydelete, 3, Xs, Opaques) ->
+ strict(lists, keydelete, 3, Xs,
fun ([_, _, L]) ->
Term = t_list_termination(L),
t_sup(Term, erl_types:lift_list_to_pos_empty(L))
- end);
-type(lists, keyfind, 3, Xs) ->
- strict(arg_types(lists, keyfind, 3), Xs,
+ end, Opaques);
+type(lists, keyfind, 3, Xs, Opaques) ->
+ strict(lists, keyfind, 3, Xs,
fun ([X, Y, Z]) ->
- ListEs = t_list_elements(Z),
- Tuple = t_inf(t_tuple(), ListEs),
+ ListEs = t_list_elements(Z, Opaques),
+ Tuple = t_inf(t_tuple(), ListEs, Opaques),
case t_is_none(Tuple) of
true -> t_atom('false');
false ->
@@ -1308,58 +1344,61 @@ type(lists, keyfind, 3, Xs) ->
case t_is_any(X) of
true -> Ret;
false ->
- case t_tuple_subtypes(Tuple) of
+ case t_tuple_subtypes(Tuple, Opaques) of
unknown -> Ret;
List ->
- case key_comparisons_fail(X, Y, List) of
+ case key_comparisons_fail(X, Y, List, Opaques) of
true -> t_atom('false');
false -> Ret
end
end
end
end
- end);
-type(lists, keymap, 3, Xs) ->
- strict(arg_types(lists, keymap, 3), Xs,
+ end, Opaques);
+type(lists, keymap, 3, Xs, Opaques) ->
+ strict(lists, keymap, 3, Xs,
fun ([F, _I, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> L;
- false -> t_list(t_sup(t_fun_range(F), t_list_elements(L)))
+ false -> t_list(t_sup(t_fun_range(F, Opaques),
+ t_list_elements(L, Opaques)))
end
- end);
-type(lists, keymember, 3, Xs) ->
- strict(arg_types(lists, keymember, 3), Xs,
+ end, Opaques);
+type(lists, keymember, 3, Xs, Opaques) ->
+ strict(lists, keymember, 3, Xs,
fun ([X, Y, Z]) ->
- ListEs = t_list_elements(Z),
- Tuple = t_inf(t_tuple(), ListEs),
+ ListEs = t_list_elements(Z, Opaques),
+ Tuple = t_inf(t_tuple(), ListEs, Opaques),
case t_is_none(Tuple) of
true -> t_atom('false');
false ->
case t_is_any(X) of
true -> t_boolean();
false ->
- case t_tuple_subtypes(Tuple) of
+ case t_tuple_subtypes(Tuple, Opaques) of
unknown -> t_boolean();
List ->
- case key_comparisons_fail(X, Y, List) of
+ case key_comparisons_fail(X, Y, List, Opaques) of
true -> t_atom('false');
false -> t_boolean()
end
end
end
end
- end);
-type(lists, keymerge, 3, Xs) ->
- strict(arg_types(lists, keymerge, 3), Xs,
- fun ([_I, L1, L2]) -> type(lists, merge, 2, [L1, L2]) end);
-type(lists, keyreplace, 4, Xs) ->
- strict(arg_types(lists, keyreplace, 4), Xs,
- fun ([_K, _I, L, T]) -> t_list(t_sup(t_list_elements(L), T)) end);
-type(lists, keysearch, 3, Xs) ->
- strict(arg_types(lists, keysearch, 3), Xs,
+ end, Opaques);
+type(lists, keymerge, 3, Xs, Opaques) ->
+ strict(lists, keymerge, 3, Xs,
+ fun ([_I, L1, L2]) -> type(lists, merge, 2, [L1, L2]) end, Opaques);
+type(lists, keyreplace, 4, Xs, Opaques) ->
+ strict(lists, keyreplace, 4, Xs,
+ fun ([_K, _I, L, T]) ->
+ t_list(t_sup(t_list_elements(L, Opaques), T))
+ end, Opaques);
+type(lists, keysearch, 3, Xs, Opaques) ->
+ strict(lists, keysearch, 3, Xs,
fun ([X, Y, Z]) ->
- ListEs = t_list_elements(Z),
- Tuple = t_inf(t_tuple(), ListEs),
+ ListEs = t_list_elements(Z, Opaques),
+ Tuple = t_inf(t_tuple(), ListEs, Opaques),
case t_is_none(Tuple) of
true -> t_atom('false');
false ->
@@ -1368,91 +1407,93 @@ type(lists, keysearch, 3, Xs) ->
case t_is_any(X) of
true -> Ret;
false ->
- case t_tuple_subtypes(Tuple) of
+ case t_tuple_subtypes(Tuple, Opaques) of
unknown -> Ret;
List ->
- case key_comparisons_fail(X, Y, List) of
+ case key_comparisons_fail(X, Y, List, Opaques) of
true -> t_atom('false');
false -> Ret
end
end
end
end
- end);
-type(lists, keysort, 2, Xs) ->
- strict(arg_types(lists, keysort, 2), Xs, fun ([_, L]) -> L end);
-type(lists, last, 1, Xs) ->
- strict(arg_types(lists, last, 1), Xs, fun ([L]) -> t_list_elements(L) end);
-type(lists, map, 2, Xs) ->
- strict(arg_types(lists, map, 2), Xs,
+ end, Opaques);
+type(lists, keysort, 2, Xs, Opaques) ->
+ strict(lists, keysort, 2, Xs, fun ([_, L]) -> L end, Opaques);
+type(lists, last, 1, Xs, Opaques) ->
+ strict(lists, last, 1, Xs,
+ fun ([L]) -> t_list_elements(L, Opaques) end, Opaques);
+type(lists, map, 2, Xs, Opaques) ->
+ strict(lists, map, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> L;
false ->
- El = t_list_elements(L),
- case t_is_cons(L) of
+ El = t_list_elements(L, Opaques),
+ case t_is_cons(L, Opaques) of
true ->
- case check_fun_application(F, [El]) of
- ok -> t_nonempty_list(t_fun_range(F));
+ case check_fun_application(F, [El], Opaques) of
+ ok -> t_nonempty_list(t_fun_range(F, Opaques));
error -> t_none()
end;
false ->
- case check_fun_application(F, [El]) of
- ok -> t_list(t_fun_range(F));
+ case check_fun_application(F, [El], Opaques) of
+ ok -> t_list(t_fun_range(F, Opaques));
error -> t_nil()
end
end
end
- end);
-type(lists, mapfoldl, 3, Xs) ->
- strict(arg_types(lists, mapfoldl, 3), Xs,
+ end, Opaques);
+type(lists, mapfoldl, 3, Xs, Opaques) ->
+ strict(lists, mapfoldl, 3, Xs,
fun ([F, Acc, List]) ->
- case t_is_nil(List) of
+ case t_is_nil(List, Opaques) of
true -> t_tuple([List, Acc]);
false ->
- El = t_list_elements(List),
- R = t_fun_range(F),
- case t_is_cons(List) of
+ El = t_list_elements(List, Opaques),
+ R = t_fun_range(F, Opaques),
+ case t_is_cons(List, Opaques) of
true ->
- case check_fun_application(F, [El, Acc]) of
+ case check_fun_application(F, [El, Acc], Opaques) of
ok ->
Fun = fun (RangeTuple) ->
- [T1, T2] = t_tuple_args(RangeTuple),
+ [T1, T2] = t_tuple_args(RangeTuple, Opaques),
t_tuple([t_nonempty_list(T1), T2])
end,
- t_sup([Fun(ST) || ST <- t_tuple_subtypes(R)]);
+ t_sup([Fun(ST) || ST <- t_tuple_subtypes(R, Opaques)]);
error ->
t_none()
end;
false ->
- case check_fun_application(F, [El, Acc]) of
+ case check_fun_application(F, [El, Acc], Opaques) of
ok ->
Fun = fun (RangeTuple) ->
- [T1, T2] = t_tuple_args(RangeTuple),
+ [T1, T2] = t_tuple_args(RangeTuple, Opaques),
t_tuple([t_list(T1), t_sup(Acc, T2)])
end,
- t_sup([Fun(ST) || ST <- t_tuple_subtypes(R)]);
+ t_sup([Fun(ST) || ST <- t_tuple_subtypes(R, Opaques)]);
error ->
t_tuple([t_nil(), Acc])
end
end
end
- end);
-type(lists, mapfoldr, 3, Xs) -> type(lists, mapfoldl, 3, Xs); % same
-type(lists, max, 1, Xs) ->
- strict(arg_types(lists, max, 1), Xs, fun ([L]) -> t_list_elements(L) end);
-type(lists, member, 2, Xs) ->
- strict(arg_types(lists, member, 2), Xs,
+ end, Opaques);
+type(lists, mapfoldr, 3, Xs, _Opaques) -> type(lists, mapfoldl, 3, Xs); % same
+type(lists, max, 1, Xs, Opaques) ->
+ strict(lists, max, 1, Xs,
+ fun ([L]) -> t_list_elements(L, Opaques) end, Opaques);
+type(lists, member, 2, Xs, Opaques) ->
+ strict(lists, member, 2, Xs,
fun ([X, Y]) ->
- Y1 = t_list_elements(Y),
- case t_is_none(t_inf(Y1, X)) of
+ Y1 = t_list_elements(Y, Opaques),
+ case t_is_none(t_inf(Y1, X, Opaques)) of
true -> t_atom('false');
false -> t_boolean()
end
- end);
-%% type(lists, merge, 1, Xs) ->
-type(lists, merge, 2, Xs) ->
- strict(arg_types(lists, merge, 2), Xs,
+ end, Opaques);
+%% type(lists, merge, 1, Xs, Opaques) ->
+type(lists, merge, 2, Xs, Opaques) ->
+ strict(lists, merge, 2, Xs,
fun ([L1, L2]) ->
case t_is_none(L1) of
true -> L2;
@@ -1462,30 +1503,31 @@ type(lists, merge, 2, Xs) ->
false -> t_sup(L1, L2)
end
end
- end);
-type(lists, min, 1, Xs) ->
- strict(arg_types(lists, min, 1), Xs, fun ([L]) -> t_list_elements(L) end);
-type(lists, nth, 2, Xs) ->
- strict(arg_types(lists, nth, 2), Xs,
- fun ([_, Y]) -> t_list_elements(Y) end);
-type(lists, nthtail, 2, Xs) ->
- strict(arg_types(lists, nthtail, 2), Xs,
- fun ([_, Y]) -> t_sup(Y, t_list()) end);
-type(lists, partition, 2, Xs) ->
- strict(arg_types(lists, partition, 2), Xs,
+ end, Opaques);
+type(lists, min, 1, Xs, Opaques) ->
+ strict(lists, min, 1, Xs,
+ fun ([L]) -> t_list_elements(L, Opaques) end, Opaques);
+type(lists, nth, 2, Xs, Opaques) ->
+ strict(lists, nth, 2, Xs,
+ fun ([_, Y]) -> t_list_elements(Y, Opaques) end, Opaques);
+type(lists, nthtail, 2, Xs, Opaques) ->
+ strict(lists, nthtail, 2, Xs,
+ fun ([_, Y]) -> t_sup(Y, t_list()) end, Opaques);
+type(lists, partition, 2, Xs, Opaques) ->
+ strict(lists, partition, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_tuple([L,L]);
false ->
- El = t_list_elements(L),
- case check_fun_application(F, [El]) of
+ El = t_list_elements(L, Opaques),
+ case check_fun_application(F, [El], Opaques) of
error ->
- case t_is_cons(L) of
+ case t_is_cons(L, Opaques) of
true -> t_none();
false -> t_tuple([t_nil(), t_nil()])
end;
ok ->
- case t_atom_vals(t_fun_range(F)) of
+ case t_atom_vals(t_fun_range(F, Opaques), Opaques) of
['true'] -> t_tuple([L, t_nil()]);
['false'] -> t_tuple([t_nil(), L]);
[_, _] ->
@@ -1494,123 +1536,131 @@ type(lists, partition, 2, Xs) ->
end
end
end
- end);
-type(lists, reverse, 1, Xs) ->
- strict(arg_types(lists, reverse, 1), Xs, fun ([X]) -> X end);
-type(lists, reverse, 2, Xs) ->
+ end, Opaques);
+type(lists, reverse, 1, Xs, Opaques) ->
+ strict(lists, reverse, 1, Xs, fun ([X]) -> X end, Opaques);
+type(lists, reverse, 2, Xs, _Opaques) ->
type(erlang, '++', 2, Xs); % reverse-onto is just like append
-type(lists, sort, 1, Xs) ->
- strict(arg_types(lists, sort, 1), Xs, fun ([X]) -> X end);
-type(lists, sort, 2, Xs) ->
- strict(arg_types(lists, sort, 2), Xs,
+type(lists, sort, 1, Xs, Opaques) ->
+ strict(lists, sort, 1, Xs, fun ([X]) -> X end, Opaques);
+type(lists, sort, 2, Xs, Opaques) ->
+ strict(lists, sort, 2, Xs,
fun ([F, L]) ->
- R = t_fun_range(F),
- case t_is_boolean(R) of
+ R = t_fun_range(F, Opaques),
+ case t_is_boolean(R, Opaques) of
true -> L;
false ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_nil();
false -> t_none()
end
end
- end);
-type(lists, split, 2, Xs) ->
- strict(arg_types(lists, split, 2), Xs,
+ end, Opaques);
+type(lists, split, 2, Xs, Opaques) ->
+ strict(lists, split, 2, Xs,
fun ([_, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_tuple([L, L]);
false ->
- T = t_list_elements(L),
+ T = t_list_elements(L, Opaques),
t_tuple([t_list(T), t_list(T)])
end
- end);
-type(lists, splitwith, 2, Xs) ->
+ end, Opaques);
+type(lists, splitwith, 2, Xs, _Opaques) ->
T1 = type(lists, takewhile, 2, Xs),
T2 = type(lists, dropwhile, 2, Xs),
case t_is_none(T1) orelse t_is_none(T2) of
true -> t_none();
false -> t_tuple([T1, T2])
end;
-type(lists, subtract, 2, Xs) -> type(erlang, '--', 2, Xs); % alias
-type(lists, takewhile, 2, Xs) ->
- strict(arg_types(lists, takewhile, 2), Xs,
+type(lists, subtract, 2, Xs, _Opaques) -> type(erlang, '--', 2, Xs); % alias
+type(lists, takewhile, 2, Xs, Opaques) ->
+ strict(lists, takewhile, 2, Xs,
fun([F, L]) ->
- case t_is_none(t_inf(t_list(), L)) of
+ case t_is_none(t_inf(t_list(), L, Opaques)) of
false -> type(lists, filter, 2, Xs);
true ->
%% This works for non-proper lists as well.
- El = t_list_elements(L),
+ El = t_list_elements(L, Opaques),
type(lists, filter, 2, [F, t_list(El)])
end
- end);
-type(lists, usort, 1, Xs) -> type(lists, sort, 1, Xs); % same
-type(lists, usort, 2, Xs) -> type(lists, sort, 2, Xs); % same
-type(lists, unzip, 1, Xs) ->
- strict(arg_types(lists, unzip, 1), Xs,
+ end, Opaques);
+type(lists, usort, 1, Xs, _Opaques) -> type(lists, sort, 1, Xs); % same
+type(lists, usort, 2, Xs, _Opaques) -> type(lists, sort, 2, Xs); % same
+type(lists, unzip, 1, Xs, Opaques) ->
+ strict(lists, unzip, 1, Xs,
fun ([Ps]) ->
- case t_is_nil(Ps) of
+ case t_is_nil(Ps, Opaques) of
true ->
t_tuple([t_nil(), t_nil()]);
false -> % Ps is a proper list of pairs
- TupleTypes = t_tuple_subtypes(t_list_elements(Ps)),
+ TupleTypes = t_tuple_subtypes(t_list_elements(Ps, Opaques),
+ Opaques),
lists:foldl(fun(Tuple, Acc) ->
- [A, B] = t_tuple_args(Tuple),
+ [A, B] = t_tuple_args(Tuple, Opaques),
t_sup(t_tuple([t_list(A), t_list(B)]), Acc)
end, t_none(), TupleTypes)
end
- end);
-type(lists, unzip3, 1, Xs) ->
- strict(arg_types(lists, unzip3, 1), Xs,
+ end, Opaques);
+type(lists, unzip3, 1, Xs, Opaques) ->
+ strict(lists, unzip3, 1, Xs,
fun ([Ts]) ->
- case t_is_nil(Ts) of
+ case t_is_nil(Ts, Opaques) of
true ->
t_tuple([t_nil(), t_nil(), t_nil()]);
false -> % Ps is a proper list of triples
- TupleTypes = t_tuple_subtypes(t_list_elements(Ts)),
+ TupleTypes = t_tuple_subtypes(t_list_elements(Ts, Opaques),
+ Opaques),
lists:foldl(fun(T, Acc) ->
- [A, B, C] = t_tuple_args(T),
+ [A, B, C] = t_tuple_args(T, Opaques),
t_sup(t_tuple([t_list(A),
t_list(B),
t_list(C)]),
Acc)
end, t_none(), TupleTypes)
end
- end);
-type(lists, zip, 2, Xs) ->
- strict(arg_types(lists, zip, 2), Xs,
+ end, Opaques);
+type(lists, zip, 2, Xs, Opaques) ->
+ strict(lists, zip, 2, Xs,
fun ([As, Bs]) ->
- case (t_is_nil(As) orelse t_is_nil(Bs)) of
+ case (t_is_nil(As, Opaques) orelse t_is_nil(Bs, Opaques)) of
true -> t_nil();
false ->
- A = t_list_elements(As),
- B = t_list_elements(Bs),
+ A = t_list_elements(As, Opaques),
+ B = t_list_elements(Bs, Opaques),
t_list(t_tuple([A, B]))
end
- end);
-type(lists, zip3, 3, Xs) ->
- strict(arg_types(lists, zip3, 3), Xs,
+ end, Opaques);
+type(lists, zip3, 3, Xs, Opaques) ->
+ strict(lists, zip3, 3, Xs,
fun ([As, Bs, Cs]) ->
- case (t_is_nil(As) orelse t_is_nil(Bs) orelse t_is_nil(Cs)) of
+ case
+ (t_is_nil(As, Opaques)
+ orelse t_is_nil(Bs, Opaques)
+ orelse t_is_nil(Cs, Opaques))
+ of
true -> t_nil();
false ->
- A = t_list_elements(As),
- B = t_list_elements(Bs),
- C = t_list_elements(Cs),
+ A = t_list_elements(As, Opaques),
+ B = t_list_elements(Bs, Opaques),
+ C = t_list_elements(Cs, Opaques),
t_list(t_tuple([A, B, C]))
end
- end);
-type(lists, zipwith, 3, Xs) ->
- strict(arg_types(lists, zipwith, 3), Xs,
- fun ([F, _As, _Bs]) -> t_sup(t_list(t_fun_range(F)), t_nil()) end);
-type(lists, zipwith3, 4, Xs) ->
- strict(arg_types(lists, zipwith3, 4), Xs,
- fun ([F,_As,_Bs,_Cs]) -> t_sup(t_list(t_fun_range(F)), t_nil()) end);
+ end, Opaques);
+type(lists, zipwith, 3, Xs, Opaques) ->
+ strict(lists, zipwith, 3, Xs,
+ fun ([F, _As, _Bs]) -> t_sup(t_list(t_fun_range(F, Opaques)),
+ t_nil()) end, Opaques);
+type(lists, zipwith3, 4, Xs, Opaques) ->
+ strict(lists, zipwith3, 4, Xs,
+ fun ([F,_As,_Bs,_Cs]) -> t_sup(t_list(t_fun_range(F, Opaques)),
+ t_nil()) end, Opaques);
%%-- string -------------------------------------------------------------------
-type(string, chars, 2, Xs) -> % NOTE: added to avoid loss of information
- strict(arg_types(string, chars, 2), Xs, fun (_) -> t_string() end);
-type(string, chars, 3, Xs) -> % NOTE: added to avoid loss of information
- strict(arg_types(string, chars, 3), Xs,
+type(string, chars, 2, Xs, Opaques) -> % NOTE: added to avoid loss of info
+ strict(string, chars, 2, Xs, fun (_) -> t_string() end, Opaques);
+type(string, chars, 3, Xs, Opaques) -> % NOTE: added to avoid loss of info
+ strict(string, chars, 3, Xs,
fun ([Char, N, Tail]) ->
case t_is_nil(Tail) of
true ->
@@ -1623,10 +1673,10 @@ type(string, chars, 3, Xs) -> % NOTE: added to avoid loss of information
t_sup(t_sup(t_string(), Tail), t_cons(Char, Tail))
end
end
- end);
+ end, Opaques);
%%-----------------------------------------------------------------------------
-type(M, F, A, Xs) when is_atom(M), is_atom(F),
+type(M, F, A, Xs, _O) when is_atom(M), is_atom(F),
is_integer(A), 0 =< A, A =< 255 ->
strict(Xs, t_any()). % safe approximation for all functions.
@@ -1635,13 +1685,20 @@ type(M, F, A, Xs) when is_atom(M), is_atom(F),
%% Auxiliary functions
%%-----------------------------------------------------------------------------
-strict(Xs, Ts, F) ->
- %% io:format("inf lists arg~n1:~p~n2:~p ~n", [Xs, Ts]),
- Xs1 = inf_lists(Xs, Ts),
+strict(M, F, A, Xs, Fun, Opaques) ->
+ Ts = arg_types(M, F, A),
+ %% io:format("inf lists arg~nXs: ~p~nTs: ~p ~n", [Xs, Ts]),
+ Xs1 = inf_lists(Xs, Ts, Opaques),
%% io:format("inf lists return ~p ~n", [Xs1]),
case any_is_none_or_unit(Xs1) of
true -> t_none();
- false -> F(Xs1)
+ false -> Fun(Xs1)
+ end.
+
+strict2(Xs, X) ->
+ case any_is_none_or_unit(Xs) of
+ true -> t_none();
+ false -> X
end.
strict(Xs, X) ->
@@ -1650,9 +1707,9 @@ strict(Xs, X) ->
false -> X
end.
-inf_lists([X | Xs], [T | Ts]) ->
- [t_inf(X, T) | inf_lists(Xs, Ts)];
-inf_lists([], []) ->
+inf_lists([X | Xs], [T | Ts], Opaques) ->
+ [t_inf(X, T, Opaques) | inf_lists(Xs, Ts, Opaques)];
+inf_lists([], [], _Opaques) ->
[].
any_list(N) -> any_list(N, t_any()).
@@ -1670,20 +1727,43 @@ list_replace(1, E, [_X | Xs]) ->
any_is_none_or_unit(Ts) ->
lists:any(fun erl_types:t_is_none_or_unit/1, Ts).
-check_guard([X], Test, Type) ->
- check_guard_single(X, Test, Type).
+check_guard([X], Test, Type, Opaques) ->
+ check_guard_single(X, Test, Type, Opaques).
-check_guard_single(X, Test, Type) ->
+check_guard_single(X, Test, Type, Opaques) ->
case Test(X) of
true -> t_atom('true');
false ->
- case erl_types:t_is_opaque(X) of
- true -> t_none();
- false ->
- case t_is_none(t_inf(Type, X)) of
- true -> t_atom('false');
- false -> t_boolean()
- end
+ case t_is_none(t_inf(Type, X, Opaques)) of
+ true ->
+ case t_has_opaque_subtype(X, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
+ false -> t_boolean()
+ end
+ end.
+
+check_record_tag(Tag, Y, Opaques) ->
+ case t_is_atom(Tag, Opaques) of
+ false ->
+ TagAtom = t_inf(Tag, t_atom(), Opaques),
+ case t_is_none(TagAtom) of
+ true ->
+ case t_has_opaque_subtype(Tag, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
+ false -> t_boolean()
+ end;
+ true ->
+ case t_atom_vals(Tag, Opaques) of
+ [RealTag] ->
+ case t_atom_vals(Y, Opaques) of
+ [RealTag] -> t_atom('true');
+ _ -> t_boolean()
+ end;
+ _ -> t_boolean()
end
end.
@@ -1828,12 +1908,12 @@ negwidth(X, N) ->
false -> negwidth(X, N+1)
end.
-arith('bnot', X1) ->
- case t_is_integer(X1) of
+arith('bnot', X1, Opaques) ->
+ case t_is_integer(X1, Opaques) of
false -> error;
true ->
- Min1 = number_min(X1),
- Max1 = number_max(X1),
+ Min1 = number_min(X1, Opaques),
+ Max1 = number_max(X1, Opaques),
{ok, t_from_range(infinity_add(infinity_inv(Max1), -1),
infinity_add(infinity_inv(Min1), -1))}
end.
@@ -1907,13 +1987,13 @@ arith_bor_range_set({Min, Max}, [Int|IntList]) ->
IntList),
{infinity_bor(Min, SafeAnd), infinity_bor(Max, SafeAnd)}.
-arith_band(X1, X2) ->
- L1 = t_number_vals(X1),
- L2 = t_number_vals(X2),
- Min1 = number_min(X1),
- Max1 = number_max(X1),
- Min2 = number_min(X2),
- Max2 = number_max(X2),
+arith_band(X1, X2, Opaques) ->
+ L1 = t_number_vals(X1, Opaques),
+ L2 = t_number_vals(X2, Opaques),
+ Min1 = number_min(X1, Opaques),
+ Max1 = number_max(X1, Opaques),
+ Min2 = number_min(X2, Opaques),
+ Max2 = number_max(X2, Opaques),
case {L1 =:= unknown, L2 =:= unknown} of
{true, false} ->
arith_band_range_set(arith_band_ranges(Min1, Max1, Min2, Max2), L2);
@@ -1923,13 +2003,13 @@ arith_band(X1, X2) ->
arith_band_ranges(Min1, Max1, Min2, Max2)
end.
-arith_bor(X1, X2) ->
- L1 = t_number_vals(X1),
- L2 = t_number_vals(X2),
- Min1 = number_min(X1),
- Max1 = number_max(X1),
- Min2 = number_min(X2),
- Max2 = number_max(X2),
+arith_bor(X1, X2, Opaques) ->
+ L1 = t_number_vals(X1, Opaques),
+ L2 = t_number_vals(X2, Opaques),
+ Min1 = number_min(X1, Opaques),
+ Max1 = number_max(X1, Opaques),
+ Min2 = number_min(X2, Opaques),
+ Max2 = number_max(X2, Opaques),
case {L1 =:= unknown, L2 =:= unknown} of
{true, false} ->
arith_bor_range_set(arith_bor_ranges(Min1, Max1, Min2, Max2), L2);
@@ -1967,19 +2047,19 @@ arith_bor_ranges(Min1, Max1, Min2, Max2) ->
end,
{Min, Max}.
-arith(Op, X1, X2) ->
+arith(Op, X1, X2, Opaques) ->
%% io:format("arith ~p ~p ~p~n", [Op, X1, X2]),
- case t_is_integer(X1) andalso t_is_integer(X2) of
+ case t_is_integer(X1, Opaques) andalso t_is_integer(X2, Opaques) of
false -> error;
true ->
- L1 = t_number_vals(X1),
- L2 = t_number_vals(X2),
+ L1 = t_number_vals(X1, Opaques),
+ L2 = t_number_vals(X2, Opaques),
case (L1 =:= unknown) orelse (L2 =:= unknown) of
true ->
- Min1 = number_min(X1),
- Max1 = number_max(X1),
- Min2 = number_min(X2),
- Max2 = number_max(X2),
+ Min1 = number_min(X1, Opaques),
+ Max1 = number_max(X1, Opaques),
+ Min2 = number_min(X2, Opaques),
+ Max2 = number_max(X2, Opaques),
{NewMin, NewMax} =
case Op of
'+' -> {infinity_add(Min1, Min2), infinity_add(Max1, Max2)};
@@ -1992,8 +2072,8 @@ arith(Op, X1, X2) ->
'bsr' -> NewMin2 = infinity_inv(Max2),
NewMax2 = infinity_inv(Min2),
arith_bsl(Min1, Max1, NewMin2, NewMax2);
- 'band' -> arith_band(X1, X2);
- 'bor' -> arith_bor(X1, X2);
+ 'band' -> arith_band(X1, X2, Opaques);
+ 'bor' -> arith_bor(X1, X2, Opaques);
'bxor' -> arith_bor_ranges(Min1, Max1, Min2, Max2) %% overaprox.
end,
%% io:format("done arith ~p = ~p~n", [Op, {NewMin, NewMax}]),
@@ -2025,58 +2105,62 @@ arith(Op, X1, X2) ->
%% Comparison of terms
%%=============================================================================
-compare(Op, Lhs, Rhs) ->
- case t_is_none(t_inf(Lhs, Rhs)) of
+compare(Op, Lhs, Rhs, Opaques) ->
+ case t_is_none(t_inf(Lhs, Rhs, Opaques)) of
false -> t_boolean();
true ->
- case Op of
- '<' -> always_smaller(Lhs, Rhs);
- '>' -> always_smaller(Rhs, Lhs);
- '=<' -> always_smaller(Lhs, Rhs);
- '>=' -> always_smaller(Rhs, Lhs)
+ case opaque_args(erlang, Op, 2, [Lhs, Rhs], Opaques) =:= [] of
+ true ->
+ case Op of
+ '<' -> always_smaller(Lhs, Rhs, Opaques);
+ '>' -> always_smaller(Rhs, Lhs, Opaques);
+ '=<' -> always_smaller(Lhs, Rhs, Opaques);
+ '>=' -> always_smaller(Rhs, Lhs, Opaques)
+ end;
+ false -> t_none()
end
end.
-always_smaller(Type1, Type2) ->
- {Min1, Max1} = type_ranks(Type1),
- {Min2, Max2} = type_ranks(Type2),
+always_smaller(Type1, Type2, Opaques) ->
+ {Min1, Max1} = type_ranks(Type1, Opaques),
+ {Min2, Max2} = type_ranks(Type2, Opaques),
if Max1 < Min2 -> t_atom('true');
Min1 > Max2 -> t_atom('false');
true -> t_boolean()
end.
-type_ranks(Type) ->
- type_ranks(Type, 1, 0, 0, type_order()).
+type_ranks(Type, Opaques) ->
+ type_ranks(Type, 1, 0, 0, type_order(), Opaques).
-type_ranks(_Type, _I, Min, Max, []) -> {Min, Max};
-type_ranks(Type, I, Min, Max, [TypeClass|Rest]) ->
+type_ranks(_Type, _I, Min, Max, [], _Opaques) -> {Min, Max};
+type_ranks(Type, I, Min, Max, [TypeClass|Rest], Opaques) ->
{NewMin, NewMax} =
- case t_is_none(t_inf(Type, TypeClass)) of
+ case t_is_none(t_inf(Type, TypeClass, Opaques)) of
true -> {Min, Max};
false -> case Min of
0 -> {I, I};
_ -> {Min, I}
end
end,
- type_ranks(Type, I+1, NewMin, NewMax, Rest).
+ type_ranks(Type, I+1, NewMin, NewMax, Rest, Opaques).
type_order() ->
[t_number(), t_atom(), t_reference(), t_fun(), t_port(), t_pid(), t_tuple(),
t_list(), t_binary()].
-key_comparisons_fail(X0, KeyPos, TupleList) ->
- X = case t_is_number(t_inf(X0, t_number())) of
+key_comparisons_fail(X0, KeyPos, TupleList, Opaques) ->
+ X = case t_is_number(t_inf(X0, t_number(), Opaques), Opaques) of
false -> X0;
true -> t_number()
end,
lists:all(fun(Tuple) ->
Key = type(erlang, element, 2, [KeyPos, Tuple]),
- t_is_none(t_inf(Key, X))
+ t_is_none(t_inf(Key, X, Opaques))
end, TupleList).
%%=============================================================================
--spec arg_types(atom(), atom(), arity()) -> [erl_types:erl_type()] | 'unknown'.
+-spec arg_types(atom(), atom(), arity()) -> arg_types() | 'unknown'.
%%------- erlang --------------------------------------------------------------
arg_types(erlang, '!', 2) ->
@@ -2508,47 +2592,78 @@ arg_types(M, F, A) when is_atom(M), is_atom(F),
unknown. % safe approximation for all functions.
--spec is_known(atom(), atom(), arity()) -> boolean().
+-spec is_known(module(), atom(), arity()) -> boolean().
is_known(M, F, A) ->
arg_types(M, F, A) =/= unknown.
+-spec opaque_args(module(), atom(), arity(),
+ arg_types(), opaques()) -> [pos_integer()].
+
+%% Use this function to find out which argument caused empty type.
+
+opaque_args(_M, _F, _A, _Xs, 'universe') -> [];
+opaque_args(M, F, A, Xs, Opaques) ->
+ case kind_of_check(M, F, A) of
+ record ->
+ [X,Y|_] = Xs,
+ [1 ||
+ case t_is_tuple(X, Opaques) of
+ true ->
+ case t_tuple_subtypes(X, Opaques) of
+ unknown -> false;
+ List when length(List) >= 1 -> opaque_recargs(List, Y, Opaques)
+ end;
+ false -> t_has_opaque_subtype(X, Opaques)
+ end];
+ subtype ->
+ [N ||
+ {N, X} <- lists:zip(lists:seq(1, length(Xs)), Xs),
+ t_has_opaque_subtype(X, Opaques)];
+ find_unknown ->
+ [L, R] = Xs,
+ erl_types:t_find_unknown_opaque(L, R, Opaques);
+ no_check -> []
+ end.
--spec structure_inspecting_args(atom(), atom(), arity()) -> [1..255].
-
-structure_inspecting_args(erlang, element, 2) -> [2];
-structure_inspecting_args(erlang, is_atom, 1) -> [1];
-structure_inspecting_args(erlang, is_boolean, 1) -> [1];
-structure_inspecting_args(erlang, is_binary, 1) -> [1];
-structure_inspecting_args(erlang, is_bitstring, 1) -> [1];
-structure_inspecting_args(erlang, is_float, 1) -> [1];
-structure_inspecting_args(erlang, is_function, 1) -> [1];
-structure_inspecting_args(erlang, is_integer, 1) -> [1];
-structure_inspecting_args(erlang, is_list, 1) -> [1];
-structure_inspecting_args(erlang, is_number, 1) -> [1];
-structure_inspecting_args(erlang, is_pid, 1) -> [1];
-structure_inspecting_args(erlang, is_port, 1) -> [1];
-structure_inspecting_args(erlang, is_reference, 1) -> [1];
-structure_inspecting_args(erlang, is_tuple, 1) -> [1];
-structure_inspecting_args(erlang, length, 1) -> [1];
-%%structure_inspecting_args(erlang, setelement, 3) -> [2].
-structure_inspecting_args(_, _, _) -> []. % XXX: assume no arg needs inspection
-
-
-check_fun_application(Fun, Args) ->
- case t_is_fun(Fun) of
+kind_of_check(erlang, is_record, 3) ->
+ record;
+kind_of_check(erlang, is_record, 2) ->
+ record;
+kind_of_check(erlang, F, A) ->
+ case erl_internal:guard_bif(F, A) orelse erl_internal:bool_op(F, A) of
+ true -> subtype;
+ false ->
+ case erl_internal:comp_op(F, A) of
+ true -> find_unknown;
+ false -> no_check
+ end
+ end;
+kind_of_check(_M, _F, _A) -> no_check.
+
+opaque_recargs(Tuples, Y, Opaques) ->
+ Fun = fun(Tuple) ->
+ case t_tuple_args(Tuple, Opaques) of
+ [Tag|_] -> t_is_none(check_record_tag(Tag, Y, Opaques));
+ _ -> false
+ end
+ end,
+ lists:all(Fun, Tuples).
+
+check_fun_application(Fun, Args, Opaques) ->
+ case t_is_fun(Fun, Opaques) of
true ->
- case t_fun_args(Fun) of
+ case t_fun_args(Fun, Opaques) of
unknown ->
- case t_is_none_or_unit(t_fun_range(Fun)) of
+ case t_is_none_or_unit(t_fun_range(Fun, Opaques)) of
true -> error;
false -> ok
end;
FunDom when length(FunDom) =:= length(Args) ->
- case any_is_none_or_unit(inf_lists(FunDom, Args)) of
+ case any_is_none_or_unit(inf_lists(FunDom, Args, Opaques)) of
true -> error;
false ->
- case t_is_none_or_unit(t_fun_range(Fun)) of
+ case t_is_none_or_unit(t_fun_range(Fun, Opaques)) of
true -> error;
false -> ok
end
diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl
index d7d8a878c5..cfa72d85b7 100644
--- a/lib/hipe/cerl/erl_types.erl
+++ b/lib/hipe/cerl/erl_types.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2014. 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
@@ -42,15 +42,15 @@
max/2,
module_builtin_opaques/1,
min/2,
- number_max/1,
- number_min/1,
+ number_max/1, number_max/2,
+ number_min/1, number_min/2,
t_abstract_records/2,
t_any/0,
t_arity/0,
t_atom/0,
t_atom/1,
t_atoms/1,
- t_atom_vals/1,
+ t_atom_vals/1, t_atom_vals/2,
t_binary/0,
t_bitstr/0,
t_bitstr/2,
@@ -66,12 +66,14 @@
t_collect_vars/1,
t_cons/0,
t_cons/2,
- t_cons_hd/1,
- t_cons_tl/1,
+ t_cons_hd/1, t_cons_hd/2,
+ t_cons_tl/1, t_cons_tl/2,
t_constant/0,
- t_contains_opaque/1,
+ t_contains_opaque/1, t_contains_opaque/2,
+ t_decorate_with_opaque/3,
t_elements/1,
t_find_opaque_mismatch/2,
+ t_find_unknown_opaque/3,
t_fixnum/0,
t_map/2,
t_non_neg_fixnum/0,
@@ -87,18 +89,18 @@
t_fun/0,
t_fun/1,
t_fun/2,
- t_fun_args/1,
- t_fun_arity/1,
- t_fun_range/1,
- t_has_opaque_subtype/1,
+ t_fun_args/1, t_fun_args/2,
+ t_fun_arity/1, t_fun_arity/2,
+ t_fun_range/1, t_fun_range/2,
+ t_has_opaque_subtype/2,
t_has_var/1,
t_identifier/0,
%% t_improper_list/2,
- t_inf/2,
- t_inf/3,
- t_inf_lists/2,
- t_inf_lists/3,
- t_inf_lists_masked/3,
+ t_inf/1,
+ t_inf/2,
+ t_inf/3,
+ t_inf_lists/2,
+ t_inf_lists/3,
t_integer/0,
t_integer/1,
t_non_neg_integer/0,
@@ -107,44 +109,44 @@
t_iodata/0,
t_iolist/0,
t_is_any/1,
- t_is_atom/1,
- t_is_atom/2,
- t_is_binary/1,
- t_is_bitstr/1,
+ t_is_atom/1, t_is_atom/2,
+ t_is_any_atom/2, t_is_any_atom/3,
+ t_is_binary/1, t_is_binary/2,
+ t_is_bitstr/1, t_is_bitstr/2,
t_is_bitwidth/1,
- t_is_boolean/1,
+ t_is_boolean/1, t_is_boolean/2,
%% t_is_byte/1,
%% t_is_char/1,
- t_is_cons/1,
+ t_is_cons/1, t_is_cons/2,
t_is_constant/1,
t_is_equal/2,
t_is_fixnum/1,
- t_is_float/1,
- t_is_fun/1,
+ t_is_float/1, t_is_float/2,
+ t_is_fun/1, t_is_fun/2,
t_is_instance/2,
- t_is_integer/1,
+ t_is_integer/1, t_is_integer/2,
t_is_list/1,
t_is_matchstate/1,
- t_is_nil/1,
+ t_is_nil/1, t_is_nil/2,
t_is_non_neg_integer/1,
t_is_none/1,
t_is_none_or_unit/1,
- t_is_number/1,
- t_is_opaque/1,
- t_is_pid/1,
- t_is_port/1,
- t_is_maybe_improper_list/1,
- t_is_reference/1,
+ t_is_number/1, t_is_number/2,
+ t_is_opaque/1, t_is_opaque/2,
+ t_is_pid/1, t_is_pid/2,
+ t_is_port/1, t_is_port/2,
+ t_is_maybe_improper_list/1, t_is_maybe_improper_list/2,
+ t_is_reference/1, t_is_reference/2,
t_is_remote/1,
t_is_string/1,
t_is_subtype/2,
- t_is_tuple/1,
+ t_is_tuple/1, t_is_tuple/2,
t_is_unit/1,
t_is_var/1,
t_limit/2,
t_list/0,
t_list/1,
- t_list_elements/1,
+ t_list_elements/1, t_list_elements/2,
t_list_termination/1,
t_matchstate/0,
t_matchstate/2,
@@ -163,11 +165,8 @@
t_nonempty_string/0,
t_number/0,
t_number/1,
- t_number_vals/1,
+ t_number_vals/1, t_number_vals/2,
t_opaque_from_records/1,
- t_opaque_match_atom/2,
- t_opaque_match_record/2,
- t_opaque_matching_structure/2,
t_opaque_structure/1,
%% t_parameterized_module/0,
t_pid/0,
@@ -192,16 +191,14 @@
t_to_tlist/1,
t_tuple/0,
t_tuple/1,
- t_tuple_args/1,
- t_tuple_size/1,
+ t_tuple_args/1, t_tuple_args/2,
+ t_tuple_size/1, t_tuple_size/2,
t_tuple_sizes/1,
t_tuple_subtypes/1,
+ t_tuple_subtypes/2,
t_unify/2,
- t_unify/3,
t_unit/0,
- t_unopaque/1,
- t_unopaque/2,
- t_unopaque_on_mismatch/3,
+ t_unopaque/1, t_unopaque/2,
t_var/1,
t_var_name/1,
%% t_assign_variables_to_subtype/2,
@@ -209,6 +206,7 @@
record_field_diffs_to_string/2,
subst_all_vars_to_any/1,
lift_list_to_pos_empty/1,
+ is_opaque_type/2,
is_erl_type/1,
atom_to_string/1
]).
@@ -228,6 +226,14 @@
-export_type([erl_type/0]).
+%%-define(DEBUG, true).
+
+-ifdef(DEBUG).
+-define(debug(__A), __A).
+-else.
+-define(debug(__A), ok).
+-endif.
+
%%=============================================================================
%%
%% Definition of the type structure
@@ -310,6 +316,9 @@
-record(int_set, {set :: [integer()]}).
-record(int_rng, {from :: rng_elem(), to :: rng_elem()}).
+%% Note: the definition of #opaque{} was changed to 'mod' and 'name';
+%% it used to be an ordsets of {Mod, Name} pairs. The Dialyzer version
+%% was updated to 2.7 due to this change.
-record(opaque, {mod :: module(), name :: atom(),
args = [] :: [erl_type()], struct :: erl_type()}).
-record(remote, {mod:: module(), name :: atom(), args = [] :: [erl_type()]}).
@@ -346,6 +355,8 @@
-define(integer_non_neg, ?int_range(0, pos_inf)).
-define(integer_neg, ?int_range(neg_inf, -1)).
+-type opaques() :: [erl_type()] | 'universe'.
+
%%-----------------------------------------------------------------------------
%% Unions
%%
@@ -384,8 +395,11 @@ t_any() ->
-spec t_is_any(erl_type()) -> boolean().
-t_is_any(?any) -> true;
-t_is_any(_) -> false.
+t_is_any(Type) ->
+ do_opaque(Type, 'universe', fun is_any/1).
+
+is_any(?any) -> true;
+is_any(_) -> false.
-spec t_none() -> erl_type().
@@ -407,16 +421,25 @@ t_opaque(Mod, Name, Args, Struct) ->
O = #opaque{mod = Mod, name = Name, args = Args, struct = Struct},
?opaque(set_singleton(O)).
+-spec t_is_opaque(erl_type(), [erl_type()]) -> boolean().
+
+t_is_opaque(?opaque(_) = Type, Opaques) ->
+ not is_opaque_type(Type, Opaques);
+t_is_opaque(_Type, _Opaques) -> false.
+
-spec t_is_opaque(erl_type()) -> boolean().
t_is_opaque(?opaque(_)) -> true;
t_is_opaque(_) -> false.
--spec t_has_opaque_subtype(erl_type()) -> boolean().
+-spec t_has_opaque_subtype(erl_type(), opaques()) -> boolean().
+
+t_has_opaque_subtype(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun has_opaque_subtype/1).
-t_has_opaque_subtype(?union(Ts)) ->
+has_opaque_subtype(?union(Ts)) ->
lists:any(fun t_is_opaque/1, Ts);
-t_has_opaque_subtype(T) ->
+has_opaque_subtype(T) ->
t_is_opaque(T).
-spec t_opaque_structure(erl_type()) -> erl_type().
@@ -424,74 +447,62 @@ t_has_opaque_subtype(T) ->
t_opaque_structure(?opaque(Elements)) ->
t_sup([Struct || #opaque{struct = Struct} <- ordsets:to_list(Elements)]).
--spec t_opaque_module(erl_type()) -> module().
+-spec t_opaque_modules(erl_type()) -> [module()].
-t_opaque_module(?opaque(Elements)) ->
+t_opaque_modules(?opaque(Elements)) ->
case ordsets:size(Elements) of
1 ->
- [#opaque{mod = Module}] = ordsets:to_list(Elements),
- Module;
+ [#opaque{mod = Mod}] = set_to_list(Elements),
+ [Mod];
_ -> throw({error, "Unexpected multiple opaque types"})
end.
-%% This only makes sense if we know that Type matches Opaque
--spec t_opaque_matching_structure(erl_type(), erl_type()) -> erl_type().
-
-t_opaque_matching_structure(Type, Opaque) ->
- OpaqueStruct = t_opaque_structure(Opaque),
- case OpaqueStruct of
- ?union(L1) ->
- case Type of
- ?union(_L2) -> OpaqueStruct;
- _OtherType -> t_opaque_matching_structure_list(Type, L1)
- end;
- ?tuple_set(_Set1) = TupleSet ->
- case Type of
- ?tuple_set(_Set2) -> OpaqueStruct;
- _ -> t_opaque_matching_structure_list(Type, t_tuple_subtypes(TupleSet))
- end;
- _Other -> OpaqueStruct
- end.
-
-t_opaque_matching_structure_list(Type, List) ->
- NewList = [t_inf(Element, Type) || Element <- List],
- Results = [NotNone || NotNone <- NewList, NotNone =/= ?none],
- case Results of
- [] -> ?none;
- [First|_] -> First
- end.
-
-spec t_contains_opaque(erl_type()) -> boolean().
-t_contains_opaque(?any) -> false;
-t_contains_opaque(?none) -> false;
-t_contains_opaque(?unit) -> false;
-t_contains_opaque(?atom(_Set)) -> false;
-t_contains_opaque(?bitstr(_Unit, _Base)) -> false;
-t_contains_opaque(?float) -> false;
-t_contains_opaque(?function(Domain, Range)) ->
- t_contains_opaque(Domain) orelse t_contains_opaque(Range);
-t_contains_opaque(?identifier(_Types)) -> false;
-t_contains_opaque(?integer(_Types)) -> false;
-t_contains_opaque(?int_range(_From, _To)) -> false;
-t_contains_opaque(?int_set(_Set)) -> false;
-t_contains_opaque(?list(Type, _, _)) -> t_contains_opaque(Type);
-t_contains_opaque(?matchstate(_P, _Slots)) -> false;
-t_contains_opaque(?nil) -> false;
-t_contains_opaque(?number(_Set, _Tag)) -> false;
-t_contains_opaque(?opaque(_)) -> true;
-t_contains_opaque(?product(Types)) -> list_contains_opaque(Types);
-t_contains_opaque(?tuple(?any, _, _)) -> false;
-t_contains_opaque(?tuple(Types, _, _)) -> list_contains_opaque(Types);
-t_contains_opaque(?tuple_set(_Set) = T) ->
- list_contains_opaque(t_tuple_subtypes(T));
-t_contains_opaque(?union(List)) -> list_contains_opaque(List);
-t_contains_opaque(?var(_Id)) -> false.
-
--spec list_contains_opaque([erl_type()]) -> boolean().
-
-list_contains_opaque(List) ->
- lists:any(fun t_contains_opaque/1, List).
+t_contains_opaque(Type) ->
+ t_contains_opaque(Type, []).
+
+%% Returns 'true' iff there is an opaque type that is *not* one of
+%% the types of the second argument.
+
+-spec t_contains_opaque(erl_type(), [erl_type()]) -> boolean().
+
+t_contains_opaque(?any, _Opaques) -> false;
+t_contains_opaque(?none, _Opaques) -> false;
+t_contains_opaque(?unit, _Opaques) -> false;
+t_contains_opaque(?atom(_Set), _Opaques) -> false;
+t_contains_opaque(?bitstr(_Unit, _Base), _Opaques) -> false;
+t_contains_opaque(?float, _Opaques) -> false;
+t_contains_opaque(?function(Domain, Range), Opaques) ->
+ t_contains_opaque(Domain, Opaques)
+ orelse t_contains_opaque(Range, Opaques);
+t_contains_opaque(?identifier(_Types), _Opaques) -> false;
+t_contains_opaque(?integer(_Types), _Opaques) -> false;
+t_contains_opaque(?int_range(_From, _To), _Opaques) -> false;
+t_contains_opaque(?int_set(_Set), _Opaques) -> false;
+t_contains_opaque(?list(Type, Tail, _), Opaques) ->
+ t_contains_opaque(Type, Opaques) orelse t_contains_opaque(Tail, Opaques);
+t_contains_opaque(?matchstate(_P, _Slots), _Opaques) -> false;
+t_contains_opaque(?nil, _Opaques) -> false;
+t_contains_opaque(?number(_Set, _Tag), _Opaques) -> false;
+t_contains_opaque(?opaque(_)=T, Opaques) ->
+ not is_opaque_type(T, Opaques)
+ orelse t_contains_opaque(t_opaque_structure(T));
+t_contains_opaque(?product(Types), Opaques) ->
+ list_contains_opaque(Types, Opaques);
+t_contains_opaque(?tuple(?any, _, _), _Opaques) -> false;
+t_contains_opaque(?tuple(Types, _, _), Opaques) ->
+ list_contains_opaque(Types, Opaques);
+t_contains_opaque(?tuple_set(_Set) = T, Opaques) ->
+ list_contains_opaque(t_tuple_subtypes(T), Opaques);
+t_contains_opaque(?union(List), Opaques) ->
+ list_contains_opaque(List, Opaques);
+t_contains_opaque(?var(_Id), _Opaques) -> false.
+
+-spec list_contains_opaque([erl_type()], [erl_type()]) -> boolean().
+
+list_contains_opaque(List, Opaques) ->
+ lists:any(fun(E) -> t_contains_opaque(E, Opaques) end, List).
%% t_find_opaque_mismatch/2 of two types should only be used if their
%% t_inf is t_none() due to some opaque type violation.
@@ -506,9 +517,12 @@ t_find_opaque_mismatch(T1, T2) ->
t_find_opaque_mismatch(?any, _Type, _TopType) -> error;
t_find_opaque_mismatch(?none, _Type, _TopType) -> error;
-t_find_opaque_mismatch(?list(T1, _, _), ?list(T2, _, _), TopType) ->
- t_find_opaque_mismatch(T1, T2, TopType);
+t_find_opaque_mismatch(?list(T1, Tl1, _), ?list(T2, Tl2, _), TopType) ->
+ t_find_opaque_mismatch_ordlists([T1, Tl1], [T2, Tl2], TopType);
t_find_opaque_mismatch(_T1, ?opaque(_) = T2, TopType) -> {ok, TopType, T2};
+t_find_opaque_mismatch(?opaque(_) = T1, _T2, TopType) ->
+ %% The generated message is somewhat misleading:
+ {ok, TopType, T1};
t_find_opaque_mismatch(?product(T1), ?product(T2), TopType) ->
t_find_opaque_mismatch_ordlists(T1, T2, TopType);
t_find_opaque_mismatch(?tuple(T1, Arity, _), ?tuple(T2, Arity, _), TopType) ->
@@ -538,6 +552,166 @@ t_find_opaque_mismatch_list([H|T]) ->
error -> t_find_opaque_mismatch_list(T)
end.
+-spec t_find_unknown_opaque(erl_type(), erl_type(), opaques()) ->
+ [pos_integer()].
+
+%% The nice thing about using two types and t_inf() as compared to
+%% calling t_contains_opaque/2 is that the traversal stops when
+%% there is a mismatch which means that unknown opaque types "below"
+%% the mismatch are not found.
+%% XXX. Returns one element even if both oparands contain opaque types.
+%% XXX. Slow since t_inf() is called but the results are ignored.
+t_find_unknown_opaque(_T1, _T2, 'universe') -> [];
+t_find_unknown_opaque(T1, T2, Opaques) ->
+ try t_inf(T1, T2, {match, Opaques}) of
+ _ -> []
+ catch throw:N when is_integer(N) -> [N]
+ end.
+
+-spec t_decorate_with_opaque(erl_type(), erl_type(), [erl_type()]) -> erl_type().
+
+%% The first argument can contain opaque types. The second argument
+%% is assumed to be taken from the contract.
+
+t_decorate_with_opaque(T1, T2, Opaques) ->
+ case t_is_equal(T1, T2) orelse not t_contains_opaque(T2) of
+ true -> T1;
+ false ->
+ T = t_inf(T1, T2),
+ case t_contains_opaque(T) of
+ false -> T1;
+ true ->
+ R = decorate(T1, T, Opaques),
+ ?debug(case catch t_is_equal(t_unopaque(R), t_unopaque(T1)) of
+ true -> ok;
+ false ->
+ io:format("T1 = ~p,\n", [T1]),
+ io:format("T2 = ~p,\n", [T2]),
+ io:format("O = ~p,\n", [Opaques]),
+ io:format("erl_types:t_decorate_with_opaque(T1,T2,O).\n"),
+ throw({error, "Failed to handle opaque types"})
+ end),
+ R
+ end
+ end.
+
+decorate(?none=Type, _, _Opaques) -> Type;
+decorate(?function(Domain, Range), ?function(D, R), Opaques) ->
+ ?function(decorate(Domain, D, Opaques), decorate(Range, R, Opaques));
+decorate(?list(Types, Tail, Size), ?list(Ts, Tl, _Sz), Opaques) ->
+ ?list(decorate(Types, Ts, Opaques), decorate(Tail, Tl, Opaques), Size);
+decorate(?product(Types), ?product(Ts), Opaques) ->
+ ?product(list_decorate(Types, Ts, Opaques));
+decorate(?tuple(_, _, _)=T, ?tuple(?any, _, _), _Opaques) -> T;
+decorate(?tuple(?any, _, _)=T, ?tuple(_, _, _), _Opaques) -> T;
+decorate(?tuple(Types, Arity, Tag), ?tuple(Ts, Arity, _), Opaques) ->
+ ?tuple(list_decorate(Types, Ts, Opaques), Arity, Tag);
+decorate(?tuple_set(List), ?tuple(_, Arity, _) = T, Opaques) ->
+ decorate_tuple_sets(List, [{Arity, [T]}], Opaques);
+decorate(?tuple_set(List), ?tuple_set(L), Opaques) ->
+ decorate_tuple_sets(List, L, Opaques);
+decorate(?union(List), T, Opaques) when T =/= ?any ->
+ ?union(L) = force_union(T),
+ union_decorate(List, L, Opaques);
+decorate(?opaque(_)=T, _, _Opaques) -> T;
+decorate(T, ?union(L), Opaques) when T =/= ?any ->
+ ?union(List) = force_union(T),
+ union_decorate(List, L, Opaques);
+decorate(Type, ?opaque(_)=T, Opaques) ->
+ decorate_with_opaque(Type, T, Opaques);
+decorate(Type, _T, _Opaques) -> Type.
+
+%% Note: it is important that #opaque.struct is a subtype of the
+%% opaque type.
+decorate_with_opaque(Type, ?opaque(Set2), Opaques) ->
+ case decoration(set_to_list(Set2), Type, Opaques, [], false) of
+ {[], false} -> Type;
+ {List, All} when List =/= [] ->
+ NewType = ?opaque(ordsets:from_list(List)),
+ case All of
+ true -> NewType;
+ false -> t_sup(NewType, Type)
+ end
+ end.
+
+decoration([#opaque{struct = S} = Opaque|OpaqueTypes], Type, Opaques,
+ NewOpaqueTypes, All) ->
+ IsOpaque = is_opaque_type2(Opaque, Opaques),
+ I = t_inf(Type, S),
+ case not IsOpaque orelse t_is_none(I = t_inf(Type, S)) of
+ true -> decoration(OpaqueTypes, Type, Opaques, NewOpaqueTypes, All);
+ false ->
+ NewOpaque = Opaque#opaque{struct = decorate(I, S, Opaques)},
+ NewAll = All orelse t_is_equal(I, Type),
+ decoration(OpaqueTypes, Type, Opaques, [NewOpaque|NewOpaqueTypes], NewAll)
+ end;
+decoration([], _Type, _Opaques, NewOpaqueTypes, All) ->
+ {NewOpaqueTypes, All}.
+
+-spec list_decorate([erl_type()], [erl_type()], opaques()) -> [erl_type()].
+
+list_decorate(List, L, Opaques) ->
+ [decorate(Elem, E, Opaques) || {Elem, E} <- lists:zip(List, L)].
+
+union_decorate(U1, U2, Opaques) ->
+ Union = union_decorate(U1, U2, Opaques, 0, []),
+ [A,B,F,I,L,N,T,M,_,_R] = U1,
+ [_,_,_,_,_,_,_,_,Opaque,_] = U2,
+ List = [A,B,F,I,L,N,T,M],
+ DecList = [Dec ||
+ E <- List,
+ not t_is_none(Dec = decorate(E, Opaque, Opaques))],
+ t_sup([Union|DecList]).
+
+union_decorate([?none|Left1], [_|Left2], Opaques, N, Acc) ->
+ union_decorate(Left1, Left2, Opaques, N, [?none|Acc]);
+union_decorate([T1|Left1], [?none|Left2], Opaques, N, Acc) ->
+ union_decorate(Left1, Left2, Opaques, N+1, [T1|Acc]);
+union_decorate([T1|Left1], [T2|Left2], Opaques, N, Acc) ->
+ union_decorate(Left1, Left2, Opaques, N+1, [decorate(T1, T2, Opaques)|Acc]);
+union_decorate([], [], _Opaques, N, Acc) ->
+ if N =:= 0 -> ?none;
+ N =:= 1 ->
+ [Type] = [T || T <- Acc, T =/= ?none],
+ Type;
+ N >= 2 -> ?union(lists:reverse(Acc))
+ end.
+
+decorate_tuple_sets(List, L, Opaques) ->
+ decorate_tuple_sets(List, L, Opaques, []).
+
+decorate_tuple_sets([{Arity, Tuples}|List], [{Arity, Ts}|L], Opaques, Acc) ->
+ DecTs = decorate_tuples_in_sets(Tuples, Ts, Opaques),
+ decorate_tuple_sets(List, L, Opaques, [{Arity, DecTs}|Acc]);
+decorate_tuple_sets([ArTup|List], L, Opaques, Acc) ->
+ decorate_tuple_sets(List, L, Opaques, [ArTup|Acc]);
+decorate_tuple_sets([], _L, _Opaques, Acc) ->
+ ?tuple_set(lists:reverse(Acc)).
+
+decorate_tuples_in_sets([?tuple(Elements, _, ?any)], Ts, Opaques) ->
+ NewList = [list_decorate(Elements, Es, Opaques) || ?tuple(Es, _, _) <- Ts],
+ case t_sup([t_tuple(Es) || Es <- NewList]) of
+ ?tuple_set([{_Arity, Tuples}]) -> Tuples;
+ ?tuple(_, _, _)=Tuple -> [Tuple]
+ end;
+decorate_tuples_in_sets(Tuples, Ts, Opaques) ->
+ decorate_tuples_in_sets(Tuples, Ts, Opaques, []).
+
+decorate_tuples_in_sets([?tuple(Elements, Arity, Tag1) = T1|Tuples] = L1,
+ [?tuple(Es, Arity, Tag2)|Ts] = L2, Opaques, Acc) ->
+ if
+ Tag1 < Tag2 -> decorate_tuples_in_sets(Tuples, L2, Opaques, [T1|Acc]);
+ Tag1 > Tag2 -> decorate_tuples_in_sets(L1, Ts, Opaques, Acc);
+ Tag1 =:= Tag2 ->
+ NewElements = list_decorate(Elements, Es, Opaques),
+ NewAcc = [?tuple(NewElements, Arity, Tag1)|Acc],
+ decorate_tuples_in_sets(Tuples, Ts, Opaques, NewAcc)
+ end;
+decorate_tuples_in_sets([T1|Tuples], L2, Opaques, Acc) ->
+ decorate_tuples_in_sets(Tuples, L2, Opaques, [T1|Acc]);
+decorate_tuples_in_sets([], _L, _Opaques, Acc) ->
+ lists:reverse(Acc).
+
-spec t_opaque_from_records(dict()) -> [erl_type()].
t_opaque_from_records(RecDict) ->
@@ -559,44 +733,6 @@ t_opaque_from_records(RecDict) ->
end, OpaqueRecDict),
[OpaqueType || {_Key, OpaqueType} <- dict:to_list(OpaqueTypeDict)].
--spec t_opaque_match_atom(erl_type(), [erl_type()]) -> [erl_type()].
-
-t_opaque_match_atom(?atom(_) = Atom, Opaques) ->
- case t_atom_vals(Atom) of
- unknown -> [];
- _ -> [O || O <- Opaques, t_inf(Atom, O, opaque) =/= ?none,
- t_opaque_atom_vals(t_opaque_structure(O)) =/= unknown]
- end;
-t_opaque_match_atom(_, _) -> [].
-
--spec t_opaque_atom_vals(erl_type()) -> 'unknown' | [atom(),...].
-
-t_opaque_atom_vals(OpaqueStruct) ->
- case OpaqueStruct of
- ?atom(_) -> t_atom_vals(OpaqueStruct);
- ?union([Atom,_,_,_,_,_,_,_,_,_]) -> t_atom_vals(Atom);
- _ -> unknown
- end.
-
--spec t_opaque_match_record(erl_type(), [erl_type()]) -> [erl_type()].
-
-t_opaque_match_record(?tuple([?atom(_) = Tag|_Fields], _, _) = Rec, Opaques) ->
- [O || O <- Opaques, t_inf(Rec, O, opaque) =/= ?none,
- lists:member(Tag, t_opaque_tuple_tags(t_opaque_structure(O)))];
-t_opaque_match_record(_, _) -> [].
-
--spec t_opaque_tuple_tags(erl_type()) -> [erl_type()].
-
-t_opaque_tuple_tags(OpaqueStruct) ->
- case OpaqueStruct of
- ?tuple([?atom(_) = Tag|_Fields], _, _) -> [Tag];
- ?tuple_set(_) = TupleSet ->
- Tuples = t_tuple_subtypes(TupleSet),
- lists:flatten([t_opaque_tuple_tags(T) || T <- Tuples]);
- ?union([_,_,_,_,_,_,Tuples,_,_,_]) -> t_opaque_tuple_tags(Tuples);
- _ -> []
- end.
-
%% Decompose opaque instances of type arg2 to structured types, in arg1
%% XXX: Same as t_unopaque
-spec t_struct_from_opaque(erl_type(), [erl_type()]) -> erl_type().
@@ -605,9 +741,10 @@ t_struct_from_opaque(?function(Domain, Range), Opaques) ->
?function(t_struct_from_opaque(Domain, Opaques),
t_struct_from_opaque(Range, Opaques));
t_struct_from_opaque(?list(Types, Term, Size), Opaques) ->
- ?list(t_struct_from_opaque(Types, Opaques), Term, Size);
+ ?list(t_struct_from_opaque(Types, Opaques),
+ t_struct_from_opaque(Term, Opaques), Size);
t_struct_from_opaque(?opaque(_) = T, Opaques) ->
- case lists:member(T, Opaques) of
+ case is_opaque_type(T, Opaques) of
true -> t_opaque_structure(T);
false -> T
end;
@@ -627,24 +764,10 @@ t_struct_from_opaque(Type, _Opaques) -> Type.
list_struct_from_opaque(Types, Opaques) ->
[t_struct_from_opaque(Type, Opaques) || Type <- Types].
--spec t_unopaque_on_mismatch(erl_type(), erl_type(), [erl_type()]) -> erl_type().
-
-t_unopaque_on_mismatch(GenType, Type, Opaques) ->
- case t_inf(GenType, Type) of
- ?none ->
- Unopaqued = t_unopaque(Type, Opaques),
- %% XXX: Unions might be a problem, must investigate.
- case t_inf(GenType, Unopaqued) of
- ?none -> Type;
- _ -> Unopaqued
- end;
- _ -> Type
- end.
-
-spec module_builtin_opaques(module()) -> [erl_type()].
module_builtin_opaques(Module) ->
- [O || O <- all_opaque_builtins(), t_opaque_module(O) =:= Module].
+ [O || O <- all_opaque_builtins(), lists:member(Module, t_opaque_modules(O))].
%%-----------------------------------------------------------------------------
%% Remote types: these types are used for preprocessing;
@@ -657,8 +780,11 @@ t_remote(Mod, Name, Args) ->
-spec t_is_remote(erl_type()) -> boolean().
-t_is_remote(?remote(_)) -> true;
-t_is_remote(_) -> false.
+t_is_remote(Type) ->
+ do_opaque(Type, 'universe', fun is_remote/1).
+
+is_remote(?remote(_)) -> true;
+is_remote(_) -> false.
-spec t_solve_remote(erl_type(), set(), dict()) -> erl_type().
@@ -827,40 +953,75 @@ t_atoms(List) when is_list(List) ->
-spec t_atom_vals(erl_type()) -> 'unknown' | [atom(),...].
-t_atom_vals(?atom(?any)) -> unknown;
-t_atom_vals(?atom(Set)) -> set_to_list(Set);
-t_atom_vals(Other) ->
+t_atom_vals(Type) ->
+ t_atom_vals(Type, 'universe').
+
+-spec t_atom_vals(erl_type(), opaques()) -> 'unknown' | [atom(),...].
+
+t_atom_vals(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun atom_vals/1).
+
+atom_vals(?atom(?any)) -> unknown;
+atom_vals(?atom(Set)) -> set_to_list(Set);
+atom_vals(?opaque(_)) -> unknown;
+atom_vals(Other) ->
?atom(_) = Atm = t_inf(t_atom(), Other),
- t_atom_vals(Atm).
+ atom_vals(Atm).
-spec t_is_atom(erl_type()) -> boolean().
-t_is_atom(?atom(_)) -> true;
-t_is_atom(_) -> false.
+t_is_atom(Type) ->
+ t_is_atom(Type, 'universe').
+
+-spec t_is_atom(erl_type(), opaques()) -> boolean().
+
+t_is_atom(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_atom1/1).
+
+is_atom1(?atom(_)) -> true;
+is_atom1(_) -> false.
--spec t_is_atom(atom(), erl_type()) -> boolean().
+-spec t_is_any_atom(atom(), erl_type()) -> boolean().
-t_is_atom(Atom, ?atom(?any)) when is_atom(Atom) -> false;
-t_is_atom(Atom, ?atom(Set)) when is_atom(Atom) -> set_is_singleton(Atom, Set);
-t_is_atom(Atom, _) when is_atom(Atom) -> false.
+t_is_any_atom(Atom, SomeAtomsType) ->
+ t_is_any_atom(Atom, SomeAtomsType, 'universe').
+
+-spec t_is_any_atom(atom(), erl_type(), opaques()) -> boolean().
+
+t_is_any_atom(Atom, SomeAtomsType, Opaques) ->
+ do_opaque(SomeAtomsType, Opaques,
+ fun(AtomsType) -> is_any_atom(Atom, AtomsType) end).
+
+is_any_atom(Atom, ?atom(?any)) when is_atom(Atom) -> false;
+is_any_atom(Atom, ?atom(Set)) when is_atom(Atom) ->
+ set_is_singleton(Atom, Set);
+is_any_atom(Atom, _) when is_atom(Atom) -> false.
%%------------------------------------
+-spec t_is_boolean(erl_type()) -> boolean().
+
+t_is_boolean(Type) ->
+ t_is_boolean(Type, 'universe').
+
+-spec t_is_boolean(erl_type(), opaques()) -> boolean().
+
+t_is_boolean(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_boolean/1).
+
-spec t_boolean() -> erl_type().
t_boolean() ->
?atom(set_from_list([false, true])).
--spec t_is_boolean(erl_type()) -> boolean().
-
-t_is_boolean(?atom(?any)) -> false;
-t_is_boolean(?atom(Set)) ->
+is_boolean(?atom(?any)) -> false;
+is_boolean(?atom(Set)) ->
case set_size(Set) of
1 -> set_is_element(true, Set) orelse set_is_element(false, Set);
2 -> set_is_element(true, Set) andalso set_is_element(false, Set);
N when is_integer(N), N > 2 -> false
end;
-t_is_boolean(_) -> false.
+is_boolean(_) -> false.
%%-----------------------------------------------------------------------------
%% Binaries
@@ -873,9 +1034,17 @@ t_binary() ->
-spec t_is_binary(erl_type()) -> boolean().
-t_is_binary(?bitstr(U, B)) ->
+t_is_binary(Type) ->
+ t_is_binary(Type, 'universe').
+
+-spec t_is_binary(erl_type(), opaques()) -> boolean().
+
+t_is_binary(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_binary/1).
+
+is_binary(?bitstr(U, B)) ->
((U rem 8) =:= 0) andalso ((B rem 8) =:= 0);
-t_is_binary(_) -> false.
+is_binary(_) -> false.
%%-----------------------------------------------------------------------------
%% Bitstrings
@@ -922,19 +1091,27 @@ t_bitstr_concat_1([], Acc) ->
t_bitstr_concat(T1, T2) ->
T1p = t_inf(t_bitstr(), T1),
T2p = t_inf(t_bitstr(), T2),
- bitstr_concat(T1p, T2p).
+ bitstr_concat(t_unopaque(T1p), t_unopaque(T2p)).
-spec t_bitstr_match(erl_type(), erl_type()) -> erl_type().
t_bitstr_match(T1, T2) ->
T1p = t_inf(t_bitstr(), T1),
T2p = t_inf(t_bitstr(), T2),
- bitstr_match(T1p, T2p).
+ bitstr_match(t_unopaque(T1p), t_unopaque(T2p)).
-spec t_is_bitstr(erl_type()) -> boolean().
-t_is_bitstr(?bitstr(_, _)) -> true;
-t_is_bitstr(_) -> false.
+t_is_bitstr(Type) ->
+ t_is_bitstr(Type, 'universe').
+
+-spec t_is_bitstr(erl_type(), opaques()) -> boolean().
+
+t_is_bitstr(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_bitstr/1).
+
+is_bitstr(?bitstr(_, _)) -> true;
+is_bitstr(_) -> false.
%%-----------------------------------------------------------------------------
%% Matchstates
@@ -1045,27 +1222,59 @@ t_fun(Arity, Range) when is_integer(Arity), 0 =< Arity, Arity =< 255 ->
-spec t_fun_args(erl_type()) -> 'unknown' | [erl_type()].
-t_fun_args(?function(?any, _)) ->
+t_fun_args(Type) ->
+ t_fun_args(Type, 'universe').
+
+-spec t_fun_args(erl_type(), opaques()) -> 'unknown' | [erl_type()].
+
+t_fun_args(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun fun_args/1).
+
+fun_args(?function(?any, _)) ->
unknown;
-t_fun_args(?function(?product(Domain), _)) when is_list(Domain) ->
+fun_args(?function(?product(Domain), _)) when is_list(Domain) ->
Domain.
-spec t_fun_arity(erl_type()) -> 'unknown' | non_neg_integer().
-t_fun_arity(?function(?any, _)) ->
+t_fun_arity(Type) ->
+ t_fun_arity(Type, 'universe').
+
+-spec t_fun_arity(erl_type(), opaques()) -> 'unknown' | non_neg_integer().
+
+t_fun_arity(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun fun_arity/1).
+
+fun_arity(?function(?any, _)) ->
unknown;
-t_fun_arity(?function(?product(Domain), _)) ->
+fun_arity(?function(?product(Domain), _)) ->
length(Domain).
-spec t_fun_range(erl_type()) -> erl_type().
-t_fun_range(?function(_, Range)) ->
+t_fun_range(Type) ->
+ t_fun_range(Type, 'universe').
+
+-spec t_fun_range(erl_type(), opaques()) -> erl_type().
+
+t_fun_range(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun fun_range/1).
+
+fun_range(?function(_, Range)) ->
Range.
-spec t_is_fun(erl_type()) -> boolean().
-t_is_fun(?function(_, _)) -> true;
-t_is_fun(_) -> false.
+t_is_fun(Type) ->
+ t_is_fun(Type, 'universe').
+
+-spec t_is_fun(erl_type(), opaques()) -> boolean().
+
+t_is_fun(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_fun/1).
+
+is_fun(?function(_, _)) -> true;
+is_fun(_) -> false.
%%-----------------------------------------------------------------------------
%% Identifiers. Includes ports, pids and refs.
@@ -1092,9 +1301,17 @@ t_port() ->
-spec t_is_port(erl_type()) -> boolean().
-t_is_port(?identifier(?any)) -> false;
-t_is_port(?identifier(Set)) -> set_is_singleton(?port_qual, Set);
-t_is_port(_) -> false.
+t_is_port(Type) ->
+ t_is_port(Type, 'universe').
+
+-spec t_is_port(erl_type(), opaques()) -> boolean().
+
+t_is_port(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_port1/1).
+
+is_port1(?identifier(?any)) -> false;
+is_port1(?identifier(Set)) -> set_is_singleton(?port_qual, Set);
+is_port1(_) -> false.
%%------------------------------------
@@ -1105,9 +1322,17 @@ t_pid() ->
-spec t_is_pid(erl_type()) -> boolean().
-t_is_pid(?identifier(?any)) -> false;
-t_is_pid(?identifier(Set)) -> set_is_singleton(?pid_qual, Set);
-t_is_pid(_) -> false.
+t_is_pid(Type) ->
+ t_is_pid(Type, 'universe').
+
+-spec t_is_pid(erl_type(), opaques()) -> boolean().
+
+t_is_pid(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_pid1/1).
+
+is_pid1(?identifier(?any)) -> false;
+is_pid1(?identifier(Set)) -> set_is_singleton(?pid_qual, Set);
+is_pid1(_) -> false.
%%------------------------------------
@@ -1118,9 +1343,17 @@ t_reference() ->
-spec t_is_reference(erl_type()) -> boolean().
-t_is_reference(?identifier(?any)) -> false;
-t_is_reference(?identifier(Set)) -> set_is_singleton(?reference_qual, Set);
-t_is_reference(_) -> false.
+t_is_reference(Type) ->
+ t_is_reference(Type, 'universe').
+
+-spec t_is_reference(erl_type(), opaques()) -> boolean().
+
+t_is_reference(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_reference1/1).
+
+is_reference1(?identifier(?any)) -> false;
+is_reference1(?identifier(Set)) -> set_is_singleton(?reference_qual, Set);
+is_reference1(_) -> false.
%%-----------------------------------------------------------------------------
%% Numbers are divided into floats, integers, chars and bytes.
@@ -1138,21 +1371,39 @@ t_number(X) when is_integer(X) ->
-spec t_is_number(erl_type()) -> boolean().
-t_is_number(?number(_, _)) -> true;
-t_is_number(_) -> false.
+t_is_number(Type) ->
+ t_is_number(Type, 'universe').
+
+-spec t_is_number(erl_type(), opaques()) -> boolean().
+
+t_is_number(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_number/1).
+
+is_number(?number(_, _)) -> true;
+is_number(_) -> false.
%% Currently, the type system collapses all floats to ?float and does
%% not keep any information about their values. As a result, the list
%% that this function returns contains only integers.
+
-spec t_number_vals(erl_type()) -> 'unknown' | [integer(),...].
-t_number_vals(?int_set(?any)) -> unknown;
-t_number_vals(?int_set(Set)) -> set_to_list(Set);
-t_number_vals(?number(_, _)) -> unknown;
-t_number_vals(Other) ->
+t_number_vals(Type) ->
+ t_number_vals(Type, 'universe').
+
+-spec t_number_vals(erl_type(), opaques()) -> 'unknown' | [integer(),...].
+
+t_number_vals(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun number_vals/1).
+
+number_vals(?int_set(?any)) -> unknown;
+number_vals(?int_set(Set)) -> set_to_list(Set);
+number_vals(?number(_, _)) -> unknown;
+number_vals(?opaque(_)) -> unknown;
+number_vals(Other) ->
Inf = t_inf(Other, t_number()),
false = t_is_none(Inf), % sanity check
- t_number_vals(Inf).
+ number_vals(Inf).
%%------------------------------------
@@ -1163,8 +1414,16 @@ t_float() ->
-spec t_is_float(erl_type()) -> boolean().
-t_is_float(?float) -> true;
-t_is_float(_) -> false.
+t_is_float(Type) ->
+ t_is_float(Type, 'universe').
+
+-spec t_is_float(erl_type(), opaques()) -> boolean().
+
+t_is_float(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_float1/1).
+
+is_float1(?float) -> true;
+is_float1(_) -> false.
%%------------------------------------
@@ -1185,8 +1444,16 @@ t_integers(List) when is_list(List) ->
-spec t_is_integer(erl_type()) -> boolean().
-t_is_integer(?integer(_)) -> true;
-t_is_integer(_) -> false.
+t_is_integer(Type) ->
+ t_is_integer(Type, 'universe').
+
+-spec t_is_integer(erl_type(), opaques()) -> boolean().
+
+t_is_integer(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_integer1/1).
+
+is_integer1(?integer(_)) -> true;
+is_integer1(_) -> false.
%%------------------------------------
@@ -1250,7 +1517,7 @@ t_cons(Hd, ?nil) ->
t_cons(Hd, ?list(Contents, Termination, _)) ->
?nonempty_list(t_sup(Contents, Hd), Termination);
t_cons(Hd, Tail) ->
- case t_inf(Tail, t_maybe_improper_list()) of
+ case cons_tail(t_inf(Tail, t_maybe_improper_list())) of
?list(Contents, Termination, _Size) ->
%% Collapse the list part of the termination but keep the
%% non-list part intact.
@@ -1262,18 +1529,45 @@ t_cons(Hd, Tail) ->
?unit -> ?none
end.
+cons_tail(Type) ->
+ do_opaque(Type, 'universe', fun(T) -> T end).
+
-spec t_is_cons(erl_type()) -> boolean().
-t_is_cons(?nonempty_list(_, _)) -> true;
-t_is_cons(_) -> false.
+t_is_cons(Type) ->
+ t_is_cons(Type, 'universe').
+
+-spec t_is_cons(erl_type(), opaques()) -> boolean().
+
+t_is_cons(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_cons/1).
+
+is_cons(?nonempty_list(_, _)) -> true;
+is_cons(_) -> false.
-spec t_cons_hd(erl_type()) -> erl_type().
-t_cons_hd(?nonempty_list(Contents, _Termination)) -> Contents.
+t_cons_hd(Type) ->
+ t_cons_hd(Type, 'universe').
+
+-spec t_cons_hd(erl_type(), opaques()) -> erl_type().
+
+t_cons_hd(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun cons_hd/1).
+
+cons_hd(?nonempty_list(Contents, _Termination)) -> Contents.
-spec t_cons_tl(erl_type()) -> erl_type().
-t_cons_tl(?nonempty_list(_Contents, Termination) = T) ->
+t_cons_tl(Type) ->
+ t_cons_tl(Type, 'universe').
+
+-spec t_cons_tl(erl_type(), opaques()) -> erl_type().
+
+t_cons_tl(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun cons_tl/1).
+
+cons_tl(?nonempty_list(_Contents, Termination) = T) ->
t_sup(Termination, T).
-spec t_nil() -> erl_type().
@@ -1283,8 +1577,16 @@ t_nil() ->
-spec t_is_nil(erl_type()) -> boolean().
-t_is_nil(?nil) -> true;
-t_is_nil(_) -> false.
+t_is_nil(Type) ->
+ t_is_nil(Type, 'universe').
+
+-spec t_is_nil(erl_type(), opaques()) -> boolean().
+
+t_is_nil(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_nil/1).
+
+is_nil(?nil) -> true;
+is_nil(_) -> false.
-spec t_list() -> erl_type().
@@ -1300,8 +1602,16 @@ t_list(Contents) ->
-spec t_list_elements(erl_type()) -> erl_type().
-t_list_elements(?list(Contents, _, _)) -> Contents;
-t_list_elements(?nil) -> ?none.
+t_list_elements(Type) ->
+ t_list_elements(Type, 'universe').
+
+-spec t_list_elements(erl_type(), opaques()) -> erl_type().
+
+t_list_elements(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun list_elements/1).
+
+list_elements(?list(Contents, _, _)) -> Contents;
+list_elements(?nil) -> ?none.
-spec t_list_termination(erl_type()) -> erl_type().
@@ -1356,9 +1666,17 @@ t_maybe_improper_list(Content, Termination) ->
-spec t_is_maybe_improper_list(erl_type()) -> boolean().
-t_is_maybe_improper_list(?list(_, _, _)) -> true;
-t_is_maybe_improper_list(?nil) -> true;
-t_is_maybe_improper_list(_) -> false.
+t_is_maybe_improper_list(Type) ->
+ t_is_maybe_improper_list(Type, 'universe').
+
+-spec t_is_maybe_improper_list(erl_type(), opaques()) -> boolean().
+
+t_is_maybe_improper_list(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_maybe_improper_list/1).
+
+is_maybe_improper_list(?list(_, _, _)) -> true;
+is_maybe_improper_list(?nil) -> true;
+is_maybe_improper_list(_) -> false.
%% %% Should only be used if you know what you are doing. See t_cons/2
%% -spec t_improper_list(erl_type(), erl_type()) -> erl_type().
@@ -1405,32 +1723,77 @@ t_tuple(List) ->
-spec get_tuple_tags([erl_type()]) -> [erl_type(),...].
-get_tuple_tags([?atom(?any)|_]) -> [?any];
-get_tuple_tags([?atom(Set)|_]) ->
+get_tuple_tags([Tag|_]) ->
+ do_opaque(Tag, 'universe', fun tuple_tags/1);
+get_tuple_tags(_) -> [?any].
+
+tuple_tags(?atom(?any)) -> [?any];
+tuple_tags(?atom(Set)) ->
case set_size(Set) > ?TUPLE_TAG_LIMIT of
true -> [?any];
false -> [t_atom(A) || A <- set_to_list(Set)]
end;
-get_tuple_tags(_) -> [?any].
+tuple_tags(_) -> [?any].
%% to be used for a tuple with known types for its arguments (not ?any)
-spec t_tuple_args(erl_type()) -> [erl_type()].
-t_tuple_args(?tuple(Args, _, _)) when is_list(Args) -> Args.
+t_tuple_args(Type) ->
+ t_tuple_args(Type, 'universe').
+
+%% to be used for a tuple with known types for its arguments (not ?any)
+-spec t_tuple_args(erl_type(), opaques()) -> [erl_type()].
+
+t_tuple_args(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun tuple_args/1).
+
+tuple_args(?tuple(Args, _, _)) when is_list(Args) -> Args.
%% to be used for a tuple with a known size (not ?any)
-spec t_tuple_size(erl_type()) -> non_neg_integer().
-t_tuple_size(?tuple(_, Size, _)) when is_integer(Size) -> Size.
+t_tuple_size(Type) ->
+ t_tuple_size(Type, 'universe').
+
+%% to be used for a tuple with a known size (not ?any)
+-spec t_tuple_size(erl_type(), opaques()) -> non_neg_integer().
+
+t_tuple_size(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun tuple_size1/1).
+
+tuple_size1(?tuple(_, Size, _)) when is_integer(Size) -> Size.
-spec t_tuple_sizes(erl_type()) -> 'unknown' | [non_neg_integer(),...].
-t_tuple_sizes(?tuple(?any, ?any, ?any)) -> unknown;
-t_tuple_sizes(?tuple(_, Size, _)) when is_integer(Size) -> [Size];
-t_tuple_sizes(?tuple_set(List)) -> [Size || {Size, _} <- List].
+t_tuple_sizes(Type) ->
+ do_opaque(Type, 'universe', fun tuple_sizes/1).
+
+tuple_sizes(?tuple(?any, ?any, ?any)) -> unknown;
+tuple_sizes(?tuple(_, Size, _)) when is_integer(Size) -> [Size];
+tuple_sizes(?tuple_set(List)) -> [Size || {Size, _} <- List].
+
+-spec t_tuple_subtypes(erl_type(), opaques()) ->
+ 'unknown' | [erl_type(),...].
+
+t_tuple_subtypes(Type, Opaques) ->
+ Fun = fun(?tuple_set(List)) ->
+ t_tuple_subtypes_tuple_list(List, Opaques);
+ (?opaque(_)) -> unknown;
+ (T) -> t_tuple_subtypes(T)
+ end,
+ do_opaque(Type, Opaques, Fun).
+
+t_tuple_subtypes_tuple_list(List, Opaques) ->
+ lists:append([t_tuple_subtypes_list(Tuples, Opaques) ||
+ {_Size, Tuples} <- List]).
+
+t_tuple_subtypes_list(List, Opaques) ->
+ ListOfLists = [t_tuple_subtypes(E, Opaques) || E <- List, E =/= ?none],
+ lists:append([L || L <- ListOfLists, L =/= 'unknown']).
-spec t_tuple_subtypes(erl_type()) -> 'unknown' | [erl_type(),...].
+%% XXX. Not the same as t_tuple_subtypes(T, 'universe')...
t_tuple_subtypes(?tuple(?any, ?any, ?any)) -> unknown;
t_tuple_subtypes(?tuple(_, _, _) = T) -> [T];
t_tuple_subtypes(?tuple_set(List)) ->
@@ -1438,9 +1801,17 @@ t_tuple_subtypes(?tuple_set(List)) ->
-spec t_is_tuple(erl_type()) -> boolean().
-t_is_tuple(?tuple(_, _, _)) -> true;
-t_is_tuple(?tuple_set(_)) -> true;
-t_is_tuple(_) -> false.
+t_is_tuple(Type) ->
+ t_is_tuple(Type, 'universe').
+
+-spec t_is_tuple(erl_type(), opaques()) -> boolean().
+
+t_is_tuple(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_tuple1/1).
+
+is_tuple1(?tuple(_, _, _)) -> true;
+is_tuple1(?tuple_set(_)) -> true;
+is_tuple1(_) -> false.
%%-----------------------------------------------------------------------------
%% Non-primitive types, including some handy syntactic sugar types
@@ -1451,6 +1822,7 @@ t_is_tuple(_) -> false.
t_bitstrlist() ->
t_iolist(1, t_bitstr()).
+%% XXX. To be removed.
-spec t_constant() -> erl_type().
t_constant() ->
@@ -1555,7 +1927,8 @@ t_timeout() ->
t_array() ->
t_opaque(array, array, [],
t_tuple([t_atom('array'),
- t_non_neg_integer(), t_non_neg_integer(),
+ t_sup([t_atom('undefined'), t_non_neg_integer()]),
+ t_sup([t_atom('undefined'), t_non_neg_integer()]),
t_any(), t_any()])).
-spec t_dict() -> erl_type().
@@ -1566,7 +1939,8 @@ t_dict() ->
t_non_neg_integer(), t_non_neg_integer(),
t_non_neg_integer(), t_non_neg_integer(),
t_non_neg_integer(), t_non_neg_integer(),
- t_tuple(), t_tuple()])).
+ t_sup([t_atom('undefined'), t_tuple()]),
+ t_sup([t_atom('undefined'), t_tuple()])])).
-spec t_digraph() -> erl_type().
@@ -1601,7 +1975,9 @@ t_set() ->
t_opaque(sets, set, [],
t_tuple([t_atom('set'), t_non_neg_integer(), t_non_neg_integer(),
t_pos_integer(), t_non_neg_integer(), t_non_neg_integer(),
- t_non_neg_integer(), t_tuple(), t_tuple()])).
+ t_non_neg_integer(),
+ t_sup([t_atom('undefined'), t_tuple()]),
+ t_sup([t_atom('undefined'), t_tuple()])])).
-spec t_tid() -> erl_type().
@@ -1673,8 +2049,11 @@ t_has_var(?tuple(Elements, _, _)) ->
t_has_var_list(Elements);
t_has_var(?tuple_set(_) = T) ->
t_has_var_list(t_tuple_subtypes(T));
+%% t_has_var(?opaque(_)=T) ->
+%% %% "Polymorphic opaque types not supported yet"
+%% t_has_var(t_opaque_structure(T));
%% t_has_var(?union(_) = U) ->
-%% exit(lists:flatten(io_lib:format("Union happens in t_has_var/1 ~p\n",[U])));
+%% exit(flat_format("Union happens in t_has_var/1 ~p\n",[U]));
t_has_var(_) -> false.
-spec t_has_var_list([erl_type()]) -> boolean().
@@ -1705,6 +2084,9 @@ t_collect_vars(?tuple(Types, _, _), Acc) ->
t_collect_vars(?tuple_set(_) = TS, Acc) ->
lists:foldl(fun(T, TmpAcc) -> t_collect_vars(T, TmpAcc) end, Acc,
t_tuple_subtypes(TS));
+%% t_collect_vars(?opaque(_)=T, Acc) ->
+%% %% "Polymorphic opaque types not supported yet"
+%% t_collect_vars(t_opaque_structure(T), Acc);
t_collect_vars(_, Acc) ->
Acc.
@@ -1827,15 +2209,31 @@ t_is_bitwidth(_) -> false.
-spec number_min(erl_type()) -> rng_elem().
-number_min(?int_range(From, _)) -> From;
-number_min(?int_set(Set)) -> set_min(Set);
-number_min(?number(?any, _Tag)) -> neg_inf.
+number_min(Type) ->
+ number_min(Type, 'universe').
+
+-spec number_min(erl_type(), opaques()) -> rng_elem().
+
+number_min(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun number_min2/1).
+
+number_min2(?int_range(From, _)) -> From;
+number_min2(?int_set(Set)) -> set_min(Set);
+number_min2(?number(?any, _Tag)) -> neg_inf.
-spec number_max(erl_type()) -> rng_elem().
-number_max(?int_range(_, To)) -> To;
-number_max(?int_set(Set)) -> set_max(Set);
-number_max(?number(?any, _Tag)) -> pos_inf.
+number_max(Type) ->
+ number_max(Type, 'universe').
+
+-spec number_max(erl_type(), opaques()) -> rng_elem().
+
+number_max(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun number_max2/1).
+
+number_max2(?int_range(_, To)) -> To;
+number_max2(?int_set(Set)) -> set_max(Set);
+number_max2(?number(?any, _Tag)) -> pos_inf.
%% -spec int_range(rgn_elem(), rng_elem()) -> erl_type().
%%
@@ -1917,7 +2315,7 @@ t_sup(?function(Domain1, Range1), ?function(Domain2, Range2)) ->
t_sup(?identifier(Set1), ?identifier(Set2)) ->
?identifier(set_union(Set1, Set2));
t_sup(?opaque(Set1), ?opaque(Set2)) ->
- ?opaque(set_union_no_limit(Set1, Set2));
+ sup_opaque(set_to_list(ordsets:union(Set1, Set2)));
%%Disallow unions with opaque types
%%t_sup(T1=?opaque(_,_,_), T2) ->
%% io:format("Debug: t_sup executed with args ~w and ~w~n",[T1, T2]), ?none;
@@ -2005,6 +2403,27 @@ t_sup(T1, T2) ->
?union(U2) = force_union(T2),
sup_union(U1, U2).
+sup_opaque([]) -> ?none;
+sup_opaque(List) ->
+ L = sup_opaq(List),
+ ?opaque(ordsets:from_list(L)).
+
+sup_opaq(L0) ->
+ L1 = [{{Mod,Name}, T} ||
+ #opaque{mod = Mod, name = Name}=T <- L0],
+ F = family(L1),
+ [supl(Ts) || {_, Ts} <- F].
+
+supl([O]) -> O;
+supl(Ts) -> supl(Ts, t_none()).
+
+supl([#opaque{struct = S}=O|L], S0) ->
+ S1 = t_sup(S, S0),
+ case L =:= [] of
+ true -> O#opaque{struct = S1};
+ false -> supl(L, S1)
+ end.
+
-spec t_sup_lists([erl_type()], [erl_type()]) -> [erl_type()].
t_sup_lists([T1|Left1], [T2|Left2]) ->
@@ -2132,19 +2551,26 @@ t_elements(?number(_, _) = T) ->
?int_set(Set) ->
[t_integer(I) || I <- Set]
end;
-t_elements(?opaque(_) = T) -> [T];
+t_elements(?opaque(_) = T) ->
+ do_elements(T);
t_elements(?tuple(_, _, _) = T) -> [T];
t_elements(?tuple_set(_) = TS) ->
case t_tuple_subtypes(TS) of
unknown -> [];
Elems -> Elems
end;
-t_elements(?union(List)) ->
- lists:append([t_elements(T) || T <- List]);
+t_elements(?union(_) = T) ->
+ do_elements(T);
t_elements(?var(_)) -> [?any]. %% yes, vars exist -- what else to do here?
%% t_elements(T) ->
%% io:format("T_ELEMENTS => ~p\n", [T]).
+do_elements(Type0) ->
+ case do_opaque(Type0, 'universe', fun(T) -> T end) of
+ ?union(List) -> lists:append([t_elements(T) || T <- List]);
+ Type -> t_elements(Type)
+ end.
+
%%-----------------------------------------------------------------------------
%% Infimum
%%
@@ -2162,74 +2588,77 @@ t_inf([]) -> ?none.
-spec t_inf(erl_type(), erl_type()) -> erl_type().
t_inf(T1, T2) ->
- t_inf(T1, T2, structured).
-
--type t_inf_mode() :: 'opaque' | 'structured'.
--spec t_inf(erl_type(), erl_type(), t_inf_mode()) -> erl_type().
-
-t_inf(?var(_), ?var(_), _Mode) -> ?any;
-t_inf(?var(_), T, _Mode) -> subst_all_vars_to_any(T);
-t_inf(T, ?var(_), _Mode) -> subst_all_vars_to_any(T);
-t_inf(?any, T, _Mode) -> subst_all_vars_to_any(T);
-t_inf(T, ?any, _Mode) -> subst_all_vars_to_any(T);
-t_inf(?none, _, _Mode) -> ?none;
-t_inf(_, ?none, _Mode) -> ?none;
-t_inf(?unit, _, _Mode) -> ?unit; % ?unit cases should appear below ?none
-t_inf(_, ?unit, _Mode) -> ?unit;
-t_inf(T, T, _Mode) -> subst_all_vars_to_any(T);
+ t_inf(T1, T2, 'universe').
+
+%% 'match' should be used from t_find_unknown_opaque() only
+-type t_inf_opaques() :: 'universe'
+ | [erl_type()] | {'match', [erl_type() | 'universe']}.
+
+-spec t_inf(erl_type(), erl_type(), t_inf_opaques()) -> erl_type().
+
+t_inf(?var(_), ?var(_), _Opaques) -> ?any;
+t_inf(?var(_), T, _Opaques) -> subst_all_vars_to_any(T);
+t_inf(T, ?var(_), _Opaques) -> subst_all_vars_to_any(T);
+t_inf(?any, T, _Opaques) -> subst_all_vars_to_any(T);
+t_inf(T, ?any, _Opaques) -> subst_all_vars_to_any(T);
+t_inf(?none, _, _Opaques) -> ?none;
+t_inf(_, ?none, _Opaques) -> ?none;
+t_inf(?unit, _, _Opaques) -> ?unit; % ?unit cases should appear below ?none
+t_inf(_, ?unit, _Opaques) -> ?unit;
+t_inf(T, T, _Opaques) -> subst_all_vars_to_any(T);
t_inf(?atom(Set1), ?atom(Set2), _) ->
case set_intersection(Set1, Set2) of
?none -> ?none;
NewSet -> ?atom(NewSet)
end;
-t_inf(?bitstr(U1, B1), ?bitstr(0, B2), _Mode) ->
+t_inf(?bitstr(U1, B1), ?bitstr(0, B2), _Opaques) ->
if B2 >= B1 andalso (B2-B1) rem U1 =:= 0 -> t_bitstr(0, B2);
true -> ?none
end;
-t_inf(?bitstr(0, B1), ?bitstr(U2, B2), _Mode) ->
+t_inf(?bitstr(0, B1), ?bitstr(U2, B2), _Opaques) ->
if B1 >= B2 andalso (B1-B2) rem U2 =:= 0 -> t_bitstr(0, B1);
true -> ?none
end;
-t_inf(?bitstr(U1, B1), ?bitstr(U1, B1), _Mode) ->
+t_inf(?bitstr(U1, B1), ?bitstr(U1, B1), _Opaques) ->
t_bitstr(U1, B1);
-t_inf(?bitstr(U1, B1), ?bitstr(U2, B2), _Mode) when U2 > U1 ->
+t_inf(?bitstr(U1, B1), ?bitstr(U2, B2), _Opaques) when U2 > U1 ->
inf_bitstr(U2, B2, U1, B1);
-t_inf(?bitstr(U1, B1), ?bitstr(U2, B2), _Mode) ->
+t_inf(?bitstr(U1, B1), ?bitstr(U2, B2), _Opaques) ->
inf_bitstr(U1, B1, U2, B2);
-t_inf(?function(Domain1, Range1), ?function(Domain2, Range2), Mode) ->
- case t_inf(Domain1, Domain2, Mode) of
+t_inf(?function(Domain1, Range1), ?function(Domain2, Range2), Opaques) ->
+ case t_inf(Domain1, Domain2, Opaques) of
?none -> ?none;
- Domain -> ?function(Domain, t_inf(Range1, Range2, Mode))
+ Domain -> ?function(Domain, t_inf(Range1, Range2, Opaques))
end;
-t_inf(?identifier(Set1), ?identifier(Set2), _Mode) ->
+t_inf(?identifier(Set1), ?identifier(Set2), _Opaques) ->
case set_intersection(Set1, Set2) of
?none -> ?none;
Set -> ?identifier(Set)
end;
-t_inf(?matchstate(Pres1, Slots1), ?matchstate(Pres2, Slots2), _Mode) ->
+t_inf(?matchstate(Pres1, Slots1), ?matchstate(Pres2, Slots2), _Opaques) ->
?matchstate(t_inf(Pres1, Pres2), t_inf(Slots1, Slots2));
-t_inf(?nil, ?nil, _Mode) -> ?nil;
-t_inf(?nil, ?nonempty_list(_, _), _Mode) ->
+t_inf(?nil, ?nil, _Opaques) -> ?nil;
+t_inf(?nil, ?nonempty_list(_, _), _Opaques) ->
?none;
-t_inf(?nonempty_list(_, _), ?nil, _Mode) ->
+t_inf(?nonempty_list(_, _), ?nil, _Opaques) ->
?none;
-t_inf(?nil, ?list(_Contents, Termination, _), Mode) ->
- t_inf(?nil, Termination, Mode);
-t_inf(?list(_Contents, Termination, _), ?nil, Mode) ->
- t_inf(?nil, Termination, Mode);
+t_inf(?nil, ?list(_Contents, Termination, _), Opaques) ->
+ t_inf(?nil, t_unopaque(Termination), Opaques);
+t_inf(?list(_Contents, Termination, _), ?nil, Opaques) ->
+ t_inf(?nil, t_unopaque(Termination), Opaques);
t_inf(?list(Contents1, Termination1, Size1),
- ?list(Contents2, Termination2, Size2), Mode) ->
- case t_inf(Termination1, Termination2, Mode) of
+ ?list(Contents2, Termination2, Size2), Opaques) ->
+ case t_inf(Termination1, Termination2, Opaques) of
?none -> ?none;
Termination ->
- case t_inf(Contents1, Contents2, Mode) of
- ?none ->
+ case t_inf(Contents1, Contents2, Opaques) of
+ ?none ->
%% If none of the lists are nonempty, then the infimum is nil.
case (Size1 =:= ?unknown_qual) andalso (Size2 =:= ?unknown_qual) of
true -> t_nil();
false -> ?none
end;
- Contents ->
+ Contents ->
Size =
case {Size1, Size2} of
{?unknown_qual, ?unknown_qual} -> ?unknown_qual;
@@ -2240,7 +2669,7 @@ t_inf(?list(Contents1, Termination1, Size1),
?list(Contents, Termination, Size)
end
end;
-t_inf(?number(_, _) = T1, ?number(_, _) = T2, _Mode) ->
+t_inf(?number(_, _) = T1, ?number(_, _) = T2, _Opaques) ->
case {T1, T2} of
{T, T} -> T;
{_, ?number(?any, ?unknown_qual)} -> T1;
@@ -2249,16 +2678,16 @@ t_inf(?number(_, _) = T1, ?number(_, _) = T2, _Mode) ->
{?integer(_), ?float} -> ?none;
{?integer(?any), ?integer(_)} -> T2;
{?integer(_), ?integer(?any)} -> T1;
- {?int_set(Set1), ?int_set(Set2)} ->
+ {?int_set(Set1), ?int_set(Set2)} ->
case set_intersection(Set1, Set2) of
?none -> ?none;
Set -> ?int_set(Set)
end;
- {?int_range(From1, To1), ?int_range(From2, To2)} ->
+ {?int_range(From1, To1), ?int_range(From2, To2)} ->
t_from_range(max(From1, From2), min(To1, To2));
{Range = ?int_range(_, _), ?int_set(Set)} ->
%% io:format("t_inf range, set args ~p ~p ~n", [T1, T2]),
- Ans2 =
+ Ans2 =
case set_filter(fun(X) -> in_range(X, Range) end, Set) of
?none -> ?none;
NewSet -> ?int_set(NewSet)
@@ -2271,193 +2700,253 @@ t_inf(?number(_, _) = T1, ?number(_, _) = T2, _Mode) ->
NewSet -> ?int_set(NewSet)
end
end;
-t_inf(?product(Types1), ?product(Types2), Mode) ->
+t_inf(?product(Types1), ?product(Types2), Opaques) ->
L1 = length(Types1),
L2 = length(Types2),
- if L1 =:= L2 -> ?product(t_inf_lists(Types1, Types2, Mode));
+ if L1 =:= L2 -> ?product(t_inf_lists(Types1, Types2, Opaques));
true -> ?none
end;
-t_inf(?product(_), _, _Mode) ->
+t_inf(?product(_), _, _Opaques) ->
?none;
-t_inf(_, ?product(_), _Mode) ->
+t_inf(_, ?product(_), _Opaques) ->
?none;
-t_inf(?tuple(?any, ?any, ?any), ?tuple(_, _, _) = T, _Mode) ->
+t_inf(?tuple(?any, ?any, ?any), ?tuple(_, _, _) = T, _Opaques) ->
subst_all_vars_to_any(T);
-t_inf(?tuple(_, _, _) = T, ?tuple(?any, ?any, ?any), _Mode) ->
+t_inf(?tuple(_, _, _) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
subst_all_vars_to_any(T);
-t_inf(?tuple(?any, ?any, ?any), ?tuple_set(_) = T, _Mode) ->
+t_inf(?tuple(?any, ?any, ?any), ?tuple_set(_) = T, _Opaques) ->
subst_all_vars_to_any(T);
-t_inf(?tuple_set(_) = T, ?tuple(?any, ?any, ?any), _Mode) ->
+t_inf(?tuple_set(_) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
subst_all_vars_to_any(T);
-t_inf(?tuple(Elements1, Arity, _Tag1), ?tuple(Elements2, Arity, _Tag2), Mode) ->
- case t_inf_lists_strict(Elements1, Elements2, Mode) of
+t_inf(?tuple(Elements1, Arity, _Tag1), ?tuple(Elements2, Arity, _Tag2), Opaques) ->
+ case t_inf_lists_strict(Elements1, Elements2, Opaques) of
bottom -> ?none;
NewElements -> t_tuple(NewElements)
end;
-t_inf(?tuple_set(List1), ?tuple_set(List2), Mode) ->
- inf_tuple_sets(List1, List2, Mode);
-t_inf(?tuple_set(List), ?tuple(_, Arity, _) = T, Mode) ->
- inf_tuple_sets(List, [{Arity, [T]}], Mode);
-t_inf(?tuple(_, Arity, _) = T, ?tuple_set(List), Mode) ->
- inf_tuple_sets(List, [{Arity, [T]}], Mode);
+t_inf(?tuple_set(List1), ?tuple_set(List2), Opaques) ->
+ inf_tuple_sets(List1, List2, Opaques);
+t_inf(?tuple_set(List), ?tuple(_, Arity, _) = T, Opaques) ->
+ inf_tuple_sets(List, [{Arity, [T]}], Opaques);
+t_inf(?tuple(_, Arity, _) = T, ?tuple_set(List), Opaques) ->
+ inf_tuple_sets(List, [{Arity, [T]}], Opaques);
%% be careful: here and in the next clause T can be ?opaque
-t_inf(?union(U1), T, Mode) ->
+t_inf(?union(U1), T, Opaques) ->
?union(U2) = force_union(T),
- inf_union(U1, U2, Mode);
-t_inf(T, ?union(U2), Mode) ->
+ inf_union(U1, U2, Opaques);
+t_inf(T, ?union(U2), Opaques) ->
?union(U1) = force_union(T),
- inf_union(U1, U2, Mode);
+ inf_union(U1, U2, Opaques);
+t_inf(?opaque(Set1), ?opaque(Set2), Opaques) ->
+ inf_opaque(Set1, Set2, Opaques);
+t_inf(?opaque(_) = T1, T2, Opaques) ->
+ inf_opaque1(T2, T1, 1, Opaques);
+t_inf(T1, ?opaque(_) = T2, Opaques) ->
+ inf_opaque1(T1, T2, 2, Opaques);
%% and as a result, the cases for ?opaque should appear *after* ?union
-t_inf(?opaque(Set1) = T1, ?opaque(Set2) = T2, Mode) ->
- case set_intersection(Set1, Set2) of
- ?none ->
- case Mode =:= opaque of
- true ->
- Struct1 = t_opaque_structure(T1),
- case t_inf(Struct1, T2) of
- ?none ->
- Struct2 = t_opaque_structure(T2),
- case t_inf(Struct2, T1) of
- ?none -> ?none;
- _ -> T2
- end;
- _ -> T1
- end;
- false -> ?none
- end;
- NewSet -> ?opaque(NewSet)
- end;
-t_inf(?opaque(_) = T1, T2, opaque) ->
- case t_inf(t_opaque_structure(T1), T2, structured) of
- ?none -> ?none;
- _Type -> T1
- end;
-t_inf(T1, ?opaque(_) = T2, opaque) ->
- case t_inf(T1, t_opaque_structure(T2), structured) of
- ?none -> ?none;
- _Type -> T2
- end;
t_inf(#c{}, #c{}, _) ->
?none.
+inf_opaque1(T1, ?opaque(Set2)=T2, Pos, Opaques) ->
+ case Opaques =:= 'universe' orelse inf_is_opaque_type(T2, Pos, Opaques) of
+ false -> ?none;
+ true ->
+ List2 = set_to_list(Set2),
+ case inf_collect(T1, List2, Opaques, []) of
+ [] -> ?none;
+ OpL -> ?opaque(ordsets:from_list(OpL))
+ end
+ end.
+
+inf_is_opaque_type(T, Pos, {match, Opaques}) ->
+ is_opaque_type(T, Opaques) orelse throw(Pos);
+inf_is_opaque_type(T, _Pos, Opaques) ->
+ is_opaque_type(T, Opaques).
+
+inf_collect(T1, [T2|List2], Opaques, OpL) ->
+ #opaque{struct = S2} = T2,
+ case t_inf(T1, S2, Opaques) of
+ ?none -> inf_collect(T1, List2, Opaques, OpL);
+ Inf ->
+ Op = T2#opaque{struct = Inf},
+ inf_collect(T1, List2, Opaques, [Op|OpL])
+ end;
+inf_collect(_T1, [], _Opaques, OpL) ->
+ OpL.
+
+combine(S, T1, T2) ->
+ #opaque{mod = Mod1, name = Name1} = T1,
+ #opaque{mod = Mod2, name = Name2} = T2,
+ case {Mod1, Name1} =:= {Mod2, Name2} of
+ true -> [comb(Mod1, Name1, S, T1)];
+ false -> [comb(Mod1, Name1, S, T1), comb(Mod2, Name2, S, T2)]
+ end.
+
+comb(Mod, Name, S, T) ->
+ case is_same_name(Mod, Name, S) of
+ true -> S;
+ false -> T#opaque{struct = S}
+ end.
+
+is_same_name(Mod, Name, ?opaque([#opaque{mod = Mod, name = Name}])) -> true;
+is_same_name(_Mod, _Name, _Opaque) -> false.
+
+%% Combining two lists this way can be very time consuming...
+inf_opaque(Set1, Set2, Opaques) ->
+ List1 = inf_look_up(Set1, 1, Opaques),
+ List2 = inf_look_up(Set2, 2, Opaques),
+ List0 = [combine(Inf, T1, T2) ||
+ {Is1, ModName1, T1} <- List1,
+ {Is2, ModName2, T2} <- List2,
+ not t_is_none(Inf = inf_opaque_types(Is1, ModName1, T1,
+ Is2, ModName2, T2,
+ Opaques))],
+ List = lists:sort(lists:append(List0)),
+ sup_opaque(List).
+
+%% Optimization: do just one lookup.
+inf_look_up(Set, Pos, Opaques) ->
+ [{Opaques =:= 'universe' orelse inf_is_opaque_type2(T, Pos, Opaques),
+ {M, N}, T} ||
+ #opaque{mod = M, name = N} = T <- set_to_list(Set)].
+
+inf_is_opaque_type2(T, Pos, {match, Opaques}) ->
+ is_opaque_type2(T, Opaques) orelse throw(Pos);
+inf_is_opaque_type2(T, _Pos, Opaques) ->
+ is_opaque_type2(T, Opaques).
+
+inf_opaque_types(IsOpaque1, ModName1, T1, IsOpaque2, ModName2, T2, Opaques) ->
+ #opaque{struct = S1}=T1,
+ #opaque{struct = S2}=T2,
+ case Opaques =:= 'universe' orelse ModName1 =:= ModName2 of
+ true -> t_inf(S1, S2, Opaques);
+ false ->
+ case {IsOpaque1, IsOpaque2} of
+ {true, true} -> t_inf(S1, S2, Opaques);
+ {true, false} -> t_inf(S1, ?opaque(set_singleton(T2)), Opaques);
+ {false, true} -> t_inf(?opaque(set_singleton(T1)), S2, Opaques);
+ {false, false} -> t_none()
+ end
+ end.
+
-spec t_inf_lists([erl_type()], [erl_type()]) -> [erl_type()].
t_inf_lists(L1, L2) ->
- t_inf_lists(L1, L2, structured).
+ t_inf_lists(L1, L2, 'universe').
--spec t_inf_lists([erl_type()], [erl_type()], t_inf_mode()) -> [erl_type()].
+-spec t_inf_lists([erl_type()], [erl_type()], t_inf_opaques()) -> [erl_type()].
-t_inf_lists(L1, L2, Mode) ->
- t_inf_lists(L1, L2, [], Mode).
+t_inf_lists(L1, L2, Opaques) ->
+ t_inf_lists(L1, L2, [], Opaques).
--spec t_inf_lists([erl_type()], [erl_type()], [erl_type()], t_inf_mode()) -> [erl_type()].
+-spec t_inf_lists([erl_type()], [erl_type()], [erl_type()], [erl_type()]) -> [erl_type()].
-t_inf_lists([T1|Left1], [T2|Left2], Acc, Mode) ->
- t_inf_lists(Left1, Left2, [t_inf(T1, T2, Mode)|Acc], Mode);
-t_inf_lists([], [], Acc, _Mode) ->
+t_inf_lists([T1|Left1], [T2|Left2], Acc, Opaques) ->
+ t_inf_lists(Left1, Left2, [t_inf(T1, T2, Opaques)|Acc], Opaques);
+t_inf_lists([], [], Acc, _Opaques) ->
lists:reverse(Acc).
%% Infimum of lists with strictness.
%% If any element is the ?none type, the value 'bottom' is returned.
--spec t_inf_lists_strict([erl_type()], [erl_type()], t_inf_mode()) -> 'bottom' | [erl_type()].
+-spec t_inf_lists_strict([erl_type()], [erl_type()], [erl_type()]) -> 'bottom' | [erl_type()].
-t_inf_lists_strict(L1, L2, Mode) ->
- t_inf_lists_strict(L1, L2, [], Mode).
+t_inf_lists_strict(L1, L2, Opaques) ->
+ t_inf_lists_strict(L1, L2, [], Opaques).
--spec t_inf_lists_strict([erl_type()], [erl_type()], [erl_type()], t_inf_mode()) -> 'bottom' | [erl_type()].
+-spec t_inf_lists_strict([erl_type()], [erl_type()], [erl_type()], [erl_type()]) -> 'bottom' | [erl_type()].
-t_inf_lists_strict([T1|Left1], [T2|Left2], Acc, Mode) ->
- case t_inf(T1, T2, Mode) of
+t_inf_lists_strict([T1|Left1], [T2|Left2], Acc, Opaques) ->
+ case t_inf(T1, T2, Opaques) of
?none -> bottom;
- T -> t_inf_lists_strict(Left1, Left2, [T|Acc], Mode)
+ T -> t_inf_lists_strict(Left1, Left2, [T|Acc], Opaques)
end;
-t_inf_lists_strict([], [], Acc, _Mode) ->
+t_inf_lists_strict([], [], Acc, _Opaques) ->
lists:reverse(Acc).
--spec t_inf_lists_masked([erl_type()], [erl_type()], [t_inf_mode()]) -> [erl_type()].
-
-t_inf_lists_masked(List1, List2, Mask) ->
- List = lists:zip3(List1, List2, Mask),
- [t_inf(T1, T2, Mode) || {T1, T2, Mode} <- List].
-
-inf_tuple_sets(L1, L2, Mode) ->
- case inf_tuple_sets(L1, L2, [], Mode) of
+inf_tuple_sets(L1, L2, Opaques) ->
+ case inf_tuple_sets(L1, L2, [], Opaques) of
[] -> ?none;
[{_Arity, [?tuple(_, _, _) = OneTuple]}] -> OneTuple;
List -> ?tuple_set(List)
end.
-inf_tuple_sets([{Arity, Tuples1}|Ts1], [{Arity, Tuples2}|Ts2], Acc, Mode) ->
- case inf_tuples_in_sets(Tuples1, Tuples2, Mode) of
- [] -> inf_tuple_sets(Ts1, Ts2, Acc, Mode);
+inf_tuple_sets([{Arity, Tuples1}|Ts1], [{Arity, Tuples2}|Ts2], Acc, Opaques) ->
+ case inf_tuples_in_sets(Tuples1, Tuples2, Opaques) of
+ [] -> inf_tuple_sets(Ts1, Ts2, Acc, Opaques);
[?tuple_set([{Arity, NewTuples}])] ->
- inf_tuple_sets(Ts1, Ts2, [{Arity, NewTuples}|Acc], Mode);
- NewTuples -> inf_tuple_sets(Ts1, Ts2, [{Arity, NewTuples}|Acc], Mode)
+ inf_tuple_sets(Ts1, Ts2, [{Arity, NewTuples}|Acc], Opaques);
+ NewTuples -> inf_tuple_sets(Ts1, Ts2, [{Arity, NewTuples}|Acc], Opaques)
end;
-inf_tuple_sets([{Arity1, _}|Ts1] = L1, [{Arity2, _}|Ts2] = L2, Acc, Mode) ->
- if Arity1 < Arity2 -> inf_tuple_sets(Ts1, L2, Acc, Mode);
- Arity1 > Arity2 -> inf_tuple_sets(L1, Ts2, Acc, Mode)
+inf_tuple_sets([{Arity1, _}|Ts1] = L1, [{Arity2, _}|Ts2] = L2, Acc, Opaques) ->
+ if Arity1 < Arity2 -> inf_tuple_sets(Ts1, L2, Acc, Opaques);
+ Arity1 > Arity2 -> inf_tuple_sets(L1, Ts2, Acc, Opaques)
end;
-inf_tuple_sets([], _, Acc, _Mode) -> lists:reverse(Acc);
-inf_tuple_sets(_, [], Acc, _Mode) -> lists:reverse(Acc).
-
-inf_tuples_in_sets([?tuple(Elements1, _, ?any)], L2, Mode) ->
- NewList = [t_inf_lists_strict(Elements1, Elements2, Mode)
+inf_tuple_sets([], _, Acc, _Opaques) -> lists:reverse(Acc);
+inf_tuple_sets(_, [], Acc, _Opaques) -> lists:reverse(Acc).
+
+inf_tuples_in_sets([?tuple(Elements1, _, ?any)], L2, Opaques) ->
+ NewList = [t_inf_lists_strict(Elements1, Elements2, Opaques)
|| ?tuple(Elements2, _, _) <- L2],
[t_tuple(Es) || Es <- NewList, Es =/= bottom];
-inf_tuples_in_sets(L1, [?tuple(Elements2, _, ?any)], Mode) ->
- NewList = [t_inf_lists_strict(Elements1, Elements2, Mode)
+inf_tuples_in_sets(L1, [?tuple(Elements2, _, ?any)], Opaques) ->
+ NewList = [t_inf_lists_strict(Elements1, Elements2, Opaques)
|| ?tuple(Elements1, _, _) <- L1],
[t_tuple(Es) || Es <- NewList, Es =/= bottom];
-inf_tuples_in_sets(L1, L2, Mode) ->
- inf_tuples_in_sets(L1, L2, [], Mode).
+inf_tuples_in_sets(L1, L2, Opaques) ->
+ inf_tuples_in_sets2(L1, L2, [], Opaques).
-inf_tuples_in_sets([?tuple(Elements1, Arity, Tag)|Ts1],
- [?tuple(Elements2, Arity, Tag)|Ts2], Acc, Mode) ->
- case t_inf_lists_strict(Elements1, Elements2, Mode) of
- bottom -> inf_tuples_in_sets(Ts1, Ts2, Acc, Mode);
+inf_tuples_in_sets2([?tuple(Elements1, Arity, Tag)|Ts1],
+ [?tuple(Elements2, Arity, Tag)|Ts2], Acc, Opaques) ->
+ case t_inf_lists_strict(Elements1, Elements2, Opaques) of
+ bottom -> inf_tuples_in_sets2(Ts1, Ts2, Acc, Opaques);
NewElements ->
- inf_tuples_in_sets(Ts1, Ts2, [?tuple(NewElements, Arity, Tag)|Acc], Mode)
+ inf_tuples_in_sets2(Ts1, Ts2, [?tuple(NewElements, Arity, Tag)|Acc],
+ Opaques)
+ end;
+inf_tuples_in_sets2([?tuple(_, _, Tag1)|Ts1] = L1,
+ [?tuple(_, _, Tag2)|Ts2] = L2, Acc, Opaques) ->
+ if Tag1 < Tag2 -> inf_tuples_in_sets2(Ts1, L2, Acc, Opaques);
+ Tag1 > Tag2 -> inf_tuples_in_sets2(L1, Ts2, Acc, Opaques)
end;
-inf_tuples_in_sets([?tuple(_, _, Tag1)|Ts1] = L1,
- [?tuple(_, _, Tag2)|Ts2] = L2, Acc, Mode) ->
- if Tag1 < Tag2 -> inf_tuples_in_sets(Ts1, L2, Acc, Mode);
- Tag1 > Tag2 -> inf_tuples_in_sets(L1, Ts2, Acc, Mode)
+inf_tuples_in_sets2([], _, Acc, _Opaques) -> lists:reverse(Acc);
+inf_tuples_in_sets2(_, [], Acc, _Opaques) -> lists:reverse(Acc).
+
+inf_union(U1, U2, Opaques) ->
+ OpaqueFun =
+ fun(Union1, Union2, InfFun) ->
+ [_,_,_,_,_,_,_,_,Opaque,_] = Union1,
+ [A,B,F,I,L,N,T,M,_,_R] = Union2,
+ List = [A,B,F,I,L,N,T,M],
+ inf_union_collect(List, Opaque, InfFun, [], [])
+ end,
+ O1 = OpaqueFun(U1, U2, fun(E, Opaque) -> t_inf(Opaque, E, Opaques) end),
+ O2 = OpaqueFun(U2, U1, fun(E, Opaque) -> t_inf(E, Opaque, Opaques) end),
+ Union = inf_union(U1, U2, 0, [], Opaques),
+ t_sup([O1, O2, Union]).
+
+inf_union_collect([], _Opaque, _InfFun, InfList, ThrowList) ->
+ case t_sup(InfList) of
+ ?none when ThrowList =/= [] -> throw(hd(lists:flatten(ThrowList)));
+ Sup -> Sup
end;
-inf_tuples_in_sets([], _, Acc, _Mode) -> lists:reverse(Acc);
-inf_tuples_in_sets(_, [], Acc, _Mode) -> lists:reverse(Acc).
-
-inf_union(U1, U2, opaque) ->
-%%---------------------------------------------------------------------
-%% Under Testing
-%%----------------------------------------------------------------------
-%% OpaqueFun =
-%% fun(Union1, Union2) ->
-%% [_,_,_,_,_,_,_,_,Opaque,_] = Union1,
-%% [A,B,F,I,L,N,T,M,_,_R] = Union2,
-%% List = [A,B,F,I,L,N,T,M],
-%% case [T || T <- List, t_inf(T, Opaque, opaque) =/= ?none] of
-%% [] -> ?none;
-%% _ -> Opaque
-%% end
-%% end,
-%% O1 = OpaqueFun(U1, U2),
-%% O2 = OpaqueFun(U2, U1),
-%% Union = inf_union(U1, U2, 0, [], opaque),
-%% t_sup([O1, O2, Union]);
- inf_union(U1, U2, 0, [], opaque);
-inf_union(U1, U2, OtherMode) ->
- inf_union(U1, U2, 0, [], OtherMode).
-
-inf_union([?none|Left1], [?none|Left2], N, Acc, Mode) ->
- inf_union(Left1, Left2, N, [?none|Acc], Mode);
-inf_union([T1|Left1], [T2|Left2], N, Acc, Mode) ->
- case t_inf(T1, T2, Mode) of
- ?none -> inf_union(Left1, Left2, N, [?none|Acc], Mode);
- T -> inf_union(Left1, Left2, N+1, [T|Acc], Mode)
+inf_union_collect([?none|L], Opaque, InfFun, InfList, ThrowList) ->
+ inf_union_collect(L, Opaque, InfFun, [?none|InfList], ThrowList);
+inf_union_collect([E|L], Opaque, InfFun, InfList, ThrowList) ->
+ try InfFun(E, Opaque)of
+ Inf ->
+ inf_union_collect(L, Opaque, InfFun, [Inf|InfList], ThrowList)
+ catch throw:N when is_integer(N) ->
+ inf_union_collect(L, Opaque, InfFun, InfList, [N|ThrowList])
+ end.
+
+inf_union([?none|Left1], [?none|Left2], N, Acc, Opaques) ->
+ inf_union(Left1, Left2, N, [?none|Acc], Opaques);
+inf_union([T1|Left1], [T2|Left2], N, Acc, Opaques) ->
+ case t_inf(T1, T2, Opaques) of
+ ?none -> inf_union(Left1, Left2, N, [?none|Acc], Opaques);
+ T -> inf_union(Left1, Left2, N+1, [T|Acc], Opaques)
end;
-inf_union([], [], N, Acc, _Mode) ->
+inf_union([], [], N, Acc, _Opaques) ->
if N =:= 0 -> ?none;
N =:= 1 ->
[Type] = [T || T <- Acc, T =/= ?none],
@@ -2536,6 +3025,11 @@ t_subst_dict(?tuple(Elements, _Arity, _Tag), Dict) ->
t_tuple([t_subst_dict(E, Dict) || E <- Elements]);
t_subst_dict(?tuple_set(_) = TS, Dict) ->
t_sup([t_subst_dict(T, Dict) || T <- t_tuple_subtypes(TS)]);
+%% t_subst_dict(?opaque(Es), Dict) ->
+%% %% "Polymorphic opaque types not supported yet"
+%% List = [Opaque#opaque{struct = t_subst_dict(S, Dict)} ||
+%% Opaque = #opaque{struct = S} <- set_to_list(Es)],
+%% ?opaque(ordsets:from_list(List));
t_subst_dict(T, _Dict) ->
T.
@@ -2578,6 +3072,11 @@ t_subst_aux(?tuple(Elements, _Arity, _Tag), VarMap) ->
t_tuple([t_subst_aux(E, VarMap) || E <- Elements]);
t_subst_aux(?tuple_set(_) = TS, VarMap) ->
t_sup([t_subst_aux(T, VarMap) || T <- t_tuple_subtypes(TS)]);
+%% t_subst_aux(?opaque(Es), VarMap) ->
+%% %% "Polymorphic opaque types not supported yet"
+%% List = [Opaque#opaque{struct = t_subst_aux(S, VarMap)} ||
+%% Opaque = #opaque{struct = S} <- set_to_list(Es)],
+%% ?opaque(ordsets:from_list(List));
t_subst_aux(T, _VarMap) ->
T.
@@ -2590,112 +3089,147 @@ t_subst_aux(T, _VarMap) ->
-spec t_unify(erl_type(), erl_type()) -> t_unify_ret().
t_unify(T1, T2) ->
- t_unify(T1, T2, []).
-
--spec t_unify(erl_type(), erl_type(), [erl_type()]) -> t_unify_ret().
-
-t_unify(T1, T2, Opaques) ->
- {T, VarMap} = t_unify(T1, T2, [], Opaques),
+ {T, VarMap} = t_unify(T1, T2, []),
{t_subst_kv(T, VarMap), lists:keysort(1, VarMap)}.
-t_unify(?var(Id) = T, ?var(Id), VarMap, _Opaques) ->
+t_unify(?var(Id) = T, ?var(Id), VarMap) ->
{T, VarMap};
-t_unify(?var(Id1) = T, ?var(Id2), VarMap, Opaques) ->
+t_unify(?var(Id1) = T, ?var(Id2), VarMap) ->
case lists:keyfind(Id1, 1, VarMap) of
false ->
case lists:keyfind(Id2, 1, VarMap) of
false -> {T, [{Id2, T} | VarMap]};
- {Id2, Type} -> t_unify(T, Type, VarMap, Opaques)
+ {Id2, Type} -> t_unify(T, Type, VarMap)
end;
{Id1, Type1} ->
case lists:keyfind(Id2, 1, VarMap) of
false -> {Type1, [{Id2, T} | VarMap]};
- {Id2, Type2} -> t_unify(Type1, Type2, VarMap, Opaques)
+ {Id2, Type2} -> t_unify(Type1, Type2, VarMap)
end
end;
-t_unify(?var(Id), Type, VarMap, Opaques) ->
+t_unify(?var(Id), Type, VarMap) ->
case lists:keyfind(Id, 1, VarMap) of
false -> {Type, [{Id, Type} | VarMap]};
- {Id, VarType} -> t_unify(VarType, Type, VarMap, Opaques)
+ {Id, VarType} -> t_unify(VarType, Type, VarMap)
end;
-t_unify(Type, ?var(Id), VarMap, Opaques) ->
+t_unify(Type, ?var(Id), VarMap) ->
case lists:keyfind(Id, 1, VarMap) of
false -> {Type, [{Id, Type} | VarMap]};
- {Id, VarType} -> t_unify(VarType, Type, VarMap, Opaques)
+ {Id, VarType} -> t_unify(VarType, Type, VarMap)
end;
-t_unify(?function(Domain1, Range1), ?function(Domain2, Range2), VarMap, Opaques) ->
- {Domain, VarMap1} = t_unify(Domain1, Domain2, VarMap, Opaques),
- {Range, VarMap2} = t_unify(Range1, Range2, VarMap1, Opaques),
+t_unify(?function(Domain1, Range1), ?function(Domain2, Range2), VarMap) ->
+ {Domain, VarMap1} = t_unify(Domain1, Domain2, VarMap),
+ {Range, VarMap2} = t_unify(Range1, Range2, VarMap1),
{?function(Domain, Range), VarMap2};
t_unify(?list(Contents1, Termination1, Size),
- ?list(Contents2, Termination2, Size), VarMap, Opaques) ->
- {Contents, VarMap1} = t_unify(Contents1, Contents2, VarMap, Opaques),
- {Termination, VarMap2} = t_unify(Termination1, Termination2, VarMap1, Opaques),
+ ?list(Contents2, Termination2, Size), VarMap) ->
+ {Contents, VarMap1} = t_unify(Contents1, Contents2, VarMap),
+ {Termination, VarMap2} = t_unify(Termination1, Termination2, VarMap1),
{?list(Contents, Termination, Size), VarMap2};
-t_unify(?product(Types1), ?product(Types2), VarMap, Opaques) ->
- {Types, VarMap1} = unify_lists(Types1, Types2, VarMap, Opaques),
+t_unify(?product(Types1), ?product(Types2), VarMap) ->
+ {Types, VarMap1} = unify_lists(Types1, Types2, VarMap),
{?product(Types), VarMap1};
-t_unify(?tuple(?any, ?any, ?any) = T, ?tuple(?any, ?any, ?any), VarMap, _Opaques) ->
+t_unify(?tuple(?any, ?any, ?any) = T, ?tuple(?any, ?any, ?any), VarMap) ->
{T, VarMap};
t_unify(?tuple(Elements1, Arity, _),
- ?tuple(Elements2, Arity, _), VarMap, Opaques) when Arity =/= ?any ->
- {NewElements, VarMap1} = unify_lists(Elements1, Elements2, VarMap, Opaques),
+ ?tuple(Elements2, Arity, _), VarMap) when Arity =/= ?any ->
+ {NewElements, VarMap1} = unify_lists(Elements1, Elements2, VarMap),
{t_tuple(NewElements), VarMap1};
t_unify(?tuple_set([{Arity, _}]) = T1,
- ?tuple(_, Arity, _) = T2, VarMap, Opaques) when Arity =/= ?any ->
- unify_tuple_set_and_tuple(T1, T2, VarMap, Opaques);
+ ?tuple(_, Arity, _) = T2, VarMap) when Arity =/= ?any ->
+ unify_tuple_set_and_tuple1(T1, T2, VarMap);
t_unify(?tuple(_, Arity, _) = T1,
- ?tuple_set([{Arity, _}]) = T2, VarMap, Opaques) when Arity =/= ?any ->
- unify_tuple_set_and_tuple(T2, T1, VarMap, Opaques);
-t_unify(?tuple_set(List1), ?tuple_set(List2), VarMap, Opaques) ->
- {Tuples, NewVarMap} =
- unify_lists(lists:append([T || {_Arity, T} <- List1]),
- lists:append([T || {_Arity, T} <- List2]), VarMap, Opaques),
- {t_sup(Tuples), NewVarMap};
-t_unify(?opaque(Elements) = T, ?opaque(Elements), VarMap, _Opaques) ->
- {T, VarMap};
-t_unify(?opaque(_) = T1, ?opaque(_) = T2, _VarMap, _Opaques) ->
- throw({mismatch, T1, T2});
-t_unify(Type, ?opaque(_) = OpType, VarMap, Opaques) ->
- t_unify_with_opaque(Type, OpType, VarMap, Opaques);
-t_unify(?opaque(_) = OpType, Type, VarMap, Opaques) ->
- t_unify_with_opaque(Type, OpType, VarMap, Opaques);
-t_unify(T, T, VarMap, _Opaques) ->
+ ?tuple_set([{Arity, _}]) = T2, VarMap) when Arity =/= ?any ->
+ unify_tuple_set_and_tuple2(T1, T2, VarMap);
+t_unify(?tuple_set(List1) = T1, ?tuple_set(List2) = T2, VarMap) ->
+ try
+ unify_lists(lists:append([T || {_Arity, T} <- List1]),
+ lists:append([T || {_Arity, T} <- List2]), VarMap)
+ of
+ {Tuples, NewVarMap} -> {t_sup(Tuples), NewVarMap}
+ catch _:_ -> throw({mismatch, T1, T2})
+ end;
+t_unify(?opaque(_) = T1, ?opaque(_) = T2, VarMap) ->
+ t_unify(t_opaque_structure(T1), t_opaque_structure(T2), VarMap);
+t_unify(T1, ?opaque(_) = T2, VarMap) ->
+ t_unify(T1, t_opaque_structure(T2), VarMap);
+t_unify(?opaque(_) = T1, T2, VarMap) ->
+ t_unify(t_opaque_structure(T1), T2, VarMap);
+t_unify(T, T, VarMap) ->
{T, VarMap};
-t_unify(T1, T2, _, _) ->
+t_unify(?union(_)=T1, ?union(_)=T2, VarMap) ->
+ {Type1, Type2} = unify_union2(T1, T2),
+ t_unify(Type1, Type2, VarMap);
+t_unify(?union(_)=T1, T2, VarMap) ->
+ t_unify(unify_union1(T1, T1, T2), T2, VarMap);
+t_unify(T1, ?union(_)=T2, VarMap) ->
+ t_unify(T1, unify_union1(T2, T1, T2), VarMap);
+t_unify(T1, T2, _) ->
throw({mismatch, T1, T2}).
-t_unify_with_opaque(Type, OpType, VarMap, Opaques) ->
- case lists:member(OpType, Opaques) of
+unify_union2(?union(List1)=T1, ?union(List2)=T2) ->
+ case {unify_union(List1), unify_union(List2)} of
+ {{yes, Type1}, {yes, Type2}} -> {Type1, Type2};
+ {{yes, Type1}, no} -> {Type1, T2};
+ {no, {yes, Type2}} -> {T1, Type2};
+ {no, no} -> throw({mismatch, T1, T2})
+ end.
+
+unify_union1(?union(List), T1, T2) ->
+ case unify_union(List) of
+ {yes, Type} -> Type;
+ no -> throw({mismatch, T1, T2})
+ end.
+
+unify_union(List) ->
+ [A,B,F,I,L,N,T,M,O,R] = List,
+ if O =:= ?none -> no;
true ->
- Struct = t_opaque_structure(OpType),
- try t_unify(Type, Struct, VarMap, Opaques) of
- {_T, VarMap1} -> {OpType, VarMap1}
- catch
- throw:{mismatch, _T1, _T2} ->
- case t_inf(OpType, Type, opaque) of
- ?none -> throw({mismatch, Type, OpType});
- _ -> {OpType, VarMap}
- end
- end;
- false ->
- throw({mismatch, Type, OpType})
+ S = t_opaque_structure(O),
+ {yes, t_sup([A,B,F,I,L,N,T,M,S,R])}
end.
-unify_tuple_set_and_tuple(?tuple_set([{Arity, List}]),
- ?tuple(Elements2, Arity, _), VarMap, Opaques) ->
+-spec is_opaque_type(erl_type(), [erl_type()]) -> boolean().
+
+%% An opaque type is a union of types. Returns true iff any of the type
+%% names (Module and Name) of the first argument (the opaque type to
+%% check) occurs in any of the opaque types of the second argument.
+is_opaque_type(?opaque(Elements), Opaques) ->
+ lists:any(fun(Opaque) -> is_opaque_type2(Opaque, Opaques) end, Elements).
+
+is_opaque_type2(#opaque{mod = Mod1, name = Name1}, Opaques) ->
+ F1 = fun(?opaque(Es)) ->
+ F2 = fun(#opaque{mod = Mod, name = Name}) ->
+ Mod1 =:= Mod andalso Name1 =:= Name
+ end,
+ lists:any(F2, Es)
+ end,
+ lists:any(F1, Opaques).
+
+%% Two functions since t_unify is not symmetric.
+unify_tuple_set_and_tuple1(?tuple_set([{Arity, List}]),
+ ?tuple(Elements2, Arity, _), VarMap) ->
+ %% Can only work if the single tuple has variables at correct places.
+ %% Collapse the tuple set.
+ {NewElements, VarMap1} =
+ unify_lists(sup_tuple_elements(List), Elements2, VarMap),
+ {t_tuple(NewElements), VarMap1}.
+
+unify_tuple_set_and_tuple2(?tuple(Elements2, Arity, _),
+ ?tuple_set([{Arity, List}]), VarMap) ->
%% Can only work if the single tuple has variables at correct places.
%% Collapse the tuple set.
- {NewElements, VarMap1} = unify_lists(sup_tuple_elements(List), Elements2, VarMap, Opaques),
+ {NewElements, VarMap1} =
+ unify_lists(Elements2, sup_tuple_elements(List), VarMap),
{t_tuple(NewElements), VarMap1}.
-unify_lists(L1, L2, VarMap, Opaques) ->
- unify_lists(L1, L2, VarMap, [], Opaques).
+unify_lists(L1, L2, VarMap) ->
+ unify_lists(L1, L2, VarMap, []).
-unify_lists([T1|Left1], [T2|Left2], VarMap, Acc, Opaques) ->
- {NewT, NewVarMap} = t_unify(T1, T2, VarMap, Opaques),
- unify_lists(Left1, Left2, NewVarMap, [NewT|Acc], Opaques);
-unify_lists([], [], VarMap, Acc, _Opaques) ->
+unify_lists([T1|Left1], [T2|Left2], VarMap, Acc) ->
+ {NewT, NewVarMap} = t_unify(T1, T2, VarMap),
+ unify_lists(Left1, Left2, NewVarMap, [NewT|Acc]);
+unify_lists([], [], VarMap, Acc) ->
{lists:reverse(Acc), VarMap}.
%%t_assign_variables_to_subtype(T1, T2) ->
@@ -2837,11 +3371,12 @@ t_subtract(?identifier(Set1), ?identifier(Set2)) ->
?none -> ?none;
Set -> ?identifier(Set)
end;
-t_subtract(?opaque(Set1), ?opaque(Set2)) ->
- case set_subtract(Set1, Set2) of
- ?none -> ?none;
- Set -> ?opaque(Set)
- end;
+t_subtract(?opaque(_)=T1, ?opaque(_)=T2) ->
+ opaque_subtract(T1, t_opaque_structure(T2));
+t_subtract(?opaque(_)=T1, T2) ->
+ opaque_subtract(T1, T2);
+t_subtract(T1, ?opaque(_)=T2) ->
+ t_subtract(T1, t_opaque_structure(T2));
t_subtract(?matchstate(Pres1, Slots1), ?matchstate(Pres2, _Slots2)) ->
Pres = t_subtract(Pres1, Pres2),
case t_is_none(Pres) of
@@ -2976,6 +3511,17 @@ t_subtract(T1, T2) ->
?union(U2) = force_union(T2),
subtract_union(U1, U2).
+-spec opaque_subtract(erl_type(), erl_type()) -> erl_type().
+
+opaque_subtract(?opaque(Set1), T2) ->
+ List = [T1#opaque{struct = Sub} ||
+ #opaque{struct = S1}=T1 <- set_to_list(Set1),
+ not t_is_none(Sub = t_subtract(S1, T2))],
+ case List of
+ [] -> ?none;
+ _ -> ?opaque(ordsets:from_list(List))
+ end.
+
-spec t_subtract_lists([erl_type()], [erl_type()]) -> [erl_type()].
t_subtract_lists(L1, L2) ->
@@ -2991,7 +3537,18 @@ t_subtract_lists([], [], Acc) ->
-spec subtract_union([erl_type(),...], [erl_type(),...]) -> erl_type().
subtract_union(U1, U2) ->
- subtract_union(U1, U2, 0, []).
+ [A1,B1,F1,I1,L1,N1,T1,M1,O1,R1] = U1,
+ [A2,B2,F2,I2,L2,N2,T2,M2,O2,R2] = U2,
+ List1 = [A1,B1,F1,I1,L1,N1,T1,M1,?none,R1],
+ List2 = [A2,B2,F2,I2,L2,N2,T2,M2,?none,R2],
+ Sub1 = subtract_union(List1, List2, 0, []),
+ O = if O1 =:= ?none -> O1;
+ true -> t_subtract(O1, ?union(U2))
+ end,
+ Sub2 = if O2 =:= ?none -> Sub1;
+ true -> t_subtract(Sub1, t_opaque_structure(O2))
+ end,
+ t_sup(O, Sub2).
-spec subtract_union([erl_type()], [erl_type()], non_neg_integer(), [erl_type()]) -> erl_type().
@@ -3052,10 +3609,24 @@ t_is_equal(_, _) -> false.
t_is_subtype(T1, T2) ->
Inf = t_inf(T1, T2),
- t_is_equal(T1, Inf).
+ subtype_is_equal(T1, Inf).
+
+%% The subtype relation has to behave correctly irrespective of opaque
+%% types.
+subtype_is_equal(T, T) -> true;
+subtype_is_equal(T1, T2) ->
+ t_is_equal(case t_contains_opaque(T1) of
+ true -> t_unopaque(T1);
+ false -> T1
+ end,
+ case t_contains_opaque(T2) of
+ true -> t_unopaque(T2);
+ false -> T2
+ end).
-spec t_is_instance(erl_type(), erl_type()) -> boolean().
+%% XXX. To be removed.
t_is_instance(ConcreteType, Type) ->
t_is_subtype(ConcreteType, t_unopaque(Type)).
@@ -3067,12 +3638,12 @@ t_unopaque(T) ->
-spec t_unopaque(erl_type(), 'universe' | [erl_type()]) -> erl_type().
t_unopaque(?opaque(_) = T, Opaques) ->
- case Opaques =:= universe orelse lists:member(T, Opaques) of
+ case Opaques =:= 'universe' orelse is_opaque_type(T, Opaques) of
true -> t_unopaque(t_opaque_structure(T), Opaques);
false -> T % XXX: needs revision for parametric opaque data types
end;
t_unopaque(?list(ElemT, Termination, Sz), Opaques) ->
- ?list(t_unopaque(ElemT, Opaques), Termination, Sz);
+ ?list(t_unopaque(ElemT, Opaques), t_unopaque(Termination, Opaques), Sz);
t_unopaque(?tuple(?any, _, _) = T, _) -> T;
t_unopaque(?tuple(ArgTs, Sz, Tag), Opaques) when is_list(ArgTs) ->
NewArgTs = [t_unopaque(A, Opaques) || A <- ArgTs],
@@ -3081,14 +3652,19 @@ t_unopaque(?tuple_set(Set), Opaques) ->
NewSet = [{Sz, [t_unopaque(T, Opaques) || T <- Tuples]}
|| {Sz, Tuples} <- Set],
?tuple_set(NewSet);
+t_unopaque(?product(Types), Opaques) ->
+ ?product([t_unopaque(T, Opaques) || T <- Types]);
+t_unopaque(?function(Domain, Range), Opaques) ->
+ ?function(t_unopaque(Domain, Opaques), t_unopaque(Range, Opaques));
t_unopaque(?union([A,B,F,I,L,N,T,M,O,R]), Opaques) ->
UL = t_unopaque(L, Opaques),
UT = t_unopaque(T, Opaques),
- UO = case O of
- ?none -> [];
- ?opaque(Os) -> [t_unopaque(S, Opaques) || #opaque{struct = S} <- Os]
- end,
- t_sup([?union([A,B,F,I,UL,N,UT,M,?none,R])|UO]);
+ UF = t_unopaque(F, Opaques),
+ {OF,UO} = case t_unopaque(O, Opaques) of
+ ?opaque(_) = O1 -> {O1, []};
+ Type -> {?none, [Type]}
+ end,
+ t_sup([?union([A,B,UF,I,UL,N,UT,M,OF,R])|UO]);
t_unopaque(T, _) ->
T.
@@ -3134,6 +3710,12 @@ t_limit_k(?product(Elements), K) ->
?product([t_limit_k(X, K - 1) || X <- Elements]);
t_limit_k(?union(Elements), K) ->
?union([t_limit_k(X, K) || X <- Elements]);
+t_limit_k(?opaque(Es), K) ->
+ List = [begin
+ NewS = t_limit_k(S, K),
+ Opaque#opaque{struct = NewS}
+ end || #opaque{struct = S} = Opaque <- set_to_list(Es)],
+ ?opaque(ordsets:from_list(List));
t_limit_k(T, _K) -> T.
%%============================================================================
@@ -3167,7 +3749,7 @@ t_abstract_records(?union(Types), RecDict) ->
t_abstract_records(?tuple(?any, ?any, ?any) = T, _RecDict) ->
T;
t_abstract_records(?tuple(Elements, Arity, ?atom(_) = Tag), RecDict) ->
- [TagAtom] = t_atom_vals(Tag),
+ [TagAtom] = atom_vals(Tag),
case lookup_record(TagAtom, Arity - 1, RecDict) of
error -> t_tuple([t_abstract_records(E, RecDict) || E <- Elements]);
{ok, Fields} -> t_tuple([Tag|[T || {_Name, T} <- Fields]])
@@ -3176,6 +3758,8 @@ t_abstract_records(?tuple(Elements, _Arity, _Tag), RecDict) ->
t_tuple([t_abstract_records(E, RecDict) || E <- Elements]);
t_abstract_records(?tuple_set(_) = Tuples, RecDict) ->
t_sup([t_abstract_records(T, RecDict) || T <- t_tuple_subtypes(Tuples)]);
+t_abstract_records(?opaque(_)=Type, RecDict) ->
+ t_abstract_records(t_opaque_structure(Type), RecDict);
t_abstract_records(T, _RecDict) ->
T.
@@ -3198,6 +3782,14 @@ t_map(Fun, ?tuple(Elements, _Arity, _Tag)) ->
Fun(t_tuple([t_map(Fun, E) || E <- Elements]));
t_map(Fun, ?tuple_set(_) = Tuples) ->
Fun(t_sup([t_map(Fun, T) || T <- t_tuple_subtypes(Tuples)]));
+t_map(Fun, ?opaque(Set)) ->
+ L = [Opaque#opaque{struct = NewS} ||
+ #opaque{struct = S} = Opaque <- set_to_list(Set),
+ not t_is_none(NewS = t_map(Fun, S))],
+ Fun(case L of
+ [] -> ?none;
+ _ -> ?opaque(ordsets:from_list(L))
+ end);
t_map(Fun, T) ->
Fun(T).
@@ -3239,11 +3831,11 @@ t_to_string(?bitstr(8, 0), _RecDict) ->
t_to_string(?bitstr(1, 0), _RecDict) ->
"bitstring()";
t_to_string(?bitstr(0, B), _RecDict) ->
- lists:flatten(io_lib:format("<<_:~w>>", [B]));
+ flat_format("<<_:~w>>", [B]);
t_to_string(?bitstr(U, 0), _RecDict) ->
- lists:flatten(io_lib:format("<<_:_*~w>>", [U]));
+ flat_format("<<_:_*~w>>", [U]);
t_to_string(?bitstr(U, B), _RecDict) ->
- lists:flatten(io_lib:format("<<_:~w,_:_*~w>>", [B, U]));
+ flat_format("<<_:~w,_:_*~w>>", [B, U]);
t_to_string(?function(?any, ?any), _RecDict) ->
"fun()";
t_to_string(?function(?any, Range), RecDict) ->
@@ -3255,18 +3847,16 @@ t_to_string(?identifier(Set), _RecDict) ->
case Set of
?any -> "identifier()";
_ ->
- string:join([io_lib:format("~w()", [T]) || T <- set_to_list(Set)], " | ")
+ string:join([flat_format("~w()", [T]) || T <- set_to_list(Set)], " | ")
end;
-t_to_string(?opaque(Set), _RecDict) ->
- string:join([case is_opaque_builtin(Mod, Name) of
- true -> io_lib:format("~w()", [Name]);
- false -> io_lib:format("~w:~w()", [Mod, Name])
- end
- || #opaque{mod = Mod, name = Name} <- set_to_list(Set)],
+t_to_string(?opaque(Set), RecDict) ->
+ string:join([opaque_type(Mod, Name, S, RecDict) ||
+ #opaque{mod = Mod, name = Name, struct = S}
+ <- set_to_list(Set)],
" | ");
t_to_string(?matchstate(Pres, Slots), RecDict) ->
- io_lib:format("ms(~s,~s)", [t_to_string(Pres, RecDict),
- t_to_string(Slots,RecDict)]);
+ flat_format("ms(~s,~s)", [t_to_string(Pres, RecDict),
+ t_to_string(Slots,RecDict)]);
t_to_string(?nil, _RecDict) ->
"[]";
t_to_string(?nonempty_list(Contents, Termination), RecDict) ->
@@ -3282,7 +3872,9 @@ t_to_string(?nonempty_list(Contents, Termination), RecDict) ->
case Contents =:= ?any of
true -> ok;
false ->
- erlang:error({illegal_list, ?nonempty_list(Contents, Termination)})
+ %% XXX. See comment below.
+ %% erlang:error({illegal_list, ?nonempty_list(Contents, Termination)})
+ ok
end,
"nonempty_maybe_improper_list()";
_ ->
@@ -3305,11 +3897,14 @@ t_to_string(?list(Contents, Termination, ?unknown_qual), RecDict) ->
end;
?any ->
%% Just a safety check.
+ %% XXX. Types such as "maybe_improper_list(integer(), any())"
+ %% are OK, but cannot be printed!?
case Contents =:= ?any of
true -> ok;
false ->
- L = ?list(Contents, Termination, ?unknown_qual),
- erlang:error({illegal_list, L})
+ ok
+ %% L = ?list(Contents, Termination, ?unknown_qual),
+ %% erlang:error({illegal_list, L})
end,
"maybe_improper_list()";
_ ->
@@ -3330,7 +3925,7 @@ t_to_string(?integer_pos, _RecDict) -> "pos_integer()";
t_to_string(?integer_non_neg, _RecDict) -> "non_neg_integer()";
t_to_string(?integer_neg, _RecDict) -> "neg_integer()";
t_to_string(?int_range(From, To), _RecDict) ->
- lists:flatten(io_lib:format("~w..~w", [From, To]));
+ flat_format("~w..~w", [From, To]);
t_to_string(?integer(?any), _RecDict) -> "integer()";
t_to_string(?float, _RecDict) -> "float()";
t_to_string(?number(?any, ?unknown_qual), _RecDict) -> "number()";
@@ -3338,10 +3933,10 @@ t_to_string(?product(List), RecDict) ->
"<" ++ comma_sequence(List, RecDict) ++ ">";
t_to_string(?remote(Set), RecDict) ->
string:join([case Args =:= [] of
- true -> io_lib:format("~w:~w()", [Mod, Name]);
+ true -> flat_format("~w:~w()", [Mod, Name]);
false ->
ArgString = comma_sequence(Args, RecDict),
- io_lib:format("~w:~w(~s)", [Mod, Name, ArgString])
+ flat_format("~w:~w(~s)", [Mod, Name, ArgString])
end
|| #remote{mod = Mod, name = Name, args = Args} <-
set_to_list(Set)],
@@ -3350,7 +3945,7 @@ t_to_string(?tuple(?any, ?any, ?any), _RecDict) -> "tuple()";
t_to_string(?tuple(Elements, _Arity, ?any), RecDict) ->
"{" ++ comma_sequence(Elements, RecDict) ++ "}";
t_to_string(?tuple(Elements, Arity, Tag), RecDict) ->
- [TagAtom] = t_atom_vals(Tag),
+ [TagAtom] = atom_vals(Tag),
case lookup_record(TagAtom, Arity-1, RecDict) of
error -> "{" ++ comma_sequence(Elements, RecDict) ++ "}";
{ok, FieldNames} ->
@@ -3361,9 +3956,9 @@ t_to_string(?tuple_set(_) = T, RecDict) ->
t_to_string(?union(Types), RecDict) ->
union_sequence([T || T <- Types, T =/= ?none], RecDict);
t_to_string(?var(Id), _RecDict) when is_atom(Id) ->
- io_lib:format("~s", [atom_to_list(Id)]);
+ flat_format("~s", [atom_to_list(Id)]);
t_to_string(?var(Id), _RecDict) when is_integer(Id) ->
- io_lib:format("var(~w)", [Id]).
+ flat_format("var(~w)", [Id]).
record_to_string(Tag, [_|Fields], FieldNames, RecDict) ->
FieldStrings = record_fields_to_string(Fields, FieldNames, RecDict, []),
@@ -3371,7 +3966,7 @@ record_to_string(Tag, [_|Fields], FieldNames, RecDict) ->
record_fields_to_string([F|Fs], [{FName, _DefType}|FDefs], RecDict, Acc) ->
NewAcc =
- case t_is_any(F) orelse t_is_atom('undefined', F) of
+ case t_is_equal(F, t_any()) orelse t_is_any_atom('undefined', F) of
true -> Acc;
false ->
StrFV = atom_to_string(FName) ++ "::" ++ t_to_string(F, RecDict),
@@ -3389,13 +3984,14 @@ record_fields_to_string([], [], _RecDict, Acc) ->
-spec record_field_diffs_to_string(erl_type(), dict()) -> string().
record_field_diffs_to_string(?tuple([_|Fs], Arity, Tag), RecDict) ->
- [TagAtom] = t_atom_vals(Tag),
+ [TagAtom] = atom_vals(Tag),
{ok, FieldNames} = lookup_record(TagAtom, Arity-1, RecDict),
%% io:format("RecCElems = ~p\nRecTypes = ~p\n", [Fs, FieldNames]),
FieldDiffs = field_diffs(Fs, FieldNames, RecDict, []),
string:join(FieldDiffs, " and ").
field_diffs([F|Fs], [{FName, DefType}|FDefs], RecDict, Acc) ->
+ %% Don't care about opaqueness for now.
NewAcc =
case not t_is_none(t_inf(F, DefType)) of
true -> Acc;
@@ -3418,6 +4014,24 @@ union_sequence(Types, RecDict) ->
List = [t_to_string(T, RecDict) || T <- Types],
string:join(List, " | ").
+-ifdef(DEBUG).
+opaque_type(Mod, Name, S, RecDict) ->
+ opaque_name(Mod, Name, t_to_string(S, RecDict)).
+-else.
+opaque_type(Mod, Name, _S, _RecDict) ->
+ opaque_name(Mod, Name, "").
+-endif.
+
+opaque_name(Mod, Name, Extra) ->
+ S = mod_name(Mod, Name),
+ flat_format("~s(~s)", [S, Extra]).
+
+mod_name(Mod, Name) ->
+ case is_opaque_builtin(Mod, Name) of
+ true -> flat_format("~w", [Name]);
+ false -> flat_format("~w:~w", [Mod, Name])
+ end.
+
%%=============================================================================
%%
%% Build a type from parse forms.
@@ -3437,246 +4051,197 @@ t_from_form(Form, RecDict) ->
-spec t_from_form(parse_form(), dict(), dict()) -> erl_type().
t_from_form(Form, RecDict, VarDict) ->
- {T, _R} = t_from_form(Form, [], false, RecDict, VarDict),
+ {T, _R} = t_from_form(Form, [], RecDict, VarDict),
T.
-type type_names() :: [{'type' | 'opaque' | 'record', atom()}].
--spec t_from_form(parse_form(), type_names(), boolean(), dict(), dict()) ->
+-spec t_from_form(parse_form(), type_names(), dict(), dict()) ->
{erl_type(), type_names()}.
-t_from_form({var, _L, '_'}, _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+t_from_form({var, _L, '_'}, _TypeNames, _RecDict, _VarDict) ->
{t_any(), []};
-t_from_form({var, _L, Name}, _TypeNames, _InOpaque, _RecDict, VarDict) ->
+t_from_form({var, _L, Name}, _TypeNames, _RecDict, VarDict) ->
case dict:find(Name, VarDict) of
error -> {t_var(Name), []};
{ok, Val} -> {Val, []}
end;
-t_from_form({ann_type, _L, [_Var, Type]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict);
-t_from_form({paren_type, _L, [Type]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict);
+t_from_form({ann_type, _L, [_Var, Type]}, TypeNames, RecDict, VarDict) ->
+ t_from_form(Type, TypeNames, RecDict, VarDict);
+t_from_form({paren_type, _L, [Type]}, TypeNames, RecDict, VarDict) ->
+ t_from_form(Type, TypeNames, RecDict, VarDict);
t_from_form({remote_type, _L, [{atom, _, Module}, {atom, _, Type}, Args]},
- TypeNames, InOpaque, RecDict, VarDict) ->
- {L, R} = list_from_form(Args, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict) ->
+ {L, R} = list_from_form(Args, TypeNames, RecDict, VarDict),
{t_remote(Module, Type, L), R};
-t_from_form({atom, _L, Atom}, _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+t_from_form({atom, _L, Atom}, _TypeNames, _RecDict, _VarDict) ->
{t_atom(Atom), []};
-t_from_form({integer, _L, Int}, _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+t_from_form({integer, _L, Int}, _TypeNames, _RecDict, _VarDict) ->
{t_integer(Int), []};
-t_from_form({op, _L, _Op, _Arg} = Op, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({op, _L, _Op, _Arg} = Op, _TypeNames, _RecDict, _VarDict) ->
case erl_eval:partial_eval(Op) of
{integer, _, Val} ->
{t_integer(Val), []};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Op])})
end;
-t_from_form({op, _L, _Op, _Arg1, _Arg2} = Op, _TypeNames, _InOpaque,
+t_from_form({op, _L, _Op, _Arg1, _Arg2} = Op, _TypeNames,
_RecDict, _VarDict) ->
case erl_eval:partial_eval(Op) of
{integer, _, Val} ->
{t_integer(Val), []};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Op])})
end;
-t_from_form({type, _L, any, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, any, []}, _TypeNames, _RecDict, _VarDict) ->
{t_any(), []};
-t_from_form({type, _L, arity, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, arity, []}, _TypeNames, _RecDict, _VarDict) ->
{t_arity(), []};
-t_from_form({type, _L, array, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, array, []}, _TypeNames, _RecDict, _VarDict) ->
{t_array(), []};
-t_from_form({type, _L, atom, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, atom, []}, _TypeNames, _RecDict, _VarDict) ->
{t_atom(), []};
-t_from_form({type, _L, binary, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, binary, []}, _TypeNames, _RecDict, _VarDict) ->
{t_binary(), []};
t_from_form({type, _L, binary, [Base, Unit]} = Type,
- _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+ _TypeNames, _RecDict, _VarDict) ->
case {erl_eval:partial_eval(Base), erl_eval:partial_eval(Unit)} of
{{integer, _, B}, {integer, _, U}} when B >= 0, U >= 0 ->
{t_bitstr(U, B), []};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Type])})
end;
-t_from_form({type, _L, bitstring, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, bitstring, []}, _TypeNames, _RecDict, _VarDict) ->
{t_bitstr(), []};
-t_from_form({type, _L, bool, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, bool, []}, _TypeNames, _RecDict, _VarDict) ->
{t_boolean(), []}; % XXX: Temporarily
-t_from_form({type, _L, boolean, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, boolean, []}, _TypeNames, _RecDict, _VarDict) ->
{t_boolean(), []};
-t_from_form({type, _L, byte, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, byte, []}, _TypeNames, _RecDict, _VarDict) ->
{t_byte(), []};
-t_from_form({type, _L, char, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, char, []}, _TypeNames, _RecDict, _VarDict) ->
{t_char(), []};
-t_from_form({type, _L, dict, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, dict, []}, _TypeNames, _RecDict, _VarDict) ->
{t_dict(), []};
-t_from_form({type, _L, digraph, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, digraph, []}, _TypeNames, _RecDict, _VarDict) ->
{t_digraph(), []};
-t_from_form({type, _L, float, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, float, []}, _TypeNames, _RecDict, _VarDict) ->
{t_float(), []};
-t_from_form({type, _L, function, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, function, []}, _TypeNames, _RecDict, _VarDict) ->
{t_fun(), []};
-t_from_form({type, _L, 'fun', []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, 'fun', []}, _TypeNames, _RecDict, _VarDict) ->
{t_fun(), []};
t_from_form({type, _L, 'fun', [{type, _, any}, Range]}, TypeNames,
- InOpaque, RecDict, VarDict) ->
- {T, R} = t_from_form(Range, TypeNames, InOpaque, RecDict, VarDict),
+ RecDict, VarDict) ->
+ {T, R} = t_from_form(Range, TypeNames, RecDict, VarDict),
{t_fun(T), R};
t_from_form({type, _L, 'fun', [{type, _, product, Domain}, Range]},
- TypeNames, InOpaque, RecDict, VarDict) ->
- {L, R1} = list_from_form(Domain, TypeNames, InOpaque, RecDict, VarDict),
- {T, R2} = t_from_form(Range, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict) ->
+ {L, R1} = list_from_form(Domain, TypeNames, RecDict, VarDict),
+ {T, R2} = t_from_form(Range, TypeNames, RecDict, VarDict),
{t_fun(L, T), R1 ++ R2};
-t_from_form({type, _L, gb_set, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, gb_set, []}, _TypeNames, _RecDict, _VarDict) ->
{t_gb_set(), []};
-t_from_form({type, _L, gb_tree, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, gb_tree, []}, _TypeNames, _RecDict, _VarDict) ->
{t_gb_tree(), []};
-t_from_form({type, _L, identifier, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, identifier, []}, _TypeNames, _RecDict, _VarDict) ->
{t_identifier(), []};
-t_from_form({type, _L, integer, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, integer, []}, _TypeNames, _RecDict, _VarDict) ->
{t_integer(), []};
-t_from_form({type, _L, iodata, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, iodata, []}, _TypeNames, _RecDict, _VarDict) ->
{t_iodata(), []};
-t_from_form({type, _L, iolist, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, iolist, []}, _TypeNames, _RecDict, _VarDict) ->
{t_iolist(), []};
-t_from_form({type, _L, list, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, list, []}, _TypeNames, _RecDict, _VarDict) ->
{t_list(), []};
-t_from_form({type, _L, list, [Type]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- {T, R} = t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, list, [Type]}, TypeNames, RecDict, VarDict) ->
+ {T, R} = t_from_form(Type, TypeNames, RecDict, VarDict),
{t_list(T), R};
-t_from_form({type, _L, mfa, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, mfa, []}, _TypeNames, _RecDict, _VarDict) ->
{t_mfa(), []};
-t_from_form({type, _L, module, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, module, []}, _TypeNames, _RecDict, _VarDict) ->
{t_module(), []};
-t_from_form({type, _L, nil, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, nil, []}, _TypeNames, _RecDict, _VarDict) ->
{t_nil(), []};
-t_from_form({type, _L, neg_integer, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, neg_integer, []}, _TypeNames, _RecDict, _VarDict) ->
{t_neg_integer(), []};
-t_from_form({type, _L, non_neg_integer, []}, _TypeNames, _InOpaque, _RecDict,
+t_from_form({type, _L, non_neg_integer, []}, _TypeNames, _RecDict,
_VarDict) ->
{t_non_neg_integer(), []};
-t_from_form({type, _L, no_return, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, no_return, []}, _TypeNames, _RecDict, _VarDict) ->
{t_unit(), []};
-t_from_form({type, _L, node, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, node, []}, _TypeNames, _RecDict, _VarDict) ->
{t_node(), []};
-t_from_form({type, _L, none, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, none, []}, _TypeNames, _RecDict, _VarDict) ->
{t_none(), []};
-t_from_form({type, _L, nonempty_list, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, nonempty_list, []}, _TypeNames, _RecDict, _VarDict) ->
{t_nonempty_list(), []};
-t_from_form({type, _L, nonempty_list, [Type]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- {T, R} = t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, nonempty_list, [Type]}, TypeNames, RecDict, VarDict) ->
+ {T, R} = t_from_form(Type, TypeNames, RecDict, VarDict),
{t_nonempty_list(T), R};
t_from_form({type, _L, nonempty_improper_list, [Cont, Term]}, TypeNames,
- InOpaque, RecDict, VarDict) ->
- {T1, R1} = t_from_form(Cont, TypeNames, InOpaque, RecDict, VarDict),
- {T2, R2} = t_from_form(Term, TypeNames, InOpaque, RecDict, VarDict),
+ RecDict, VarDict) ->
+ {T1, R1} = t_from_form(Cont, TypeNames, RecDict, VarDict),
+ {T2, R2} = t_from_form(Term, TypeNames, RecDict, VarDict),
{t_cons(T1, T2), R1 ++ R2};
t_from_form({type, _L, nonempty_maybe_improper_list, []}, _TypeNames,
- _InOpaque, _RecDict, _VarDict) ->
+ _RecDict, _VarDict) ->
{t_cons(?any, ?any), []};
t_from_form({type, _L, nonempty_maybe_improper_list, [Cont, Term]},
- TypeNames, InOpaque, RecDict, VarDict) ->
- {T1, R1} = t_from_form(Cont, TypeNames, InOpaque, RecDict, VarDict),
- {T2, R2} = t_from_form(Term, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict) ->
+ {T1, R1} = t_from_form(Cont, TypeNames, RecDict, VarDict),
+ {T2, R2} = t_from_form(Term, TypeNames, RecDict, VarDict),
{t_cons(T1, T2), R1 ++ R2};
-t_from_form({type, _L, nonempty_string, []}, _TypeNames, _InOpaque, _RecDict,
+t_from_form({type, _L, nonempty_string, []}, _TypeNames, _RecDict,
_VarDict) ->
{t_nonempty_string(), []};
-t_from_form({type, _L, number, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, number, []}, _TypeNames, _RecDict, _VarDict) ->
{t_number(), []};
-t_from_form({type, _L, pid, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, pid, []}, _TypeNames, _RecDict, _VarDict) ->
{t_pid(), []};
-t_from_form({type, _L, port, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, port, []}, _TypeNames, _RecDict, _VarDict) ->
{t_port(), []};
-t_from_form({type, _L, pos_integer, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, pos_integer, []}, _TypeNames, _RecDict, _VarDict) ->
{t_pos_integer(), []};
-t_from_form({type, _L, maybe_improper_list, []}, _TypeNames, _InOpaque,
+t_from_form({type, _L, maybe_improper_list, []}, _TypeNames,
_RecDict, _VarDict) ->
{t_maybe_improper_list(), []};
t_from_form({type, _L, maybe_improper_list, [Content, Termination]},
- TypeNames, InOpaque, RecDict, VarDict) ->
- {T1, R1} = t_from_form(Content, TypeNames, InOpaque, RecDict, VarDict),
- {T2, R2} = t_from_form(Termination, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict) ->
+ {T1, R1} = t_from_form(Content, TypeNames, RecDict, VarDict),
+ {T2, R2} = t_from_form(Termination, TypeNames, RecDict, VarDict),
{t_maybe_improper_list(T1, T2), R1 ++ R2};
-t_from_form({type, _L, product, Elements}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- {L, R} = list_from_form(Elements, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, product, Elements}, TypeNames, RecDict, VarDict) ->
+ {L, R} = list_from_form(Elements, TypeNames, RecDict, VarDict),
{t_product(L), R};
-t_from_form({type, _L, queue, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, queue, []}, _TypeNames, _RecDict, _VarDict) ->
{t_queue(), []};
t_from_form({type, _L, range, [From, To]} = Type,
- _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+ _TypeNames, _RecDict, _VarDict) ->
case {erl_eval:partial_eval(From), erl_eval:partial_eval(To)} of
{{integer, _, FromVal}, {integer, _, ToVal}} ->
{t_from_range(FromVal, ToVal), []};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Type])})
end;
-t_from_form({type, _L, record, [Name|Fields]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- record_from_form(Name, Fields, TypeNames, InOpaque, RecDict, VarDict);
-t_from_form({type, _L, reference, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, record, [Name|Fields]}, TypeNames, RecDict, VarDict) ->
+ record_from_form(Name, Fields, TypeNames, RecDict, VarDict);
+t_from_form({type, _L, reference, []}, _TypeNames, _RecDict, _VarDict) ->
{t_reference(), []};
-t_from_form({type, _L, set, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, set, []}, _TypeNames, _RecDict, _VarDict) ->
{t_set(), []};
-t_from_form({type, _L, string, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, string, []}, _TypeNames, _RecDict, _VarDict) ->
{t_string(), []};
-t_from_form({type, _L, term, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, term, []}, _TypeNames, _RecDict, _VarDict) ->
{t_any(), []};
-t_from_form({type, _L, tid, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, tid, []}, _TypeNames, _RecDict, _VarDict) ->
{t_tid(), []};
-t_from_form({type, _L, timeout, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, timeout, []}, _TypeNames, _RecDict, _VarDict) ->
{t_timeout(), []};
-t_from_form({type, _L, tuple, any}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, tuple, any}, _TypeNames, _RecDict, _VarDict) ->
{t_tuple(), []};
-t_from_form({type, _L, tuple, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
- {L, R} = list_from_form(Args, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, tuple, Args}, TypeNames, RecDict, VarDict) ->
+ {L, R} = list_from_form(Args, TypeNames, RecDict, VarDict),
{t_tuple(L), R};
-t_from_form({type, _L, union, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
- {L, R} = list_from_form(Args, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, union, Args}, TypeNames, RecDict, VarDict) ->
+ {L, R} = list_from_form(Args, TypeNames, RecDict, VarDict),
{t_sup(L), R};
-t_from_form({type, _L, Name, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
+t_from_form({type, _L, Name, Args}, TypeNames, RecDict, VarDict) ->
ArgsLen = length(Args),
case lookup_type(Name, ArgsLen, RecDict) of
{type, {_Module, Type, ArgNames}} ->
@@ -3685,13 +4250,12 @@ t_from_form({type, _L, Name, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
List = lists:zipwith(
fun(ArgName, ArgType) ->
{Ttemp, _R} = t_from_form(ArgType, TypeNames,
- InOpaque, RecDict,
- VarDict),
+ RecDict, VarDict),
{ArgName, Ttemp}
end,
ArgNames, Args),
TmpVarDict = dict:from_list(List),
- {T, R} = t_from_form(Type, [{type, Name}|TypeNames], InOpaque,
+ {T, R} = t_from_form(Type, [{type, Name}|TypeNames],
RecDict, TmpVarDict),
case lists:member({type, Name}, R) of
true -> {t_limit(T, ?REC_TYPE_LIMIT), R};
@@ -3706,13 +4270,12 @@ t_from_form({type, _L, Name, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
List = lists:zipwith(
fun(ArgName, ArgType) ->
{Ttemp, _R} = t_from_form(ArgType, TypeNames,
- InOpaque, RecDict,
- VarDict),
+ RecDict, VarDict),
{ArgName, Ttemp}
end,
ArgNames, Args),
TmpVarDict = dict:from_list(List),
- {T, R} = t_from_form(Type, [{opaque, Name}|TypeNames], true,
+ {T, R} = t_from_form(Type, [{opaque, Name}|TypeNames],
RecDict, TmpVarDict),
case lists:member({opaque, Name}, R) of
true -> {t_limit(T, ?REC_TYPE_LIMIT), R};
@@ -3720,27 +4283,21 @@ t_from_form({type, _L, Name, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
end;
false -> {t_any(), [{opaque, Name}]}
end,
- Tret =
- case InOpaque of
- true -> Rep;
- false ->
- t_from_form({opaque, -1, Name, {Module, Args, Rep}},
- RecDict, VarDict)
- end,
+ Tret = t_from_form({opaque, -1, Name, {Module, Args, Rep}},
+ RecDict, VarDict),
{Tret, Rret};
error ->
Msg = io_lib:format("Unable to find type ~w/~w\n", [Name, ArgsLen]),
throw({error, Msg})
end;
-t_from_form({opaque, _L, Name, {Mod, Args, Rep}}, _TypeNames, _InOpaque,
+t_from_form({opaque, _L, Name, {Mod, Args, Rep}}, _TypeNames,
_RecDict, _VarDict) ->
case Args of
[] -> {t_opaque(Mod, Name, Args, Rep), []};
_ -> throw({error, "Polymorphic opaque types not supported yet"})
end.
-record_from_form({atom, _, Name}, ModFields, TypeNames, InOpaque, RecDict,
- VarDict) ->
+record_from_form({atom, _, Name}, ModFields, TypeNames, RecDict, VarDict) ->
case can_unfold_more({record, Name}, TypeNames) of
true ->
case lookup_record(Name, RecDict) of
@@ -3751,11 +4308,11 @@ record_from_form({atom, _, Name}, ModFields, TypeNames, InOpaque, RecDict,
{DeclFields1, R1} =
case lists:all(fun(Elem) -> Elem end, AreTyped) of
true -> {DeclFields, []};
- false -> fields_from_form(DeclFields, TypeNames1, InOpaque,
+ false -> fields_from_form(DeclFields, TypeNames1,
RecDict, dict:new())
end,
{GetModRec, R2} = get_mod_record(ModFields, DeclFields1,
- TypeNames1, InOpaque,
+ TypeNames1,
RecDict, VarDict),
case GetModRec of
{error, FieldName} ->
@@ -3772,13 +4329,11 @@ record_from_form({atom, _, Name}, ModFields, TypeNames, InOpaque, RecDict,
false -> {t_any(), []}
end.
-get_mod_record([], DeclFields, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+get_mod_record([], DeclFields, _TypeNames, _RecDict, _VarDict) ->
{{ok, DeclFields}, []};
-get_mod_record(ModFields, DeclFields, TypeNames, InOpaque, RecDict,
- VarDict) ->
+get_mod_record(ModFields, DeclFields, TypeNames, RecDict, VarDict) ->
DeclFieldsDict = orddict:from_list(DeclFields),
- {ModFieldsDict, R} = build_field_dict(ModFields, TypeNames, InOpaque,
+ {ModFieldsDict, R} = build_field_dict(ModFields, TypeNames,
RecDict, VarDict),
case get_mod_record(DeclFieldsDict, ModFieldsDict, []) of
{error, _FieldName} = Error -> {Error, R};
@@ -3788,17 +4343,16 @@ get_mod_record(ModFields, DeclFields, TypeNames, InOpaque, RecDict,
R}
end.
-build_field_dict(FieldTypes, TypeNames, InOpaque, RecDict, VarDict) ->
- build_field_dict(FieldTypes, TypeNames, InOpaque, RecDict, VarDict, []).
+build_field_dict(FieldTypes, TypeNames, RecDict, VarDict) ->
+ build_field_dict(FieldTypes, TypeNames, RecDict, VarDict, []).
build_field_dict([{type, _, field_type, [{atom, _, Name}, Type]}|Left],
- TypeNames, InOpaque, RecDict, VarDict, Acc) ->
- {T, R1} = t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict, Acc) ->
+ {T, R1} = t_from_form(Type, TypeNames, RecDict, VarDict),
NewAcc = [{Name, T}|Acc],
- {D, R2} = build_field_dict(Left, TypeNames, InOpaque, RecDict, VarDict,
- NewAcc),
+ {D, R2} = build_field_dict(Left, TypeNames, RecDict, VarDict, NewAcc),
{D, R1 ++ R2};
-build_field_dict([], _TypeNames, _InOpaque, _RecDict, _VarDict, Acc) ->
+build_field_dict([], _TypeNames, _RecDict, _VarDict, Acc) ->
{orddict:from_list(Acc), []}.
get_mod_record([{FieldName, DeclType}|Left1],
@@ -3817,19 +4371,19 @@ get_mod_record(DeclFields, [], Acc) ->
get_mod_record(_, [{FieldName2, _ModType}|_], _Acc) ->
{error, FieldName2}.
-fields_from_form([], _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+fields_from_form([], _TypeNames, _RecDict, _VarDict) ->
{[], []};
-fields_from_form([{Name, Type}|Tail], TypeNames, InOpaque, RecDict,
+fields_from_form([{Name, Type}|Tail], TypeNames, RecDict,
VarDict) ->
- {T, R1} = t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict),
- {F, R2} = fields_from_form(Tail, TypeNames, InOpaque, RecDict, VarDict),
+ {T, R1} = t_from_form(Type, TypeNames, RecDict, VarDict),
+ {F, R2} = fields_from_form(Tail, TypeNames, RecDict, VarDict),
{[{Name, T}|F], R1 ++ R2}.
-list_from_form([], _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+list_from_form([], _TypeNames, _RecDict, _VarDict) ->
{[], []};
-list_from_form([H|Tail], TypeNames, InOpaque, RecDict, VarDict) ->
- {T, R1} = t_from_form(H, TypeNames, InOpaque, RecDict, VarDict),
- {L, R2} = list_from_form(Tail, TypeNames, InOpaque, RecDict, VarDict),
+list_from_form([H|Tail], TypeNames, RecDict, VarDict) ->
+ {T, R1} = t_from_form(H, TypeNames, RecDict, VarDict),
+ {L, R2} = list_from_form(Tail, TypeNames, RecDict, VarDict),
{[T|L], R1 ++ R2}.
-spec t_form_to_string(parse_form()) -> string().
@@ -3852,10 +4406,10 @@ t_form_to_string({op, _L, _Op, _Arg1, _Arg2} = Op) ->
t_form_to_string({ann_type, _L, [Var, Type]}) ->
t_form_to_string(Var) ++ "::" ++ t_form_to_string(Type);
t_form_to_string({paren_type, _L, [Type]}) ->
- io_lib:format("(~s)", [t_form_to_string(Type)]);
+ flat_format("(~s)", [t_form_to_string(Type)]);
t_form_to_string({remote_type, _L, [{atom, _, Mod}, {atom, _, Name}, Args]}) ->
ArgString = "(" ++ string:join(t_form_to_string_list(Args), ",") ++ ")",
- io_lib:format("~w:~w", [Mod, Name]) ++ ArgString;
+ flat_format("~w:~w", [Mod, Name]) ++ ArgString;
t_form_to_string({type, _L, arity, []}) -> "arity()";
t_form_to_string({type, _L, binary, []}) -> "binary()";
t_form_to_string({type, _L, binary, [Base, Unit]} = Type) ->
@@ -3866,9 +4420,9 @@ t_form_to_string({type, _L, binary, [Base, Unit]} = Type) ->
{0, 0} -> "<<>>";
{8, 0} -> "binary()";
{1, 0} -> "bitstring()";
- {0, B} -> lists:flatten(io_lib:format("<<_:~w>>", [B]));
- {U, 0} -> lists:flatten(io_lib:format("<<_:_*~w>>", [U]));
- {U, B} -> lists:flatten(io_lib:format("<<_:~w,_:_*~w>>", [B, U]))
+ {0, B} -> flat_format("<<_:~w>>", [B]);
+ {U, 0} -> flat_format("<<_:_*~w>>", [U]);
+ {U, B} -> flat_format("<<_:~w,_:_*~w>>", [B, U])
end;
_ -> io_lib:format("Badly formed bitstr type ~w", [Type])
end;
@@ -3894,16 +4448,16 @@ t_form_to_string({type, _L, product, Elements}) ->
t_form_to_string({type, _L, range, [From, To]} = Type) ->
case {erl_eval:partial_eval(From), erl_eval:partial_eval(To)} of
{{integer, _, FromVal}, {integer, _, ToVal}} ->
- io_lib:format("~w..~w", [FromVal, ToVal]);
- _ -> io_lib:format("Badly formed type ~w",[Type])
+ flat_format("~w..~w", [FromVal, ToVal]);
+ _ -> flat_format("Badly formed type ~w",[Type])
end;
t_form_to_string({type, _L, record, [{atom, _, Name}]}) ->
- io_lib:format("#~w{}", [Name]);
+ flat_format("#~w{}", [Name]);
t_form_to_string({type, _L, record, [{atom, _, Name}|Fields]}) ->
FieldString = string:join(t_form_to_string_list(Fields), ","),
- io_lib:format("#~w{~s}", [Name, FieldString]);
+ flat_format("#~w{~s}", [Name, FieldString]);
t_form_to_string({type, _L, field_type, [{atom, _, Name}, Type]}) ->
- io_lib:format("~w::~s", [Name, t_form_to_string(Type)]);
+ flat_format("~w::~s", [Name, t_form_to_string(Type)]);
t_form_to_string({type, _L, term, []}) -> "term()";
t_form_to_string({type, _L, timeout, []}) -> "timeout()";
t_form_to_string({type, _L, tuple, any}) -> "tuple()";
@@ -3916,8 +4470,8 @@ t_form_to_string({type, _L, Name, []} = T) ->
catch throw:{error, _} -> atom_to_string(Name) ++ "()"
end;
t_form_to_string({type, _L, Name, List}) ->
- io_lib:format("~w(~s)",
- [Name, string:join(t_form_to_string_list(List), ",")]).
+ flat_format("~w(~s)",
+ [Name, string:join(t_form_to_string_list(List), ",")]).
t_form_to_string_list(List) ->
t_form_to_string_list(List, []).
@@ -3930,7 +4484,7 @@ t_form_to_string_list([], Acc) ->
-spec atom_to_string(atom()) -> string().
atom_to_string(Atom) ->
- lists:flatten(io_lib:format("~w", [Atom])).
+ flat_format("~w", [Atom]).
%%=============================================================================
%%
@@ -4002,6 +4556,29 @@ can_unfold_more(TypeName, TypeNames) ->
Fun = fun(E, Acc) -> case E of TypeName -> Acc + 1; _ -> Acc end end,
lists:foldl(Fun, 0, TypeNames) < ?REC_TYPE_LIMIT.
+-spec do_opaque(erl_type(), opaques(), fun((_) -> T)) -> T.
+
+%% Probably a little faster than calling t_unopaque/2.
+%% Unions that are due to opaque types are unopaqued.
+do_opaque(?opaque(_) = Type, Opaques, Pred) ->
+ case Opaques =:= 'universe' orelse is_opaque_type(Type, Opaques) of
+ true -> do_opaque(t_opaque_structure(Type), Opaques, Pred);
+ false -> Pred(Type)
+ end;
+do_opaque(?union(List) = Type, Opaques, Pred) ->
+ [A,B,F,I,L,N,T,M,O,R] = List,
+ if O =:= ?none -> Pred(Type);
+ true ->
+ case Opaques =:= 'universe' orelse is_opaque_type(O, Opaques) of
+ true ->
+ S = t_opaque_structure(O),
+ do_opaque(t_sup([A,B,F,I,L,N,T,M,S,R]), Opaques, Pred);
+ false -> Pred(Type)
+ end
+ end;
+do_opaque(Type, _Opaques, Pred) ->
+ Pred(Type).
+
%% -----------------------------------
%% Set
%%
@@ -4068,7 +4645,7 @@ set_size(Set) ->
set_to_string(Set) ->
L = [case is_atom(X) of
true -> io_lib:write_string(atom_to_list(X), $'); % stupid emacs '
- false -> io_lib:format("~w", [X])
+ false -> flat_format("~w", [X])
end || X <- set_to_list(Set)],
string:join(L, " | ").
@@ -4077,6 +4654,9 @@ set_min([H|_]) -> H.
set_max(Set) ->
hd(lists:reverse(Set)).
+flat_format(F, S) ->
+ lists:flatten(io_lib:format(F, S)).
+
%%=============================================================================
%%
%% Utilities for the binary type
@@ -4131,6 +4711,11 @@ handle_base(Unit, Pos) when Pos >= 0 ->
handle_base(Unit, Neg) ->
(Unit+(Neg rem Unit)) rem Unit.
+family(L) ->
+ R = sofs:relation(L),
+ F = sofs:relation_to_family(R),
+ sofs:to_external(F).
+
%%=============================================================================
%% Consistency-testing function(s) below
%%=============================================================================
diff --git a/lib/kernel/doc/src/file.xml b/lib/kernel/doc/src/file.xml
index 305b9fed2b..7b8d2940c1 100644
--- a/lib/kernel/doc/src/file.xml
+++ b/lib/kernel/doc/src/file.xml
@@ -1744,16 +1744,16 @@
<item>The chunk size used by the erlang fallback to send
data. If using the fallback, this should be set to a value
which comfortably fits in the systems memory. Default is 20 MB.</item>
+ <tag><c>use_threads</c></tag>
+ <item>Instruct the emulator to use the async thread pool for the
+ sendfile system call. This could be usefull if the OS you are running
+ on does not properly support non-blocking sendfile calls. Do note that
+ using async threads potentially makes your system volnerable to slow
+ client attacks. If set to true and no async threads are available,
+ the sendfile call will return <c>{error,einval}</c>.
+ Introduced in 17.0. Default is false.</item>
</taglist>
</p>
- <p>On operating systems with thread support, it is recommended to use
- async threads. See the command line flag
- <c>+A</c> in <seealso marker="erts:erl">erl(1)</seealso>. If it is not
- possible to use async threads for sendfile, it is recommended to use
- a relatively small value for the send buffer on the socket. Otherwise
- the Erlang VM might loose some of its soft realtime guarantees.
- Which size to use depends on the OS/hardware and the requirements
- of the application.</p>
</desc>
</func>
<func>
diff --git a/lib/kernel/src/file.erl b/lib/kernel/src/file.erl
index b5152018e0..23cf74f80f 100644
--- a/lib/kernel/src/file.erl
+++ b/lib/kernel/src/file.erl
@@ -111,7 +111,8 @@
-type date_time() :: calendar:datetime().
-type posix_file_advise() :: 'normal' | 'sequential' | 'random'
| 'no_reuse' | 'will_need' | 'dont_need'.
--type sendfile_option() :: {chunk_size, non_neg_integer()}.
+-type sendfile_option() :: {chunk_size, non_neg_integer()}
+ | {use_threads, boolean()}.
-type file_info_option() :: {'time', 'local'} | {'time', 'universal'}
| {'time', 'posix'}.
%%% BIFs
@@ -1229,8 +1230,7 @@ change_time(Name, {{AY, AM, AD}, {AH, AMin, ASec}}=Atime,
sendfile(File, _Sock, _Offet, _Bytes, _Opts) when is_pid(File) ->
{error, badarg};
sendfile(File, Sock, Offset, Bytes, []) ->
- sendfile(File, Sock, Offset, Bytes, ?MAX_CHUNK_SIZE, [], [],
- false, false, false);
+ sendfile(File, Sock, Offset, Bytes, ?MAX_CHUNK_SIZE, [], [], []);
sendfile(File, Sock, Offset, Bytes, Opts) ->
ChunkSize0 = proplists:get_value(chunk_size, Opts, ?MAX_CHUNK_SIZE),
ChunkSize = if ChunkSize0 > ?MAX_CHUNK_SIZE ->
@@ -1240,8 +1240,7 @@ sendfile(File, Sock, Offset, Bytes, Opts) ->
%% Support for headers, trailers and options has been removed because the
%% Darwin and BSD API for using it does not play nice with
%% non-blocking sockets. See unix_efile.c for more info.
- sendfile(File, Sock, Offset, Bytes, ChunkSize, [], [],
- false,false,false).
+ sendfile(File, Sock, Offset, Bytes, ChunkSize, [], [], Opts).
%% sendfile/2
-spec sendfile(Filename, Socket) ->
@@ -1261,17 +1260,17 @@ sendfile(Filename, Sock) ->
%% Internal sendfile functions
sendfile(#file_descriptor{ module = Mod } = Fd, Sock, Offset, Bytes,
- ChunkSize, Headers, Trailers, Nodiskio, MNowait, Sync)
+ ChunkSize, Headers, Trailers, Opts)
when is_port(Sock) ->
case Mod:sendfile(Fd, Sock, Offset, Bytes, ChunkSize, Headers, Trailers,
- Nodiskio, MNowait, Sync) of
+ Opts) of
{error, enotsup} ->
sendfile_fallback(Fd, Sock, Offset, Bytes, ChunkSize,
Headers, Trailers);
Else ->
Else
end;
-sendfile(_,_,_,_,_,_,_,_,_,_) ->
+sendfile(_,_,_,_,_,_,_,_) ->
{error, badarg}.
%%%
diff --git a/lib/kernel/test/kernel_SUITE.erl b/lib/kernel/test/kernel_SUITE.erl
index 0f29d895e5..75f51eb076 100644
--- a/lib/kernel/test/kernel_SUITE.erl
+++ b/lib/kernel/test/kernel_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2014. 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
@@ -81,53 +81,59 @@ app_test(Config) when is_list(Config) ->
%% Test that appup allows upgrade from/downgrade to a maximum of two
%% major releases back.
appup_test(_Config) ->
+ do_appup_tests(create_test_vsns()).
+
+do_appup_tests({[],[]}) ->
+ {skip,"no previous releases available"};
+do_appup_tests({OkVsns,NokVsns}) ->
application:load(kernel),
{_,_,Vsn} = lists:keyfind(kernel,1,application:loaded_applications()),
AppupFile = filename:join([code:lib_dir(kernel),ebin,"kernel.appup"]),
{ok,[{Vsn,UpFrom,DownTo}=AppupScript]} = file:consult(AppupFile),
ct:log("~p~n",[AppupScript]),
- {OkVsns,NokVsns} = create_test_vsns(Vsn),
+ ct:log("Testing ok versions: ~p~n",[OkVsns]),
check_appup(OkVsns,UpFrom,{ok,[restart_new_emulator]}),
check_appup(OkVsns,DownTo,{ok,[restart_new_emulator]}),
+ ct:log("Testing not ok versions: ~p~n",[NokVsns]),
check_appup(NokVsns,UpFrom,error),
check_appup(NokVsns,DownTo,error),
ok.
-create_test_vsns(Current) ->
- [XStr,YStr|Rest] = string:tokens(Current,"."),
- X = list_to_integer(XStr),
- Y = list_to_integer(YStr),
- SecondMajor = vsn(X,Y-2),
- SecondMinor = SecondMajor ++ ".1.3",
- FirstMajor = vsn(X,Y-1),
- FirstMinor = FirstMajor ++ ".57",
- ThisMajor = vsn(X,Y),
- This =
- case Rest of
- [] ->
- [];
- ["1"] ->
- [ThisMajor];
- _ ->
- ThisMinor = ThisMajor ++ ".1",
- [ThisMajor,ThisMinor]
- end,
- OkVsns = This ++ [FirstMajor, FirstMinor, SecondMajor, SecondMinor],
-
- ThirdMajor = vsn(X,Y-3),
- ThirdMinor = ThirdMajor ++ ".10.12",
- Illegal = ThisMajor ++ ",1",
- Newer1Major = vsn(X,Y+1),
- Newer1Minor = Newer1Major ++ ".1",
- Newer2Major = ThisMajor ++ "1",
- NokVsns = [ThirdMajor,ThirdMinor,
- Illegal,
- Newer1Major,Newer1Minor,
- Newer2Major],
- {OkVsns,NokVsns}.
-
-vsn(X,Y) ->
- integer_to_list(X) ++ "." ++ integer_to_list(Y).
+create_test_vsns() ->
+ This = erlang:system_info(otp_release),
+ FirstMajor = previous_major(This),
+ SecondMajor = previous_major(FirstMajor),
+ ThirdMajor = previous_major(SecondMajor),
+ Ok = kernel_vsn([FirstMajor,SecondMajor]),
+ Nok0 = kernel_vsn([ThirdMajor]),
+ Nok = case Ok of
+ [Ok1|_] ->
+ [Ok1 ++ ",1" | Nok0]; % illegal
+ _ ->
+ Nok0
+ end,
+ {Ok,Nok}.
+
+previous_major("17") ->
+ "r16";
+previous_major("r"++Rel) ->
+ "r"++previous_major(Rel);
+previous_major(Rel) ->
+ integer_to_list(list_to_integer(Rel)-1).
+
+kernel_vsn([R|Rs]) ->
+ case test_server:is_release_available(R) of
+ true ->
+ {ok,N} = test_server:start_node(prevrel,peer,[{erl,[{release,R}]}]),
+ As = rpc:call(N,application,which_applications,[]),
+ {_,_,KV} = lists:keyfind(kernel,1,As),
+ test_server:stop_node(N),
+ [KV|kernel_vsn(Rs)];
+ false ->
+ kernel_vsn(Rs)
+ end;
+kernel_vsn([]) ->
+ [].
check_appup([Vsn|Vsns],Instrs,Expected) ->
case systools_relup:appup_search_for_version(Vsn, Instrs) of
diff --git a/lib/kernel/test/sendfile_SUITE.erl b/lib/kernel/test/sendfile_SUITE.erl
index 4cf4c6489d..2c741232c4 100644
--- a/lib/kernel/test/sendfile_SUITE.erl
+++ b/lib/kernel/test/sendfile_SUITE.erl
@@ -24,7 +24,14 @@
-compile(export_all).
-all() ->
+all() -> [{group,async_threads},
+ {group,no_async_threads}].
+
+groups() ->
+ [{async_threads,[],tcs()},
+ {no_async_threads,[],tcs()}].
+
+tcs() ->
[t_sendfile_small
,t_sendfile_big_all
,t_sendfile_big_size
@@ -33,6 +40,7 @@ all() ->
,t_sendfile_offset
,t_sendfile_sendafter
,t_sendfile_recvafter
+ ,t_sendfile_recvafter_remoteclose
,t_sendfile_sendduring
,t_sendfile_recvduring
,t_sendfile_closeduring
@@ -63,6 +71,14 @@ init_per_suite(Config) ->
end_per_suite(Config) ->
file:delete(proplists:get_value(big_file, Config)).
+init_per_group(async_threads,Config) ->
+ [{sendfile_opts,[{use_threads,true}]}|Config];
+init_per_group(no_async_threads,Config) ->
+ [{sendfile_opts,[{use_threads,false}]}|Config].
+
+end_per_group(_,_Config) ->
+ ok.
+
init_per_testcase(TC,Config) when TC == t_sendfile_recvduring;
TC == t_sendfile_sendduring ->
Filename = proplists:get_value(small_file, Config),
@@ -71,7 +87,7 @@ init_per_testcase(TC,Config) when TC == t_sendfile_recvduring;
{_Size, Data} = sendfile_file_info(Filename),
{ok,D} = file:open(Filename, [raw,binary,read]),
prim_file:sendfile(D, Sock, 0, 0, 0,
- [],[],false,false,false),
+ [],[],[]),
Data
end,
@@ -92,6 +108,7 @@ t_sendfile_small(Config) when is_list(Config) ->
Send = fun(Sock) ->
{Size, Data} = sendfile_file_info(Filename),
+ %% Here we make sure to test the sendfile/2 api
{ok, Size} = file:sendfile(Filename, Sock),
Data
end,
@@ -101,6 +118,7 @@ t_sendfile_small(Config) when is_list(Config) ->
t_sendfile_many_small(Config) when is_list(Config) ->
Filename = proplists:get_value(small_file, Config),
FileOpts = proplists:get_value(file_opts, Config, []),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
error_logger:add_report_handler(?MODULE,[self()]),
@@ -109,7 +127,7 @@ t_sendfile_many_small(Config) when is_list(Config) ->
N = 10000,
{ok,D} = file:open(Filename,[read|FileOpts]),
[begin
- {ok,Size} = file:sendfile(D,Sock,0,0,[])
+ {ok,Size} = file:sendfile(D,Sock,0,0,SendfileOpts)
end || _I <- lists:seq(1,N)],
file:close(D),
Size*N
@@ -127,11 +145,12 @@ t_sendfile_many_small(Config) when is_list(Config) ->
t_sendfile_big_all(Config) when is_list(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{ok, #file_info{size = Size}} =
file:read_file_info(Filename),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
Size
end,
@@ -140,12 +159,13 @@ t_sendfile_big_all(Config) when is_list(Config) ->
t_sendfile_big_size(Config) ->
Filename = proplists:get_value(big_file, Config),
FileOpts = proplists:get_value(file_opts, Config, []),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
SendAll = fun(Sock) ->
{ok, #file_info{size = Size}} =
file:read_file_info(Filename),
{ok,D} = file:open(Filename,[read|FileOpts]),
- {ok, Size} = file:sendfile(D, Sock,0,Size,[]),
+ {ok, Size} = file:sendfile(D, Sock,0,Size,SendfileOpts),
Size
end,
@@ -154,12 +174,13 @@ t_sendfile_big_size(Config) ->
t_sendfile_partial(Config) ->
Filename = proplists:get_value(small_file, Config),
FileOpts = proplists:get_value(file_opts, Config, []),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
SendSingle = fun(Sock) ->
{_Size, <<Data:5/binary,_/binary>>} =
sendfile_file_info(Filename),
{ok,D} = file:open(Filename,[read|FileOpts]),
- {ok,5} = file:sendfile(D,Sock,0,5,[]),
+ {ok,5} = file:sendfile(D,Sock,0,5,SendfileOpts),
file:close(D),
Data
end,
@@ -170,14 +191,14 @@ t_sendfile_partial(Config) ->
{ok,D} = file:open(Filename,[read|FileOpts]),
{ok, <<FData/binary>>} = file:read(D,5),
FSend = fun(Sock) ->
- {ok,5} = file:sendfile(D,Sock,0,5,[]),
+ {ok,5} = file:sendfile(D,Sock,0,5,SendfileOpts),
FData
end,
ok = sendfile_send(FSend),
SSend = fun(Sock) ->
- {ok,3} = file:sendfile(D,Sock,5,3,[]),
+ {ok,3} = file:sendfile(D,Sock,5,3,SendfileOpts),
SData
end,
@@ -190,12 +211,13 @@ t_sendfile_partial(Config) ->
t_sendfile_offset(Config) ->
Filename = proplists:get_value(small_file, Config),
FileOpts = proplists:get_value(file_opts, Config, []),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{_Size, <<_:5/binary,Data:3/binary,_/binary>> = AllData} =
sendfile_file_info(Filename),
{ok,D} = file:open(Filename,[read|FileOpts]),
- {ok,3} = file:sendfile(D,Sock,5,3,[]),
+ {ok,3} = file:sendfile(D,Sock,5,3,SendfileOpts),
{ok, AllData} = file:read(D,100),
file:close(D),
Data
@@ -205,10 +227,11 @@ t_sendfile_offset(Config) ->
t_sendfile_sendafter(Config) ->
Filename = proplists:get_value(small_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{Size, Data} = sendfile_file_info(Filename),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
ok = gen_tcp:send(Sock, <<2>>),
<<Data/binary,2>>
end,
@@ -217,10 +240,11 @@ t_sendfile_sendafter(Config) ->
t_sendfile_recvafter(Config) ->
Filename = proplists:get_value(small_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{Size, Data} = sendfile_file_info(Filename),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
ok = gen_tcp:send(Sock, <<1>>),
{ok,<<1>>} = gen_tcp:recv(Sock, 1),
<<Data/binary,1>>
@@ -228,8 +252,28 @@ t_sendfile_recvafter(Config) ->
ok = sendfile_send(Send).
+%% This tests specifically for a bug fixed in 17.0
+t_sendfile_recvafter_remoteclose(Config) ->
+ Filename = proplists:get_value(small_file, Config),
+
+ Send = fun(Sock, SFServer) ->
+ {Size, _Data} = sendfile_file_info(Filename),
+ {ok, Size} = file:sendfile(Filename, Sock),
+
+ %% Make sure the remote end has been closed
+ SFServer ! stop,
+ timer:sleep(100),
+
+ %% In the bug this returned {error,ebadf}
+ {error,closed} = gen_tcp:recv(Sock, 1),
+ -1
+ end,
+
+ ok = sendfile_send({127,0,0,1},Send,0).
+
t_sendfile_sendduring(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{ok, #file_info{size = Size}} =
@@ -238,7 +282,7 @@ t_sendfile_sendduring(Config) ->
timer:sleep(50),
ok = gen_tcp:send(Sock, <<2>>)
end),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
Size+1
end,
@@ -246,6 +290,7 @@ t_sendfile_sendduring(Config) ->
t_sendfile_recvduring(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{ok, #file_info{size = Size}} =
@@ -255,7 +300,7 @@ t_sendfile_recvduring(Config) ->
ok = gen_tcp:send(Sock, <<1>>),
{ok,<<1>>} = gen_tcp:recv(Sock, 1)
end),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
timer:sleep(1000),
Size+1
end,
@@ -264,6 +309,7 @@ t_sendfile_recvduring(Config) ->
t_sendfile_closeduring(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock,SFServPid) ->
spawn_link(fun() ->
@@ -272,13 +318,14 @@ t_sendfile_closeduring(Config) ->
end),
case erlang:system_info(thread_pool_size) of
0 ->
- {error, closed} = file:sendfile(Filename, Sock);
+ {error, closed} = sendfile(Filename, Sock,
+ SendfileOpts);
_Else ->
%% This can return how much has been sent or
%% {error,closed} depending on OS.
%% How much is sent impossible to know as
%% the socket was closed mid sendfile
- case file:sendfile(Filename, Sock) of
+ case sendfile(Filename, Sock, SendfileOpts) of
{error, closed} ->
ok;
{ok, Size} when is_integer(Size) ->
@@ -292,6 +339,7 @@ t_sendfile_closeduring(Config) ->
t_sendfile_crashduring(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
error_logger:add_report_handler(?MODULE,[self()]),
@@ -300,7 +348,7 @@ t_sendfile_crashduring(Config) ->
timer:sleep(50),
exit(die)
end),
- {error, closed} = file:sendfile(Filename, Sock),
+ {error, closed} = sendfile(Filename, Sock, SendfileOpts),
-1
end,
process_flag(trap_exit,true),
@@ -395,6 +443,16 @@ sendfile_file_info(File) ->
{ok, Data} = file:read_file(File),
{Size, Data}.
+sendfile(Filename,Sock,Opts) ->
+ case file:open(Filename, [read, raw, binary]) of
+ {error, Reason} ->
+ {error, Reason};
+ {ok, Fd} ->
+ Res = file:sendfile(Fd, Sock, 0, 0, Opts),
+ _ = file:close(Fd),
+ Res
+ end.
+
%% Error handler
diff --git a/lib/megaco/doc/src/notes.xml b/lib/megaco/doc/src/notes.xml
index a1039cbda0..f71166b1b1 100644
--- a/lib/megaco/doc/src/notes.xml
+++ b/lib/megaco/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,14 +13,14 @@
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>Megaco Release Notes</title>
<prepared>Lars Thors&eacute;n, H&aring;kan Mattsson, Micael Karlberg</prepared>
<docno></docno>
@@ -29,30 +29,43 @@
<file>notes.xml</file>
</header>
<p>This document describes the changes made to the Megaco system
- from version to version. The intention of this document is to
- list all incompatibilities as well as all enhancements and
- bugfixes for every release of Megaco. Each release of Megaco
- thus constitutes one section in this document. The title of each
- section is the version number of Megaco.</p>
-
-
- <section><title>Megaco 3.17.0.2</title>
+ from version to version. The intention of this document is to
+ list all incompatibilities as well as all enhancements and
+ bugfixes for every release of Megaco. Each release of Megaco
+ thus constitutes one section in this document. The title of each
+ section is the version number of Megaco.</p>
+
+
+ <section><title>Megaco 3.17.0.3</title>
<section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Introduced functionality for inspection of system and
- build configuration.</p>
- <p>
- Own Id: OTP-11196</p>
- </item>
- </list>
+ <list>
+ <item>
+ <p>Updated doc files to utf8.</p>
+ <p>Own Id: OTP-10907</p>
+ </item>
+ </list>
</section>
+
+ </section>
-</section>
+ <section><title>Megaco 3.17.0.2</title>
-<section><title>Megaco 3.17.0.1</title>
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Introduced functionality for inspection of system and
+ build configuration.</p>
+ <p>
+ Own Id: OTP-11196</p>
+ </item>
+ </list>
+ </section>
+
+ </section>
+
+ <section><title>Megaco 3.17.0.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/megaco/src/app/megaco.appup.src b/lib/megaco/src/app/megaco.appup.src
index da171e0c18..db59f55b55 100644
--- a/lib/megaco/src/app/megaco.appup.src
+++ b/lib/megaco/src/app/megaco.appup.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2014. 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
@@ -165,11 +165,21 @@
%% | | | | |
%% v v v v v
%% 3.17 <- 3.16.1 <- 3.15.2 <- 3.14.2 <- 3.11.4
+%% |
+%% v
+%% 3.17.0.1
+%% |
+%% v
+%% 3.17.0.2
+%% |
+%% v
+%% 3.17.0.3
%%
%%
{"%VSN%",
[
+ {"3.17.0.2", []},
{"3.17.0.1", []},
{"3.17", []},
{"3.16.0.3",
@@ -180,6 +190,7 @@
}
],
[
+ {"3.17.0.2", []},
{"3.17.0.1", []},
{"3.17", []},
{"3.16.0.3",
diff --git a/lib/megaco/src/binary/depend.mk b/lib/megaco/src/binary/depend.mk
index b9b86d3183..4225bc69dc 100644
--- a/lib/megaco/src/binary/depend.mk
+++ b/lib/megaco/src/binary/depend.mk
@@ -28,7 +28,7 @@
# This means that the ASN.1 runtime library will be inlined.
#
-ASN1_CT_OPTS += +noobj
+ASN1_CT_OPTS += +noobj +legacy_erlang_types
ifeq ($(MEGACO_INLINE_ASN1_RT),true)
# We need atleast version 1.4.6 of the ANS.1 application
ASN1_CT_OPTS += +inline
diff --git a/lib/megaco/vsn.mk b/lib/megaco/vsn.mk
index ea4e9f2eb8..01d429d0ae 100644
--- a/lib/megaco/vsn.mk
+++ b/lib/megaco/vsn.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2014. 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
@@ -18,6 +18,6 @@
# %CopyrightEnd%
APPLICATION = megaco
-MEGACO_VSN = 3.17.0.2
+MEGACO_VSN = 3.17.0.3
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(MEGACO_VSN)$(PRE_VSN)"
diff --git a/lib/observer/doc/src/Makefile b/lib/observer/doc/src/Makefile
index b43aeccd73..baeeeb1c65 100644
--- a/lib/observer/doc/src/Makefile
+++ b/lib/observer/doc/src/Makefile
@@ -34,6 +34,8 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# Target Specs
# ----------------------------------------------------
XML_APPLICATION_FILES = ref_man.xml
+XML_REF1_FILES = \
+ cdv.xml
XML_REF3_FILES = \
crashdump.xml \
observer.xml \
@@ -59,11 +61,10 @@ BOOK_FILES = book.xml
XML_FILES = \
$(BOOK_FILES) $(XML_CHAPTER_FILES) \
- $(XML_PART_FILES) $(XML_REF3_FILES) \
+ $(XML_PART_FILES) $(XML_REF1_FILES) $(XML_REF3_FILES) \
$(XML_APPLICATION_FILES) $(XML_REF6_FILES)
-ONLY_HTML_FILE = \
- crashdump_help.html
+ONLY_HTML_FILE =
GIF_FILES = \
et_processes.gif \
@@ -77,6 +78,7 @@ HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
INFO_FILE = ../../info
+MAN1_FILES = $(XML_REF1_FILES:%.xml=$(MAN1DIR)/%.1)
MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6)
@@ -106,6 +108,7 @@ html: gifs $(HTML_REF_MAN_FILE) $(ONLY_HTML_FILE:%=$(HTMLDIR)/%)
clean clean_docs:
rm -rf $(HTMLDIR)/*
+ rm -f $(MAN1DIR)/*
rm -f $(MAN3DIR)/*
rm -f $(MAN6DIR)/*
rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
@@ -115,7 +118,7 @@ clean clean_docs:
$(HTMLDIR)/$(ONLY_HTML_FILE):
$(INSTALL_DATA) $(ONLY_HTML_FILE) $@
-man: $(MAN3_FILES) $(MAN6_FILES)
+man: $(MAN1_FILES) $(MAN3_FILES) $(MAN6_FILES)
gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
@@ -135,6 +138,8 @@ release_docs_spec: docs
$(INSTALL_DATA) $(HTMLDIR)/* \
"$(RELSYSDIR)/doc/html"
$(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
+ $(INSTALL_DIR) "$(RELEASE_PATH)/man/man1"
+ $(INSTALL_DATA) $(MAN1DIR)/* "$(RELEASE_PATH)/man/man1"
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
$(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man6"
diff --git a/lib/observer/doc/src/cdv.xml b/lib/observer/doc/src/cdv.xml
new file mode 100644
index 0000000000..fc8f16bc4e
--- /dev/null
+++ b/lib/observer/doc/src/cdv.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE comref SYSTEM "comref.dtd">
+
+<comref>
+ <header>
+ <copyright>
+ <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 cdv program</title>
+ <prepared>Siri Hansen</prepared>
+ <responsible>Siri Hansen</responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>2013-10-015</date>
+ <rev>PA1</rev>
+ <file>cdv.xml</file>
+ </header>
+ <com>cdv</com>
+ <comsummary>Script used for starting the Crashdump Viewer from the
+ OS command line.
+ </comsummary>
+
+ <description>
+ <p>The <c>cdv</c> shell script can be found under the <c>priv</c>
+ directory of the <c>observer</c> application. The script is used
+ for starting the Crashdump Viewer tool from the OS command
+ line.</p>
+ <p>For Windows users, <c>cdv.bat</c> can be found in the same
+ location.</p>
+ </description>
+
+ <funcs>
+ <func>
+ <name>cdv [file]</name>
+ <fsummary>Start the Crashdump Viewer and load the given file.</fsummary>
+ <desc>
+ <p>The <c>file</c> arguments is optional. If not given, a file
+ dialog will pop up allowing the user to select a crashdump
+ from the file system.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</comref>
diff --git a/lib/observer/doc/src/crashdump.xml b/lib/observer/doc/src/crashdump.xml
index 5b58a52739..27e42e83b7 100644
--- a/lib/observer/doc/src/crashdump.xml
+++ b/lib/observer/doc/src/crashdump.xml
@@ -31,13 +31,14 @@
<checked></checked>
<date>2003-03-10</date>
<rev>PA1</rev>
- <file>crashdump.sgml</file>
+ <file>crashdump.xml</file>
</header>
<module>crashdump_viewer</module>
- <modulesummary>A HTML based tool for browsing Erlang crashdumps.</modulesummary>
+ <modulesummary>A WxWidgets based tool for browsing Erlang
+ crashdumps.</modulesummary>
<description>
- <p>The Crashdump Viewer is an HTML based tool for browsing Erlang
- crashdumps. Crashdump Viewer runs under the WebTool application.</p>
+ <p>The Crashdump Viewer is a WxWidgets based tool for browsing Erlang
+ crashdumps.</p>
<p>See the <seealso marker="crashdump_ug">user's guide</seealso>
for more information about how to get started with the Crashdump
@@ -46,16 +47,26 @@
<funcs>
<func>
<name>start() -> ok</name>
+ <name>start(File) -> ok</name>
<fsummary>Start the crashdump_viewer</fsummary>
+ <type>
+ <v>File = string()</v>
+ <d>The file name of the crashdump.</d>
+ </type>
<desc>
- <p>This function starts the <c>crashdump_viewer</c>.</p>
+ <p>This function starts the <c>crashdump_viewer</c> GUI and
+ loads the given crashdump.</p>
+
+ <p>If <c>File</c> is not given, a file dialog will be opened
+ where the crashdump can be selected.</p>
</desc>
</func>
<func>
<name>stop() -> ok</name>
<fsummary>Stop the crashdump_viewer</fsummary>
<desc>
- <p>This function stops the <c>crashdump_viewer</c>.</p>
+ <p>This function stops the <c>crashdump_viewer</c> and closes
+ all GUI windows.</p>
</desc>
</func>
</funcs>
diff --git a/lib/observer/doc/src/crashdump_help.html b/lib/observer/doc/src/crashdump_help.html
deleted file mode 100644
index 268b9495d6..0000000000
--- a/lib/observer/doc/src/crashdump_help.html
+++ /dev/null
@@ -1,307 +0,0 @@
-</<!doctype chapter PUBLIC "-//Stork//DTD chapter//EN">
-<!--
- ``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$
--->
-<html>
-<head>
-<title>Crashdump Viewer help</title>
-</head>
-<body BGCOLOR="#FFFFFF">
-<center>
-<a HREF="http://www.erlang.se"><img BORDER=0 ALT="[Erlang Systems]"
-SRC="min_head.gif"></a>
-</center>
-<blockquote>
- <h2>Information pages</h2>
-
- <p>Each menu item points to an information page. If no information
- is found for an item, the page will simply say "No information
- found". The reason for not finding any information about an item
- can be that the dump is truncated, that it is a dump from an old
- OTP release in which this item was not written or that the item
- simply wasn't present in the system at the point of failure.
-
- <p>If the dump was truncated, a warning is displayed.
-
- <p>Even if some information about an item exists, there might be
- empty fields if the dump originates from an old OTP release.
-
- <p>The value "-1" in any field means "unknown", and in most cases
- it means that the dump was truncated somewhere around this field.
-
- <p>Only some of the fields in the different information pages are
- described here. These are fields that to not exist in the raw
- crashdump, or in some way differs from the fields in the raw
- crashdump. Details about other field can be found in the user's
- guide for the Erlang runtime system, in the chapter "How to
- interpret the Erlang crash dumps". A link to this chapter can be
- found in the Crashdump Viewer's menu under documentation, and
- there are also direct links from the specific sections below to
- related information in "How to interpret the Erlang crash dumps".
-
- <a NAME="general_info">
- <h3>General information</h3>
-
- <p>This is the first page shown when a new dump is loaded into
- the system. It shows a very short overview of the dump.
-
- <p>'Node name' will only exist in dumps originating from OTP R9C
- and later.
-
- <p>The following fields are not described in the Erlang runtime
- system user's guide:
-
- <dl>
- <dt><strong>Crashdump created on</strong></dt>
- <dd>Time of failure.</dd>
-
- <dt><strong>Memory allocated</strong></dt>
- <dd>The total number of bytes allocated, equivalent to
- <code>c:memory(total)</code>. This will only be present in
- dumps from OTP R9C and later.</dd>
-
- <dt><strong>Memory maximum</strong></dt>
- <dd>The maximum number of bytes that has been allocated
- during the lifetime of the originating node. This will not be
- present in dumps older than OTP R9C, and even in newer
- releases it is only shown if the Erlang runtime system was run
- instrumented.</dd>
-
- <dt><strong>Atoms</strong></dt>
- <dd>If at all available in the dump, this is the total
- number of atoms in the atom table. If the size of the atom
- table is not available, the number of atoms visible in the
- dump is presented.</dd>
-
- <dt><strong>Processes, ETS tables and Funs</strong></dt>
- <dd>The number of processes, ETS tables and funs visible in
- the dump.</dd>
- </dl>
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#general_info>
- More...</a>
- </center>
-
-
- <a NAME="processes">
- <h3>Processes</h3>
-
- <p>The Process Information page shows a list of all processes
- found in the crashdump, including some short information about
- each process. By default the processes are sorted by their
- pids. To sort by other topic, click any heading in the process
- table.
-
- <p>Detailed information about a specific process is shown when
- the pid is clicked.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#processes>
- More...</a>
- </center>
-
-
-
- <a NAME="ports">
- <h3>Ports</h3>
-
- <p>The port information page shows all port information found in
- the dump.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#ports>
- More...</a>
- </center>
-
-
-
- <a NAME="ets_tables"><a NAME="internal_ets_tables">
- <h3>ETS tables</h3>
-
- <p>The ETS table information page shows all ETS table
- information found in the dump. The 'Id' is the same as the
- 'Table' field found in the raw crashdump, and 'Memory' is the
- 'Words' field from the raw crashdump translated into
- bytes. 'Type' is the type of table, and it can be either "hash"
- or "tree". For tree tables there will be no value in the
- 'Bucket' field.
-
- <p>Clicking a pid in the 'Owner' column takes you to the
- detailed information about the process owning the ETS table.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#ets_tables>
- More...</a>
- </center>
-
-
- <a NAME="timers">
- <h3>Timers</h3>
-
- <p>The timer information page shows all timer information found
- in the dump.
-
- <p>Clicking a pid in the 'Owner' column takes you to the
- detailed information about the process owning the timer.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#timers>
- More...</a>
- </center>
-
-
-
- <a NAME="funs">
- <h3>Fun table</h3>
-
- <p>The Fun table information page shows all Fun information
- found in the dump. Fun information will only exist in dumps from
- OTP R8B or later.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#funs>
- More...</a>
- </center>
-
-
-
- <a NAME="atoms">
- <h3>Atoms</h3>
-
- <p>The atoms information page lists all atoms found in the
- dump. The last created atom is listed first.
-
- <p>Note that if the dump is from OTP R8B or earlier, the raw
- dump lists the atoms in the opposite order and the Crashdump
- Viewer reverses them. This means that there is no problem if the
- dump is not truncated. However, if the dump is truncated, the
- last atoms might not be shown at all!!
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#atoms>
- More...</a>
- </center>
-
-
- <a NAME="distribution_info">
- <h3>Distribution information</h3>
-
- <p>The distribution information page shows all distribution
- information found in the dump.
-
- <p>If the page shows "Not alive", it means that the node was not
- distributed.
-
- <p>It the node was distributed, all connected nodes are
- shown. Visible nodes are alive nodes with a living connection to
- the originating node. Hidden nodes are the same as visible
- nodes, except they are started with the "-hidden" flag. Not
- connected nodes are nodes that are not connected to the
- originating node anymore, but references (i.e. process or port
- identitifiers) exist.
-
- <p>'Links/Monitors' may contain information about links or
- monitors between processes on the originating node and the
- connected node.
-
- <p>'Extra Info' may contain debug information (i.e. special
- information written if the emulator is debug compiled) or error
- information.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#distribution_info>
- More...</a>
- </center>
-
-
- <a NAME="loaded_modules">
- <h3>Loaded modules</h3>
-
- <p>The loaded modules information page shows all modules that
- were loaded on the originating node, and the current size of the
- code. If old code exsits, the old size is also shown.
-
- <p>Detailed information about a specific module is shown when
- the module name is clicked.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#loaded_modules>
- More...</a>
- </center>
-
-
- <a NAME="internal_tables">
- <h3>Internal tables</h3>
-
- <p>Internal tables are shown in two information pages: hash
- tables and index tables.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#internal_tables>
- More...</a>
- </center>
-
-
- <a NAME="memory">
- <h3>Memory</h3>
-
- <p>Memory information is divided into three pages.
-
- <p>The first page, <strong>Memory</strong>, shows information
- similar to what you can obtain on a living node with
- <code>c:memory()</code>. This will only be present in dumps from
- OTP R9C and later.
- <a href=/crashdump_erts_doc/crash_dump.html#memory>More...</a>
-
- <p>The <strong>Allocated areas</strong> page shows information
- similar to what you can obtain on a living node with
- <code>erlang:system_info(allocated_areas)</code>.
- <a href=/crashdump_erts_doc/crash_dump.html#allocated_areas>More...</a>
-
- <p>The <strong>Allocator information</strong> page shows
- information about allocators. The contents of the page will vary
- with the version.
- <a href=/crashdump_erts_doc/crash_dump.html#allocator>More...</a>
-
- <center>
-
- </center>
-
-
- <h3>Documentation</h3>
-
- <p>'Crashdump Viewer help' is this document.
-
- <p>'How to interpret Erlang crashdumps' is a document from the
- Erlang runtime system describing details in the raw
- crashdumps. Here you will also find information about each
- single field in the different information pages.
-
-</blockquote>
-<center>
-<hr>
-<font SIZE=-1>
-
-Copyright &copy; 1991-2003
-<a HREF="http://www.erlang.se">Ericsson Utvecklings AB</a><br>
-<!--#include virtual="/ssi/otp_footer.html"-->
-</font>
-</center>
-</body>
-</html>
diff --git a/lib/observer/doc/src/crashdump_ug.xml b/lib/observer/doc/src/crashdump_ug.xml
index fd4405df09..d22fb4cc40 100644
--- a/lib/observer/doc/src/crashdump_ug.xml
+++ b/lib/observer/doc/src/crashdump_ug.xml
@@ -13,12 +13,11 @@
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>Crashdump Viewer</title>
@@ -31,9 +30,9 @@
<section>
<title>Introduction</title>
- <p>The Crashdump Viewer is an HTML based tool for browsing Erlang
- crashdumps. Crashdump Viewer runs under the WebTool application.
- </p>
+ <p>The Crashdump Viewer is a WxWidgets based tool for browsing
+ Erlang crashdumps.
+ </p>
</section>
<section>
@@ -42,93 +41,357 @@
<p>The easiest way to start Crashdump Viewer is to use the
provided shell script named <c>cdv</c> with the full path to the
erlang crashdump as an argument. The script can be found in the
- priv directory of the <c>observer</c> application. This starts
- WebTool, Crashdump Viewer and a web browser, and loads the given
- file. The browser should then display a page named General
- Information which shows a short summary of the information in
- the crashdump.</p>
-
- <p>The default browser is Internet Explorer on Windows, open on Mac OS X,
- or else Firefox. To use another browser, give the browser's start command
- as the second argument to <c>cdv</c>. If the given browser name is
- not known to Crashdump Viewer, the browser argument is executed as
- a command with the start URL as the only argument.</p>
+ priv directory of the <c>observer</c> application. This starts the
+ Crashdump Viewer GUI and loads the given file. If no file name is
+ given, a file dialog will be opened where the file can be
+ selected.</p>
<p>Under Windows the batch file <c>cdv.bat</c> can be used.</p>
<p>It is also possible to start the Crashdump Viewer from within
an erlang node by calling <seealso
- marker="crashdump_viewer#start/0">crashdump_viewer:start/0</seealso>. This
- will automatically start WebTool and display the web address where
- WebTool can be found. See the documentation for the WebTool
- application for further information about how to use WebTool.</p>
-
- <p>Point your web browser to the address displayed, and you should
- now see the start page of WebTool. At the top of the page, you
- will see a link to "CrashDumpViewer". Click this link to get to
- the start page for Crashdump Viewer. (Note that if webtool is on
- localhost, you must configure your web browser to have direct
- connection to the internet, or you must set no proxy for
- localhost.)
- </p>
- <p>From the start page of Crashdump Viewer, push the "Load
- Crashdump" button to load a crashdump into the tool. Then enter
- the filename of the crashdump in the entry field and push the
- "Ok" button. This will bring you to the General Information
- page, i.e. the same page as the <c>cdv</c> script will open in
- the browser.
- </p>
- <p>Crashdumps generated by OTP R9C and later are loaded directly
- into the Crashdump Viewer, while dumps from earlier releases first
- are translated by the Crashdump Translater. The Crashdump
- Translater creates a new file with the same name as the original
- crashdump, but with the extension <c>.translated</c>. If there is
- no write access to the directory of the original file, you will be
- asked to enter a new path and filename for the translated file.
- </p>
+ marker="crashdump_viewer#start/0">crashdump_viewer:start/0</seealso>
+ or <seealso
+ marker="crashdump_viewer#start/1">crashdump_viewer:start/1</seealso>.</p>
</section>
<section>
- <title>Navigating</title>
- <p>The lefthand frame contains a menu. Menu folders can be
- expanded and collapsed by clicking the folder picture. When a menu
- item is clicked, the item information is shown in the big
- information frame.
- </p>
- <p>The filename frame above the information frame shows the full
- name of the currently viewed Erlang crashdump.
- </p>
- <p>To load a new crashdump, click the "Load New Crashdump" button
- in the menu frame.
- </p>
- <p>The various information shown in the information frame will
- contain links to process identifiers (PIDs) and port
- identifiers. Clicking one of these links will take you to the
- detailed information page for the process or port in question. Use
- the "Back" button in your browser to get back to the
- startingpoint. If the process or port resided on a remote node,
- there will be no information available. Clicking the link will
- then take you to the information about the remote node.
- </p>
+ <title>The graphical interface</title>
+
+ <p>The main window is opened when Crashdump Viewer has loaded a
+ crashdump. It contains a title bar, a menu bar, a number of
+ information panels and a status bar.</p>
+
+ <p>The title bar shows the name of the currently loaded
+ crashdump.</p>
+
+ <p>The menu bar contains a <em>File</em> menu and a <em>Help</em>
+ menu. From the File menu a new crashdump can be loaded or the tool
+ can be terminated. From the Help menu this user's guide and the
+ chapter "How to interpret the Erlang crash dumps" from the user's
+ guide for Erlang runtime system can be opened. "How to interpret
+ the Erlang crash dumps" describes the raw crashdumps in
+ detail. Here you will also find information about each single
+ field in the different information pages. This document can also
+ be found directly in the OTP online documentation, via the Erlang
+ runtime system user's guide.</p>
+
+ <p>The status bar at the bottom of the window will show a warning
+ if the currently loaded dump is truncated.</p>
+
+ <p>The centre area of the main window contains the information
+ panels. Each panel displays information about a specific item or a
+ list of items. A panel is selected by clicking the title of the
+ tab.</p>
+
+ <p>From panels that display lists of items, for example the
+ Processes- or the Ports panel, a new window with further
+ information can be opened by double clicking a row or by right
+ clicking the row and selecting an item from the drop down
+ menu. The new window is called a detail window. Detail windows can
+ be opened for processes, ports, nodes and modules.</p>
+
+ <p>The various information shown in a detail window might contain
+ links to processes or ports. Clicking one of these links will open
+ the detail window for the process or port in question. If the
+ process or port resided on a remote node, there will be no
+ information available. Clicking the link will then pop up a dialog
+ where you can choose whether to open the detail window for the
+ remote node or not.
+ </p>
+
+ <p>Some of the panels contain a left hand menu where sub items of
+ the panel's information area can be selected. Click on one of the
+ rows, and the information will be displayed in the right hand
+ information area.</p>
</section>
<section>
- <title>Help</title>
- <p>Further help on how to use the Crashdump Viewer tool can be
- found in the tool's menu under 'Documentation':
- </p>
- <p>'Crashdump Viewer help' is a short document describing each
- information page and any additional information that might occur,
- compared to the raw dump described in 'How to interpret Erlang
- crashdumps'.
- </p>
- <p>'How to interpret Erlang crashdumps' is a document from the
- Erlang runtime system describing details in the raw
- crashdumps. Here you will also find information about each single
- field in the different information pages. This document can also
- be found directly in the OTP online documentation, via the Erlang
- runtime system user's guide.
- </p>
+ <title>Data content</title>
+
+ <p>Each panel in the main window contains an information
+ page. If no information is found for an item, the page will be
+ empty. The reason for not finding any information about an item
+ can be that the dump is truncated, that it is a dump from an old
+ OTP release in which this item was not written or that the item
+ simply wasn't present in the system at the point of failure.</p>
+
+ <p>If the dump was truncated, a warning is displayed in the
+ status bar of the main window.</p>
+
+ <p>Even if some information about an item exists, there might be
+ empty fields if the dump originates from an old OTP release.</p>
+
+ <p>The value "-1" in any field means "unknown", and in most
+ cases it means that the dump was truncated somewhere around this
+ field.</p>
+
+ <p>The sections below describe some of the fields in the
+ different information panels. These are fields that do not exist
+ in the raw crashdump, or in some way differ from the fields in
+ the raw crashdump. Details about other fields can be found in
+ the user's guide for the Erlang runtime system, in the chapter
+ "How to interpret the Erlang crash dumps". That chapter can also
+ be opened from the Help menu in the Crashdump Viewer's main
+ window, and there are also direct links from the specific
+ sections below to related information in "How to interpret the
+ Erlang crash dumps".</p>
</section>
-</chapter>
+ <section>
+ <marker id="general_info"/>
+ <title>General information</title>
+
+ <p>The <em>General information</em> panel shows a short overview
+ of the dump.</p>
+
+ <p>The following fields are not described in the Erlang runtime
+ system user's guide:</p>
+
+ <taglist>
+ <tag><em>Crashdump created on</em></tag>
+ <item>Time of failure.</item>
+
+ <tag><em>Memory allocated</em></tag>
+ <item>The total number of bytes allocated, equivalent to
+ <c>c:memory(total)</c>.</item>
+
+ <tag><em>Memory maximum</em></tag>
+ <item>The maximum number of bytes that has been allocated during
+ the lifetime of the originating node. This will only be shown if
+ the Erlang runtime system was run instrumented.</item>
+
+ <tag><em>Atoms</em></tag>
+ <item>If available in the dump, this is the total number of
+ atoms in the atom table. If the size of the atom table is not
+ available, the number of atoms visible in the dump is
+ presented.</item>
+
+ <tag><em>Processes, ETS tables and Funs</em></tag>
+ <item>The number of processes, ETS tables and funs visible in
+ the dump.</item>
+ </taglist>
+
+ <p>
+ <seealso marker="erts:crash_dump#general_info">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="processes"/>
+ <title>Processes</title>
+
+ <p>The <em>Processes</em> panel shows a list of all processes
+ found in the crashdump, including some short information about
+ each process. By default the processes are sorted by their
+ pids. To sort by other topic, click the desired column
+ heading.</p>
+
+ <p>The <em>Memory</em> column shows the 'Memory' field which was
+ added to crashdumps in R16B01. This is the total amount of memory
+ used by the process. For crashdumps from earlier releases, this
+ column shows the 'Stack+heap' field. The value shown is always in
+ bytes.</p>
+
+ <p>To view detailed information about a specific process, double
+ click the row in the list or right click the row and select
+ "Properties for &lt;pid&gt;".</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#processes">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="ports"/>
+ <title>Ports</title>
+
+ <p>The <em>Ports</em> panel is similar to the <em>Processes</em>
+ panel, except it lists all ports found in the crashdump.</p>
+
+ <p>To see more details about a specific port, dobule click the row
+ or right click it and select "Properties for &lt;port&gt;". From
+ the right click menu you can also select "Properties for
+ &lt;pid&gt;", where &lt;pid&gt; is the process connected to the
+ port.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#ports">
+ More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="ets_tables"/><marker id="internal_ets_tables"/>
+ <title>ETS tables</title>
+
+ <p>The <em>ETS Tables</em> panel shows all ETS table information
+ found in the dump. The 'Id' is the same as the 'Table' field found
+ in the raw crashdump, and 'Memory' is the 'Words' field from the
+ raw crashdump translated into bytes. 'Type' is the type of table,
+ and it can be either "hash" or "tree". For tree tables there will
+ be no value in the 'Bucket' field.</p>
+
+ <p>To open the detailed information page about the owner process
+ of an ETS table, right click the row and select "Properties for
+ &lt;pid&gt;".</p>
+
+ <p>Double clicking a row in the ETS Tables panel has no
+ effect.</p>
+
+ <p>From the left hand menu you can also select to see internal ETS
+ tables.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#ets_tables">
+ More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="timers"/>
+ <title>Timers</title>
+
+ <p>The <em>Timers</em> panel shows all timer information found in
+ the dump.</p>
+
+ <p>To open the detailed information page about the owner process
+ of a timer, right click the row and select "Properties for
+ &lt;pid&gt;".</p>
+
+ <p>Double clicking a row in the Timers panel has no effect.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#timers">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="funs"/>
+ <title>Funs</title>
+
+ <p>The <em>Funs</em> panel shows all Fun information found in the
+ dump.</p>
+
+ <p>To open the detailed information page about the module to which
+ the fun belongs, right click the row and select "Properties for
+ &lt;mod&gt;".</p>
+
+ <p>Double clicking a row in the Funs panel has no effect.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#funs">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="atoms"/>
+ <title>Atoms</title>
+
+ <p>The <em>Atoms</em> panel lists all atoms found in the dump. By
+ default the atoms are sorted in creation order from first to
+ last. This is opposite of the raw crashdump where atoms are listed
+ from last to first, meaning that if the dump was truncated in the
+ middle of the atom list only the last created atoms will be seen
+ in the <em>Atoms</em> panel.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#atoms">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="distribution_info"/>
+ <title>Nodes</title>
+
+ <p>The <em>Nodes</em> panel shows a list of all external erlang
+ nodes which are referenced from the crashdump.</p>
+
+ <p>If the page is empty it either means that the crashed node was
+ not distributed, that it was distributed but had no references to
+ other nodes or that the dump was truncated.</p>
+
+ <p>If the node was distributed, all referenced nodes are
+ shown. The column named <em>Connection type</em> shows if the node
+ is visible, hidden or not connected. Visible nodes are alive nodes
+ with a living connection to the originating node. Hidden nodes are
+ the same as visible nodes, except they are started with the
+ <c>-hidden</c> flag. Not connected nodes are nodes that are not
+ connected to the originating node anymore, but references
+ (i.e. process or port identifiers) exist.</p>
+
+ <p>To see more detailed information about a node, double click the
+ row or right click the row and select "Properties for node
+ &lt;node&gt;". From the right click menu you can also select
+ "Properties for &lt;port&gt;", to open the detailed information
+ window for the controlling port.</p>
+
+ <p>In the detailed information window for a node, any exsisting
+ links and monitors between processes on the originating node and
+ the connected node are shown. <em>Extra Info</em> may contain
+ debug information (i.e. special information written if the
+ emulator is debug compiled) or error information.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#distribution_info">
+ More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="loaded_modules"/>
+ <title>Loaded modules</title>
+
+ <p>The <em>Modules</em> panel lists all modules that were loaded
+ on the originating node, and the current size of the code. If old
+ code exsits, the old size is also shown.</p>
+
+ <p>To see detailed information about a specific module, double
+ click the row or right click it and select "Properties for
+ &lt;mod&gt;".</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#loaded_modules">
+ More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="memory"/>
+ <title>Memory</title>
+
+ <p>The <em>Memory</em> panel shows memory and allocator
+ information. From the left hand menu you can select:</p>
+
+ <p>
+ <list>
+
+ <item><em>Memory</em> <seealso
+ marker="erts:crash_dump#memory">More...</seealso></item>
+
+ <item><em>Allocator Summary</em> - this page presents a
+ summary of values from all allocators below.</item>
+
+ <item><em>&lt;Allocator&gt;</em> - one entry per allocator
+ <seealso
+ marker="erts:crash_dump#allocator">More...</seealso></item>
+
+ <item><em>Allocated Areas</em> <seealso
+ marker="erts:crash_dump#allocated_areas">More...</seealso></item>
+
+ </list>
+ </p>
+ </section>
+
+ <section>
+ <marker id="internal_tables"/>
+ <title>Internal tables</title>
+
+ <p>On the <em>Internal Tables</em> panel you can choose from the
+ left hand menu to see hash tables or index tables.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#internal_tables">More...</seealso>
+ </p>
+ </section>
+</chapter>
diff --git a/lib/observer/doc/src/ref_man.xml b/lib/observer/doc/src/ref_man.xml
index 3230a1c9d3..c3805b2d86 100644
--- a/lib/observer/doc/src/ref_man.xml
+++ b/lib/observer/doc/src/ref_man.xml
@@ -38,5 +38,6 @@
<xi:include href="ttb.xml"/>
<xi:include href="etop.xml"/>
<xi:include href="crashdump.xml"/>
+ <xi:include href="cdv.xml"/>
</application>
diff --git a/lib/observer/priv/erlang_observer.png b/lib/observer/priv/erlang_observer.png
index 01723d210b..cf900a29e6 100644
--- a/lib/observer/priv/erlang_observer.png
+++ b/lib/observer/priv/erlang_observer.png
Binary files differ
diff --git a/lib/observer/src/Makefile b/lib/observer/src/Makefile
index 646892663f..c120865213 100644
--- a/lib/observer/src/Makefile
+++ b/lib/observer/src/Makefile
@@ -36,14 +36,33 @@ RELSYSDIR = $(RELEASE_PATH)/lib/observer-$(VSN)
MODULES= \
crashdump_viewer \
- crashdump_viewer_html \
+ cdv_atom_cb \
+ cdv_bin_cb \
+ cdv_detail_wx \
+ cdv_dist_cb \
+ cdv_ets_cb \
+ cdv_fun_cb \
+ cdv_gen_cb \
+ cdv_html_wx \
+ cdv_info_wx \
+ cdv_int_tab_cb \
+ cdv_mem_cb \
+ cdv_mod_cb \
+ cdv_multi_wx \
+ cdv_port_cb \
+ cdv_proc_cb \
+ cdv_table_wx \
+ cdv_term_cb \
+ cdv_timer_cb \
+ cdv_virtual_list_wx \
+ cdv_wx \
etop \
etop_tr \
etop_txt \
observer \
observer_app_wx \
+ observer_html_lib \
observer_lib \
- observer_wx \
observer_perf_wx \
observer_pro_wx \
observer_procinfo \
@@ -52,6 +71,7 @@ MODULES= \
observer_traceoptions_wx \
observer_tv_table \
observer_tv_wx \
+ observer_wx \
ttb \
ttb_et
diff --git a/lib/observer/src/cdv_atom_cb.erl b/lib/observer/src/cdv_atom_cb.erl
new file mode 100644
index 0000000000..46fce81b52
--- /dev/null
+++ b/lib/observer/src/cdv_atom_cb.erl
@@ -0,0 +1,48 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_atom_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ format/1]).
+
+-include_lib("wx/include/wx.hrl").
+
+%% Defines
+-define(COL_ID, 0).
+-define(COL_ATOM, ?COL_ID+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(Id) -> Id+1.
+
+col_spec() ->
+ [{"Creation order", ?wxLIST_FORMAT_CENTER, 100},
+ {"Atom", ?wxLIST_FORMAT_LEFT, 100}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:atoms(),
+ {Info,TW}.
+
+format({Bin,q}) when is_binary(Bin) ->
+ [$'|binary_to_list(Bin)];
+format({Bin,nq}) when is_binary(Bin) ->
+ lists:flatten(io_lib:format("~ts",[Bin]));
+format(D) ->
+ D.
diff --git a/lib/observer/src/cdv_bin_cb.erl b/lib/observer/src/cdv_bin_cb.erl
new file mode 100644
index 0000000000..0266047ee3
--- /dev/null
+++ b/lib/observer/src/cdv_bin_cb.erl
@@ -0,0 +1,82 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_bin_cb).
+
+-export([get_details/1,
+ detail_pages/0]).
+
+%% Callbacks for cdv_detail_wx
+get_details({_, {T,Key}}) ->
+ [{Key,Term}] = ets:lookup(T,Key),
+ {ok,{"Expanded Binary", Term, []}};
+get_details({cdv, Id}) ->
+ {ok,Bin} = crashdump_viewer:expand_binary(Id),
+ {ok,{"Expanded Binary", Bin, []}}.
+
+detail_pages() ->
+ [{"Binary", fun init_bin_page/2}].
+
+init_bin_page(Parent,Bin) ->
+ cdv_multi_wx:start_link(
+ Parent,
+ [{"Format \~p",cdv_html_wx,format_bin_fun("~p",Bin)},
+ {"Format \~tp",cdv_html_wx,format_bin_fun("~tp",Bin)},
+ {"Format \~w",cdv_html_wx,format_bin_fun("~w",Bin)},
+ {"Format \~s",cdv_html_wx,format_bin_fun("~s",Bin)},
+ {"Format \~ts",cdv_html_wx,format_bin_fun("~ts",Bin)},
+ {"Hex",cdv_html_wx,hex_binary_fun(Bin)},
+ {"Term",cdv_html_wx,binary_to_term_fun(Bin)}]).
+
+format_bin_fun(Format,Bin) ->
+ fun() ->
+ try io_lib:format(Format,[Bin]) of
+ Str -> plain_html(lists:flatten(Str))
+ catch error:badarg ->
+ Warning = "This binary can not be formatted with " ++ Format,
+ observer_html_lib:warning(Warning)
+ end
+ end.
+
+binary_to_term_fun(Bin) ->
+ fun() ->
+ try binary_to_term(Bin) of
+ Term -> plain_html(io_lib:format("~p",[Term]))
+ catch error:badarg ->
+ Warning = "This binary can not be coverted to an Erlang term",
+ observer_html_lib:warning(Warning)
+ end
+ end.
+
+-define(line_break,25).
+hex_binary_fun(Bin) ->
+ fun() ->
+ S = "<<" ++ format_hex(Bin,?line_break) ++ ">>",
+ plain_html(io_lib:format("~s",[S]))
+ end.
+
+format_hex(<<B1:4,B2:4>>,_) ->
+ [integer_to_list(B1,16),integer_to_list(B2,16)];
+format_hex(<<B1:4,B2:4,Bin/binary>>,0) ->
+ [integer_to_list(B1,16),integer_to_list(B2,16),$,,$\n,$\s,$\s
+ | format_hex(Bin,?line_break)];
+format_hex(<<B1:4,B2:4,Bin/binary>>,N) ->
+ [integer_to_list(B1,16),integer_to_list(B2,16),$,
+ | format_hex(Bin,N-1)].
+
+plain_html(Text) ->
+ observer_html_lib:plain_page(Text).
diff --git a/lib/observer/src/cdv_detail_wx.erl b/lib/observer/src/cdv_detail_wx.erl
new file mode 100644
index 0000000000..dc93507a36
--- /dev/null
+++ b/lib/observer/src/cdv_detail_wx.erl
@@ -0,0 +1,158 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_detail_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/3]).
+
+-export([init/1, handle_event/2, handle_cast/2, terminate/2, code_change/3,
+ handle_call/3, handle_info/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+-include("observer_defs.hrl").
+
+-record(state, {parent,
+ frame,
+ id,
+ pages=[]
+ }).
+
+%% Defines
+-define(ID_NOTEBOOK, 604).
+
+%% Detail view
+start_link(Id, ParentFrame, Callback) ->
+ wx_object:start_link(?MODULE, [Id, ParentFrame, Callback, self()], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([Id, ParentFrame, Callback, Parent]) ->
+ case Callback:get_details(Id) of
+ {ok,Details} ->
+ init(Id,ParentFrame,Callback,Parent,Details);
+ {yes_no, Info, Fun} ->
+ case observer_lib:display_yes_no_dialog(Info) of
+ ?wxID_YES -> Fun();
+ ?wxID_NO -> ok
+ end,
+ {stop,normal};
+ {info,Info} ->
+ observer_lib:display_info_dialog(Info),
+ {stop,normal}
+ end.
+
+init(Id,ParentFrame,Callback,Parent,{Title,Info,TW}) ->
+ Frame=wxFrame:new(ParentFrame, ?wxID_ANY, [Title],
+ [{style, ?wxDEFAULT_FRAME_STYLE}, {size, {850,600}}]),
+ MenuBar = wxMenuBar:new(),
+ create_menus(MenuBar),
+ wxFrame:setMenuBar(Frame, MenuBar),
+
+ Panel = wxPanel:new(Frame, []),
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ {InfoPanel,Pages} = create_pages(Panel,Callback:detail_pages(),[Info]),
+ wxSizer:add(Sizer, InfoPanel, [{proportion, 1}, {flag, ?wxEXPAND}]),
+
+ case TW of
+ [] ->
+ undefined;
+ _ ->
+ StatusBar = observer_lib:create_status_bar(Panel),
+ wxSizer:add(Sizer, StatusBar, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 0},
+ {border,4}]),
+ wxTextCtrl:writeText(StatusBar, TW),
+ StatusBar
+ end,
+
+ wxPanel:setSizer(Panel, Sizer),
+
+ wxFrame:connect(Frame, close_window),
+ wxMenu:connect(Frame, command_menu_selected),
+ wxFrame:show(Frame),
+ {Frame, #state{parent=Parent,
+ id=Id,
+ frame=Frame,
+ pages=Pages
+ }}.
+
+create_pages(Panel,[{_PageTitle,Fun}],FunArgs) ->
+ %% Only one page - don't create notebook
+ Page = init_panel(Panel, Fun, FunArgs),
+ {Page,[Page]};
+create_pages(Panel,PageSpecs,FunArgs) ->
+ Notebook = wxNotebook:new(Panel, ?ID_NOTEBOOK, [{style, ?wxBK_DEFAULT}]),
+ Pages = [init_tab(Notebook, PageTitle, Fun, FunArgs)
+ || {PageTitle,Fun} <- PageSpecs],
+ {Notebook, Pages}.
+
+init_tab(Notebook,Title,Fun,FunArgs) ->
+ Panel = init_panel(Notebook,Fun,FunArgs),
+ true = wxNotebook:addPage(Notebook, Panel, Title),
+ Panel.
+
+init_panel(ParentWin, Fun, FunArgs) ->
+ Panel = wxScrolledWindow:new(ParentWin),
+ wxScrolledWindow:enableScrolling(Panel,true,true),
+ wxScrolledWindow:setScrollbars(Panel,1,1,0,0),
+ Sizer = wxBoxSizer:new(?wxHORIZONTAL),
+ Window = apply(Fun, [Panel | FunArgs]),
+ wxSizer:add(Sizer, Window, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 1},
+ {border, 5}]),
+ wxPanel:setSizer(Panel, Sizer),
+ Panel.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Callbacks%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+handle_event(#wx{event=#wxClose{type=close_window}}, State) ->
+ {stop, normal, State};
+
+handle_event(#wx{id=?wxID_CLOSE, event=#wxCommand{type=command_menu_selected}},
+ State) ->
+ {stop, normal, State};
+
+handle_event(Event, _State) ->
+ error({unhandled_event, Event}).
+
+handle_info(_Info, State) ->
+ %% io:format("~p: ~p, Handle info: ~p~n", [?MODULE, ?LINE, _Info]),
+ {noreply, State}.
+
+handle_call(Call, From, _State) ->
+ error({unhandled_call, Call, From}).
+
+handle_cast(Cast, _State) ->
+ error({unhandled_cast, Cast}).
+
+terminate(_Reason, #state{parent=Parent,id=Id,frame=Frame}) ->
+ wx_object:cast(Parent,{detail_win_closed, Id}),
+ case Frame of
+ undefined -> ok;
+ _ -> wxFrame:destroy(Frame)
+ end,
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+create_menus(MenuBar) ->
+ Menus = [{"File", [#create_menu{id=?wxID_CLOSE, text="Close"}]}],
+ observer_lib:create_menus(Menus, MenuBar, new_window).
diff --git a/lib/observer/src/cdv_dist_cb.erl b/lib/observer/src/cdv_dist_cb.erl
new file mode 100644
index 0000000000..3860324d6f
--- /dev/null
+++ b/lib/observer/src/cdv_dist_cb.erl
@@ -0,0 +1,91 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_dist_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1,
+ get_details/1,
+ detail_pages/0]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Columns
+-define(COL_NAME, 0).
+-define(COL_TYPE, ?COL_NAME+1).
+-define(COL_CTRL, ?COL_TYPE+1).
+-define(COL_CH, ?COL_CTRL+1).
+-define(COL_CRE, ?COL_CH+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_CH);
+col_to_elem(?COL_NAME) -> #nod.name;
+col_to_elem(?COL_CH) -> #nod.channel;
+col_to_elem(?COL_CTRL) -> #nod.controller;
+col_to_elem(?COL_CRE) -> #nod.creation;
+col_to_elem(?COL_TYPE) -> #nod.conn_type.
+
+col_spec() ->
+ [{"Name", ?wxLIST_FORMAT_LEFT, 300},
+ {"Connection type", ?wxLIST_FORMAT_LEFT, 130},
+ {"Controller", ?wxLIST_FORMAT_LEFT, 130},
+ {"Channel", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Creation", ?wxLIST_FORMAT_RIGHT, 80}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:dist_info(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_CH,?COL_CTRL],true}.
+
+%% Callbacks for cdv_detail_wx
+get_details(Id) ->
+ case crashdump_viewer:node_info(Id) of
+ {ok,Info,TW} ->
+ Proplist = crashdump_viewer:to_proplist(record_info(fields,nod),Info),
+ Title = io_lib:format("~s (~s)",[Info#nod.name,Id]),
+ {ok,{Title,Proplist,TW}};
+ {error,not_found} ->
+ Info = "The node you are searching for could not be found.",
+ {info,Info}
+ end.
+
+detail_pages() ->
+ [{"General Information", fun init_gen_page/2}].
+
+init_gen_page(Parent, Info) ->
+ Fields = info_fields(),
+ cdv_info_wx:start_link(Parent,{Fields,Info,[]}).
+
+%%%-----------------------------------------------------------------
+%%% Internal
+info_fields() ->
+ [{"Overview",
+ [{"Name", name},
+ {"Type", conn_type},
+ {"Channel", channel},
+ {"Controller", {click,controller}},
+ {"Creation", creation},
+ {"Extra Info", error}]},
+ {scroll_boxes,
+ [{"Remote Links",1,{click,remote_links}},
+ {"Remote Monitors",1,{click,remote_mon}},
+ {"Remote Monitored By",1,{click,remote_mon_by}}]}].
diff --git a/lib/observer/src/cdv_ets_cb.erl b/lib/observer/src/cdv_ets_cb.erl
new file mode 100644
index 0000000000..2a5c170e58
--- /dev/null
+++ b/lib/observer/src/cdv_ets_cb.erl
@@ -0,0 +1,67 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_ets_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Defines
+-define(COL_ID, 0).
+-define(COL_NAME, ?COL_ID+1).
+-define(COL_SLOT, ?COL_NAME+1).
+-define(COL_OWNER, ?COL_SLOT+1).
+-define(COL_BUCK, ?COL_OWNER+1).
+-define(COL_OBJ, ?COL_BUCK+1).
+-define(COL_MEM, ?COL_OBJ+1).
+-define(COL_TYPE, ?COL_MEM+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(?COL_ID) -> #ets_table.id;
+col_to_elem(?COL_NAME) -> #ets_table.name;
+col_to_elem(?COL_SLOT) -> #ets_table.slot;
+col_to_elem(?COL_OWNER) -> #ets_table.pid;
+col_to_elem(?COL_TYPE) -> #ets_table.type;
+col_to_elem(?COL_BUCK) -> #ets_table.buckets;
+col_to_elem(?COL_OBJ) -> #ets_table.size;
+col_to_elem(?COL_MEM) -> #ets_table.memory.
+
+col_spec() ->
+ [{"Id", ?wxLIST_FORMAT_LEFT, 200},
+ {"Name", ?wxLIST_FORMAT_LEFT, 200},
+ {"Slot", ?wxLIST_FORMAT_RIGHT, 50},
+ {"Owner", ?wxLIST_FORMAT_CENTRE, 90},
+ {"Buckets", ?wxLIST_FORMAT_RIGHT, 50},
+ {"Objects", ?wxLIST_FORMAT_RIGHT, 50},
+ {"Memory", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Type", ?wxLIST_FORMAT_LEFT, 50}
+ ].
+
+get_info(Owner) ->
+ {ok,Info,TW} = crashdump_viewer:ets_tables(Owner),
+ {Info,TW}.
+
+get_detail_cols(all) ->
+ {[?COL_OWNER],false};
+get_detail_cols(_) ->
+ {[],false}.
diff --git a/lib/observer/src/cdv_fun_cb.erl b/lib/observer/src/cdv_fun_cb.erl
new file mode 100644
index 0000000000..689ef0e3bb
--- /dev/null
+++ b/lib/observer/src/cdv_fun_cb.erl
@@ -0,0 +1,58 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_fun_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Defines
+-define(COL_MOD, 0).
+-define(COL_UNIQ, ?COL_MOD+1).
+-define(COL_INDEX, ?COL_UNIQ+1).
+-define(COL_ADDR, ?COL_INDEX+1).
+-define(COL_NADDR, ?COL_ADDR+1).
+-define(COL_REFC, ?COL_NADDR+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_MOD);
+col_to_elem(?COL_MOD) -> #fu.module;
+col_to_elem(?COL_UNIQ) -> #fu.uniq;
+col_to_elem(?COL_INDEX) -> #fu.index;
+col_to_elem(?COL_ADDR) -> #fu.address;
+col_to_elem(?COL_NADDR) -> #fu.native_address;
+col_to_elem(?COL_REFC) -> #fu.refc.
+
+col_spec() ->
+ [{"Module", ?wxLIST_FORMAT_LEFT, 200},
+ {"Uniq", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Index", ?wxLIST_FORMAT_RIGHT, 50},
+ {"Address", ?wxLIST_FORMAT_LEFT, 120},
+ {"Native Address", ?wxLIST_FORMAT_LEFT, 120},
+ {"Refc", ?wxLIST_FORMAT_RIGHT, 50}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:funs(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_MOD],false}.
diff --git a/lib/observer/src/cdv_gen_cb.erl b/lib/observer/src/cdv_gen_cb.erl
new file mode 100644
index 0000000000..6be717d76d
--- /dev/null
+++ b/lib/observer/src/cdv_gen_cb.erl
@@ -0,0 +1,45 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-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(cdv_gen_cb).
+
+-export([get_info/0]).
+
+-include("crashdump_viewer.hrl").
+
+get_info() ->
+ {ok,Info,TW} = crashdump_viewer:general_info(),
+ Fields = info_fields(),
+ Proplist =
+ crashdump_viewer:to_proplist(record_info(fields,general_info),Info),
+ {Fields,Proplist,TW}.
+
+info_fields() ->
+ [{"General Information",
+ [{"Slogan",slogan},
+ {"Node name",node_name},
+ {"Crashdump created on",created},
+ {"System version",system_vsn},
+ {"Compiled",compile_time},
+ {"Taints",taints},
+ {"Memory allocated",{bytes,mem_tot}},
+ {"Memory maximum",{bytes,mem_max}},
+ {"Atoms",num_atoms},
+ {"Processes",num_procs},
+ {"ETS tables",num_ets},
+ {"Timers",num_timers},
+ {"Funs",num_fun}]}].
diff --git a/lib/observer/src/cdv_html_wx.erl b/lib/observer/src/cdv_html_wx.erl
new file mode 100644
index 0000000000..fe77a41f59
--- /dev/null
+++ b/lib/observer/src/cdv_html_wx.erl
@@ -0,0 +1,128 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_html_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2]).
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Records
+-record(state,
+ {panel,
+ expand_table,
+ expand_wins=[]}).
+
+start_link(ParentWin, Info) ->
+ wx_object:start_link(?MODULE, [ParentWin, Info], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([ParentWin, Fun]) when is_function(Fun) ->
+ init([ParentWin, Fun()]);
+init([ParentWin, {expand,HtmlText,Tab}]) ->
+ HtmlWin = observer_lib:html_window(ParentWin),
+ wxHtmlWindow:setPage(HtmlWin,HtmlText),
+ {HtmlWin, #state{panel=HtmlWin,expand_table=Tab}};
+init([ParentWin, HtmlText]) ->
+ HtmlWin = observer_lib:html_window(ParentWin),
+ wxHtmlWindow:setPage(HtmlWin,HtmlText),
+ {HtmlWin, #state{panel=HtmlWin}}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info(active, State) ->
+ {noreply, State};
+
+handle_info(Info, State) ->
+ io:format("~p:~p: Unhandled info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(Msg, _From, State) ->
+ io:format("~p~p: Unhandled Call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast({detail_win_closed, Id},#state{expand_wins=Opened0}=State) ->
+ Opened = lists:keydelete(Id, 1, Opened0),
+ {noreply, State#state{expand_wins=Opened}};
+
+handle_cast(Msg, State) ->
+ io:format("~p~p: Unhandled cast ~p~n",[?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+handle_event(#wx{event=#wxHtmlLink{type=command_html_link_clicked,
+ linkInfo=#wxHtmlLinkInfo{href=Target}}},
+ #state{expand_table=Tab}=State) ->
+ NewState=
+ case Target of
+ "#Binary?" ++ BinSpec ->
+ [{"offset",Off},{"size",Size},{"pos",Pos}] =
+ httpd:parse_query(BinSpec),
+ Id = {cdv, {list_to_integer(Off),
+ list_to_integer(Size),
+ list_to_integer(Pos)}},
+ expand(Id,cdv_bin_cb,State);
+ "#OBSBinary?" ++ BinSpec ->
+ [{"key1",Preview},{"key2",Size},{"key3",Hash}] =
+ httpd:parse_query(BinSpec),
+ Id = {obs, {Tab, {list_to_integer(Preview),
+ list_to_integer(Size),
+ list_to_integer(Hash)}}},
+ expand(Id,cdv_bin_cb,State);
+ "#Term?" ++ TermKeys ->
+ [{"key1",Key1},{"key2",Key2},{"key3",Key3}] =
+ httpd:parse_query(TermKeys),
+ Id = {cdv, {Tab,{list_to_integer(Key1),
+ list_to_integer(Key2),
+ list_to_integer(Key3)}}},
+ expand(Id,cdv_term_cb,State);
+ _ ->
+ cdv_virtual_list_wx:start_detail_win(Target),
+ State
+ end,
+ {noreply, NewState};
+
+handle_event(Event, State) ->
+ io:format("~p:~p: Unhandled event ~p\n", [?MODULE,?LINE,Event]),
+ {noreply, State}.
+
+%%%-----------------------------------------------------------------
+%%% Internal
+expand(Id,Callback,#state{expand_wins=Opened0}=State) ->
+ Opened =
+ case lists:keyfind(Id,1,Opened0) of
+ false ->
+ EW = cdv_detail_wx:start_link(Id,State#state.panel,Callback),
+ wx_object:get_pid(EW) ! active,
+ [{Id,EW}|Opened0];
+ {_,EW} ->
+ wxFrame:raise(EW),
+ Opened0
+ end,
+ State#state{expand_wins=Opened}.
diff --git a/lib/observer/src/cdv_info_wx.erl b/lib/observer/src/cdv_info_wx.erl
new file mode 100644
index 0000000000..59ce0cabb1
--- /dev/null
+++ b/lib/observer/src/cdv_info_wx.erl
@@ -0,0 +1,128 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-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(cdv_info_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2]).
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Records
+-record(state,
+ {panel,
+ sizer,
+ fpanel,
+ callback,
+ trunc_warn=[]
+ }).
+
+start_link(ParentWin, Info) ->
+ wx_object:start_link(?MODULE, [ParentWin, Info], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([ParentWin, Callback]) when is_atom(Callback) ->
+ {InfoFields,Info,TW} = Callback:get_info(),
+ {Panel,Sizer,FPanel} = create_box(ParentWin,InfoFields,Info),
+ {Panel,#state{panel=Panel,
+ sizer=Sizer,
+ fpanel=FPanel,
+ callback=Callback,
+ trunc_warn=TW}};
+
+init([ParentWin, {InfoFields,Info,TW}]) ->
+ {Panel,Sizer,FPanel} = create_box(ParentWin,InfoFields,Info),
+ {Panel, #state{panel=Panel,
+ sizer=Sizer,
+ fpanel=FPanel,
+ trunc_warn=TW}}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info(active, State) ->
+ cdv_wx:set_status(State#state.trunc_warn),
+ {noreply, State};
+
+handle_info(Info, State) ->
+ io:format("~p:~p: Unhandled info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(new_dump, _From, #state{callback=Callback,panel=Panel,
+ sizer=Sizer,fpanel=FPanel} = State) ->
+ {InfoFields,Info,TW} = Callback:get_info(),
+ NewFPanel =
+ wx:batch(
+ fun() ->
+ wxWindow:destroy(FPanel),
+ FP = create_field_panel(Panel,Sizer,InfoFields,Info),
+ wxSizer:layout(Sizer),
+ FP
+ end),
+ {reply, ok, State#state{fpanel=NewFPanel,trunc_warn=TW}};
+
+handle_call(Msg, _From, State) ->
+ io:format("~p~p: Unhandled Call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast(Msg, State) ->
+ io:format("~p~p: Unhandled cast ~p~n",[?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+handle_event(#wx{event=#wxMouse{type=left_down},userData=Target}, State) ->
+ cdv_virtual_list_wx:start_detail_win(Target),
+ {noreply, State};
+
+handle_event(#wx{obj=Obj,event=#wxMouse{type=enter_window}},State) ->
+ wxTextCtrl:setForegroundColour(Obj,{0,0,100,255}),
+ {noreply, State};
+
+handle_event(#wx{obj=Obj,event=#wxMouse{type=leave_window}},State) ->
+ wxTextCtrl:setForegroundColour(Obj,?wxBLUE),
+ {noreply, State};
+
+handle_event(Event, State) ->
+ io:format("~p:~p: Unhandled event ~p\n", [?MODULE,?LINE,Event]),
+ {noreply, State}.
+
+%%%-----------------------------------------------------------------
+%%% Internal
+create_box(ParentWin,InfoFields,Info) ->
+ Panel = wxPanel:new(ParentWin),
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ FPanel = create_field_panel(Panel,Sizer,InfoFields,Info),
+ wxPanel:setSizer(Panel, Sizer),
+ {Panel,Sizer,FPanel}.
+
+create_field_panel(Panel,Sizer,InfoFields,Info0) ->
+ Info = observer_lib:fill_info(InfoFields, Info0),
+ {FPanel, _FSizer, _Fields} = observer_lib:display_info(Panel,Info),
+ BorderFlags = ?wxLEFT bor ?wxRIGHT,
+ wxSizer:add(Sizer, FPanel, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
+ {proportion, 0}, {border, 5}]),
+ FPanel.
diff --git a/lib/observer/src/cdv_int_tab_cb.erl b/lib/observer/src/cdv_int_tab_cb.erl
new file mode 100644
index 0000000000..31727391fe
--- /dev/null
+++ b/lib/observer/src/cdv_int_tab_cb.erl
@@ -0,0 +1,86 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-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(cdv_int_tab_cb).
+
+-export([get_info/0]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+get_info() ->
+ observer_lib:report_progress({ok,"Processing internal tables"}),
+ HashInfo = get_hash_info(),
+ observer_lib:report_progress({ok,33}),
+ IndexInfo = get_index_info(),
+ observer_lib:report_progress({ok,66}),
+ IntEtsInfo = get_internal_ets_info(),
+ observer_lib:report_progress({ok,100}),
+ [{"Hash Tables",cdv_table_wx,HashInfo},
+ {"Index Tables",cdv_table_wx,IndexInfo},
+ {"Internal ETS Tables",cdv_table_wx,IntEtsInfo}].
+
+%%%-----------------------------------------------------------------
+%%% Hash tables
+get_hash_info() ->
+ {ok,Info0,TW} = crashdump_viewer:hash_tables(),
+ Columns = hash_columns(),
+ Info = [crashdump_viewer:to_value_list(R) || R <- Info0],
+ {Columns,Info,TW}.
+
+hash_columns() ->
+ [{"Name", ?wxLIST_FORMAT_LEFT, 150},
+ {"Size", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Used", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Objects",?wxLIST_FORMAT_RIGHT, 100},
+ {"Depth", ?wxLIST_FORMAT_RIGHT, 100}].
+
+%%%-----------------------------------------------------------------
+%%% Index tables
+get_index_info() ->
+ {ok,Info0,TW} = crashdump_viewer:index_tables(),
+ Columns = index_columns(),
+ Info = [crashdump_viewer:to_value_list(R) || R <- Info0],
+ {Columns,Info,TW}.
+
+index_columns() ->
+ [{"Name", ?wxLIST_FORMAT_LEFT, 150},
+ {"Size", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Limit", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Used", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Rate", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Entries",?wxLIST_FORMAT_RIGHT, 100}].
+
+%%%-----------------------------------------------------------------
+%%% Internal ets tables
+get_internal_ets_info() ->
+ {ok,Info0,TW} = crashdump_viewer:internal_ets_tables(),
+ Columns = int_ets_columns(),
+ Info = [begin
+ [_,_|Data] = crashdump_viewer:to_value_list(R), %skip pid and slot
+ [Desc|Data]
+ end || {Desc,R} <- Info0],
+ {Columns,Info,TW}.
+
+int_ets_columns() ->
+ [{"Description", ?wxLIST_FORMAT_LEFT, 170},
+ {"Id", ?wxLIST_FORMAT_LEFT, 80},
+ {"Name", ?wxLIST_FORMAT_LEFT, 80},
+ {"Type", ?wxLIST_FORMAT_LEFT, 80},
+ {"Buckets", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Objects", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Memory", ?wxLIST_FORMAT_RIGHT, 80}].
diff --git a/lib/observer/src/cdv_mem_cb.erl b/lib/observer/src/cdv_mem_cb.erl
new file mode 100644
index 0000000000..2b0809df13
--- /dev/null
+++ b/lib/observer/src/cdv_mem_cb.erl
@@ -0,0 +1,84 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-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(cdv_mem_cb).
+
+-export([get_info/0]).
+
+-include("crashdump_viewer.hrl").
+-include_lib("wx/include/wx.hrl").
+
+get_info() ->
+ observer_lib:report_progress({ok,"Processing memory info"}),
+ MemInfo = get_mem_info(),
+ observer_lib:report_progress({ok,33}),
+ {AllocInfo,AllocTW} = get_alloc_info(),
+ observer_lib:report_progress({ok,66}),
+ AreaInfo = get_area_info(),
+ observer_lib:report_progress({ok,100}),
+ [{"Memory",cdv_info_wx,MemInfo}
+ | [{Title,cdv_table_wx,{Cols,Data,AllocTW}} ||
+ {Title,Cols,Data} <- AllocInfo]] ++
+ [{"Allocated Areas",cdv_table_wx,AreaInfo}].
+
+
+%%%-----------------------------------------------------------------
+%%% Memory page
+get_mem_info() ->
+ {ok,Info,TW} = crashdump_viewer:memory(),
+ {[{"Memory Information",gen_mem_info_fields(Info)}],Info,TW}.
+
+gen_mem_info_fields([{Key,_}|T]) ->
+ [{upper(atom_to_list(Key)),{bytes,Key}}|gen_mem_info_fields(T)];
+gen_mem_info_fields([]) ->
+ [].
+
+upper(Key) ->
+ string:join([string:to_upper([H]) ++ T ||
+ [H|T] <- string:tokens(Key,"_")]," ").
+
+
+%%%-----------------------------------------------------------------
+%%% Allocated areas page
+get_area_info() ->
+ {ok,Info0,TW} = crashdump_viewer:allocated_areas(),
+ Info = [tuple_to_list(R) || R <- Info0],
+ {area_columns(),Info,TW}.
+
+area_columns() ->
+ [{"", ?wxLIST_FORMAT_LEFT, 150},
+ {"Allocated (bytes)",?wxLIST_FORMAT_RIGHT, 150},
+ {"Used (bytes)", ?wxLIST_FORMAT_RIGHT, 150}].
+
+%%%-----------------------------------------------------------------
+%%% Allocator page
+get_alloc_info() ->
+ {ok,Info,TW} = crashdump_viewer:allocator_info(),
+ {fix_alloc(Info),TW}.
+
+fix_alloc([{Title,Columns,Data}|Tables]) ->
+ [{Title,alloc_columns(Columns),
+ [[Key|Values] || {Key,Values} <- Data]} |
+ fix_alloc(Tables)];
+fix_alloc([{Title,[{_,V}|_]=Data}|Tables]) ->
+ fix_alloc([{Title,lists:duplicate(length(V),[]),Data}|Tables]);
+fix_alloc([]) ->
+ [].
+
+alloc_columns(Columns) ->
+ [{"", ?wxLIST_FORMAT_LEFT, 180} |
+ [{Column, ?wxLIST_FORMAT_RIGHT, 140} || Column <- Columns]].
diff --git a/lib/observer/src/cdv_mod_cb.erl b/lib/observer/src/cdv_mod_cb.erl
new file mode 100644
index 0000000000..e829ff4fca
--- /dev/null
+++ b/lib/observer/src/cdv_mod_cb.erl
@@ -0,0 +1,102 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_mod_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1,
+ get_details/1,
+ detail_pages/0,
+ format/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Defines
+-define(COL_ID, 0).
+-define(COL_CUR, ?COL_ID+1).
+-define(COL_OLD, ?COL_CUR+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(?COL_ID) -> #loaded_mod.mod;
+col_to_elem(?COL_CUR) -> #loaded_mod.current_size;
+col_to_elem(?COL_OLD) -> #loaded_mod.old_size.
+
+col_spec() ->
+ [{"Module", ?wxLIST_FORMAT_LEFT, 300},
+ {"Current size", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Old size", ?wxLIST_FORMAT_RIGHT, 80}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:loaded_modules(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_ID],true}.
+
+%% Callbacks for cdv_detail_wx
+get_details(Id) ->
+ {ok,Info,TW} = crashdump_viewer:loaded_mod_details(Id),
+ Proplist = crashdump_viewer:to_proplist(record_info(fields,loaded_mod),Info),
+ Title = io_lib:format("~s",[Info#loaded_mod.mod]),
+ {ok,{Title,Proplist,TW}}.
+
+detail_pages() ->
+ [{"General Information", fun init_gen_page/2},
+ {"Current Attributes", fun init_curr_attr_page/2},
+ {"Current Compilation Info", fun init_curr_comp_page/2},
+ {"Old Attributes", fun init_old_attr_page/2},
+ {"Old Compilation Info", fun init_old_comp_page/2}].
+
+init_gen_page(Parent, Info) ->
+ Fields = info_fields(),
+ cdv_info_wx:start_link(Parent,{Fields,Info,[]}).
+
+init_curr_attr_page(Parent, Info) ->
+ init_info_page(Parent, proplists:get_value(current_attrib,Info)).
+
+init_curr_comp_page(Parent, Info) ->
+ init_info_page(Parent, proplists:get_value(current_comp_info,Info)).
+
+init_old_attr_page(Parent, Info) ->
+ init_info_page(Parent, proplists:get_value(old_attrib,Info)).
+
+init_old_comp_page(Parent, Info) ->
+ init_info_page(Parent, proplists:get_value(old_comp_info,Info)).
+
+init_info_page(Parent, undefined) ->
+ init_info_page(Parent, "");
+init_info_page(Parent, String) ->
+ cdv_html_wx:start_link(Parent,observer_html_lib:plain_page(String)).
+
+format({Bin,q}) when is_binary(Bin) ->
+ [$'|binary_to_list(Bin)];
+format({Bin,nq}) when is_binary(Bin) ->
+ lists:flatten(io_lib:format("~ts",[Bin]));
+format(D) ->
+ D.
+
+%%%-----------------------------------------------------------------
+%%% Internal
+info_fields() ->
+ [{"Overview",
+ [{"Name", mod},
+ {"Current Size", current_size},
+ {"Old Size", old_size}]}].
diff --git a/lib/observer/src/cdv_multi_wx.erl b/lib/observer/src/cdv_multi_wx.erl
new file mode 100644
index 0000000000..75c7f48fc2
--- /dev/null
+++ b/lib/observer/src/cdv_multi_wx.erl
@@ -0,0 +1,188 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-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(cdv_multi_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2]).
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Records
+-record(state,
+ {main_panel,
+ main_sizer,
+ menu,
+ menu_sizer,
+ callback,
+ pages,
+ dyn_panel,
+ dyn_sizer,
+ dyn_page
+ }).
+
+start_link(Notebook, Info) ->
+ wx_object:start_link(?MODULE, [Notebook, Info], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([Notebook, Callback]) when is_atom(Callback) ->
+ Pages = Callback:get_info(),
+ {MainPanel,State0} = init([Notebook, Pages]),
+ {MainPanel,State0#state{callback=Callback}};
+init([Notebook, Pages]) ->
+ MainPanel = wxPanel:new(Notebook),
+ Sizer = wxBoxSizer:new(?wxHORIZONTAL),
+ LeftMenuSizer = wxStaticBoxSizer:new(?wxVERTICAL,MainPanel,
+ [{label,"Please select"}]),
+ LeftMenu = wxListBox:new(MainPanel,?wxID_ANY,
+ [{style,?wxLB_SINGLE},
+ {choices,[T || {T,_,_} <- Pages]}]),
+ wxListBox:setSelection(LeftMenu,0),
+ wxListBox:connect(LeftMenu, command_listbox_selected),
+ wxSizer:add(LeftMenuSizer,LeftMenu,[{flag,?wxEXPAND},{proportion,2}]),
+
+ DynPanel = wxScrolledWindow:new(MainPanel),
+ wxScrolledWindow:enableScrolling(DynPanel,true,true),
+ wxScrolledWindow:setScrollbars(DynPanel,1,1,0,0),
+
+ BorderFlags = ?wxLEFT bor ?wxRIGHT,
+ wxSizer:add(Sizer, LeftMenuSizer,
+ [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
+ {proportion, 0}, {border, 5}]),
+ wxSizer:add(Sizer, DynPanel, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
+ {proportion, 1}, {border, 5}]),
+ wxPanel:setSizer(MainPanel, Sizer),
+
+ State = load_dyn_page(#state{main_panel=MainPanel,
+ main_sizer=Sizer,
+ menu=LeftMenu,
+ menu_sizer=LeftMenuSizer,
+ pages=Pages,
+ dyn_panel=DynPanel
+ }),
+ {MainPanel, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info(active, State) ->
+ NewState =
+ wx:batch(
+ fun() ->
+ update_dyn_page(State)
+ end),
+ {noreply, NewState};
+
+handle_info(Info, State) ->
+ io:format("~p:~p: Unhandled info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(new_dump, _From, State) ->
+ NewState =
+ wx:batch(
+ fun() ->
+ update_left_menu(State)
+ end),
+ {reply, ok, NewState};
+
+handle_call(Msg, _From, State) ->
+ io:format("~p:~p: Unhandled Call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast(Msg, State) ->
+ io:format("~p:~p: Unhandled cast ~p~n",[?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+handle_event(#wx{event=#wxCommand{type=command_listbox_selected,
+ cmdString=[]}},
+ State) ->
+ %% For some reason, the listbox sometimes gets an "unselect"
+ %% command like this during termination. Ignore!
+ {noreply, State};
+
+handle_event(#wx{event=#wxCommand{type=command_listbox_selected,
+ cmdString=_DynName}},
+ State) ->
+ NewState =
+ wx:batch(fun() ->
+ update_dyn_page(State)
+ end),
+ {noreply,NewState};
+
+handle_event(Event, State) ->
+ io:format("~p:~p: Unhandled event ~p\n", [?MODULE,?LINE,Event]),
+ {noreply, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Internal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+update_left_menu(#state{main_panel=Panel,
+ callback=Callback,
+ menu=OldMenu,
+ menu_sizer=MenuSizer} = State) ->
+ Pages = Callback:get_info(),
+ wxListBox:disconnect(OldMenu),
+ wxWindow:destroy(OldMenu),
+ NewMenu = wxListBox:new(Panel,?wxID_ANY,
+ [{style,?wxLB_SINGLE},
+ {choices,[T || {T,_,_} <- Pages]}]),
+ wxListBox:setSelection(NewMenu,0),
+ wxListBox:connect(NewMenu, command_listbox_selected),
+ wxSizer:add(MenuSizer,NewMenu,[{flag,?wxEXPAND},{proportion,2}]),
+ wxSizer:layout(MenuSizer),
+ State#state{pages=Pages,menu=NewMenu}.
+
+update_dyn_page(#state{dyn_page=undefined} = State) ->
+ load_dyn_page(State);
+update_dyn_page(#state{dyn_page=OldDynPage,
+ dyn_sizer=OldDynSizer} = State) ->
+ wxSizer:detach(OldDynSizer,OldDynPage),
+ wxWindow:destroy(OldDynPage),
+ load_dyn_page(State).
+
+load_dyn_page(#state{main_sizer=MainSizer,
+ dyn_panel=DynPanel,
+ menu=Menu,
+ pages=Pages} = State) ->
+ %% Freeze and thaw causes a hang (and is not needed) on 2.9 and higher
+ DoFreeze = [?wxMAJOR_VERSION,?wxMINOR_VERSION] < [2,9],
+ DoFreeze andalso wxWindow:freeze(DynPanel),
+ Name = wxListBox:getStringSelection(Menu),
+ {Page,Sizer} = load_dyn_page(DynPanel,Name,Pages),
+ wxSizer:layout(MainSizer),
+ DoFreeze andalso wxWindow:thaw(DynPanel),
+ wx_object:get_pid(Page) ! active,
+ State#state{dyn_page=Page,dyn_sizer=Sizer}.
+
+load_dyn_page(Panel,Name,Pages) ->
+ Sizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label,Name}]),
+
+ {_,Callback,Info} = lists:keyfind(Name,1,Pages),
+ DynPage = Callback:start_link(Panel,Info),
+
+ wxSizer:add(Sizer,DynPage,[{flag, ?wxEXPAND}, {proportion, 1}]),
+ wxPanel:setSizerAndFit(Panel,Sizer,[{deleteOld,true}]),
+ {DynPage,Sizer}.
diff --git a/lib/observer/src/cdv_port_cb.erl b/lib/observer/src/cdv_port_cb.erl
new file mode 100644
index 0000000000..08488d3e34
--- /dev/null
+++ b/lib/observer/src/cdv_port_cb.erl
@@ -0,0 +1,103 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_port_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1,
+ get_details/1,
+ detail_pages/0,
+ format/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Columns
+-define(COL_ID, 0).
+-define(COL_CONN, ?COL_ID+1).
+-define(COL_NAME, ?COL_CONN+1).
+-define(COL_CTRL, ?COL_NAME+1).
+-define(COL_SLOT, ?COL_CTRL+1).
+
+
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(?COL_ID) -> #port.id;
+col_to_elem(?COL_CONN) -> #port.connected;
+col_to_elem(?COL_NAME) -> #port.name;
+col_to_elem(?COL_CTRL) -> #port.controls;
+col_to_elem(?COL_SLOT) -> #port.slot.
+
+col_spec() ->
+ [{"Id", ?wxLIST_FORMAT_LEFT, 100},
+ {"Connected", ?wxLIST_FORMAT_LEFT, 120},
+ {"Name", ?wxLIST_FORMAT_LEFT, 150},
+ {"Controls", ?wxLIST_FORMAT_LEFT, 200},
+ {"Slot", ?wxLIST_FORMAT_RIGHT, 50}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:ports(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_ID,?COL_CONN],true}.
+
+%% Callbacks for cdv_detail_wx
+get_details(Id) ->
+ case crashdump_viewer:port(Id) of
+ {ok,Info,TW} ->
+ Proplist =
+ crashdump_viewer:to_proplist(record_info(fields,port),Info),
+ {ok,{Id,Proplist,TW}};
+ {error,{other_node,NodeId}} ->
+ Info = "The port you are searching for was residing on "
+ "a remote node. No port information is available. "
+ "Show information about the remote node?",
+ Fun = fun() -> cdv_virtual_list_wx:start_detail_win(NodeId) end,
+ {yes_no, Info, Fun};
+ {error,not_found} ->
+ Info = "The port you are searching for could not be found.",
+ {info,Info}
+ end.
+
+detail_pages() ->
+ [{"General Information", fun init_gen_page/2}].
+
+init_gen_page(Parent, Info) ->
+ Fields = info_fields(),
+ cdv_info_wx:start_link(Parent,{Fields,Info,[]}).
+
+format({I1,I2}) ->
+ "#Port<"++integer_to_list(I1) ++ "." ++ integer_to_list(I2) ++ ">";
+format(D) ->
+ D.
+
+
+%%%-----------------------------------------------------------------
+%%% Internal
+info_fields() ->
+ [{"Overview",
+ [{"Name", name},
+ {"Connected", {click,connected}},
+ {"Slot", slot},
+ {"Controls", controls}]},
+ {scroll_boxes,
+ [{"Links",1,{click,links}},
+ {"Monitors",1,{click,monitors}}]}].
diff --git a/lib/observer/src/cdv_proc_cb.erl b/lib/observer/src/cdv_proc_cb.erl
new file mode 100644
index 0000000000..dfc2df9c4c
--- /dev/null
+++ b/lib/observer/src/cdv_proc_cb.erl
@@ -0,0 +1,156 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_proc_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1,
+ get_details/1,
+ detail_pages/0]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Columns
+-define(COL_ID, 0).
+-define(COL_NAME, ?COL_ID+1).
+-define(COL_STATE,?COL_NAME+1).
+-define(COL_REDS, ?COL_STATE+1).
+-define(COL_MEM, ?COL_REDS+1).
+-define(COL_MSG, ?COL_MEM+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(?COL_ID) -> #proc.pid;
+col_to_elem(?COL_NAME) -> #proc.name;
+col_to_elem(?COL_STATE) -> #proc.state;
+col_to_elem(?COL_MEM) -> #proc.memory;
+col_to_elem(?COL_REDS) -> #proc.reds;
+col_to_elem(?COL_MSG) -> #proc.msg_q_len.
+
+col_spec() ->
+ [{"Pid", ?wxLIST_FORMAT_CENTRE, 120},
+ {"Name or Initial Func", ?wxLIST_FORMAT_LEFT, 250},
+ {"State", ?wxLIST_FORMAT_LEFT, 100},
+ {"Reds", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Memory", ?wxLIST_FORMAT_RIGHT, 80},
+ {"MsgQ", ?wxLIST_FORMAT_RIGHT, 50}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:processes(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_ID],true}.
+
+%% Callbacks for cdv_detail_wx
+get_details(Id) ->
+ case crashdump_viewer:proc_details(Id) of
+ {ok,Info,TW} ->
+ %% The following table is used by observer_html_lib
+ %% for storing expanded terms and it is read by
+ %% cdv_html_wx when a link to an expandable term is clicked.
+ Tab = ets:new(cdv_expand,[set,public]),
+ Proplist0 =
+ crashdump_viewer:to_proplist(record_info(fields,proc),Info),
+ Proplist = [{expand_table,Tab}|Proplist0],
+ Title = io_lib:format("~s (~s)",[Info#proc.name, Id]),
+ {ok,{Title,Proplist,TW}};
+ {error,{other_node,NodeId}} ->
+ Info = "The process you are searching for was residing on "
+ "a remote node. No process information is available. "
+ "Show information about the remote node?",
+ Fun = fun() -> cdv_virtual_list_wx:start_detail_win(NodeId) end,
+ {yes_no, Info, Fun};
+ {error,not_found} ->
+ Info = "The process you are searching for could not be found.",
+ {info,Info}
+ end.
+
+detail_pages() ->
+ [{"General Information", fun init_gen_page/2},
+ {"Messages", fun init_message_page/2},
+ {"Dictionary", fun init_dict_page/2},
+ {"Stack Dump", fun init_stack_page/2},
+ {"ETS tables", fun init_ets_page/2},
+ {"Timers", fun init_timer_page/2}].
+
+init_gen_page(Parent, Info) ->
+ Fields = info_fields(),
+ cdv_info_wx:start_link(Parent,{Fields,Info,[]}).
+
+init_message_page(Parent, Info) ->
+ init_memory_page(Parent, Info, msg_q, "MsgQueue").
+
+init_dict_page(Parent, Info) ->
+ init_memory_page(Parent, Info, dict, "Dictionary").
+
+init_stack_page(Parent, Info) ->
+ init_memory_page(Parent, Info, stack_dump, "StackDump").
+
+init_memory_page(Parent, Info0, Tag, Heading) ->
+ Info = proplists:get_value(Tag,Info0),
+ Tab = proplists:get_value(expand_table,Info0),
+ Html = observer_html_lib:expandable_term(Heading,Info,Tab),
+ cdv_html_wx:start_link(Parent,{expand,Html,Tab}).
+
+init_ets_page(Parent, Info) ->
+ Pid = proplists:get_value(pid,Info),
+ cdv_virtual_list_wx:start_link(Parent, cdv_ets_cb, Pid).
+
+init_timer_page(Parent, Info) ->
+ Pid = proplists:get_value(pid,Info),
+ cdv_virtual_list_wx:start_link(Parent, cdv_timer_cb, Pid).
+
+%%%-----------------------------------------------------------------
+%%% Internal
+info_fields() ->
+ [{"Overview",
+ [{"Initial Call", init_func},
+ {dynamic, current_func},
+ {"Registered Name", name},
+ {"Status", state},
+ {"Started", start_time},
+ {"Parent", {click,parent}},
+ {"Message Queue Len",msg_q_len},
+ {"Reductions", reds},
+ {"Program counter", prog_count},
+ {"Continuation pointer",cp},
+ {"Arity",arity}]},
+ {scroll_boxes,
+ [{"Last Calls",1,{plain,last_calls}}]},
+ {scroll_boxes,
+ [{"Links",1,{click,links}},
+ {"Monitors",2,{click,monitors}},
+ {"Monitored By",2,{click,mon_by}}]},
+ {"Memory and Garbage Collection",
+ [{"Memory", memory},
+ {"Stack and Heap", stack_heap},
+ {"Old Heap", old_heap},
+ {"Heap Unused", heap_unused},
+ {"Old Heap Unused", old_heap_unused},
+ {"Number of Heap Fragements", num_heap_frag},
+ {"Heap Fragment Data",heap_frag_data},
+ {"New Heap Start", new_heap_start},
+ {"New Heap Top", new_heap_top},
+ {"Stack Top", stack_top},
+ {"Stack End", stack_end},
+ {"Old Heap Start", old_heap_start},
+ {"Old Heap Top", old_heap_top},
+ {"Old Heap End", old_heap_end}]}].
diff --git a/lib/observer/src/cdv_table_wx.erl b/lib/observer/src/cdv_table_wx.erl
new file mode 100644
index 0000000000..f8943db17d
--- /dev/null
+++ b/lib/observer/src/cdv_table_wx.erl
@@ -0,0 +1,106 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-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(cdv_table_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2]).
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Records
+-record(state,
+ {trunc_warn=[]}).
+
+start_link(ParentWin, Info) ->
+ wx_object:start_link(?MODULE, [ParentWin, Info], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([ParentWin, Callback]) when is_atom(Callback) ->
+ {ok,TableInfo} = Callback:get_info(),
+ init([ParentWin, TableInfo]);
+
+init([ParentWin, {ColumnSpec,Info,TW}]) ->
+ Style0 = ?wxLC_REPORT bor ?wxLC_SINGLE_SEL bor ?wxLC_HRULES bor ?wxLC_VRULES,
+ Style =
+ case lists:all(fun({"",_,_}) -> true; (_) -> false end, ColumnSpec) of
+ true -> Style0 bor ?wxLC_NO_HEADER;
+ false -> Style0
+ end,
+ Grid = wxListCtrl:new(ParentWin, [{style, Style}]),
+ Li = wxListItem:new(),
+ AddListEntry = fun({Name, Align, DefSize}, Col) ->
+ wxListItem:setText(Li, Name),
+ wxListItem:setAlign(Li, Align),
+ wxListCtrl:insertColumn(Grid, Col, Li),
+ wxListCtrl:setColumnWidth(Grid, Col, DefSize),
+ Col + 1
+ end,
+ lists:foldl(AddListEntry, 0, ColumnSpec),
+ wxListItem:destroy(Li),
+ Insert = fun(RowData, Row) ->
+ wxListCtrl:insertItem(Grid, Row, ""),
+ set_items(Grid,Row,RowData,0),
+ Row + 1
+ end,
+ lists:foldl(Insert, 0, Info),
+ {Grid, #state{trunc_warn=TW}}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info(active, State) ->
+ cdv_wx:set_status(State#state.trunc_warn),
+ {noreply, State};
+
+handle_info(Info, State) ->
+ io:format("~p:~p: Unhandled info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(Msg, _From, State) ->
+ io:format("~p~p: Unhandled Call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast(Msg, State) ->
+ io:format("~p~p: Unhandled cast ~p~n",[?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+handle_event(Event, State) ->
+ io:format("~p:~p: Unhandled event ~p\n", [?MODULE,?LINE,Event]),
+ {noreply, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Internal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+set_items(Grid,Row,[Col|Cols],ColN) ->
+ Str = case Col of
+ undefined -> "";
+ _ -> observer_lib:to_str(Col)
+ end,
+ wxListCtrl:setItem(Grid, Row, ColN, Str),
+ set_items(Grid,Row,Cols,ColN+1);
+set_items(_,_,[],_) ->
+ ok.
diff --git a/lib/observer/src/cdv_term_cb.erl b/lib/observer/src/cdv_term_cb.erl
new file mode 100644
index 0000000000..6426cc0803
--- /dev/null
+++ b/lib/observer/src/cdv_term_cb.erl
@@ -0,0 +1,75 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_term_cb).
+
+-export([get_details/1,
+ detail_pages/0]).
+
+%% Callbacks for cdv_detail_wx
+get_details({_, {T,Key}}) ->
+ [{Key,Term}] = ets:lookup(T,Key),
+ {ok,{"Expanded Term", [Term, T], []}}.
+
+detail_pages() ->
+ [{"Term", fun init_term_page/2}].
+
+init_term_page(ParentWin, [Term, Tab]) ->
+ Expanded = expand(Term, true),
+ BinSaved = expand(Term, Tab),
+ cdv_multi_wx:start_link(
+ ParentWin,
+ [{"Format \~p",cdv_html_wx,format_term_fun("~p",BinSaved,Tab)},
+ {"Format \~tp",cdv_html_wx,format_term_fun("~tp",BinSaved,Tab)},
+ {"Format \~w",cdv_html_wx,format_term_fun("~w",BinSaved,Tab)},
+ {"Format \~s",cdv_html_wx,format_term_fun("~s",Expanded,Tab)},
+ {"Format \~ts",cdv_html_wx,format_term_fun("~ts",Expanded,Tab)}]).
+
+format_term_fun(Format,Term,Tab) ->
+ fun() ->
+ try io_lib:format(Format,[Term]) of
+ Str -> {expand, plain_html(Str), Tab}
+ catch error:badarg ->
+ Warning = "This term can not be formatted with " ++ Format,
+ observer_html_lib:warning(Warning)
+ end
+ end.
+
+plain_html(Text) ->
+ observer_html_lib:plain_page(Text).
+
+expand(['#CDVBin',Offset,Size,Pos], true) ->
+ {ok,Bin} = crashdump_viewer:expand_binary({Offset,Size,Pos}),
+ Bin;
+expand(Bin, Tab) when is_binary(Bin), not is_boolean(Tab) ->
+ <<Preview:80, _/binary>> = Bin,
+ Size = byte_size(Bin),
+ Hash = erlang:phash2(Bin),
+ Key = {Preview, Size, Hash},
+ ets:insert(Tab, {Key,Bin}),
+ ['#OBSBin',Preview,Size,Hash];
+expand([H|T], Expand) ->
+ case expand(T, Expand) of
+ ET when is_list(ET) ->
+ [expand(H, Expand)|ET];
+ ET -> % The tail is an expanded binary - cannot append with |
+ [expand(H, Expand),ET]
+ end;
+expand(Tuple, Expand) when is_tuple(Tuple) ->
+ list_to_tuple(expand(tuple_to_list(Tuple), Expand));
+expand(Term, _) ->
+ Term.
diff --git a/lib/observer/src/cdv_timer_cb.erl b/lib/observer/src/cdv_timer_cb.erl
new file mode 100644
index 0000000000..9cdbfa05a9
--- /dev/null
+++ b/lib/observer/src/cdv_timer_cb.erl
@@ -0,0 +1,51 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_timer_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Defines
+-define(COL_OWNER, 0).
+-define(COL_MSG, ?COL_OWNER+1).
+-define(COL_TIME, ?COL_MSG+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_OWNER);
+col_to_elem(?COL_OWNER) -> #timer.pid;
+col_to_elem(?COL_MSG) -> #timer.msg;
+col_to_elem(?COL_TIME) -> #timer.time.
+
+col_spec() ->
+ [{"Owner", ?wxLIST_FORMAT_LEFT, 110},
+ {"Message", ?wxLIST_FORMAT_LEFT, 400},
+ {"Time left (ms)", ?wxLIST_FORMAT_RIGHT, 80}].
+
+get_info(Owner) ->
+ {ok,Info,TW} = crashdump_viewer:timers(Owner),
+ {Info,TW}.
+
+get_detail_cols(all) ->
+ {[?COL_OWNER],false};
+get_detail_cols(_) ->
+ {[],false}.
diff --git a/lib/observer/src/cdv_virtual_list_wx.erl b/lib/observer/src/cdv_virtual_list_wx.erl
new file mode 100644
index 0000000000..c5a7d9a2e5
--- /dev/null
+++ b/lib/observer/src/cdv_virtual_list_wx.erl
@@ -0,0 +1,414 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_virtual_list_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2, start_link/3, start_detail_win/1]).
+
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Defines
+-define(COL_ID, 0).
+-define(ID_DETAILS, 202).
+
+%% Records
+
+-record(sort,
+ {
+ sort_key,
+ sort_incr=true
+ }).
+
+-record(holder, {parent,
+ info,
+ last_row,
+ sort,
+ attrs,
+ callback
+ }).
+
+-record(state, {grid,
+ panel,
+ detail_wins=[],
+ holder,
+ callback,
+ trunc_warn=[],
+ menu_cols=[], % columns to show in right click menu
+ menu_items=[]}). % right click menu items for the selected row
+
+start_link(ParentWin, Callback) ->
+ wx_object:start_link({local,Callback},?MODULE,
+ [ParentWin, Callback, all], []).
+
+start_link(ParentWin, Callback, Owner) ->
+ wx_object:start_link(?MODULE, [ParentWin, Callback, Owner], []).
+
+start_detail_win(Id) ->
+ Callback =
+ case Id of
+ "<"++_ ->
+ cdv_proc_cb;
+ "#Port"++_ ->
+ cdv_port_cb;
+ _ ->
+ case catch list_to_integer(Id) of
+ NodeId when is_integer(NodeId) ->
+ cdv_dist_cb;
+ _ ->
+ cdv_mod_cb
+ end
+ end,
+ start_detail_win(Callback,Id).
+start_detail_win(Callback,Id) ->
+ wx_object:cast(Callback,{start_detail_win,Id}).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+init([ParentWin, Callback, Owner]) ->
+ {Holder,TW} = spawn_table_holder(Callback, Owner),
+ Panel = wxPanel:new(ParentWin),
+ {Grid,MenuCols} = create_list_box(Panel, Holder, Callback, Owner),
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ wxSizer:add(Sizer, Grid, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 1},
+ {border,4}]),
+
+ wxWindow:setSizer(Panel, Sizer),
+
+ State = #state{grid=Grid,
+ panel=Panel,
+ holder=Holder,
+ callback=Callback,
+ trunc_warn=TW,
+ menu_cols=MenuCols
+ },
+ {Panel, State}.
+
+%% UI-creation
+
+create_list_box(Panel, Holder, Callback, Owner) ->
+ Style =
+ ?wxLC_SINGLE_SEL bor ?wxLC_REPORT bor ?wxLC_VIRTUAL bor
+ ?wxLC_HRULES bor ?wxHSCROLL bor ?wxVSCROLL,
+ ListCtrl = wxListCtrl:new(Panel, [{style, Style},
+ {onGetItemText,
+ fun(_, Row, Col) ->
+ call(Holder, {get_row, self(), Row, Col})
+ end},
+ {onGetItemAttr,
+ fun(_, Item) ->
+ call(Holder, {get_attr, self(), Item})
+ end}
+ ]),
+ Li = wxListItem:new(),
+ AddListEntry = fun({Name, Align, DefSize}, Col) ->
+ wxListItem:setText(Li, Name),
+ wxListItem:setAlign(Li, Align),
+ wxListCtrl:insertColumn(ListCtrl, Col, Li),
+ wxListCtrl:setColumnWidth(ListCtrl, Col, DefSize),
+ Col + 1
+ end,
+ ListItems = Callback:col_spec(),
+ lists:foldl(AddListEntry, 0, ListItems),
+ wxListItem:destroy(Li),
+
+ wxListCtrl:setItemCount(ListCtrl, 0),
+ wxListCtrl:connect(ListCtrl, size, [{skip, true}]),
+ wxListCtrl:connect(ListCtrl, command_list_col_click),
+
+
+ %% If detail pages can be opened from this list - catch double
+ %% click and right click
+ DetailCols =
+ case catch Callback:get_detail_cols(Owner) of
+ {DC,DoubleClick} when is_list(DC), DC=/=[] ->
+ wxListCtrl:connect(ListCtrl, command_list_item_right_click),
+ if DoubleClick ->
+ wxListCtrl:connect(ListCtrl, command_list_item_activated);
+ true ->
+ ok
+ end,
+ DC;
+ _ ->
+ []
+ end,
+
+ {ListCtrl,DetailCols}.
+
+do_start_detail_win(undefined, State) ->
+ State;
+do_start_detail_win(Id, #state{panel=Panel,detail_wins=Opened,
+ callback=Callback}=State) ->
+ NewOpened =
+ case lists:keyfind(Id, 1, Opened) of
+ false ->
+ case cdv_detail_wx:start_link(Id, Panel, Callback) of
+ {error, _} ->
+ Opened;
+ IW ->
+ [{Id, IW} | Opened]
+ end;
+ {_, IW} ->
+ wxFrame:raise(IW),
+ Opened
+ end,
+ State#state{detail_wins=NewOpened}.
+
+call(Holder, What) when is_atom(Holder) ->
+ call(whereis(Holder), What);
+call(Holder, What) when is_pid(Holder) ->
+ Ref = erlang:monitor(process, Holder),
+ Holder ! What,
+ receive
+ {'DOWN', Ref, _, _, _} -> "";
+ {Holder, Res} ->
+ erlang:demonitor(Ref),
+ Res
+ after 5000 ->
+ io:format("Hanging call ~p~n",[What]),
+ ""
+ end;
+call(_,_) ->
+ "".
+
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info({holder_updated, Count}, State=#state{grid=Grid}) ->
+ wxListCtrl:setItemCount(Grid, Count),
+ Count > 0 andalso wxListCtrl:refreshItems(Grid, 0, Count-1),
+ {noreply, State};
+
+handle_info(active, State) ->
+ cdv_wx:set_status(State#state.trunc_warn),
+ {noreply, State};
+
+handle_info(Info, State) ->
+ io:format("~p:~p, Unexpected info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, #state{holder=Holder}) ->
+ Holder ! stop,
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(new_dump, _From,
+ #state{grid=Grid,detail_wins=Opened,
+ holder=Holder,callback=Callback}=State) ->
+ lists:foreach(fun({_Id, IW}) -> wxFrame:destroy(IW) end, Opened),
+ wxListCtrl:deleteAllItems(Grid),
+ Ref = erlang:monitor(process,Holder),
+ Holder ! stop,
+ receive {'DOWN',Ref,_,_,_} -> ok end,
+ {NewHolder,TW} = spawn_table_holder(Callback, all),
+ {reply, ok, State#state{detail_wins=[],holder=NewHolder,trunc_warn=TW}};
+
+handle_call(Msg, _From, State) ->
+ io:format("~p:~p: Unhandled call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast({start_detail_win,Id}, State) ->
+ State2 = do_start_detail_win(Id, State),
+ {noreply, State2};
+
+handle_cast({detail_win_closed, Id},#state{detail_wins=Opened}=State) ->
+ Opened2 = lists:keydelete(Id, 1, Opened),
+ {noreply, State#state{detail_wins=Opened2}};
+
+handle_cast(Msg, State) ->
+ io:format("~p:~p: Unhandled cast ~p~n", [?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+%%%%%%%%%%%%%%%%%%%%LOOP%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_event(#wx{id=MenuId,
+ event=#wxCommand{type = command_menu_selected}},
+ #state{menu_items=MenuItems} = State) ->
+ case lists:keyfind(MenuId,1,MenuItems) of
+ {MenuId,Id} ->
+ start_detail_win(Id);
+ false ->
+ ok
+ end,
+ {noreply, State};
+
+handle_event(#wx{event=#wxSize{size={W,_}}},
+ #state{grid=Grid}=State) ->
+ observer_lib:set_listctrl_col_size(Grid, W),
+ {noreply, State};
+
+handle_event(#wx{event=#wxList{type=command_list_item_right_click,
+ itemIndex=Row}},
+ #state{panel=Panel, holder=Holder, menu_cols=MenuCols} = State) ->
+ Menu = wxMenu:new(),
+ MenuItems =
+ lists:flatmap(
+ fun(Col) ->
+ MenuId = ?ID_DETAILS + Col,
+ ColText = call(Holder, {get_row, self(), Row, Col}),
+ case ColText of
+ "[]" -> [];
+ _ ->
+ What =
+ case catch list_to_integer(ColText) of
+ NodeId when is_integer(NodeId) ->
+ "node " ++ ColText;
+ _ ->
+ ColText
+ end,
+ Text = "Properties for " ++ What,
+ wxMenu:append(Menu, MenuId, Text),
+ [{MenuId,ColText}]
+ end
+ end,
+ MenuCols),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ {noreply,State#state{menu_items=MenuItems}};
+
+handle_event(#wx{event=#wxList{type=command_list_col_click, col=Col}},
+ #state{holder=Holder}=State) ->
+ Holder ! {change_sort, Col},
+ {noreply, State};
+
+handle_event(#wx{event=#wxList{type=command_list_item_activated,
+ itemIndex=Row}},
+ #state{holder=Holder} = State) ->
+ Id = call(Holder, {get_row, self(), Row, id}),
+ start_detail_win(Id),
+ {noreply, State};
+
+handle_event(Event, State) ->
+ io:format("~p:~p: handle event ~p\n", [?MODULE, ?LINE, Event]),
+ {noreply, State}.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%TABLE HOLDER%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+spawn_table_holder(Callback, Owner) ->
+ {Info,TW} = Callback:get_info(Owner),
+ Attrs = observer_lib:create_attrs(),
+ Parent = self(),
+ Holder =
+ case Owner of
+ all ->
+ Name = list_to_atom(atom_to_list(Callback) ++ "__holder"),
+ spawn_link(
+ fun() ->
+ register(Name,self()),
+ init_table_holder(Parent, Attrs, Callback, Info)
+ end),
+ Name;
+ _ ->
+ spawn_link(
+ fun() ->
+ init_table_holder(Parent, Attrs, Callback, Info)
+ end)
+ end,
+ {Holder,TW}.
+
+init_table_holder(Parent, Attrs, Callback, InfoList0) ->
+ Sort = #sort{sort_key=Callback:col_to_elem(id)},
+ {_Sort, InfoList} = do_sort(Sort,InfoList0),
+ Info = array:from_list(InfoList),
+ NRows = array:size(Info),
+ Parent ! {holder_updated, NRows},
+ table_holder(#holder{parent=Parent,
+ info=Info,
+ sort=Sort,
+ attrs=Attrs,
+ callback=Callback}).
+
+table_holder(#holder{callback=Callback, attrs=Attrs}=S0) ->
+ receive
+ _M={get_row, From, Row, Col} ->
+ %% erlang:display(_M),
+ State = get_row(From, Row, Col, S0),
+ table_holder(State);
+ _M={get_attr, From, Row} ->
+ %% erlang:display(_M),
+ get_attr(From, Row, Attrs),
+ table_holder(S0);
+ _M={change_sort, Col} ->
+ %% erlang:display(_M),
+ State = change_sort(Callback:col_to_elem(Col), S0),
+ table_holder(State);
+ stop ->
+ ok;
+ What ->
+ io:format("Table holder got ~p~n",[What]),
+ table_holder(S0)
+ end.
+
+change_sort(Col, S0=#holder{parent=Parent, info=Info0, sort=Sort0}) ->
+ NRows = array:size(Info0),
+ InfoList0 = array:to_list(Info0),
+ {Sort, InfoList}=sort(Col, Sort0, InfoList0),
+ Info = array:from_list(InfoList),
+ Parent ! {holder_updated, NRows},
+ S0#holder{info=Info, last_row=undefined, sort=Sort}.
+
+sort(Col, Opt=#sort{sort_key=Col, sort_incr=Bool}, Table) ->
+ do_sort(Opt#sort{sort_incr=not Bool}, Table);
+sort(Col, Sort,Table) ->
+ do_sort(Sort#sort{sort_key=Col, sort_incr=true}, Table).
+
+do_sort(Sort=#sort{sort_key=Col, sort_incr=true}, Table) ->
+ {Sort, lists:keysort(Col, Table)};
+do_sort(Sort=#sort{sort_key=Col, sort_incr=false}, Table) ->
+ {Sort, lists:reverse(lists:keysort(Col, Table))}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+get_cell_data(Callback, ColNo, RowInfo) ->
+ case element(Callback:col_to_elem(ColNo), RowInfo) of
+ undefined -> "";
+ Cell -> try Callback:format(Cell) catch error:undef -> Cell end
+ end.
+
+get_row(From, Row, Col,
+ #holder{callback=Callback, last_row={Row,RowInfo}}=State) ->
+ Data = get_cell_data(Callback, Col, RowInfo),
+ From ! {self(), observer_lib:to_str(Data)},
+ State;
+get_row(From, Row, Col, #holder{callback=Callback, info=Info}=S0) ->
+ {Data,State} =
+ case Row >= array:size(Info) of
+ true ->
+ {"",S0};
+ false ->
+ RowInfo = array:get(Row, Info),
+ CellData = get_cell_data(Callback, Col, RowInfo),
+ {CellData,S0#holder{last_row={Row,RowInfo}}}
+ end,
+ From ! {self(), observer_lib:to_str(Data)},
+ State.
+
+get_attr(From, Row, Attrs) ->
+ Attribute = case Row rem 2 =:= 0 of
+ true -> Attrs#attrs.even;
+ false -> Attrs#attrs.odd
+ end,
+ From ! {self(), Attribute}.
diff --git a/lib/observer/src/cdv_wx.erl b/lib/observer/src/cdv_wx.erl
new file mode 100644
index 0000000000..26df60b0a6
--- /dev/null
+++ b/lib/observer/src/cdv_wx.erl
@@ -0,0 +1,462 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 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(cdv_wx).
+-compile(export_all).
+-behaviour(wx_object).
+
+-export([start/1]).
+-export([get_attrib/1, set_status/1, create_txt_dialog/4]).
+
+-export([init/1, handle_event/2, handle_cast/2, terminate/2, code_change/3,
+ handle_call/3, handle_info/2, check_page_title/1]).
+
+%% Includes
+-include_lib("wx/include/wx.hrl").
+-include_lib("kernel/include/file.hrl").
+
+-include("observer_defs.hrl").
+
+%% Defines
+
+-define(SERVER, cdv_wx).
+
+-define(ID_UG, 1).
+-define(ID_HOWTO, 2).
+-define(ID_NOTEBOOK, 3).
+
+-define(GEN_STR, "General").
+-define(PRO_STR, "Processes").
+-define(PORT_STR, "Ports").
+-define(ETS_STR, "ETS Tables").
+-define(TIMER_STR, "Timers").
+-define(FUN_STR, "Funs").
+-define(ATOM_STR, "Atoms").
+-define(DIST_STR, "Nodes").
+-define(MOD_STR, "Modules").
+-define(MEM_STR, "Memory").
+-define(INT_STR, "Internal Tables").
+
+%% Records
+-record(state,
+ {server,
+ file,
+ frame,
+ menubar,
+ menus = [],
+ status_bar,
+ notebook,
+ main_panel,
+ gen_panel,
+ pro_panel,
+ port_panel,
+ ets_panel,
+ timer_panel,
+ fun_panel,
+ atom_panel,
+ dist_panel,
+ mod_panel,
+ mem_panel,
+ int_panel,
+ active_tab
+ }).
+
+start(File) ->
+ case wx_object:start(?MODULE, File, []) of
+ Err = {error, _} -> Err;
+ _Obj -> ok
+ end.
+
+get_attrib(What) ->
+ wx_object:call(?SERVER, {get_attrib, What}).
+
+set_status(What) ->
+ wx_object:cast(?SERVER, {status_bar, What}).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init(File0) ->
+ register(?SERVER, self()),
+ wx:new(),
+
+ {ok,CdvServer} = crashdump_viewer:start_link(),
+
+ catch wxSystemOptions:setOption("mac.listctrl.always_use_generic", 1),
+ Frame = wxFrame:new(wx:null(), ?wxID_ANY, "Crashdump Viewer",
+ [{size, {850, 600}}, {style, ?wxDEFAULT_FRAME_STYLE}]),
+ IconFile = filename:join(code:priv_dir(observer), "erlang_observer.png"),
+ Icon = wxIcon:new(IconFile, [{type,?wxBITMAP_TYPE_PNG}]),
+ wxFrame:setIcon(Frame, Icon),
+ wxIcon:destroy(Icon),
+
+ %% Setup panels
+ Panel = wxPanel:new(Frame, []),
+ Notebook = wxNotebook:new(Panel, ?ID_NOTEBOOK, [{style, ?wxBK_DEFAULT}]),
+
+ %% Setup "statusbar" to show warnings
+ StatusBar = observer_lib:create_status_bar(Panel),
+
+ %% Setup sizer create early to get it when window shows
+ MainSizer = wxBoxSizer:new(?wxVERTICAL),
+
+ wxSizer:add(MainSizer, Notebook, [{proportion, 1}, {flag, ?wxEXPAND}]),
+ wxSizer:add(MainSizer, StatusBar, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 0},
+ {border,4}]),
+ wxPanel:setSizer(Panel, MainSizer),
+
+ wxNotebook:connect(Notebook, command_notebook_page_changing),
+ wxFrame:connect(Frame, close_window, [{skip, true}]),
+ wxMenu:connect(Frame, command_menu_selected),
+
+ case load_dump(Frame,File0) of
+ {ok,File} ->
+ %% Set window title
+ T1 = "Crashdump Viewer: ",
+ Title =
+ if length(File) > 70 ->
+ T1 ++ filename:basename(File);
+ true ->
+ T1 ++ File
+ end,
+ wxFrame:setTitle(Frame, Title),
+
+ setup(#state{server=CdvServer,
+ file=File,
+ frame=Frame,
+ status_bar=StatusBar,
+ notebook=Notebook,
+ main_panel=Panel});
+ error ->
+ wxFrame:destroy(Frame),
+ wx:destroy(),
+ crashdump_viewer:stop(),
+ ignore
+ end.
+
+setup(#state{frame=Frame, notebook=Notebook}=State) ->
+
+ %% Setup Menubar & Menus
+ MenuBar = wxMenuBar:new(),
+ DefMenus = default_menus(),
+ observer_lib:create_menus(DefMenus, MenuBar, default),
+ wxFrame:setMenuBar(Frame, MenuBar),
+
+ %% General information Panel
+ GenPanel = add_page(Notebook, ?GEN_STR, cdv_info_wx, cdv_gen_cb),
+
+ %% Process Panel
+ ProPanel = add_page(Notebook, ?PRO_STR, cdv_virtual_list_wx, cdv_proc_cb),
+
+ %% Port Panel
+ PortPanel = add_page(Notebook, ?PORT_STR, cdv_virtual_list_wx, cdv_port_cb),
+
+ %% Table Panel
+ EtsPanel = add_page(Notebook, ?ETS_STR, cdv_virtual_list_wx, cdv_ets_cb),
+
+ %% Timer Panel
+ TimerPanel = add_page(Notebook, ?TIMER_STR, cdv_virtual_list_wx,cdv_timer_cb),
+
+ %% Fun Panel
+ FunPanel = add_page(Notebook, ?FUN_STR, cdv_virtual_list_wx, cdv_fun_cb),
+
+ %% Atom Panel
+ AtomPanel = add_page(Notebook, ?ATOM_STR, cdv_virtual_list_wx, cdv_atom_cb),
+
+ %% Distribution Panel
+ DistPanel = add_page(Notebook, ?DIST_STR, cdv_virtual_list_wx, cdv_dist_cb),
+
+ %% Loaded Modules Panel
+ ModPanel = add_page(Notebook, ?MOD_STR, cdv_virtual_list_wx, cdv_mod_cb),
+
+ %% Memory Panel
+ MemPanel = add_page(Notebook, ?MEM_STR, cdv_multi_wx, cdv_mem_cb),
+
+ %% Memory Panel
+ IntPanel = add_page(Notebook, ?INT_STR, cdv_multi_wx, cdv_int_tab_cb),
+
+ %% Show the window
+ wxFrame:show(Frame),
+
+ GenPid = wx_object:get_pid(GenPanel),
+ GenPid ! active,
+ observer_lib:destroy_progress_dialog(),
+ process_flag(trap_exit, true),
+ {Frame, State#state{menubar = MenuBar,
+ gen_panel = GenPanel,
+ pro_panel = ProPanel,
+ port_panel = PortPanel,
+ ets_panel = EtsPanel,
+ timer_panel = TimerPanel,
+ fun_panel = FunPanel,
+ atom_panel = AtomPanel,
+ dist_panel = DistPanel,
+ mod_panel = ModPanel,
+ mem_panel = MemPanel,
+ int_panel = IntPanel,
+ active_tab = GenPid
+ }}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%Callbacks
+handle_event(#wx{event=#wxNotebook{type=command_notebook_page_changing}},
+ #state{active_tab=Previous} = State) ->
+ case get_active_pid(State) of
+ Previous -> {noreply, State};
+ Pid ->
+ Pid ! active,
+ {noreply, State#state{active_tab=Pid}}
+ end;
+
+handle_event(#wx{event = #wxClose{}}, State) ->
+ {stop, normal, State};
+
+handle_event(#wx{id = ?wxID_OPEN,
+ event = #wxCommand{type = command_menu_selected}},
+ State) ->
+ NewState =
+ case load_dump(State#state.frame,undefined) of
+ {ok,File} ->
+ Panels = [State#state.gen_panel,
+ State#state.pro_panel,
+ State#state.port_panel,
+ State#state.ets_panel,
+ State#state.timer_panel,
+ State#state.fun_panel,
+ State#state.atom_panel,
+ State#state.dist_panel,
+ State#state.mod_panel,
+ State#state.mem_panel,
+ State#state.int_panel],
+ _ = [wx_object:call(Panel,new_dump) || Panel<-Panels],
+ wxNotebook:setSelection(State#state.notebook,0),
+ observer_lib:destroy_progress_dialog(),
+ State#state{file=File};
+ error ->
+ State
+ end,
+ {noreply,NewState};
+
+handle_event(#wx{id = ?wxID_EXIT,
+ event = #wxCommand{type = command_menu_selected}},
+ State) ->
+ {stop, normal, State};
+
+handle_event(#wx{id = HelpId,
+ event = #wxCommand{type = command_menu_selected}},
+ State) when HelpId==?wxID_HELP; HelpId==?ID_UG; HelpId==?ID_HOWTO ->
+ Help = get_help_doc(HelpId),
+ wx_misc:launchDefaultBrowser(Help) orelse
+ create_txt_dialog(State#state.frame,
+ "Could not launch browser: ~n " ++ Help,
+ "Error", ?wxICON_ERROR),
+ {noreply, State};
+
+handle_event(#wx{id = ?wxID_ABOUT,
+ event = #wxCommand{type = command_menu_selected}},
+ State = #state{frame=Frame}) ->
+ AboutString = "Display information from an erlang crash dump",
+ Style = [{style, ?wxOK bor ?wxSTAY_ON_TOP},
+ {caption, "About"}],
+ wxMessageDialog:showModal(wxMessageDialog:new(Frame, AboutString, Style)),
+ {noreply, State};
+
+handle_event(Event, State) ->
+ Pid = get_active_pid(State),
+ Pid ! Event,
+ {noreply, State}.
+
+handle_cast({status_bar, Msg}, State=#state{status_bar=SB}) ->
+ wxTextCtrl:clear(SB),
+ wxTextCtrl:writeText(SB, Msg),
+ {noreply, State};
+
+handle_cast(_Cast, State) ->
+ {noreply, State}.
+
+handle_call({get_attrib, Attrib}, _From, State) ->
+ {reply, get(Attrib), State};
+
+handle_call(_Msg, _From, State) ->
+ {reply, ok, State}.
+
+handle_info({'EXIT', Pid, normal}, #state{server=Pid}=State) ->
+ {stop, normal, State};
+
+handle_info({'EXIT', Pid, _Reason}, State) ->
+ io:format("Child (~s) crashed exiting: ~p ~p~n",
+ [pid2panel(Pid, State), Pid,_Reason]),
+ {stop, normal, State};
+
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+terminate(_Reason, #state{frame = Frame}) ->
+ wxFrame:destroy(Frame),
+ wx:destroy(),
+ crashdump_viewer:stop(),
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+add_page(Notebook,Title,Callback,Extra) ->
+ Panel = Callback:start_link(Notebook, Extra),
+ wxNotebook:addPage(Notebook, Panel, Title, []),
+ Panel.
+
+create_txt_dialog(Frame, Msg, Title, Style) ->
+ MD = wxMessageDialog:new(Frame, Msg, [{style, Style}]),
+ wxMessageDialog:setTitle(MD, Title),
+ wxDialog:showModal(MD),
+ wxDialog:destroy(MD).
+
+check_page_title(Notebook) ->
+ Selection = wxNotebook:getSelection(Notebook),
+ wxNotebook:getPageText(Notebook, Selection).
+
+get_active_pid(#state{notebook=Notebook, gen_panel=Gen, pro_panel=Pro,
+ port_panel=Ports, ets_panel=Ets, timer_panel=Timers,
+ fun_panel=Funs, atom_panel=Atoms, dist_panel=Dist,
+ mod_panel=Mods, mem_panel=Mem, int_panel=Int
+ }) ->
+ Panel = case check_page_title(Notebook) of
+ ?GEN_STR -> Gen;
+ ?PRO_STR -> Pro;
+ ?PORT_STR -> Ports;
+ ?ETS_STR -> Ets;
+ ?TIMER_STR -> Timers;
+ ?FUN_STR -> Funs;
+ ?ATOM_STR -> Atoms;
+ ?DIST_STR -> Dist;
+ ?MOD_STR -> Mods;
+ ?MEM_STR -> Mem;
+ ?INT_STR -> Int
+ end,
+ wx_object:get_pid(Panel).
+
+pid2panel(Pid, #state{gen_panel=Gen, pro_panel=Pro, port_panel=Ports,
+ ets_panel=Ets, timer_panel=Timers, fun_panel=Funs,
+ atom_panel=Atoms, dist_panel=Dist, mod_panel=Mods,
+ mem_panel=Mem, int_panel=Int}) ->
+ case Pid of
+ Gen -> ?GEN_STR;
+ Pro -> ?PRO_STR;
+ Ports -> ?PORT_STR;
+ Ets -> ?ETS_STR;
+ Timers -> ?TIMER_STR;
+ Funs -> ?FUN_STR;
+ Atoms -> ?ATOM_STR;
+ Dist -> ?DIST_STR;
+ Mods -> ?MOD_STR;
+ Mem -> ?MEM_STR;
+ Int -> ?INT_STR;
+ _ -> "unknown"
+ end.
+
+default_menus() ->
+ Open = #create_menu{id = ?wxID_OPEN, text = "Open new crash dump"},
+ Quit = #create_menu{id = ?wxID_EXIT, text = "Quit"},
+ About = #create_menu{id = ?wxID_ABOUT, text = "About"},
+ Help = #create_menu{id = ?wxID_HELP},
+ UG = #create_menu{id = ?ID_UG, text = "Crashdump viewer user's guide"},
+ Howto = #create_menu{id = ?ID_HOWTO, text = "How to interpret crash dump"},
+ case os:type() =:= {unix, darwin} of
+ false ->
+ FileMenu = {"File", [Open,Quit]},
+ HelpMenu = {"Help", [About,Help,UG,Howto]},
+ [FileMenu, HelpMenu];
+ true ->
+ %% On Mac quit and about will be moved to the "default' place
+ %% automagicly, so just add them to a menu that always exist.
+ [{"File", [Open, About,Quit]}, {"&Help", [Help,UG,Howto]}]
+ end.
+
+
+load_dump(Frame,undefined) ->
+ FD = wxFileDialog:new(wx:null(),
+ [{style,?wxFD_OPEN bor ?wxFD_FILE_MUST_EXIST}]),
+ case wxFileDialog:showModal(FD) of
+ ?wxID_OK ->
+ Path = wxFileDialog:getPath(FD),
+ wxDialog:destroy(FD),
+ load_dump(Frame,Path);
+ _ ->
+ wxDialog:destroy(FD),
+ error
+ end;
+load_dump(Frame,FileName) ->
+ ok = observer_lib:display_progress_dialog("Crashdump Viewer",
+ "Loading crashdump"),
+ crashdump_viewer:read_file(FileName),
+ case observer_lib:wait_for_progress() of
+ ok ->
+ %% Set window title
+ T1 = "Crashdump Viewer: ",
+ Title =
+ if length(FileName) > 70 ->
+ T1 ++ filename:basename(FileName);
+ true ->
+ T1 ++ FileName
+ end,
+ wxFrame:setTitle(Frame, Title),
+ {ok,FileName};
+ error ->
+ error
+ end.
+
+%%%-----------------------------------------------------------------
+%%% Find help document (HTML files)
+get_help_doc(HelpId) ->
+ Internal = get_internal_help_doc(HelpId),
+ case filelib:is_file(Internal) of
+ true -> Internal;
+ false -> get_external_help_doc(HelpId)
+ end.
+
+get_internal_help_doc(?ID_HOWTO) ->
+ filename:join(erts_doc_dir(),help_file(?ID_HOWTO));
+get_internal_help_doc(HelpId) ->
+ filename:join(observer_doc_dir(),help_file(HelpId)).
+
+get_external_help_doc(?ID_HOWTO) ->
+ filename:join("http://www.erlang.org/doc/apps/erts",help_file(?ID_HOWTO));
+get_external_help_doc(HelpId) ->
+ filename:join("http://www.erlang.org/doc/apps/observer",help_file(HelpId)).
+
+observer_doc_dir() ->
+ filename:join([code:lib_dir(observer),"doc","html"]).
+
+erts_doc_dir() ->
+ ErtsVsn = erlang:system_info(version),
+ RootDir = code:root_dir(),
+ VsnErtsDir = filename:join(RootDir,"erts-"++ErtsVsn),
+ DocDir = filename:join(["doc","html"]),
+ case filelib:is_dir(VsnErtsDir) of
+ true ->
+ filename:join(VsnErtsDir,DocDir);
+ false ->
+ %% So this can be run in source tree
+ filename:join([RootDir,"erts",DocDir])
+ end.
+
+help_file(?wxID_HELP) -> "crashdump_help.html";
+help_file(?ID_UG) -> "crashdump_ug.html";
+help_file(?ID_HOWTO) -> "crash_dump.html".
diff --git a/lib/observer/src/crashdump_viewer.erl b/lib/observer/src/crashdump_viewer.erl
index e7d71c581e..a17efbccb0 100644
--- a/lib/observer/src/crashdump_viewer.erl
+++ b/lib/observer/src/crashdump_viewer.erl
@@ -20,80 +20,53 @@
%%
%% This module is the main module in the crashdump viewer. It implements
-%% the server started by webtool and the API for the crashdump viewer tool.
-%%
-%% All functions in the API except configData/0 and start_link/0 are
-%% called from HTML pages via erl_scheme (mod_esi).
+%% the server backend for the crashdump viewer tool.
%%
%% Tables
%% ------
-%% cdv_menu_table: This table holds the menu which is presented in the left
-%% frame of the crashdump viewer page. Each element in the table represents
-%% one meny item, and the state of the item indicates if it is presently
-%% visible or not.
-%%
-%% cdv_dump_index_table: This table holds all tags read from the crashdump.
-%% Each tag indicates where the information about a specific item starts.
-%% The table entry for a tag includes the start position for this
-%% item-information. All tags start with a "=" at the beginning of
-%% a line.
+%% cdv_dump_index_table: This table holds all tags read from the
+%% crashdump. Each tag indicates where the information about a
+%% specific item starts. The table entry for a tag includes the start
+%% position for this item-information. In a crash dump file, all tags
+%% start with a "=" at the beginning of a line.
%%
%% Process state
%% -------------
%% file: The name of the crashdump currently viewed.
%% dump_vsn: The version number of the crashdump
-%% procs_summary: Process summary represented by a list of
-%% #proc records. This is used for efficiency reasons when sorting the
-%% process summary table instead of reading all processes from the
-%% dump again. Note that if the dump contains more than
-%% ?max_sort_process_num processes, the sort functionality is not
-%% available, and the procs_summary field in the state will have the
-%% value 'too_many'.
-%% sorted: string(), indicated what item was last sorted in process summary.
-%% This is needed so reverse sorting can be done.
-%% shared_heap: 'true' if crashdump comes from a system running shared heap,
-%% else 'false'.
%% wordsize: 4 | 8, the number of bytes in a word.
%% binaries: a gb_tree containing binaries or links to binaries in the dump
%%
%% User API
--export([start/0,stop/0,script_start/0,script_start/1]).
-
-%% Webtool API
--export([configData/0,
- start_link/0]).
--export([start_page/2,
- read_file_frame/2,
- read_file/2,
- redirect/2,
- filename_frame/2,
- menu_frame/2,
- initial_info_frame/2,
- toggle/2,
- general_info/2,
- processes/3,
- proc_details/2,
- port/2,
- ports/3,
- ets_tables/3,
- internal_ets_tables/2,
- timers/3,
- fun_table/3,
- atoms/3,
- dist_info/2,
- loaded_modules/3,
- loaded_mod_details/2,
- memory/2,
- allocated_areas/2,
- allocator_info/2,
- hash_tables/2,
- index_tables/2,
- sort_procs/3,
- expand/2,
- expand_binary/2,
- expand_memory/2]).
-
+-export([start/0,start/1,stop/0,script_start/0,script_start/1]).
+
+%% GUI API
+-export([start_link/0]).
+-export([read_file/1,
+ general_info/0,
+ processes/0,
+ proc_details/1,
+ port/1,
+ ports/0,
+ ets_tables/1,
+ internal_ets_tables/0,
+ timers/1,
+ funs/0,
+ atoms/0,
+ dist_info/0,
+ node_info/1,
+ loaded_modules/0,
+ loaded_mod_details/1,
+ memory/0,
+ allocated_areas/0,
+ allocator_info/0,
+ hash_tables/0,
+ index_tables/0,
+ expand_binary/1]).
+
+%% Library function
+-export([to_proplist/2, to_value_list/1]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@@ -106,28 +79,11 @@
-include_lib("kernel/include/file.hrl").
-include_lib("stdlib/include/ms_transform.hrl").
--define(START_PAGE,"/cdv_erl/crashdump_viewer/start_page").
--define(READ_FILE_PAGE,"/cdv_erl/crashdump_viewer/read_file?path=").
-define(SERVER, crashdump_viewer_server).
-define(call_timeout,3600000).
-define(chunk_size,1000). % number of bytes read from crashdump at a time
-define(max_line_size,100). % max number of bytes (i.e. characters) the
% line_head/1 function can return
--define(max_display_size,500). % max number of bytes that will be directly
- % displayed. If e.g. msg_q is longer than
- % this, it must be explicitly expanded.
--define(max_display_binary_size,50). % max size of a binary that will be
- % directly displayed.
--define(max_sort_process_num,10000). % Max number of processes that allows
- % sorting. If more than this number of
- % processes exist, they will be displayed
- % in the order they are found in the log.
--define(items_chunk_size,?max_sort_process_num). % Number of items per chunk
- % when page of many items
- % is displayed, e.g. processes,
- % timers, funs...
- % Must be equal to
- % ?max_sort_process_num!
-define(not_available,"N/A").
@@ -136,7 +92,6 @@
-define(allocator,allocator).
-define(atoms,atoms).
-define(binary,binary).
--define(debug_proc_dictionary,debug_proc_dictionary).
-define(ende,ende).
-define(erl_crash_dump,erl_crash_dump).
-define(ets,ets).
@@ -152,7 +107,6 @@
-define(no_distribution,no_distribution).
-define(node,node).
-define(not_connected,not_connected).
--define(num_atoms,num_atoms).
-define(old_instr_data,old_instr_data).
-define(port,port).
-define(proc,proc).
@@ -164,8 +118,7 @@
-define(visible_node,visible_node).
--record(state,{file,dump_vsn,procs_summary,sorted,shared_heap=false,
- wordsize=4,num_atoms="unknown",binaries,bg_status}).
+-record(state,{file,dump_vsn,wordsize=4,num_atoms="unknown",binaries}).
%%%-----------------------------------------------------------------
%%% Debugging
@@ -198,133 +151,72 @@ stop_debug() ->
%%%-----------------------------------------------------------------
%%% User API
start() ->
- webtool:start(),
- receive after 1000 -> ok end,
- webtool:start_tools([],"app=crashdump_viewer"),
- receive after 1000 -> ok end,
- ok.
+ start(undefined).
+start(File) ->
+ cdv_wx:start(File).
stop() ->
- webtool:stop_tools([],"app=crashdump_viewer"),
- webtool:stop().
+ case whereis(?SERVER) of
+ undefined ->
+ ok;
+ Pid ->
+ Ref = erlang:monitor(process,Pid),
+ cast(stop),
+ receive {'DOWN', Ref, process, Pid, _} -> ok end
+ end.
%%%-----------------------------------------------------------------
%%% Start crashdump_viewer via the cdv script located in
%%% $OBSERVER_PRIV_DIR/bin
script_start() ->
- usage().
-script_start([File]) ->
- DefaultBrowser =
- case os:type() of
- {win32,_} -> iexplore;
- {unix,darwin} -> open;
- _ -> firefox
- end,
- script_start([File,DefaultBrowser]);
-script_start([FileAtom,Browser]) ->
+ do_script_start(fun() -> start() end),
+ erlang:halt().
+script_start([FileAtom]) ->
File = atom_to_list(FileAtom),
case filelib:is_regular(File) of
true ->
- io:format("Starting crashdump_viewer...\n"),
- start(),
- io:format("Reading crashdump..."),
- read_file(File),
- redirect([],[]),
- io:format("done\n"),
- start_browser(Browser);
+ do_script_start(fun() -> start(File) end);
false ->
io:format("cdv error: the given file does not exist\n"),
usage()
- end.
-
-start_browser(Browser) ->
- PortStr = integer_to_list(gen_server:call(web_tool,get_port)),
- Url = "http://localhost:" ++ PortStr ++ ?START_PAGE,
- {OSType,_} = os:type(),
- case Browser of
- none ->
- ok;
- iexplore when OSType == win32->
- io:format("Starting internet explorer...\n"),
- {ok,R} = win32reg:open(""),
- Key="\\local_machine\\SOFTWARE\\Microsoft\\IE Setup\\Setup",
- win32reg:change_key(R,Key),
- {ok,Val} = win32reg:value(R,"Path"),
- IExplore=filename:join(win32reg:expand(Val),"iexplore.exe"),
- os:cmd("\"" ++ IExplore ++ "\" " ++ Url);
- _ when OSType == win32 ->
- io:format("Starting ~w...\n",[Browser]),
- os:cmd("\"" ++ atom_to_list(Browser) ++ "\" " ++ Url);
- B when B==firefox; B==mozilla ->
- io:format("Sending URL to ~w...",[Browser]),
- BStr = atom_to_list(Browser),
- SendCmd = BStr ++ " -raise -remote \'openUrl(" ++ Url ++ ")\'",
- Port = open_port({spawn,SendCmd},[exit_status]),
- receive
- {Port,{exit_status,0}} ->
- io:format("done\n");
- {Port,{exit_status,_Error}} ->
- io:format(" not running, starting ~w...\n",[Browser]),
- os:cmd(BStr ++ " " ++ Url)
- after 5000 ->
- io:format(" failed, starting ~w...\n",[Browser]),
- erlang:port_close(Port),
- os:cmd(BStr ++ " " ++ Url)
- end;
- _ ->
- io:format("Starting ~w...\n",[Browser]),
- os:cmd(atom_to_list(Browser) ++ " " ++ Url)
end,
- ok.
+ erlang:halt();
+script_start(_) ->
+ usage(),
+ erlang:halt().
+
+do_script_start(StartFun) ->
+ process_flag(trap_exit,true),
+ case StartFun() of
+ ok ->
+ case whereis(cdv_wx) of
+ Pid when is_pid(Pid) ->
+ link(Pid),
+ receive
+ {'EXIT', Pid, normal} ->
+ ok;
+ {'EXIT', Pid, Reason} ->
+ io:format("\ncdv crash: ~p\n",[Reason])
+ end;
+ _ ->
+ io:format("\ncdv crash: ~p\n",[unknown_reason])
+ end;
+ Error ->
+ io:format("\ncdv start failed: ~p\n",[Error])
+ end.
usage() ->
io:format(
- "\nusage: cdv file [ browser ]\n"
+ "usage: cdv [file]\n"
"\tThe \'file\' must be an existing erlang crash dump.\n"
- "\tDefault browser is \'iexplore\' (Internet Explorer) on Windows,\n"
- "\t\'open\' on Mac OS X, or else \'firefox\'.\n",
+ "\tIf omitted a file dialog will be opened.\n",
[]).
-
-
-
-%%%-----------------------------------------------------------------
-%%% Return config data used by webtool
-configData() ->
- Dir = filename:join(code:priv_dir(observer),"crashdump_viewer"),
- {crashdump_viewer,
- [{web_data,{"CrashDumpViewer",?START_PAGE}},
- {alias,{"/crashdump_viewer",Dir}},
- {alias,{"/crashdump_erts_doc",erts_docdir()}},
- {alias,{"/crashdump_doc",cdv_docdir()}},
- {alias,{erl_alias,"/cdv_erl",[?MODULE]}},
- {start,{child,{{local,?SERVER},
- {?MODULE,start_link,[]},
- permanent,100,worker,[?MODULE]}}}
- ]}.
-
-erts_docdir() ->
- ErtsVsn = erlang:system_info(version),
- RootDir = code:root_dir(),
- VsnErtsDir = filename:join(RootDir,"erts-"++ErtsVsn),
- DocDir = filename:join(["doc","html"]),
- case filelib:is_dir(VsnErtsDir) of
- true ->
- filename:join(VsnErtsDir,DocDir);
- false ->
- %% So this can be run in clearcase
- filename:join([RootDir,"erts",DocDir])
- end.
-
-cdv_docdir() ->
- ObserverDir = code:lib_dir(observer),
- filename:join([ObserverDir,"doc","html"]).
-
%%====================================================================
%% External functions
%%====================================================================
%%%--------------------------------------------------------------------
-%%% Start the server
+%%% Start the server - called by cdv_wx
start_link() ->
case whereis(?SERVER) of
undefined ->
@@ -334,119 +226,63 @@ start_link() ->
end.
%%%-----------------------------------------------------------------
-%%% If crashdump_viewer is just started, show welcome frame. Else
-%%% show menu and general_info
-start_page(_Env,_Input) ->
- call(start_page).
-
-%%%-----------------------------------------------------------------
-%%% Display the form for entering the file name for the crashdump
-%%% to view.
-read_file_frame(_Env,_Input) ->
- crashdump_viewer_html:read_file_frame().
-
-%%%-----------------------------------------------------------------
-%%% Called when the 'ok' button is clicked after entering the dump
-%%% file name.
-read_file(_Env,Input) ->
- call({read_file,Input}).
-
-%%%-----------------------------------------------------------------
-%%% The topmost frame of the main page. Called when a crashdump is
-%%% loaded.
-filename_frame(_Env,_Input) ->
- call(filename_frame).
-
-%%%-----------------------------------------------------------------
-%%% The initial information frame. Called when a crashdump is loaded.
-initial_info_frame(_Env,_Input) ->
- call(initial_info_frame).
-
-%%%-----------------------------------------------------------------
-%%% The left frame of the main page. Called when a crashdump is
-%%% loaded.
-menu_frame(_Env,_Input) ->
- crashdump_viewer_html:menu_frame().
-
-%%%-----------------------------------------------------------------
-%%% Called when the collapsed or exploded picture in the menu is
-%%% clicked.
-toggle(_Env,Input) ->
- call({toggle,Input}).
+%%% Called by cdv_wx
+read_file(File) ->
+ cast({read_file,File}).
%%%-----------------------------------------------------------------
-%%% The following functions are called when menu items are clicked.
-general_info(_Env,_Input) ->
+%%% The following functions are called when the different tabs are
+%%% created
+general_info() ->
call(general_info).
-processes(SessionId,_Env,_Input) ->
- call({procs_summary,SessionId}).
-ports(SessionId,_Env,_Input) ->
- call({ports,SessionId}).
-ets_tables(SessionId,_Env,Input) ->
- call({ets_tables,SessionId,Input}).
-internal_ets_tables(_Env,_Input) ->
+processes() ->
+ call(procs_summary).
+ports() ->
+ call(ports).
+ets_tables(Owner) ->
+ call({ets_tables,Owner}).
+internal_ets_tables() ->
call(internal_ets_tables).
-timers(SessionId,_Env,Input) ->
- call({timers,SessionId,Input}).
-fun_table(SessionId,_Env,_Input) ->
- call({funs,SessionId}).
-atoms(SessionId,_Env,_Input) ->
- call({atoms,SessionId}).
-dist_info(_Env,_Input) ->
+timers(Owner) ->
+ call({timers,Owner}).
+funs() ->
+ call(funs).
+atoms() ->
+ call(atoms).
+dist_info() ->
call(dist_info).
-loaded_modules(SessionId,_Env,_Input) ->
- call({loaded_mods,SessionId}).
-loaded_mod_details(_Env,Input) ->
- call({loaded_mod_details,Input}).
-memory(_Env,_Input) ->
+node_info(Channel) ->
+ call({node_info,Channel}).
+loaded_modules() ->
+ call(loaded_mods).
+loaded_mod_details(Mod) ->
+ call({loaded_mod_details,Mod}).
+memory() ->
call(memory).
-allocated_areas(_Env,_Input) ->
+allocated_areas() ->
call(allocated_areas).
-allocator_info(_Env,_Input) ->
+allocator_info() ->
call(allocator_info).
-hash_tables(_Env,_Input) ->
+hash_tables() ->
call(hash_tables).
-index_tables(_Env,_Input) ->
+index_tables() ->
call(index_tables).
%%%-----------------------------------------------------------------
%%% Called when a link to a process (Pid) is clicked.
-proc_details(_Env,Input) ->
- call({proc_details,Input}).
-
-%%%-----------------------------------------------------------------
-%%% Called when one of the headings in the process summary table are
-%%% clicked. It sorts the processes by the clicked heading.
-sort_procs(SessionId,_Env,Input) ->
- call({sort_procs,SessionId,Input}).
+proc_details(Pid) ->
+ call({proc_details,Pid}).
%%%-----------------------------------------------------------------
%%% Called when a link to a port is clicked.
-port(_Env,Input) ->
- call({port,Input}).
-
-%%%-----------------------------------------------------------------
-%%% Called when the "Expand" link in a call stack (Last Calls) is
-%%% clicked.
-expand(_Env,Input) ->
- call({expand,Input}).
-
-%%%-----------------------------------------------------------------
-%%% Called when the "Expand" link in a stack dump, message queue or
-%%% dictionary is clicked.
-expand_memory(_Env,Input) ->
- call({expand_memory,Input}).
+port(Id) ->
+ call({port,Id}).
%%%-----------------------------------------------------------------
-%%% Called when "<< xxx bytes>>" link in a stack dump, message queue or
-%%% dictionary is clicked.
-expand_binary(_Env,Input) ->
- call({expand_binary,Input}).
-
-%%%-----------------------------------------------------------------
-%%% Called on regular intervals while waiting for a dump to be read
-redirect(_Env,_Input) ->
- call(redirect).
+%%% Called when "<< xxx bytes>>" link is clicket to open a new window
+%%% displaying the whole binary.
+expand_binary(Pos) ->
+ call({expand_binary,Pos}).
%%====================================================================
%% Server functions
@@ -461,7 +297,6 @@ redirect(_Env,_Input) ->
%% {stop, Reason}
%%--------------------------------------------------------------------
init([]) ->
- ets:new(cdv_menu_table,[set,named_table,{keypos,#menu_item.index},public]),
ets:new(cdv_dump_index_table,[ordered_set,named_table,public]),
{ok, #state{}}.
@@ -475,223 +310,125 @@ init([]) ->
%% {stop, Reason, Reply, State} | (terminate/2 is called)
%% {stop, Reason, State} (terminate/2 is called)
%%--------------------------------------------------------------------
-handle_call(start_page,_From,State=#state{file=undefined,bg_status=undefined})->
- Reply = crashdump_viewer_html:welcome(),
- {reply,Reply,State};
-handle_call(start_page, _From, State=#state{file=undefined,bg_status={done,Page}}) ->
- {reply,Page,State};
-handle_call(start_page, _From, State=#state{file=undefined,bg_status=Status}) ->
- Reply = crashdump_viewer_html:redirect(Status),
- {reply,Reply,State};
-handle_call(start_page, _From, State) ->
- Reply = crashdump_viewer_html:start_page(),
- {reply,Reply,State};
-handle_call({read_file,Input}, _From, _State) ->
- {ok,File} = get_value("path",httpd:parse_query(Input)),
- spawn_link(fun() -> read_file(File) end),
- Status = background_status(reading,File),
- Reply = crashdump_viewer_html:redirect(Status),
- {reply, Reply, #state{bg_status=Status}};
-handle_call(redirect,_From, State=#state{bg_status={done,Page}}) ->
- {reply, Page, State#state{bg_status=undefined}};
-handle_call(redirect,_From, State=#state{bg_status=Status}) ->
- Reply = crashdump_viewer_html:redirect(Status),
- {reply, Reply, State};
-handle_call(filename_frame,_From,State=#state{file=File}) ->
- Reply = crashdump_viewer_html:filename_frame(File),
- {reply,Reply,State};
-handle_call(initial_info_frame,_From,State=#state{file=File}) ->
+handle_call(general_info,_From,State=#state{file=File}) ->
GenInfo = general_info(File),
- [{DumpVsn,_}] = lookup_index(?erl_crash_dump),
NumAtoms = GenInfo#general_info.num_atoms,
- {WS,SH} = parse_vsn_str(GenInfo#general_info.system_vsn,4,false),
- NumProcs = list_to_integer(GenInfo#general_info.num_procs),
- ProcsSummary =
- if NumProcs > ?max_sort_process_num -> too_many;
- true -> State#state.procs_summary
- end,
- NewState = State#state{dump_vsn=[list_to_integer(L) ||
- L<-string:tokens(DumpVsn,".")],
- shared_heap=SH,
- wordsize=WS,
- num_atoms=NumAtoms,
- procs_summary=ProcsSummary},
- Reply = crashdump_viewer_html:general_info(GenInfo),
- {reply,Reply,NewState};
-handle_call({toggle,Input},_From,State) ->
- {ok,Index} = get_value("index",httpd:parse_query(Input)),
- do_toggle(list_to_integer(Index)),
- Reply = crashdump_viewer_html:menu_frame(),
- {reply,Reply,State};
-handle_call({expand,Input},_From,State=#state{file=File}) ->
- [{"pos",Pos},{"size",Size},{"what",What},{"truncated",Truncated}] =
- httpd:parse_query(Input),
- Expanded = get_expanded(File,list_to_integer(Pos),list_to_integer(Size)),
- TruncText = if Truncated=="true" -> "WARNING: This term is truncated!\n\n";
- true -> ""
- end,
- Reply =
- case {Truncated,What} of
- {_,"LastCalls"} ->
- LastCalls = replace_all($ ,$\n,Expanded,[]),
- crashdump_viewer_html:info_page(What,[TruncText,LastCalls]);
- {_,"StackDump"} ->
- crashdump_viewer_html:info_page(What,[TruncText,Expanded]);
- {"false",_} ->
- crashdump_viewer_html:pretty_info_page(What,Expanded);
- {"true",_} ->
- crashdump_viewer_html:info_page(What,[TruncText,Expanded])
- end,
- {reply,Reply,State};
-handle_call({expand_memory,Input},_From,State=#state{file=File,binaries=B}) ->
- [{"pid",Pid},{"what",What}] = httpd:parse_query(Input),
- Reply =
- case truncated_warning([{?proc,Pid}]) of
- [] ->
- Expanded = expand_memory(File,What,Pid,B),
- crashdump_viewer_html:expanded_memory(What,Expanded);
- _TW ->
- Info =
- "The crashdump is truncated in the middle of this "
- "process' memory information, so this information "
- "can not be extracted.",
- crashdump_viewer_html:info_page(What,Info)
- end,
- {reply,Reply,State};
-handle_call({expand_binary,Input},_From,State=#state{file=File}) ->
- [{"pos",Pos0}] = httpd:parse_query(Input),
- Pos = list_to_integer(Pos0),
+ WS = parse_vsn_str(GenInfo#general_info.system_vsn,4),
+ TW = case get(truncated) of
+ true -> ["WARNING: The crash dump is truncated. "
+ "Some information might be missing."];
+ false -> []
+ end,
+ {reply,{ok,GenInfo,TW},State#state{wordsize=WS, num_atoms=NumAtoms}};
+handle_call({expand_binary,{Offset,Size,Pos}},_From,State=#state{file=File}) ->
Fd = open(File),
pos_bof(Fd,Pos),
- {Bin,_Line} = get_binary(val(Fd)),
+ {Bin,_Line} = get_binary(Offset,Size,val(Fd)),
close(Fd),
- Reply=crashdump_viewer_html:expanded_binary(io_lib:format("~p",[Bin])),
- {reply,Reply,State};
-handle_call(general_info,_From,State=#state{file=File}) ->
- GenInfo=general_info(File),
- Reply = crashdump_viewer_html:general_info(GenInfo),
- {reply,Reply,State};
-handle_call({procs_summary,SessionId},_From,State) ->
- TW = truncated_warning([?proc]),
- NewState = procs_summary(SessionId,TW,"pid",State#state{sorted=undefined}),
- {reply,ok,NewState};
-handle_call({sort_procs,SessionId,Input}, _From, State) ->
- {ok,Sort} = get_value("sort",httpd:parse_query(Input)),
+ {reply,{ok,Bin},State};
+handle_call(procs_summary,_From,State=#state{file=File,wordsize=WS}) ->
TW = truncated_warning([?proc]),
- NewState = procs_summary(SessionId,TW,Sort,State),
- {reply,ok,NewState};
-handle_call({proc_details,Input},_From,State=#state{file=File,shared_heap=SH}) ->
- {ok,Pid} = get_value("pid",httpd:parse_query(Input)),
+ Procs = procs_summary(File,WS),
+ {reply,{ok,Procs,TW},State};
+handle_call({proc_details,Pid},_From,
+ State=#state{file=File,wordsize=WS,dump_vsn=DumpVsn,binaries=B})->
Reply =
- case get_proc_details(File,Pid,State#state.dump_vsn) of
- {ok,Proc} ->
- TW = truncated_warning([{?proc,Pid}]),
- crashdump_viewer_html:proc_details(Pid,Proc,TW,SH);
- {other_node,Node} ->
- TW = truncated_warning([?visible_node,
- ?hidden_node,
- ?not_connected]),
- crashdump_viewer_html:nods(Node,TW);
- not_found ->
- crashdump_viewer_html:info_page(["Could not find process: ",
- Pid],?space)
+ case get_proc_details(File,Pid,WS,DumpVsn,B) of
+ {ok,Proc,TW} ->
+ {ok,Proc,TW};
+ Other ->
+ {error,Other}
end,
{reply, Reply, State};
-handle_call({port,Input},_From,State=#state{file=File}) ->
- {ok,P} = get_value("port",httpd:parse_query(Input)),
- Id = [$#|P],
+handle_call({port,Id},_From,State=#state{file=File}) ->
Reply =
case get_port(File,Id) of
{ok,PortInfo} ->
TW = truncated_warning([{?port,Id}]),
- crashdump_viewer_html:port(Id,PortInfo,TW);
- {other_node,Node} ->
- TW = truncated_warning([?visible_node,
- ?hidden_node,
- ?not_connected]),
- crashdump_viewer_html:nods(Node,TW);
- not_found ->
- crashdump_viewer_html:info_page(
- ["Could not find port: ",Id],?space)
+ {ok,PortInfo,TW};
+ Other ->
+ {error,Other}
end,
{reply,Reply,State};
-handle_call({ports,SessionId},_From,State=#state{file=File}) ->
+handle_call(ports,_From,State=#state{file=File}) ->
TW = truncated_warning([?port]),
- get_ports(SessionId,File,TW),
- {reply,ok,State};
-handle_call({ets_tables,SessionId,Input},_From,State=#state{file=File,wordsize=WS}) ->
- {Pid,Heading} =
- case get_value("pid",httpd:parse_query(Input)) of
- {ok,P} ->
- {P,["ETS Tables for Process ",P]};
- error ->
- {'$2',"ETS Table Information"}
+ Ports = get_ports(File),
+ {reply,{ok,Ports,TW},State};
+handle_call({ets_tables,Pid0},_From,State=#state{file=File,wordsize=WS}) ->
+ Pid =
+ case Pid0 of
+ all -> '$2';
+ _ -> Pid0
end,
TW = truncated_warning([?ets]),
- get_ets_tables(SessionId,File,Heading,TW,Pid,WS),
- {reply,ok,State};
+ Ets = get_ets_tables(File,Pid,WS),
+ {reply,{ok,Ets,TW},State};
handle_call(internal_ets_tables,_From,State=#state{file=File,wordsize=WS}) ->
InternalEts = get_internal_ets_tables(File,WS),
TW = truncated_warning([?internal_ets]),
- Reply = crashdump_viewer_html:internal_ets_tables(InternalEts,TW),
- {reply,Reply,State};
-handle_call({timers,SessionId,Input},_From,State=#state{file=File}) ->
- {Pid,Heading} =
- case get_value("pid",httpd:parse_query(Input)) of
- {ok,P} -> {P,["Timers for Process ",P]};
- error -> {'$2',"Timer Information"}
+ {reply,{ok,InternalEts,TW},State};
+handle_call({timers,Pid0},_From,State=#state{file=File}) ->
+ Pid =
+ case Pid0 of
+ all -> '$2';
+ _ -> Pid0
end,
TW = truncated_warning([?timer]),
- get_timers(SessionId,File,Heading,TW,Pid),
- {reply,ok,State};
+ Timers = get_timers(File,Pid),
+ {reply,{ok,Timers,TW},State};
handle_call(dist_info,_From,State=#state{file=File}) ->
- Nods=nods(File),
TW = truncated_warning([?visible_node,?hidden_node,?not_connected]),
- Reply = crashdump_viewer_html:nods(Nods,TW),
+ Nods=nods(File),
+ {reply,{ok,Nods,TW},State};
+handle_call({node_info,Channel},_From,State=#state{file=File}) ->
+ Reply =
+ case get_node(File,Channel) of
+ {ok,Nod} ->
+ TW = truncated_warning([?visible_node,
+ ?hidden_node,
+ ?not_connected]),
+ {ok,Nod,TW};
+ {error,Other} ->
+ {error,Other}
+ end,
{reply,Reply,State};
-handle_call({loaded_mods,SessionId},_From,State=#state{file=File}) ->
+handle_call(loaded_mods,_From,State=#state{file=File}) ->
TW = truncated_warning([?mod]),
- loaded_mods(SessionId,File,TW),
- {reply,ok,State};
-handle_call({loaded_mod_details,Input},_From,State=#state{file=File}) ->
- {ok,Mod} = get_value("mod",httpd:parse_query(Input)),
- ModInfo = get_loaded_mod_details(File,Mod),
+ {_CC,_OC,Mods} = loaded_mods(File),
+ {reply,{ok,Mods,TW},State};
+handle_call({loaded_mod_details,Mod},_From,State=#state{file=File}) ->
TW = truncated_warning([{?mod,Mod}]),
- Reply = crashdump_viewer_html:loaded_mod_details(ModInfo,TW),
- {reply,Reply,State};
-handle_call({funs,SessionId},_From,State=#state{file=File}) ->
+ ModInfo = get_loaded_mod_details(File,Mod),
+ {reply,{ok,ModInfo,TW},State};
+handle_call(funs,_From,State=#state{file=File}) ->
TW = truncated_warning([?fu]),
- funs(SessionId,File,TW),
- {reply,ok,State};
-handle_call({atoms,SessionId},_From,State=#state{file=File,num_atoms=Num}) ->
- TW = truncated_warning([?atoms,?num_atoms]),
- atoms(SessionId,File,TW,Num),
- {reply,ok,State};
+ Funs = funs(File),
+ {reply,{ok,Funs,TW},State};
+handle_call(atoms,_From,State=#state{file=File,num_atoms=NumAtoms0}) ->
+ TW = truncated_warning([?atoms]),
+ NumAtoms = try list_to_integer(NumAtoms0) catch error:badarg -> -1 end,
+ Atoms = atoms(File,NumAtoms),
+ {reply,{ok,Atoms,TW},State};
handle_call(memory,_From,State=#state{file=File}) ->
Memory=memory(File),
TW = truncated_warning([?memory]),
- Reply = crashdump_viewer_html:memory(Memory,TW),
- {reply,Reply,State};
+ {reply,{ok,Memory,TW},State};
handle_call(allocated_areas,_From,State=#state{file=File}) ->
AllocatedAreas=allocated_areas(File),
TW = truncated_warning([?allocated_areas]),
- Reply = crashdump_viewer_html:allocated_areas(AllocatedAreas,TW),
- {reply,Reply,State};
+ {reply,{ok,AllocatedAreas,TW},State};
handle_call(allocator_info,_From,State=#state{file=File}) ->
SlAlloc=allocator_info(File),
TW = truncated_warning([?allocator]),
- Reply = crashdump_viewer_html:allocator_info(SlAlloc,TW),
- {reply,Reply,State};
+ {reply,{ok,SlAlloc,TW},State};
handle_call(hash_tables,_From,State=#state{file=File}) ->
HashTables=hash_tables(File),
TW = truncated_warning([?hash_table,?index_table]),
- Reply = crashdump_viewer_html:hash_tables(HashTables,TW),
- {reply,Reply,State};
+ {reply,{ok,HashTables,TW},State};
handle_call(index_tables,_From,State=#state{file=File}) ->
IndexTables=index_tables(File),
TW = truncated_warning([?hash_table,?index_table]),
- Reply = crashdump_viewer_html:index_tables(IndexTables,TW),
- {reply,Reply,State}.
+ {reply,{ok,IndexTables,TW},State}.
@@ -702,11 +439,18 @@ handle_call(index_tables,_From,State=#state{file=File}) ->
%% {noreply, State, Timeout} |
%% {stop, Reason, State} (terminate/2 is called)
%%--------------------------------------------------------------------
-handle_cast({background_done,{Page,File,Binaries},Dict}, State) ->
- lists:foreach(fun({Key,Val}) -> put(Key,Val) end, Dict),
- {noreply, State#state{file=File,binaries=Binaries,bg_status={done,Page}}};
-handle_cast({background_status,Status}, State) ->
- {noreply, State#state{bg_status=Status}}.
+handle_cast({read_file,File}, _State) ->
+ case do_read_file(File) of
+ {ok,Binaries,DumpVsn} ->
+ observer_lib:report_progress({ok,done}),
+ {noreply, #state{file=File,binaries=Binaries,dump_vsn=DumpVsn}};
+ Error ->
+ end_progress(Error),
+ {noreply, #state{}}
+ end;
+handle_cast(stop,State) ->
+ {stop,normal,State}.
+
%%--------------------------------------------------------------------
%% Function: handle_info/2
@@ -791,24 +535,6 @@ compare_pid("<"++Id,"<"++OtherId) ->
compare_pid(_,_) ->
false.
-background_status(Action,File) ->
- SizeInfo = filesizeinfo(File),
- background_status(Action,File,SizeInfo).
-
-background_status(processing,File,SizeInfo) ->
- "Processing " ++ File ++ SizeInfo;
-background_status(reading,File,SizeInfo) ->
- "Reading file " ++ File ++ SizeInfo.
-
-filesizeinfo(File) ->
- case file:read_file_info(File) of
- {ok,#file_info{size=Size}} ->
- " (" ++ integer_to_list(Size) ++ " bytes)";
- _X ->
- ""
- end.
-
-
open(File) ->
{ok,Fd} = file:open(File,[read,read_ahead,raw,binary]),
Fd.
@@ -861,6 +587,18 @@ get_chunk(Fd) ->
{ok,Bin}
end.
+%% Read and report progress
+progress_read(Fd) ->
+ {R,Bytes} =
+ case read(Fd) of
+ {ok,Bin} ->
+ {{ok,Bin},byte_size(Bin)};
+ Other ->
+ {Other,0}
+ end,
+ update_progress(Bytes),
+ R.
+
read(Fd) ->
file:read(Fd,?chunk_size).
@@ -962,73 +700,30 @@ get_rest_of_line_1(Fd, <<>>, Acc) ->
eof -> {eof,lists:reverse(Acc)}
end.
-count_rest_of_line(Fd) ->
+get_lines_to_empty(Fd) ->
case get_chunk(Fd) of
- {ok,Bin} -> count_rest_of_line(Fd,Bin,0);
- eof -> {eof,0}
- end.
-count_rest_of_line(Fd,<<$\n:8,Bin/binary>>,N) ->
- put_chunk(Fd,Bin),
- N;
-count_rest_of_line(Fd,<<$\r:8,Bin/binary>>,N) ->
- count_rest_of_line(Fd,Bin,N);
-count_rest_of_line(Fd,<<_Char:8,Bin/binary>>,N) ->
- count_rest_of_line(Fd,Bin,N+1);
-count_rest_of_line(Fd,<<>>,N) ->
- case get_chunk(Fd) of
- {ok,Bin} -> count_rest_of_line(Fd,Bin,N);
- eof -> {eof,N}
- end.
-
-get_n_lines_of_tag(Fd,N) ->
- case get_chunk(Fd) of
- {ok,Bin} ->
- {AllOrPart,Rest,Lines} = get_n_lines_of_tag(Fd,N,Bin,[]),
- {AllOrPart,N-Rest,Lines};
+ {ok,Bin} ->
+ get_lines_to_empty(Fd,Bin,[],[]);
eof ->
- empty
- end.
-get_n_lines_of_tag(Fd,N,<<"\n=",_/binary>>=Bin,Acc) ->
- put_chunk(Fd,Bin),
- {all,N-1,lists:reverse(Acc)};
-get_n_lines_of_tag(Fd,0,Bin,Acc) ->
- put_chunk(Fd,Bin),
- {part,0,lists:reverse(Acc)};
-get_n_lines_of_tag(Fd,N,<<$\n:8,Bin/binary>>,Acc) ->
- get_n_lines_of_tag(Fd,N-1,Bin,[$\n|Acc]);
-get_n_lines_of_tag(Fd,N,<<$\r:8,Bin/binary>>,Acc) ->
- get_n_lines_of_tag(Fd,N,Bin,Acc);
-get_n_lines_of_tag(Fd,N,<<Char:8,Bin/binary>>,Acc) ->
- get_n_lines_of_tag(Fd,N,Bin,[Char|Acc]);
-get_n_lines_of_tag(Fd,N,<<>>,Acc) ->
- case get_chunk(Fd) of
- {ok,Bin} ->
- get_n_lines_of_tag(Fd,N,Bin,Acc);
- eof ->
- case Acc of
- [$\n|_] ->
- {all,N,lists:reverse(Acc)};
- _ ->
- {all,N-1,lists:reverse(Acc)}
- end
- end.
-
-count_rest_of_tag(Fd) ->
- case get_chunk(Fd) of
- {ok,Bin} -> count_rest_of_tag(Fd,Bin,0);
- eof -> 0
+ []
end.
-count_rest_of_tag(Fd,<<"\n=",Bin/binary>>,N) ->
+get_lines_to_empty(Fd,<<$\n:8,Bin/binary>>,[],Lines) ->
put_chunk(Fd,Bin),
- N;
-count_rest_of_tag(Fd,<<$\r:8,Bin/binary>>,N) ->
- count_rest_of_tag(Fd,Bin,N);
-count_rest_of_tag(Fd,<<_Char:8,Bin/binary>>,N) ->
- count_rest_of_tag(Fd,Bin,N+1);
-count_rest_of_tag(Fd,<<>>,N) ->
+ lists:reverse(Lines);
+get_lines_to_empty(Fd,<<$\n:8,Bin/binary>>,Acc,Lines) ->
+ get_lines_to_empty(Fd,Bin,[],[lists:reverse(Acc)|Lines]);
+get_lines_to_empty(Fd,<<$\r:8,Bin/binary>>,Acc,Lines) ->
+ get_lines_to_empty(Fd,Bin,Acc,Lines);
+get_lines_to_empty(Fd,<<$\s:8,Bin/binary>>,[],Lines) ->
+ get_lines_to_empty(Fd,Bin,[],Lines);
+get_lines_to_empty(Fd,<<Char:8,Bin/binary>>,Acc,Lines) ->
+ get_lines_to_empty(Fd,Bin,[Char|Acc],Lines);
+get_lines_to_empty(Fd,<<>>,Acc,Lines) ->
case get_chunk(Fd) of
- {ok,Bin} -> count_rest_of_tag(Fd,Bin,N);
- eof -> N
+ {ok,Bin} ->
+ get_lines_to_empty(Fd,Bin,Acc,Lines);
+ eof ->
+ lists:reverse(Lines,[lists:reverse(Acc)])
end.
split(Str) ->
@@ -1046,150 +741,32 @@ split(Char,[H|T],Acc) ->
split(_Char,[],Acc) ->
{lists:reverse(Acc),[]}.
-size_or_term(Fd) ->
- size_or_term(Fd,get(pos)).
-size_or_term(Fd,Pos) ->
- case count_rest_of_line(Fd) of
- {eof,Size} ->
- {size,true,Size,Pos};
- Size when Size > ?max_display_size ->
- {size,false,Size,Pos};
- _Size ->
- {ok,Pos} = pos_bof(Fd,Pos),
- val(Fd)
- end.
-
%%%-----------------------------------------------------------------
%%%
-get_value(Key,List) ->
- case lists:keysearch(Key,1,List) of
- {value,{Key,Value}} -> {ok,Value};
- false -> error
- end.
-
-parse_vsn_str([],WS,false) ->
- %% If the log is translated, crashdump_translate might have written
- %% shared_heap=true in dictionary.
- case erase(shared_heap) of
- true -> {WS,true};
- _ -> {WS,false}
- end;
-parse_vsn_str([],WS,SH) ->
- {WS,SH};
-parse_vsn_str(Str,WS,SH) ->
+parse_vsn_str([],WS) ->
+ WS;
+parse_vsn_str(Str,WS) ->
case Str of
- "[64-bit]" ++ Rest ->
- case SH of
- false ->
- parse_vsn_str(Rest,8,false);
- _ ->
- {8,SH}
- end;
- "[shared heap]" ++ Rest ->
- case WS of
- 4 ->
- parse_vsn_str(Rest,WS,true);
- _ ->
- {WS,true}
- end;
+ "[64-bit]" ++ _Rest ->
+ 8;
[_Char|Rest] ->
- parse_vsn_str(Rest,WS,SH)
+ parse_vsn_str(Rest,WS)
end.
%%%-----------------------------------------------------------------
-%%%
-initial_menu() ->
- insert_items(
- [menu_item(0, {"./general_info","General information"},0),
- menu_item(0, {"./processes","Processes"}, 0),
- menu_item(0, {"./ports","Ports"}, 0),
- menu_item(2, "ETS tables", 0),
- menu_item(0, {"./ets_tables","ETS tables"}, 1),
- menu_item(0, {"./internal_ets_tables","Internal ETS tables"}, 1),
- menu_item(0, {"./timers","Timers"}, 0),
- menu_item(0, {"./fun_table","Fun table"}, 0),
- menu_item(0, {"./atoms","Atoms"}, 0),
- menu_item(0, {"./dist_info","Distribution information"}, 0),
- menu_item(0, {"./loaded_modules","Loaded modules"}, 0),
- menu_item(2, "Internal Tables", 0),
- menu_item(0, {"./hash_tables","Hash tables"}, 1),
- menu_item(0, {"./index_tables","Index tables"}, 1),
- menu_item(3, "Memory information", 0),
- menu_item(0, {"./memory","Memory"}, 1),
- menu_item(0, {"./allocated_areas","Allocated areas"}, 1),
- menu_item(0, {"./allocator_info","Allocator information"}, 1),
- menu_item(2, "Documentation", 0),
- menu_item(0, {"/crashdump_doc/crashdump_help.html",
- "Crashdump Viewer help"}, 1,"doc"),
- menu_item(0, {"/crashdump_erts_doc/crash_dump.html",
- "How to interpret Erlang crashdumps"}, 1,"doc")]).
-
-menu_item(Children,Text,Depth) ->
- menu_item(Children,Text,Depth,"main").
-menu_item(Children,Text,Depth,Target) ->
- #menu_item{picture=get_pic(Children),
- text=Text,
- depth=Depth,
- children=Children,
- state=if Depth==0 -> true; true -> false end,
- target=Target}.
-
-insert_items(Items) ->
- insert_items(Items,1).
-insert_items([Item|Items],Index) ->
- ets:insert(cdv_menu_table,Item#menu_item{index=Index}),
- insert_items(Items,Index+1);
-insert_items([],_) ->
- ok.
-
-get_pic(0) ->
- "";
-get_pic(_) ->
- "/crashdump_viewer/collapsd.gif".
-
-do_toggle(Index) ->
- [Item]= ets:lookup(cdv_menu_table,Index),
- case toggle_children(Index,Index+Item#menu_item.children,
- Item#menu_item.depth+1,undefined) of
- true ->
- ets:insert(cdv_menu_table,
- Item#menu_item{picture=
- "/crashdump_viewer/exploded.gif"});
- false ->
- ets:insert(cdv_menu_table,
- Item#menu_item{picture=
- "/crashdump_viewer/collapsd.gif"})
- end.
-
-toggle_children(Index,Max,_Depth,ToggleState) when Index>Max->
- ToggleState;
-toggle_children(Index,Max,Depth,ToggleState) ->
- case ets:lookup(cdv_menu_table,Index+1) of
- [#menu_item{depth=Depth}=Child] ->
- NewState = not Child#menu_item.state,
- ets:insert(cdv_menu_table,Child#menu_item{state=NewState}),
- toggle_children(Index+1,Max,Depth,NewState);
- _ ->
- toggle_children(Index+1,Max,Depth,ToggleState)
- end.
-
-%%%-----------------------------------------------------------------
%%% Traverse crash dump and insert index in table for each heading
-%%%
-%%% This function is executed in a background process in order to
-%%% avoid a timeout in the web browser. The browser displays "Please
-%%% wait..." while this is going on.
%%%
-%%% Variable written to process dictionary in this function are copied
-%%% to the crashdump_viewer_server when the function is completed (see
-%%% background_done/1).
-read_file(File) ->
+%%% Progress is reported during the time and MUST be checked with
+%%% crashdump_viewer:get_progress/0 until it returns {ok,done}.
+do_read_file(File) ->
case file:read_file_info(File) of
- {ok,#file_info{type=regular,access=FileA}} when FileA=:=read;
- FileA=:=read_write ->
+ {ok,#file_info{type=regular,
+ access=FileA,
+ size=Size}} when FileA=:=read; FileA=:=read_write ->
Fd = open(File),
- case read(Fd) of
+ init_progress("Reading file",Size),
+ case progress_read(Fd) of
{ok,<<$=:8,TagAndRest/binary>>} ->
{Tag,Id,Rest,N1} = tag(Fd,TagAndRest,1),
case Tag of
@@ -1197,41 +774,40 @@ read_file(File) ->
reset_index_table(),
insert_index(Tag,Id,N1+1),
put(last_tag,{Tag,""}),
- Status = background_status(processing,File),
- background_status(Status),
indexify(Fd,Rest,N1),
+ end_progress(),
check_if_truncated(),
- initial_menu(),
- Binaries = read_binaries(Fd),
- R = crashdump_viewer_html:start_page(),
+ [{DumpVsn0,_}] = lookup_index(?erl_crash_dump),
+ DumpVsn = [list_to_integer(L) ||
+ L<-string:tokens(DumpVsn0,".")],
+ Binaries = read_binaries(Fd,DumpVsn),
close(Fd),
- background_done({R,File,Binaries});
+ {ok,Binaries,DumpVsn};
_Other ->
- R = crashdump_viewer_html:error(
+ R = io_lib:format(
"~s is not an Erlang crash dump~n",
[File]),
close(Fd),
- background_done({R,undefined,undefined})
+ {error,R}
end;
{ok,<<"<Erlang crash dump>",_Rest/binary>>} ->
%% old version - no longer supported
- R = crashdump_viewer_html:error(
+ R = io_lib:format(
"The crashdump ~s is in the pre-R10B format, "
"which is no longer supported.~n",
- [File]),
+ [File]),
close(Fd),
- background_done({R,undefined,undefined});
+ {error,R};
_Other ->
- R = crashdump_viewer_html:error(
+ R = io_lib:format(
"~s is not an Erlang crash dump~n",
[File]),
close(Fd),
- background_done({R,undefined,undefined})
+ {error,R}
end;
_other ->
- R = crashdump_viewer_html:error("~s is not an Erlang crash dump~n",
- [File]),
- background_done({R,undefined,undefined})
+ R = io_lib:format("~s is not an Erlang crash dump~n",[File]),
+ {error,R}
end.
indexify(Fd,Bin,N) ->
@@ -1244,7 +820,7 @@ indexify(Fd,Bin,N) ->
put(last_tag,{Tag,Id}),
indexify(Fd,Rest,N1);
nomatch ->
- case read(Fd) of
+ case progress_read(Fd) of
{ok,Chunk0} when is_binary(Chunk0) ->
{Chunk,N1} =
case binary:last(Bin) of
@@ -1272,7 +848,7 @@ tag(Fd,<<Char:8,Rest/binary>>,N,Gat,Di,tag) ->
tag(Fd,<<Char:8,Rest/binary>>,N,Gat,Di,id) ->
tag(Fd,Rest,N+1,Gat,[Char|Di],id);
tag(Fd,<<>>,N,Gat,Di,Now) ->
- case read(Fd) of
+ case progress_read(Fd) of
{ok,Chunk} when is_binary(Chunk) ->
tag(Fd,Chunk,N,Gat,Di,Now);
eof ->
@@ -1304,21 +880,12 @@ find_truncated_proc({Tag,Pid}) ->
is_proc_tag(Tag) when Tag==?proc;
Tag==?proc_dictionary;
Tag==?proc_messages;
- Tag==?debug_proc_dictionary;
Tag==?proc_stack;
Tag==?proc_heap ->
true;
is_proc_tag(_) ->
false.
-%%% Inform the crashdump_viewer_server that a background job is completed.
-background_done(Result) ->
- Dict = get(),
- cast({background_done,Result,Dict}).
-
-background_status(Status) ->
- cast({background_status,Status}).
-
%%%-----------------------------------------------------------------
%%% Functions for reading information from the dump
general_info(File) ->
@@ -1330,22 +897,18 @@ general_info(File) ->
WholeLine -> WholeLine
end,
- GI0 = get_general_info(Fd,#general_info{created=Created}),
- GI = case GI0#general_info.num_atoms of
- ?space -> GI0#general_info{num_atoms=get_num_atoms(Fd)};
- _ -> GI0
- end,
+ GI = get_general_info(Fd,#general_info{created=Created}),
{MemTot,MemMax} =
case lookup_index(?memory) of
[{_,MemStart}] ->
pos_bof(Fd,MemStart),
Memory = get_meminfo(Fd,[]),
- Tot = case lists:keysearch("total",1,Memory) of
+ Tot = case lists:keysearch(total,1,Memory) of
{value,{_,T}} -> T;
false -> ""
end,
- Max = case lists:keysearch("maximum",1,Memory) of
+ Max = case lists:keysearch(maximum,1,Memory) of
{value,{_,M}} -> M;
false -> ""
end,
@@ -1408,269 +971,210 @@ get_general_info(Fd,GenInfo) ->
GenInfo
end.
-get_num_atoms(Fd) ->
- case lookup_index(?hash_table,"atom_tab") of
- [{_,Pos}] ->
- pos_bof(Fd,Pos),
- skip_rest_of_line(Fd), % size
- skip_rest_of_line(Fd), % used
- case line_head(Fd) of
- "objs" ->
- val(Fd);
- _1 ->
- get_num_atoms2()
- end;
- [] ->
- get_num_atoms2()
- end.
-get_num_atoms2() ->
- case lookup_index(?num_atoms) of
- [] ->
- ?space;
- [{NA,_Pos}] ->
- %% If dump is translated this will exist
- case get(truncated) of
- true ->
- [NA," (visible in dump)"]; % might be more
- false ->
- NA
- end
- end.
-
count() ->
{count_index(?proc),count_index(?ets),count_index(?fu),count_index(?timer)}.
%%-----------------------------------------------------------------
%% Page with all processes
-%%
-%% If there are less than ?max_sort_process_num processes in the dump,
-%% we will store the list of processes in the server state in order to
-%% allow sorting according to the different columns of the
-%% table. Since ?max_sort_process_num=:=?items_chunk_size, there will
-%% never be more than one chunk in this case.
-%%
-%% If there are more than ?max_sort_process_num processes in the dump,
-%% no sorting will be allowed, and the processes must be read (chunk
-%% by chunk) from the file each time the page is opened. This is to
-%% avoid really big data in the server state.
-procs_summary(SessionId,TW,_,State=#state{procs_summary=too_many}) ->
- chunk_page(SessionId,State#state.file,TW,?proc,processes,
- {no_sort,State#state.shared_heap,State#state.dump_vsn},
- procs_summary_parsefun()),
- State;
-procs_summary(SessionId,TW,SortOn,State) ->
- ProcsSummary =
- case State#state.procs_summary of
- undefined -> % first time - read from file
- Fd = open(State#state.file),
- {PS,_}=lookup_and_parse_index_chunk(first_chunk_pointer(?proc),
- Fd,procs_summary_parsefun()),
- close(Fd),
- PS;
- PS ->
- PS
- end,
- {SortedPS,NewSorted} = do_sort_procs(SortOn,ProcsSummary,State),
- HtmlInfo =
- crashdump_viewer_html:chunk_page(processes,SessionId,TW,
- {SortOn,
- State#state.shared_heap,
- State#state.dump_vsn},
- SortedPS),
- crashdump_viewer_html:chunk(SessionId,done,HtmlInfo),
- State#state{procs_summary=ProcsSummary,sorted=NewSorted}.
-
-procs_summary_parsefun() ->
- fun(Fd,Pid) ->
- get_procinfo(Fd,fun main_procinfo/4,#proc{pid=Pid})
- end.
+procs_summary(File,WS) ->
+ ParseFun = fun(Fd,Pid) ->
+ Proc = get_procinfo(Fd,fun main_procinfo/5,
+ #proc{pid=list_to_pid(Pid)},WS),
+ case Proc#proc.memory of
+ undefined -> Proc#proc{memory=Proc#proc.stack_heap};
+ _ -> Proc
+ end
+ end,
+ lookup_and_parse_index(File,?proc,ParseFun,"processes").
%%-----------------------------------------------------------------
%% Page with one process
-get_proc_details(File,Pid,DumpVsn) ->
+get_proc_details(File,Pid,WS,DumpVsn,Binaries) ->
case lookup_index(?proc,Pid) of
[{_,Start}] ->
Fd = open(File),
- pos_bof(Fd,Start),
- Proc0 =
- case DumpVsn of
- [0,0] ->
- %% Old version (translated)
- #proc{pid=Pid};
- _ ->
- #proc{pid=Pid,
- stack_dump=if_exist(?proc_stack,Pid),
- msg_q=if_exist(?proc_messages,Pid),
- dict=if_exist(?proc_dictionary,Pid),
- debug_dict=if_exist(?debug_proc_dictionary,Pid)}
+ {{Stack,MsgQ,Dict},TW} =
+ case truncated_warning([{?proc,Pid}]) of
+ [] ->
+ {expand_memory(Fd,Pid,DumpVsn,Binaries),[]};
+ TW0 ->
+ {{[],[],[]},TW0}
end,
- Proc = get_procinfo(Fd,fun all_procinfo/4,Proc0),
+ pos_bof(Fd,Start),
+ Proc0 = #proc{pid=Pid,stack_dump=Stack,msg_q=MsgQ,dict=Dict},
+ Proc = get_procinfo(Fd,fun all_procinfo/5,Proc0,WS),
close(Fd),
- {ok,Proc};
+ {ok,Proc,TW};
_ ->
- case maybe_other_node(File,Pid) of
- {other_node,Type,Node} ->
- Info = "The process you are searching for was residing on "
- "a remote node. No process information is available. "
- "Information about the remote node is show below.",
- {other_node,{Type,Info,Node}};
- not_found ->
- not_found
- end
- end.
-
-if_exist(Tag,Key) ->
- case count_index(Tag,Key) of
- 0 ->
- Tag1 =
- case is_proc_tag(Tag) of
- true -> ?proc;
- false -> Tag
- end,
- case truncated_here({Tag1,Key}) of
- true -> truncated;
- false -> ?space
- end;
- _ ->
- expand
+ maybe_other_node(Pid)
end.
-get_procinfo(Fd,Fun,Proc) ->
+get_procinfo(Fd,Fun,Proc,WS) ->
case line_head(Fd) of
"State" ->
State = case val(Fd) of
"Garbing" -> "Garbing\n(limited info)";
State0 -> State0
end,
- get_procinfo(Fd,Fun,Proc#proc{state=State});
+ get_procinfo(Fd,Fun,Proc#proc{state=State},WS);
"Name" ->
- get_procinfo(Fd,Fun,Proc#proc{name=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{name=val(Fd)},WS);
"Spawned as" ->
IF = val(Fd),
case Proc#proc.name of
- ?space ->
- get_procinfo(Fd,Fun,Proc#proc{name=IF,init_func=IF});
+ undefined ->
+ get_procinfo(Fd,Fun,Proc#proc{name=IF,init_func=IF},WS);
_ ->
- get_procinfo(Fd,Fun,Proc#proc{init_func=IF})
+ get_procinfo(Fd,Fun,Proc#proc{init_func=IF},WS)
end;
+ "Message queue length" ->
+ %% stored as integer so we can sort on it
+ get_procinfo(Fd,Fun,Proc#proc{msg_q_len=list_to_integer(val(Fd))},WS);
+ "Reductions" ->
+ %% stored as integer so we can sort on it
+ get_procinfo(Fd,Fun,Proc#proc{reds=list_to_integer(val(Fd))},WS);
+ "Stack+heap" ->
+ %% stored as integer so we can sort on it
+ get_procinfo(Fd,Fun,Proc#proc{stack_heap=
+ list_to_integer(val(Fd))*WS},WS);
+ "Memory" ->
+ %% stored as integer so we can sort on it
+ get_procinfo(Fd,Fun,Proc#proc{memory=list_to_integer(val(Fd))},WS);
+ {eof,_} ->
+ Proc; % truncated file
+ Other ->
+ Fun(Fd,Fun,Proc,WS,Other)
+ end.
+
+main_procinfo(Fd,Fun,Proc,WS,LineHead) ->
+ case LineHead of
+ "=" ++ _next_tag ->
+ Proc;
+ "arity = " ++ _ ->
+ %%! Temporary workaround
+ get_procinfo(Fd,Fun,Proc,WS);
+ _Other ->
+ skip_rest_of_line(Fd),
+ get_procinfo(Fd,Fun,Proc,WS)
+ end.
+all_procinfo(Fd,Fun,Proc,WS,LineHead) ->
+ case LineHead of
+ %% - START - moved from get_procinfo -
"Spawned by" ->
case val(Fd) of
"[]" ->
- get_procinfo(Fd,Fun,Proc);
+ get_procinfo(Fd,Fun,Proc,WS);
Parent ->
- get_procinfo(Fd,Fun,Proc#proc{parent=Parent})
+ get_procinfo(Fd,Fun,Proc#proc{parent=Parent},WS)
end;
"Started" ->
- get_procinfo(Fd,Fun,Proc#proc{start_time=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{start_time=val(Fd)},WS);
"Last scheduled in for" ->
get_procinfo(Fd,Fun,Proc#proc{current_func=
{"Last scheduled in for",
- val(Fd)}});
+ val(Fd)}},WS);
"Current call" ->
get_procinfo(Fd,Fun,Proc#proc{current_func={"Current call",
- val(Fd)}});
- "Message queue length" ->
- %% stored as integer so we can sort on it
- get_procinfo(Fd,Fun,Proc#proc{msg_q_len=list_to_integer(val(Fd))});
- "Reductions" ->
- %% stored as integer so we can sort on it
- get_procinfo(Fd,Fun,Proc#proc{reds=list_to_integer(val(Fd))});
+ val(Fd)}},WS);
"Number of heap fragments" ->
- get_procinfo(Fd,Fun,Proc#proc{num_heap_frag=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{num_heap_frag=val(Fd)},WS);
"Heap fragment data" ->
- get_procinfo(Fd,Fun,Proc#proc{heap_frag_data=val(Fd)});
- Stack when Stack=:="Stack+heap"; Stack=:="Stack" ->
- %% stored as integer so we can sort on it
- get_procinfo(Fd,Fun,Proc#proc{stack_heap=
- list_to_integer(val(Fd))});
+ get_procinfo(Fd,Fun,Proc#proc{heap_frag_data=val(Fd)},WS);
"OldHeap" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap=val(Fd)});
+ Bytes = list_to_integer(val(Fd))*WS,
+ get_procinfo(Fd,Fun,Proc#proc{old_heap=Bytes},WS);
"Heap unused" ->
- get_procinfo(Fd,Fun,Proc#proc{heap_unused=val(Fd)});
+ Bytes = list_to_integer(val(Fd))*WS,
+ get_procinfo(Fd,Fun,Proc#proc{heap_unused=Bytes},WS);
"OldHeap unused" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap_unused=val(Fd)});
+ Bytes = list_to_integer(val(Fd))*WS,
+ get_procinfo(Fd,Fun,Proc#proc{old_heap_unused=Bytes},WS);
"New heap start" ->
- get_procinfo(Fd,Fun,Proc#proc{new_heap_start=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{new_heap_start=val(Fd)},WS);
"New heap top" ->
- get_procinfo(Fd,Fun,Proc#proc{new_heap_top=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{new_heap_top=val(Fd)},WS);
"Stack top" ->
- get_procinfo(Fd,Fun,Proc#proc{stack_top=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{stack_top=val(Fd)},WS);
"Stack end" ->
- get_procinfo(Fd,Fun,Proc#proc{stack_end=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{stack_end=val(Fd)},WS);
"Old heap start" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap_start=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{old_heap_start=val(Fd)},WS);
"Old heap top" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap_top=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{old_heap_top=val(Fd)},WS);
"Old heap end" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap_end=val(Fd)});
- "Memory" ->
- %% stored as integer so we can sort on it
- get_procinfo(Fd,Fun,Proc#proc{memory=list_to_integer(val(Fd))});
- {eof,_} ->
- Proc; % truncated file
- Other ->
- Fun(Fd,Fun,Proc,Other)
- end.
-
-main_procinfo(Fd,Fun,Proc,LineHead) ->
- case LineHead of
- "Stack dump" ->
- %% This is the last element in older dumps (DumpVsn=0.0)
- Proc;
- "=" ++ _next_tag ->
- %% DumpVsn=0.1 or newer: No stack dump here
- Proc;
- "arity = " ++ _ ->
- %%! Temporary workaround
- get_procinfo(Fd,Fun,Proc);
- _Other ->
- skip_rest_of_line(Fd),
- get_procinfo(Fd,Fun,Proc)
- end.
-all_procinfo(Fd,Fun,Proc,LineHead) ->
- case LineHead of
- "Message queue" ->
- get_procinfo(Fd,Fun,Proc#proc{msg_q=size_or_term(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{old_heap_end=val(Fd)},WS);
+ %% - END - moved from get_procinfo -
"Last calls" ->
- R = case size_or_term(Fd) of
- SizeThing when is_tuple(SizeThing) ->
- Proc#proc{last_calls=SizeThing};
- Term ->
- Proc#proc{last_calls=replace_all($ ,$\n,Term,[])}
- end,
- get_procinfo(Fd,Fun,R);
+ get_procinfo(Fd,Fun,Proc#proc{last_calls=get_lines_to_empty(Fd)},WS);
"Link list" ->
- get_procinfo(Fd,Fun,Proc#proc{links=val(Fd)});
+ {Links,Monitors,MonitoredBy} = parse_link_list(val(Fd),[],[],[]),
+ get_procinfo(Fd,Fun,Proc#proc{links=Links,
+ monitors=Monitors,
+ mon_by=MonitoredBy},WS);
"Program counter" ->
- get_procinfo(Fd,Fun,Proc#proc{prog_count=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{prog_count=val(Fd)},WS);
"CP" ->
- get_procinfo(Fd,Fun,Proc#proc{cp=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{cp=val(Fd)},WS);
"arity = " ++ Arity ->
%%! Temporary workaround
- get_procinfo(Fd,Fun,Proc#proc{arity=Arity--"\r\n"});
- "Dictionary" ->
- get_procinfo(Fd,Fun,Proc#proc{dict=size_or_term(Fd)});
- "$Dictionary" ->
- get_procinfo(Fd,Fun,Proc#proc{debug_dict=size_or_term(Fd)});
- "Stack dump" ->
- %% This is the last element in older dumps (DumpVsn=0.0)
- get_stack_dump(Fd,Proc);
+ get_procinfo(Fd,Fun,Proc#proc{arity=Arity--"\r\n"},WS);
"=" ++ _next_tag ->
- %% DumpVsn=0.1 or newer: No stack dump here
Proc;
Other ->
unexpected(Fd,Other,"process info"),
- get_procinfo(Fd,Fun,Proc)
+ get_procinfo(Fd,Fun,Proc,WS)
+ end.
+
+parse_link_list([SB|Str],Links,Monitors,MonitoredBy) when SB==$[; SB==$] ->
+ parse_link_list(Str,Links,Monitors,MonitoredBy);
+parse_link_list("#Port"++_=Str,Links,Monitors,MonitoredBy) ->
+ {Link,Rest} = parse_port(Str),
+ parse_link_list(Rest,[Link|Links],Monitors,MonitoredBy);
+parse_link_list("<"++_=Str,Links,Monitors,MonitoredBy) ->
+ {Link,Rest} = parse_pid(Str),
+ parse_link_list(Rest,[Link|Links],Monitors,MonitoredBy);
+parse_link_list("{to,"++Str,Links,Monitors,MonitoredBy) ->
+ {Mon,Rest} = parse_monitor(Str),
+ parse_link_list(Rest,Links,[Mon|Monitors],MonitoredBy);
+parse_link_list("{from,"++Str,Links,Monitors,MonitoredBy) ->
+ {Mon,Rest} = parse_monitor(Str),
+ parse_link_list(Rest,Links,Monitors,[Mon|MonitoredBy]);
+parse_link_list(", "++Rest,Links,Monitors,MonitoredBy) ->
+ parse_link_list(Rest,Links,Monitors,MonitoredBy);
+parse_link_list([],Links,Monitors,MonitoredBy) ->
+ {lists:reverse(Links),lists:reverse(Monitors),lists:reverse(MonitoredBy)}.
+
+parse_port(Str) ->
+ {Port,Rest} = parse_link(Str,[]),
+ {{Port,Port},Rest}.
+
+parse_pid(Str) ->
+ {Pid,Rest} = parse_link(Str,[]),
+ {{Pid,Pid},Rest}.
+
+parse_monitor(Str) ->
+ case parse_link(Str,[]) of
+ {Pid,","++Rest1} ->
+ case parse_link(Rest1,[]) of
+ {Ref,"}"++Rest2} ->
+ {{Pid,Pid++" ("++Ref++")"},Rest2};
+ {Ref,[]} ->
+ {{Pid,Pid++" ("++Ref++")"},[]}
+ end;
+ {Pid,[]} ->
+ {{Pid,Pid++" (unknown_ref)"},[]}
end.
-get_stack_dump(Fd,Proc) ->
- %% Always show stackdump as "Expand" link
- Pos = get(pos),
- Size = count_rest_of_tag(Fd),
- Proc#proc{stack_dump={size,true,Size,Pos}}.
+parse_link(">"++Rest,Acc) ->
+ {lists:reverse(Acc,">"),Rest};
+parse_link([H|T],Acc) ->
+ parse_link(T,[H|Acc]);
+parse_link([],Acc) ->
+ %% truncated
+ {lists:reverse(Acc),[]}.
-maybe_other_node(File,Id) ->
+maybe_other_node(Id) ->
Channel =
case split($.,Id) of
{"<" ++ N, _Rest} ->
@@ -1688,99 +1192,77 @@ maybe_other_node(File,Id) ->
end),
case ets:select(cdv_dump_index_table,Ms) of
- [] ->
+ [] ->
not_found;
- [{Type,Pos}] ->
- Fd = open(File),
- NodeInfo = get_nodeinfo(Fd,Channel,Pos),
- close(Fd),
- {other_node,Type,NodeInfo}
+ [_] ->
+ {other_node,Channel}
end.
-expand_memory(File,What,Pid,Binaries) ->
- Fd = open(File),
+expand_memory(Fd,Pid,DumpVsn,Binaries) ->
+ BinAddrAdj = get_bin_addr_adj(DumpVsn),
put(fd,Fd),
- Dict = read_heap(Fd,Pid,Binaries),
- Expanded =
- case What of
- "StackDump" -> read_stack_dump(Fd,Pid,Dict);
- "MsgQueue" -> read_messages(Fd,Pid,Dict);
- "Dictionary" -> read_dictionary(Fd,?proc_dictionary,Pid,Dict);
- "DebugDictionary" -> read_dictionary(Fd,?debug_proc_dictionary,Pid,Dict)
- end,
+ Dict = read_heap(Fd,Pid,BinAddrAdj,Binaries),
+ Expanded = {read_stack_dump(Fd,Pid,BinAddrAdj,Dict),
+ read_messages(Fd,Pid,BinAddrAdj,Dict),
+ read_dictionary(Fd,Pid,BinAddrAdj,Dict)},
erase(fd),
- close(Fd),
Expanded.
-
+
+%%%-----------------------------------------------------------------
+%%% This is a workaround for a bug in dump versions prior to 0.3:
+%%% Addresses were truncated to 32 bits. This could cause binaries to
+%%% get the same address as heap terms in the dump. To work around it
+%%% we always store binaries on very high addresses in the gb_tree.
+get_bin_addr_adj(DumpVsn) when DumpVsn < [0,3] ->
+ 16#f bsl 64;
+get_bin_addr_adj(_) ->
+ 0.
+
%%%
%%% Read binaries.
%%%
-read_binaries(Fd) ->
+read_binaries(Fd,DumpVsn) ->
AllBinaries = lookup_index(?binary),
- read_binaries(Fd,AllBinaries, gb_trees:empty()).
-
-read_binaries(Fd,[{Addr0,Pos}|Bins],Dict0) ->
- pos_bof(Fd,Pos),
- {Addr,_} = get_hex(Addr0),
- Dict =
- case line_head(Fd) of
- {eof,_} ->
- gb_trees:enter(Addr,'#CDVTruncatedBinary',Dict0);
- Size0 ->
- {Size,_} = get_hex(Size0),
- if Size > ?max_display_binary_size ->
- gb_trees:enter(Addr,{'#CDVTooBig',binary,Pos},Dict0);
- true ->
- pos_bof(Fd,Pos),
- Line = val(Fd),
- parse_binary(Addr,Line,Dict0)
- end
- end,
- read_binaries(Fd,Bins,Dict);
-read_binaries(_Fd,[],Dict) ->
- Dict.
-
-parse_binary(Addr, Line0, Dict) ->
- case get_hex(Line0) of
- {N,":"++Line1} ->
- {Bin,Line} = get_binary(N, Line1, []),
- [] = skip_blanks(Line),
- gb_trees:enter(Addr, Bin, Dict);
- {_N,[]} ->
- %% If the dump is truncated before the ':' in this line, then
- %% line_head/1 might not discover it (if a \n has been inserted
- %% somehow???)
- gb_trees:enter(Addr,'#CDVTruncatedBinary',Dict)
- end.
-
-
+ AddrAdj = get_bin_addr_adj(DumpVsn),
+ Fun = fun({Addr0,Pos},Dict0) ->
+ pos_bof(Fd,Pos),
+ {HexAddr,_} = get_hex(Addr0),
+ Addr = HexAddr bor AddrAdj,
+ Bin =
+ case line_head(Fd) of
+ {eof,_} -> '#CDVTruncatedBinary';
+ _Size -> {'#CDVBin',Pos}
+ end,
+ gb_trees:enter(Addr,Bin,Dict0)
+ end,
+ progress_foldl("Processing binaries",Fun,gb_trees:empty(),AllBinaries).
%%%
%%% Read top level section.
%%%
-read_stack_dump(Fd,Pid,Dict) ->
+read_stack_dump(Fd,Pid,BinAddrAdj,Dict) ->
case lookup_index(?proc_stack,Pid) of
[{_,Start}] ->
pos_bof(Fd,Start),
- read_stack_dump1(Fd,Dict,[]);
+ read_stack_dump1(Fd,BinAddrAdj,Dict,[]);
[] ->
[]
end.
-read_stack_dump1(Fd,Dict,Acc) ->
+read_stack_dump1(Fd,BinAddrAdj,Dict,Acc) ->
%% This function is never called if the dump is truncated in {?proc_heap,Pid}
case val(Fd) of
"=" ++ _next_tag ->
lists:reverse(Acc);
Line ->
- Stack = parse_top(Line,Dict),
- read_stack_dump1(Fd,Dict,[Stack|Acc])
+ Stack = parse_top(Line,BinAddrAdj,Dict),
+ read_stack_dump1(Fd,BinAddrAdj,Dict,[Stack|Acc])
end.
-parse_top(Line0, D) ->
+parse_top(Line0, BinAddrAdj, D) ->
{Label,Line1} = get_label(Line0),
- {Term,Line,D} = parse_term(Line1, D),
+ {Term,Line,D} = parse_term(Line1, BinAddrAdj, D),
[] = skip_blanks(Line),
{Label,Term}.
@@ -1788,27 +1270,27 @@ parse_top(Line0, D) ->
%%% Read message queue.
%%%
-read_messages(Fd,Pid,Dict) ->
+read_messages(Fd,Pid,BinAddrAdj,Dict) ->
case lookup_index(?proc_messages,Pid) of
[{_,Start}] ->
pos_bof(Fd,Start),
- read_messages1(Fd,Dict,[]);
+ read_messages1(Fd,BinAddrAdj,Dict,[]);
[] ->
[]
end.
-read_messages1(Fd,Dict,Acc) ->
+read_messages1(Fd,BinAddrAdj,Dict,Acc) ->
%% This function is never called if the dump is truncated in {?proc_heap,Pid}
case val(Fd) of
"=" ++ _next_tag ->
lists:reverse(Acc);
Line ->
- Msg = parse_message(Line,Dict),
- read_messages1(Fd,Dict,[Msg|Acc])
+ Msg = parse_message(Line,BinAddrAdj,Dict),
+ read_messages1(Fd,BinAddrAdj,Dict,[Msg|Acc])
end.
-parse_message(Line0, D) ->
- {Msg,":"++Line1,_} = parse_term(Line0, D),
- {Token,Line,_} = parse_term(Line1, D),
+parse_message(Line0, BinAddrAdj, D) ->
+ {Msg,":"++Line1,_} = parse_term(Line0, BinAddrAdj, D),
+ {Token,Line,_} = parse_term(Line1, BinAddrAdj, D),
[] = skip_blanks(Line),
{Msg,Token}.
@@ -1816,26 +1298,26 @@ parse_message(Line0, D) ->
%%% Read process dictionary
%%%
-read_dictionary(Fd,Tag,Pid,Dict) ->
- case lookup_index(Tag,Pid) of
+read_dictionary(Fd,Pid,BinAddrAdj,Dict) ->
+ case lookup_index(?proc_dictionary,Pid) of
[{_,Start}] ->
pos_bof(Fd,Start),
- read_dictionary1(Fd,Dict,[]);
+ read_dictionary1(Fd,BinAddrAdj,Dict,[]);
[] ->
[]
end.
-read_dictionary1(Fd,Dict,Acc) ->
+read_dictionary1(Fd,BinAddrAdj,Dict,Acc) ->
%% This function is never called if the dump is truncated in {?proc_heap,Pid}
case val(Fd) of
"=" ++ _next_tag ->
lists:reverse(Acc);
Line ->
- Msg = parse_dictionary(Line,Dict),
- read_dictionary1(Fd,Dict,[Msg|Acc])
+ Msg = parse_dictionary(Line,BinAddrAdj,Dict),
+ read_dictionary1(Fd,BinAddrAdj,Dict,[Msg|Acc])
end.
-parse_dictionary(Line0, D) ->
- {Entry,Line,_} = parse_term(Line0, D),
+parse_dictionary(Line0, BinAddrAdj, D) ->
+ {Entry,Line,_} = parse_term(Line0, BinAddrAdj, D),
[] = skip_blanks(Line),
Entry.
@@ -1843,16 +1325,16 @@ parse_dictionary(Line0, D) ->
%%% Read heap data.
%%%
-read_heap(Fd,Pid,Dict0) ->
+read_heap(Fd,Pid,BinAddrAdj,Dict0) ->
case lookup_index(?proc_heap,Pid) of
[{_,Pos}] ->
pos_bof(Fd,Pos),
- read_heap(Dict0);
+ read_heap(BinAddrAdj,Dict0);
[] ->
Dict0
end.
-read_heap(Dict0) ->
+read_heap(BinAddrAdj,Dict0) ->
%% This function is never called if the dump is truncated in {?proc_heap,Pid}
case get(fd) of
end_of_heap ->
@@ -1863,68 +1345,18 @@ read_heap(Dict0) ->
put(fd, end_of_heap),
Dict0;
Line ->
- Dict = parse(Line,Dict0),
- read_heap(Dict)
+ Dict = parse(Line,BinAddrAdj,Dict0),
+ read_heap(BinAddrAdj,Dict)
end
end.
-parse(Line0, Dict0) ->
+parse(Line0, BinAddrAdj, Dict0) ->
{Addr,":"++Line1} = get_hex(Line0),
- {_Term,Line,Dict} = parse_heap_term(Line1, Addr, Dict0),
+ {_Term,Line,Dict} = parse_heap_term(Line1, Addr, BinAddrAdj, Dict0),
[] = skip_blanks(Line),
Dict.
-do_sort_procs("state",Procs,#state{sorted="state"}) ->
- {lists:reverse(lists:keysort(#proc.state,Procs)),"rstate"};
-do_sort_procs("state",Procs,_) ->
- {lists:keysort(#proc.state,Procs),"state"};
-do_sort_procs("pid",Procs,#state{sorted="pid"}) ->
- {lists:reverse(Procs),"rpid"};
-do_sort_procs("pid",Procs,_) ->
- {Procs,"pid"};
-do_sort_procs("msg_q_len",Procs,#state{sorted="msg_q_len"}) ->
- {lists:keysort(#proc.msg_q_len,Procs),"rmsg_q_len"};
-do_sort_procs("msg_q_len",Procs,_) ->
- {lists:reverse(lists:keysort(#proc.msg_q_len,Procs)),"msg_q_len"};
-do_sort_procs("reds",Procs,#state{sorted="reds"}) ->
- {lists:keysort(#proc.reds,Procs),"rreds"};
-do_sort_procs("reds",Procs,_) ->
- {lists:reverse(lists:keysort(#proc.reds,Procs)),"reds"};
-do_sort_procs("mem",Procs,#state{sorted="mem",dump_vsn=DumpVsn}) ->
- KeyPos = if DumpVsn>=?r16b01_dump_vsn -> #proc.memory;
- true -> #proc.stack_heap
- end,
- {lists:keysort(KeyPos,Procs),"rmem"};
-do_sort_procs("mem",Procs,#state{dump_vsn=DumpVsn}) ->
- KeyPos = if DumpVsn>=?r16b01_dump_vsn -> #proc.memory;
- true -> #proc.stack_heap
- end,
- {lists:reverse(lists:keysort(KeyPos,Procs)),"mem"};
-do_sort_procs("init_func",Procs,#state{sorted="init_func"}) ->
- {lists:reverse(lists:keysort(#proc.init_func,Procs)),"rinit_func"};
-do_sort_procs("init_func",Procs,_) ->
- {lists:keysort(#proc.init_func,Procs),"init_func"};
-do_sort_procs("name_func",Procs,#state{sorted="name_func"}) ->
- {lists:reverse(lists:keysort(#proc.name,Procs)),"rname_func"};
-do_sort_procs("name_func",Procs,_) ->
- {lists:keysort(#proc.name,Procs),"name_func"};
-do_sort_procs("name",Procs,#state{sorted=Sorted}) ->
- {No,Yes} =
- lists:foldl(fun(P,{N,Y}) ->
- case P#proc.name of
- ?space -> {[P|N],Y};
- _other -> {N,[P|Y]}
- end
- end,
- {[],[]},
- Procs),
- Result = lists:keysort(#proc.name,Yes) ++ No,
- case Sorted of
- "name" -> {lists:reverse(Result),"rname"};
- _ -> {Result,"name"}
- end.
-
%%-----------------------------------------------------------------
%% Page with one port
get_port(File,Port) ->
@@ -1936,46 +1368,59 @@ get_port(File,Port) ->
close(Fd),
{ok,R};
[] ->
- case maybe_other_node(File,Port) of
- {other_node,Type,Node} ->
- Info = "The port you are searching for was residing on "
- "a remote node. No port information is available. "
- "Information about the remote node is show below.",
- {other_node,{Type,Info,Node}};
- not_found ->
- not_found
- end
+ maybe_other_node(Port)
end.
%%-----------------------------------------------------------------
%% Page with all ports
-get_ports(SessionId,File,TW) ->
- ParseFun = fun(Fd,Id) -> get_portinfo(Fd,#port{id=Id}) end,
- chunk_page(SessionId,File,TW,?port,ports,[],ParseFun).
+get_ports(File) ->
+ ParseFun = fun(Fd,Id) -> get_portinfo(Fd,#port{id=port_to_tuple(Id)}) end,
+ lookup_and_parse_index(File,?port,ParseFun,"ports").
+
+%% Converting port string to tuple to secure correct sorting. This is
+%% converted back in cdv_port_cb:format/1.
+port_to_tuple("#Port<"++Port) ->
+ [I1,I2] = string:tokens(Port,".>"),
+ {list_to_integer(I1),list_to_integer(I2)}.
get_portinfo(Fd,Port) ->
case line_head(Fd) of
"Slot" ->
- get_portinfo(Fd,Port#port{slot=val(Fd)});
+ %% stored as integer so we can sort on it
+ get_portinfo(Fd,Port#port{slot=list_to_integer(val(Fd))});
"Connected" ->
- get_portinfo(Fd,Port#port{connected=val(Fd)});
+ %% stored as pid so we can sort on it
+ Connected0 = val(Fd),
+ Connected =
+ try list_to_pid(Connected0)
+ catch error:badarg -> Connected0
+ end,
+ get_portinfo(Fd,Port#port{connected=Connected});
"Links" ->
- get_portinfo(Fd,Port#port{links=val(Fd)});
+ Pids = split_pid_list_no_space(val(Fd)),
+ Links = [{Pid,Pid} || Pid <- Pids],
+ get_portinfo(Fd,Port#port{links=Links});
"Registered as" ->
get_portinfo(Fd,Port#port{name=val(Fd)});
"Monitors" ->
- get_portinfo(Fd,Port#port{monitors=val(Fd)});
+ Monitors0 = string:tokens(val(Fd),"()"),
+ Monitors = [begin
+ [Pid,Ref] = string:tokens(Mon,","),
+ {Pid,Pid++" ("++Ref++")"}
+ end || Mon <- Monitors0],
+ get_portinfo(Fd,Port#port{monitors=Monitors});
"Port controls linked-in driver" ->
- get_portinfo(Fd,Port#port{controls=["Linked in driver: " |
- val(Fd)]});
+ Str = lists:flatten(["Linked in driver: " | val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"Port controls external process" ->
- get_portinfo(Fd,Port#port{controls=["External proc: " | val(Fd)]});
+ Str = lists:flatten(["External proc: " | val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"Port is a file" ->
- get_portinfo(Fd,Port#port{controls=["File: "| val(Fd)]});
+ Str = lists:flatten(["File: "| val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"Port is UNIX fd not opened by emulator" ->
- get_portinfo(Fd,Port#port{
- controls=["UNIX fd not opened by emulator: "|
- val(Fd)]});
+ Str = lists:flatten(["UNIX fd not opened by emulator: "| val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"=" ++ _next_tag ->
Port;
Other ->
@@ -1983,17 +1428,27 @@ get_portinfo(Fd,Port) ->
Port
end.
+split_pid_list_no_space(String) ->
+ split_pid_list_no_space(String,[],[]).
+split_pid_list_no_space([$>|Rest],Acc,Pids) ->
+ split_pid_list_no_space(Rest,[],[lists:reverse(Acc,[$>])|Pids]);
+split_pid_list_no_space([H|T],Acc,Pids) ->
+ split_pid_list_no_space(T,[H|Acc],Pids);
+split_pid_list_no_space([],[],Pids) ->
+ lists:reverse(Pids).
%%-----------------------------------------------------------------
%% Page with external ets tables
-get_ets_tables(SessionId,File,Heading,TW,Pid,WS) ->
- ParseFun = fun(Fd,Id) -> get_etsinfo(Fd,#ets_table{pid=Id},WS) end,
- chunk_page(SessionId,File,TW,{?ets,Pid},ets_tables,Heading,ParseFun).
+get_ets_tables(File,Pid,WS) ->
+ ParseFun = fun(Fd,Id) ->
+ get_etsinfo(Fd,#ets_table{pid=list_to_pid(Id)},WS)
+ end,
+ lookup_and_parse_index(File,{?ets,Pid},ParseFun,"ets").
get_etsinfo(Fd,EtsTable,WS) ->
case line_head(Fd) of
"Slot" ->
- get_etsinfo(Fd,EtsTable#ets_table{slot=val(Fd)},WS);
+ get_etsinfo(Fd,EtsTable#ets_table{slot=list_to_integer(val(Fd))},WS);
"Table" ->
get_etsinfo(Fd,EtsTable#ets_table{id=val(Fd)},WS);
"Name" ->
@@ -2002,15 +1457,18 @@ get_etsinfo(Fd,EtsTable,WS) ->
skip_rest_of_line(Fd),
get_etsinfo(Fd,EtsTable#ets_table{type="tree",buckets="-"},WS);
"Buckets" ->
- get_etsinfo(Fd,EtsTable#ets_table{buckets=val(Fd)},WS);
+ %% A bug in erl_db_hash.c prints a space after the buckets
+ %% - need to strip the string to make list_to_integer/1 happy.
+ Buckets = list_to_integer(string:strip(val(Fd))),
+ get_etsinfo(Fd,EtsTable#ets_table{buckets=Buckets},WS);
"Objects" ->
- get_etsinfo(Fd,EtsTable#ets_table{size=val(Fd)},WS);
+ get_etsinfo(Fd,EtsTable#ets_table{size=list_to_integer(val(Fd))},WS);
"Words" ->
Words = list_to_integer(val(Fd)),
Bytes =
case Words of
- -1 -> "-1"; % probably truncated
- _ -> integer_to_list(Words * WS)
+ -1 -> -1; % probably truncated
+ _ -> Words * WS
end,
get_etsinfo(Fd,EtsTable#ets_table{memory=Bytes},WS);
"=" ++ _next_tag ->
@@ -2036,16 +1494,17 @@ get_internal_ets_tables(File,WS) ->
%%-----------------------------------------------------------------
%% Page with list of all timers
-get_timers(SessionId,File,Heading,TW,Pid) ->
- ParseFun = fun(Fd,Id) -> get_timerinfo_1(Fd,#timer{pid=Id}) end,
- chunk_page(SessionId,File,TW,{?timer,Pid},timers,Heading,ParseFun).
+get_timers(File,Pid) ->
+ ParseFun = fun(Fd,Id) -> get_timerinfo_1(Fd,#timer{pid=list_to_pid(Id)}) end,
+ lookup_and_parse_index(File,{?timer,Pid},ParseFun,"timers").
get_timerinfo_1(Fd,Timer) ->
case line_head(Fd) of
"Message" ->
get_timerinfo_1(Fd,Timer#timer{msg=val(Fd)});
"Time left" ->
- get_timerinfo_1(Fd,Timer#timer{time=val(Fd)});
+ TimeLeft = list_to_integer(val(Fd) -- " ms"),
+ get_timerinfo_1(Fd,Timer#timer{time=TimeLeft});
"=" ++ _next_tag ->
Timer;
Other ->
@@ -2054,6 +1513,28 @@ get_timerinfo_1(Fd,Timer) ->
end.
%%-----------------------------------------------------------------
+%% Page with information about a node in the distribution
+get_node(File,Channel) ->
+ Ms = ets:fun2ms(
+ fun({{Tag,Start},Ch}) when Tag=:=?visible_node, Ch=:=Channel ->
+ {visible,Start};
+ ({{Tag,Start},Ch}) when Tag=:=?hidden_node, Ch=:=Channel ->
+ {hidden,Start};
+ ({{Tag,Start},Ch}) when Tag=:=?not_connected, Ch=:=Channel ->
+ {not_connected,Start}
+ end),
+
+ case ets:select(cdv_dump_index_table,Ms) of
+ [] ->
+ {error,not_found};
+ [{Type,Pos}] ->
+ Fd = open(File),
+ NodeInfo = get_nodeinfo(Fd,Channel,Type,Pos),
+ close(Fd),
+ {ok,NodeInfo}
+ end.
+
+%%-----------------------------------------------------------------
%% Page with information about the erlang distribution
nods(File) ->
case lookup_index(?no_distribution) of
@@ -2064,28 +1545,29 @@ nods(File) ->
Fd = open(File),
Visible = lists:map(
fun({Channel,Start}) ->
- get_nodeinfo(Fd,Channel,Start)
+ get_nodeinfo(Fd,Channel,visible,Start)
end,
V),
Hidden = lists:map(
fun({Channel,Start}) ->
- get_nodeinfo(Fd,Channel,Start)
+ get_nodeinfo(Fd,Channel,hidden,Start)
end,
H),
NotConnected = lists:map(
fun({Channel,Start}) ->
- get_nodeinfo(Fd,Channel,Start)
+ get_nodeinfo(Fd,Channel,not_connected,Start)
end,
N),
close(Fd),
- {Visible,Hidden,NotConnected};
+ Visible++Hidden++NotConnected;
[_] ->
- no_distribution
+ %% no_distribution
+ []
end.
-get_nodeinfo(Fd,Channel,Start) ->
+get_nodeinfo(Fd,Channel,Type,Start) ->
pos_bof(Fd,Start),
- get_nodeinfo(Fd,#nod{channel=Channel}).
+ get_nodeinfo(Fd,#nod{channel=list_to_integer(Channel),conn_type=Type}).
get_nodeinfo(Fd,Nod) ->
case line_head(Fd) of
@@ -2094,21 +1576,27 @@ get_nodeinfo(Fd,Nod) ->
"Controller" ->
get_nodeinfo(Fd,Nod#nod{controller=val(Fd)});
"Creation" ->
- get_nodeinfo(Fd,Nod#nod{creation=val(Fd)});
+ get_nodeinfo(Fd,Nod#nod{creation=list_to_integer(val(Fd))});
"Remote link" ->
Procs = val(Fd), % e.g. "<0.31.0> <4322.54.0>"
- RemoteLinks = Nod#nod.remote_links,
- get_nodeinfo(Fd,Nod#nod{remote_links=[split(Procs)|RemoteLinks]});
+ {Local,Remote} = split(Procs),
+ Str = Local++" <-> "++Remote,
+ NewRemLinks = [{Local,Str} | Nod#nod.remote_links],
+ get_nodeinfo(Fd,Nod#nod{remote_links=NewRemLinks});
"Remote monitoring" ->
Procs = val(Fd), % e.g. "<0.31.0> <4322.54.0>"
- RemoteMon = Nod#nod.remote_mon,
- get_nodeinfo(Fd,Nod#nod{remote_mon=[split(Procs)|RemoteMon]});
+ {Local,Remote} = split(Procs),
+ Str = Local++" -> "++Remote,
+ NewRemMon = [{Local,Str} | Nod#nod.remote_mon],
+ get_nodeinfo(Fd,Nod#nod{remote_mon=NewRemMon});
"Remotely monitored by" ->
Procs = val(Fd), % e.g. "<0.31.0> <4322.54.0>"
- RemoteMonBy = Nod#nod.remote_mon_by,
- get_nodeinfo(Fd,Nod#nod{remote_mon_by=[split(Procs)|RemoteMonBy]});
+ {Local,Remote} = split(Procs),
+ Str = Local++" <- "++Remote,
+ NewRemMonBy = [{Local,Str} | Nod#nod.remote_mon_by],
+ get_nodeinfo(Fd,Nod#nod{remote_mon_by=NewRemMonBy});
"Error" ->
- get_nodeinfo(Fd,Nod#nod{error=val(Fd)});
+ get_nodeinfo(Fd,Nod#nod{error="ERROR: "++val(Fd)});
"=" ++ _next_tag ->
Nod;
Other ->
@@ -2129,10 +1617,11 @@ get_loaded_mod_details(File,Mod) ->
%%-----------------------------------------------------------------
%% Page with list of all loaded modules
-loaded_mods(SessionId,File,TW) ->
+loaded_mods(File) ->
ParseFun =
fun(Fd,Id) ->
- get_loaded_mod_info(Fd,#loaded_mod{mod=Id},
+ get_loaded_mod_info(Fd,
+ #loaded_mod{mod=get_atom(list_to_binary(Id))},
fun main_modinfo/3)
end,
{CC,OC} =
@@ -2146,7 +1635,7 @@ loaded_mods(SessionId,File,TW) ->
[] ->
{"unknown","unknown"}
end,
- chunk_page(SessionId,File,TW,?mod,loaded_mods,{CC,OC},ParseFun).
+ {CC,OC,lookup_and_parse_index(File,?mod,ParseFun,"modules")}.
get_loaded_mod_totals(Fd,{CC,OC}) ->
case line_head(Fd) of
@@ -2164,9 +1653,11 @@ get_loaded_mod_totals(Fd,{CC,OC}) ->
get_loaded_mod_info(Fd,LM,Fun) ->
case line_head(Fd) of
"Current size" ->
- get_loaded_mod_info(Fd,LM#loaded_mod{current_size=val(Fd)},Fun);
+ CS = list_to_integer(val(Fd)),
+ get_loaded_mod_info(Fd,LM#loaded_mod{current_size=CS},Fun);
"Old size" ->
- get_loaded_mod_info(Fd,LM#loaded_mod{old_size=val(Fd)},Fun);
+ OS = list_to_integer(val(Fd)),
+ get_loaded_mod_info(Fd,LM#loaded_mod{old_size=OS},Fun);
"=" ++ _next_tag ->
LM;
{eof,_} ->
@@ -2229,24 +1720,24 @@ hex_to_dec(N) -> list_to_integer(N).
%%-----------------------------------------------------------------
%% Page with list of all funs
-funs(SessionId,File,TW) ->
+funs(File) ->
ParseFun = fun(Fd,_Id) -> get_funinfo(Fd,#fu{}) end,
- chunk_page(SessionId,File,TW,?fu,funs,[],ParseFun).
+ lookup_and_parse_index(File,?fu,ParseFun,"funs").
get_funinfo(Fd,Fu) ->
case line_head(Fd) of
"Module" ->
get_funinfo(Fd,Fu#fu{module=val(Fd)});
"Uniq" ->
- get_funinfo(Fd,Fu#fu{uniq=val(Fd)});
+ get_funinfo(Fd,Fu#fu{uniq=list_to_integer(val(Fd))});
"Index" ->
- get_funinfo(Fd,Fu#fu{index=val(Fd)});
+ get_funinfo(Fd,Fu#fu{index=list_to_integer(val(Fd))});
"Address" ->
get_funinfo(Fd,Fu#fu{address=val(Fd)});
"Native_address" ->
get_funinfo(Fd,Fu#fu{native_address=val(Fd)});
"Refc" ->
- get_funinfo(Fd,Fu#fu{refc=val(Fd)});
+ get_funinfo(Fd,Fu#fu{refc=list_to_integer(val(Fd))});
"=" ++ _next_tag ->
Fu;
Other ->
@@ -2256,45 +1747,54 @@ get_funinfo(Fd,Fu) ->
%%-----------------------------------------------------------------
%% Page with list of all atoms
-atoms(SessionId,File,TW,Num) ->
+atoms(File,NumAtoms) ->
case lookup_index(?atoms) of
[{_Id,Start}] ->
Fd = open(File),
pos_bof(Fd,Start),
- case get_atoms(Fd,?items_chunk_size) of
- {Atoms,Cont} ->
- crashdump_viewer_html:atoms(SessionId,TW,Num,Atoms),
- atoms_chunks(Fd,SessionId,Cont);
- done ->
- crashdump_viewer_html:atoms(SessionId,TW,Num,done)
- end;
+ get_atoms(Fd,NumAtoms);
_ ->
- crashdump_viewer_html:atoms(SessionId,TW,Num,done)
+ []
end.
-get_atoms(Fd,Number) ->
- case get_n_lines_of_tag(Fd,Number) of
- {all,_,Lines} ->
- close(Fd),
- {Lines,done};
- {part,_,Lines} ->
- {Lines,Number};
- empty ->
- close(Fd),
- done
+get_atoms(Fd,NumAtoms) ->
+ case get_chunk(Fd) of
+ {ok,Bin} ->
+ init_progress("Processing atoms",NumAtoms),
+ get_atoms(Fd,Bin,NumAtoms,[]);
+ eof ->
+ []
end.
-atoms_chunks(_Fd,SessionId,done) ->
- crashdump_viewer_html:atoms_chunk(SessionId,done);
-atoms_chunks(Fd,SessionId,Number) ->
- case get_atoms(Fd,Number) of
- {Atoms,Cont} ->
- crashdump_viewer_html:atoms_chunk(SessionId,Atoms),
- atoms_chunks(Fd,SessionId,Cont);
- done ->
- atoms_chunks(Fd,SessionId,done)
- end.
+%% Atoms are written one per line in the crash dump, in creation order
+%% from last to first.
+get_atoms(Fd,Bin,NumAtoms,Atoms) ->
+ Bins = binary:split(Bin,<<"\n">>,[global]),
+ get_atoms1(Fd,Bins,NumAtoms,Atoms).
+
+get_atoms1(_Fd,[<<"=",_/binary>>|_],_N,Atoms) ->
+ end_progress(),
+ Atoms;
+get_atoms1(Fd,[LastBin],N,Atoms) ->
+ case get_chunk(Fd) of
+ {ok,Bin0} ->
+ get_atoms(Fd,<<LastBin/binary,Bin0/binary>>,N,Atoms);
+ eof ->
+ end_progress(),
+ [{N,get_atom(LastBin)}|Atoms]
+ end;
+get_atoms1(Fd,[Bin|Bins],N,Atoms) ->
+ update_progress(),
+ get_atoms1(Fd,Bins,N-1,[{N,get_atom(Bin)}|Atoms]).
+
+%% This ensures sorting according to first actual letter in the atom,
+%% disregarding possible single quote. It is formatted back to correct
+%% syntax in cdv_atom_cb:format/1
+get_atom(<<"\'",Atom/binary>>) ->
+ {Atom,q}; % quoted
+get_atom(Atom) when is_binary(Atom) ->
+ {Atom,nq}. % not quoted
%%-----------------------------------------------------------------
%% Page with memory information
@@ -2317,7 +1817,7 @@ get_meminfo(Fd,Acc) ->
{eof,_last_line} ->
lists:reverse(Acc);
Key ->
- get_meminfo(Fd,[{Key,val(Fd)}|Acc])
+ get_meminfo(Fd,[{list_to_atom(Key),val(Fd)}|Acc])
end.
%%-----------------------------------------------------------------
@@ -2345,7 +1845,7 @@ get_allocareainfo(Fd,Acc) ->
AllocInfo =
case split(Val) of
{Alloc,[]} ->
- {Key,Alloc,?space};
+ {Key,Alloc,""};
{Alloc,Used} ->
{Key,Alloc,Used}
end,
@@ -2361,7 +1861,7 @@ allocator_info(File) ->
AllAllocators ->
Fd = open(File),
R = lists:map(fun({Heading,Start}) ->
- {Heading,get_allocatorinfo(Fd,Start)}
+ {Heading,get_allocatorinfo(Fd,Start)}
end,
AllAllocators),
close(Fd),
@@ -2370,17 +1870,19 @@ allocator_info(File) ->
get_allocatorinfo(Fd,Start) ->
pos_bof(Fd,Start),
- get_allocatorinfo1(Fd,[]).
+ get_allocatorinfo1(Fd,[],0).
-get_allocatorinfo1(Fd,Acc) ->
+get_allocatorinfo1(Fd,Acc,Max) ->
case line_head(Fd) of
"=" ++ _next_tag ->
- lists:reverse(Acc);
+ pad_and_reverse(Acc,Max,[]);
{eof,_last_line} ->
- lists:reverse(Acc);
+ pad_and_reverse(Acc,Max,[]);
Key ->
Values = get_all_vals(val(Fd),[]),
- get_allocatorinfo1(Fd,[{Key,Values}|Acc])
+ L = length(Values),
+ Max1 = if L > Max -> L; true -> Max end,
+ get_allocatorinfo1(Fd,[{Key,Values}|Acc],Max1)
end.
get_all_vals([$ |Rest],Acc) ->
@@ -2390,6 +1892,16 @@ get_all_vals([],Acc) ->
get_all_vals([Char|Rest],Acc) ->
get_all_vals(Rest,[Char|Acc]).
+%% Make sure all V have the same length by padding with "".
+pad_and_reverse([{K,V}|T],Len,Rev) ->
+ VLen = length(V),
+ V1 = if VLen == Len -> V;
+ true -> V ++ lists:duplicate(Len-VLen,"")
+ end,
+ pad_and_reverse(T,Len,[{K,V1}|Rev]);
+pad_and_reverse([],_,Rev) ->
+ Rev.
+
%% Calculate allocator summary:
%%
%% System totals:
@@ -2473,7 +1985,8 @@ allocator_summary(Allocators) ->
{TBS,TCS} ->
{integer_to_list(TBS),integer_to_list(TCS)}
end,
- {{"Summary",["blocks size","carriers size","mseg carriers size"]},
+ {"Allocator Summary",
+ ["blocks size","carriers size","mseg carriers size"],
[{"total",[TotalBS,TotalCS,TotalMCS]} |
format_allocator_summary(lists:reverse(TypeTotals))]}.
@@ -2673,142 +2186,120 @@ get_indextableinfo1(Fd,IndexTable) ->
IndexTable
end.
-
-
-
-
-%%-----------------------------------------------------------------
-%% Expand a set of data which was shown in a truncated form on
-get_expanded(File,Pos,Size) ->
- Fd = open(File),
- R = case file:pread(Fd,Pos,Size) of
- {ok,Bin}->
- binary_to_list(Bin);
- eof ->
- ?space
- end,
- close(Fd),
- R.
-
-
-replace_all(From,To,[From|Rest],Acc) ->
- replace_all(From,To,Rest,[To|Acc]);
-replace_all(From,To,[Char|Rest],Acc) ->
- replace_all(From,To,Rest,[Char|Acc]);
-replace_all(_From,_To,[],Acc) ->
- lists:reverse(Acc).
-
-
%%%-----------------------------------------------------------------
%%% Parse memory in crashdump version 0.1 and newer
%%%
-parse_heap_term([$l|Line0], Addr, D0) -> %Cons cell.
- {H,"|"++Line1,D1} = parse_term(Line0, D0),
- {T,Line,D2} = parse_term(Line1, D1),
+parse_heap_term([$l|Line0], Addr, BinAddrAdj, D0) -> %Cons cell.
+ {H,"|"++Line1,D1} = parse_term(Line0, BinAddrAdj, D0),
+ {T,Line,D2} = parse_term(Line1, BinAddrAdj, D1),
Term = [H|T],
D = gb_trees:insert(Addr, Term, D2),
{Term,Line,D};
-parse_heap_term([$t|Line0], Addr, D) -> %Tuple
+parse_heap_term([$t|Line0], Addr, BinAddrAdj, D) -> %Tuple
{N,":"++Line} = get_hex(Line0),
- parse_tuple(N, Line, Addr, D, []);
-parse_heap_term([$F|Line0], Addr, D0) -> %Float
+ parse_tuple(N, Line, Addr, BinAddrAdj, D, []);
+parse_heap_term([$F|Line0], Addr, _BinAddrAdj, D0) -> %Float
{N,":"++Line1} = get_hex(Line0),
{Chars,Line} = get_chars(N, Line1),
Term = list_to_float(Chars),
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("B16#"++Line0, Addr, D0) -> %Positive big number.
+parse_heap_term("B16#"++Line0, Addr, _BinAddrAdj, D0) -> %Positive big number.
{Term,Line} = get_hex(Line0),
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("B-16#"++Line0, Addr, D0) -> %Negative big number
+parse_heap_term("B-16#"++Line0, Addr, _BinAddrAdj, D0) -> %Negative big number
{Term0,Line} = get_hex(Line0),
Term = -Term0,
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("B"++Line0, Addr, D0) -> %Decimal big num (new in R10B-something).
+parse_heap_term("B"++Line0, Addr, _BinAddrAdj, D0) -> %Decimal big num
case string:to_integer(Line0) of
{Int,Line} when is_integer(Int) ->
D = gb_trees:insert(Addr, Int, D0),
{Int,Line,D}
end;
-parse_heap_term([$P|Line0], Addr, D0) -> % External Pid.
+parse_heap_term([$P|Line0], Addr, _BinAddrAdj, D0) -> % External Pid.
{Pid0,Line} = get_id(Line0),
- Pid = "#CDVPid"++Pid0,
+ Pid = ['#CDVPid'|Pid0],
D = gb_trees:insert(Addr, Pid, D0),
{Pid,Line,D};
-parse_heap_term([$p|Line0], Addr, D0) -> % External Port.
+parse_heap_term([$p|Line0], Addr, _BinAddrAdj, D0) -> % External Port.
{Port0,Line} = get_id(Line0),
- Port = "#CDVPort"++Port0,
+ Port = ['#CDVPort'|Port0],
D = gb_trees:insert(Addr, Port, D0),
{Port,Line,D};
-parse_heap_term("E"++Line0, Addr, D0) -> %Term encoded in external format.
+parse_heap_term("E"++Line0, Addr, _BinAddrAdj, D0) -> %Term encoded in external format.
{Bin,Line} = get_binary(Line0),
Term = binary_to_term(Bin),
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("Yh"++Line0, Addr, D0) -> %Heap binary.
+parse_heap_term("Yh"++Line0, Addr, _BinAddrAdj, D0) -> %Heap binary.
{Term,Line} = get_binary(Line0),
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("Yc"++Line0, Addr, D0) -> %Reference-counted binary.
- {Binp,":"++Line1} = get_hex(Line0),
- {First,":"++Line2} = get_hex(Line1),
+parse_heap_term("Yc"++Line0, Addr, BinAddrAdj, D0) -> %Reference-counted binary.
+ {Binp0,":"++Line1} = get_hex(Line0),
+ {Offset,":"++Line2} = get_hex(Line1),
{Sz,Line} = get_hex(Line2),
+ Binp = Binp0 bor BinAddrAdj,
Term = case gb_trees:lookup(Binp, D0) of
- {value,<<_:First/binary,T:Sz/binary,_/binary>>} -> T;
- {value,{'#CDVTooBig',binary,Pos}} -> cdvbin(Sz,Pos);
- {value,'#CDVTruncatedBinary'} -> '#CDVTruncatedBinary';
+ {value,Bin} -> cdvbin(Offset,Sz,Bin);
none -> '#CDVNonexistingBinary'
end,
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("Ys"++Line0, Addr, D0) -> %Sub binary.
- {Binp,":"++Line1} = get_hex(Line0),
- {First,":"++Line2} = get_hex(Line1),
+parse_heap_term("Ys"++Line0, Addr, BinAddrAdj, D0) -> %Sub binary.
+ {Binp0,":"++Line1} = get_hex(Line0),
+ {Offset,":"++Line2} = get_hex(Line1),
{Sz,Line} = get_hex(Line2),
+ Binp = Binp0 bor BinAddrAdj,
Term = case gb_trees:lookup(Binp, D0) of
- {value,<<_:First/binary,T:Sz/binary,_/binary>>} -> T;
- {value,{'#CDVTooBig',binary,Pos}} -> cdvbin(Sz,Pos);
- {value,'#CDVTruncatedBinary'} -> '#CDVTruncatedBinary';
+ {value,Bin} -> cdvbin(Offset,Sz,Bin);
+ none when Binp0=/=Binp ->
+ %% Might it be on the heap?
+ case gb_trees:lookup(Binp0, D0) of
+ {value,Bin} -> cdvbin(Offset,Sz,Bin);
+ none -> '#CDVNonexistingBinary'
+ end;
none -> '#CDVNonexistingBinary'
end,
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D}.
-parse_tuple(0, Line, Addr, D0, Acc) ->
+parse_tuple(0, Line, Addr, _, D0, Acc) ->
Tuple = list_to_tuple(lists:reverse(Acc)),
D = gb_trees:insert(Addr, Tuple, D0),
{Tuple,Line,D};
-parse_tuple(N, Line0, Addr, D0, Acc) ->
- case parse_term(Line0, D0) of
+parse_tuple(N, Line0, Addr, BinAddrAdj, D0, Acc) ->
+ case parse_term(Line0, BinAddrAdj, D0) of
{Term,[$,|Line],D} when N > 1 ->
- parse_tuple(N-1, Line, Addr, D, [Term|Acc]);
+ parse_tuple(N-1, Line, Addr, BinAddrAdj, D, [Term|Acc]);
{Term,Line,D}->
- parse_tuple(N-1, Line, Addr, D, [Term|Acc])
+ parse_tuple(N-1, Line, Addr, BinAddrAdj, D, [Term|Acc])
end.
-parse_term([$H|Line0], D) -> %Pointer to heap term.
+parse_term([$H|Line0], BinAddrAdj, D) -> %Pointer to heap term.
{Ptr,Line} = get_hex(Line0),
- deref_ptr(Ptr, Line, D);
-parse_term([$N|Line], D) -> %[] (nil).
+ deref_ptr(Ptr, Line, BinAddrAdj, D);
+parse_term([$N|Line], _, D) -> %[] (nil).
{[],Line,D};
-parse_term([$I|Line0], D) -> %Small.
+parse_term([$I|Line0], _, D) -> %Small.
{Int,Line} = string:to_integer(Line0),
{Int,Line,D};
-parse_term([$A|_]=Line, D) -> %Atom.
+parse_term([$A|_]=Line, _, D) -> %Atom.
parse_atom(Line, D);
-parse_term([$P|Line0], D) -> %Pid.
+parse_term([$P|Line0], _, D) -> %Pid.
{Pid,Line} = get_id(Line0),
- {"#CDVPid"++Pid,Line,D};
-parse_term([$p|Line0], D) -> %Port.
+ {['#CDVPid'|Pid],Line,D};
+parse_term([$p|Line0], _, D) -> %Port.
{Port,Line} = get_id(Line0),
- {"#CDVPort"++Port,Line,D};
-parse_term([$S|Str0], D) -> %Information string.
+ {['#CDVPort'|Port],Line,D};
+parse_term([$S|Str0], _, D) -> %Information string.
Str = lists:reverse(skip_blanks(lists:reverse(Str0))),
{Str,[],D};
-parse_term([$D|Line0], D) -> %DistExternal
+parse_term([$D|Line0], _, D) -> %DistExternal
try
{AttabSize,":"++Line1} = get_hex(Line0),
{Attab, "E"++Line2} = parse_atom_translation_table(AttabSize, Line1, []),
@@ -2848,7 +2339,7 @@ parse_atom_translation_table(N, Line0, As) ->
-deref_ptr(Ptr, Line, D0) ->
+deref_ptr(Ptr, Line, BinAddrAdj, D0) ->
case gb_trees:lookup(Ptr, D0) of
{value,Term} ->
{Term,Line,D0};
@@ -2860,10 +2351,10 @@ deref_ptr(Ptr, Line, D0) ->
case val(Fd) of
"="++_ ->
put(fd, end_of_heap),
- deref_ptr(Ptr, Line, D0);
+ deref_ptr(Ptr, Line, BinAddrAdj, D0);
L ->
- D = parse(L, D0),
- deref_ptr(Ptr, Line, D)
+ D = parse(L, BinAddrAdj, D0),
+ deref_ptr(Ptr, Line, BinAddrAdj, D)
end
end
end.
@@ -2901,13 +2392,16 @@ get_chars(0, Line, Acc) ->
get_chars(N, [H|T], Acc) ->
get_chars(N-1, T, [H|Acc]).
-get_id(Line) ->
- get_id(Line, []).
+get_id(Line0) ->
+ [$<|Line] = lists:dropwhile(fun($<) -> false; (_) -> true end,Line0),
+ get_id(Line, [], []).
-get_id([$>|Line], Acc) ->
- {lists:reverse(Acc, [$>]),Line};
-get_id([H|T], Acc) ->
- get_id(T, [H|Acc]).
+get_id([$>|Line], Acc, Id) ->
+ {lists:reverse(Id,[list_to_integer(lists:reverse(Acc))]),Line};
+get_id([$.|Line], Acc, Id) ->
+ get_id(Line,[],[list_to_integer(lists:reverse(Acc))|Id]);
+get_id([H|T], Acc, Id) ->
+ get_id(T, [H|Acc], Id).
get_label(L) ->
get_label(L, []).
@@ -2925,19 +2419,26 @@ get_label([H|T], Acc) ->
get_binary(Line0) ->
{N,":"++Line} = get_hex(Line0),
- get_binary(N, Line, []).
+ do_get_binary(N, Line, []).
+
+get_binary(Offset,Size,Line0) ->
+ {_N,":"++Line} = get_hex(Line0),
+ do_get_binary(Size, lists:sublist(Line,(Offset*2)+1,Size*2), []).
-get_binary(0, Line, Acc) ->
+do_get_binary(0, Line, Acc) ->
{list_to_binary(lists:reverse(Acc)),Line};
-get_binary(N, [A,B|Line], Acc) ->
+do_get_binary(N, [A,B|Line], Acc) ->
Byte = (get_hex_digit(A) bsl 4) bor get_hex_digit(B),
- get_binary(N-1, Line, [Byte|Acc]);
-get_binary(_N, [], _Acc) ->
+ do_get_binary(N-1, Line, [Byte|Acc]);
+do_get_binary(_N, [], _Acc) ->
{'#CDVTruncatedBinary',[]}.
-cdvbin(Sz,Pos) ->
- "#CDVBin<"++integer_to_list(Sz)++","++integer_to_list(Pos)++">".
-
+cdvbin(Offset,Size,{'#CDVBin',Pos}) ->
+ ['#CDVBin',Offset,Size,Pos];
+cdvbin(Offset,Size,['#CDVBin',_,_,Pos]) ->
+ ['#CDVBin',Offset,Size,Pos];
+cdvbin(_,_,'#CDVTruncatedBinary') ->
+ '#CDVTruncatedBinary'.
%%-----------------------------------------------------------------
%% Functions for accessing the cdv_dump_index_table
@@ -2947,29 +2448,15 @@ reset_index_table() ->
insert_index(Tag,Id,Pos) ->
ets:insert(cdv_dump_index_table,{{Tag,Pos},Id}).
+lookup_index({Tag,Id}) ->
+ lookup_index(Tag,Id);
lookup_index(Tag) ->
lookup_index(Tag,'$2').
lookup_index(Tag,Id) ->
ets:select(cdv_dump_index_table,[{{{Tag,'$1'},Id},[],[{{Id,'$1'}}]}]).
-lookup_index_chunk({'#CDVFirstChunk',Tag,Id}) ->
- ets:select(cdv_dump_index_table,
- [{{{Tag,'$1'},Id},[],[{{Id,'$1'}}]}],
- ?items_chunk_size);
-lookup_index_chunk(Cont) ->
- ets:select(Cont).
-
-%% Create a tag which can be used instead of an ets Continuation for
-%% the first call to lookup_index_chunk.
-first_chunk_pointer({Tag,Id}) ->
- {'#CDVFirstChunk',Tag,Id};
-first_chunk_pointer(Tag) ->
- first_chunk_pointer({Tag,'$2'}).
-
count_index(Tag) ->
ets:select_count(cdv_dump_index_table,[{{{Tag,'_'},'_'},[],[true]}]).
-count_index(Tag,Id) ->
- ets:select_count(cdv_dump_index_table,[{{{Tag,'_'},Id},[],[true]}]).
%%-----------------------------------------------------------------
@@ -2979,7 +2466,6 @@ tag_to_atom("allocated_areas") -> ?allocated_areas;
tag_to_atom("allocator") -> ?allocator;
tag_to_atom("atoms") -> ?atoms;
tag_to_atom("binary") -> ?binary;
-tag_to_atom("debug_proc_dictionary") -> ?debug_proc_dictionary;
tag_to_atom("end") -> ?ende;
tag_to_atom("erl_crash_dump") -> ?erl_crash_dump;
tag_to_atom("ets") -> ?ets;
@@ -2995,7 +2481,6 @@ tag_to_atom("mod") -> ?mod;
tag_to_atom("no_distribution") -> ?no_distribution;
tag_to_atom("node") -> ?node;
tag_to_atom("not_connected") -> ?not_connected;
-tag_to_atom("num_atoms") -> ?num_atoms;
tag_to_atom("old_instr_data") -> ?old_instr_data;
tag_to_atom("port") -> ?port;
tag_to_atom("proc") -> ?proc;
@@ -3010,37 +2495,133 @@ tag_to_atom(UnknownTag) ->
list_to_atom(UnknownTag).
%%%-----------------------------------------------------------------
-%%% Create a page by sending chunk by chunk to crashdump_viewer_html
-chunk_page(SessionId,File,TW,What,HtmlCB,HtmlExtra,ParseFun) ->
+%%% Fetch next chunk from crashdump file
+lookup_and_parse_index(File,What,ParseFun,Str) when is_list(File) ->
+ Indices = lookup_index(What),
+ Fun = fun(Fd,{Id,Start}) ->
+ pos_bof(Fd,Start),
+ ParseFun(Fd,Id)
+ end,
+ Report = "Processing " ++ Str,
+ progress_pmap(Report,File,Fun,Indices).
+
+%%%-----------------------------------------------------------------
+%%% Convert a record to a proplist
+to_proplist(Fields,Record) ->
+ Values = to_value_list(Record),
+ lists:zip(Fields,Values).
+
+%%%-----------------------------------------------------------------
+%%% Convert a record to a simple list of field values
+to_value_list(Record) ->
+ [_RecordName|Values] = tuple_to_list(Record),
+ Values.
+
+%%%-----------------------------------------------------------------
+%%% Fold over List and report progress in percent.
+%%% Report is the text to be presented in the progress dialog.
+%%% Acc0 is the initial accumulator and will be passed to Fun as the
+%%% second arguement, i.e. Fun = fun(Item,Acc) -> NewAcc end.
+progress_foldl(Report,Fun,Acc0,List) ->
+ init_progress(Report, length(List)),
+ progress_foldl1(Fun,Acc0,List).
+
+progress_foldl1(Fun,Acc,[H|T]) ->
+ update_progress(),
+ progress_foldl1(Fun,Fun(H,Acc),T);
+progress_foldl1(_Fun,Acc,[]) ->
+ end_progress(),
+ Acc.
+
+
+%%%-----------------------------------------------------------------
+%%% Map over List and report progress in percent.
+%%% Report is the text to be presented in the progress dialog.
+%%% Distribute the load over a number of processes, and File is opened
+%%% on each process and passed to the Fun as first argument.
+%%% I.e. Fun = fun(Fd,Item) -> ItemResult end.
+progress_pmap(Report,File,Fun,List) ->
+ NTot = length(List),
+ NProcs = erlang:system_info(schedulers) * 2,
+ NPerProc = (NTot div NProcs) + 1,
+
+ %% Worker processes send message to collector for each ReportInterval.
+ ReportInterval = (NTot div 100) + 1,
+
+ %% Progress reporter on collector process reports 1 percent for
+ %% each message from worker process.
+ init_progress(Report,99),
+
+ Collector = self(),
+ {[],Pids} =
+ lists:foldl(
+ fun(_,{L,Ps}) ->
+ {L1,L2} = if length(L)>=NPerProc -> lists:split(NPerProc,L);
+ true -> {L,[]} % last chunk
+ end,
+ P = spawn(
+ fun() ->
+ progress_map(Collector,ReportInterval,File,Fun,L1)
+ end),
+ erlang:monitor(process,P),
+ {L2,[P|Ps]}
+ end,
+ {List,[]},
+ lists:seq(1,NProcs)),
+ collect(Pids,[]).
+
+progress_map(Collector,ReportInterval,File,Fun,List) ->
Fd = open(File),
- case lookup_and_parse_index_chunk(first_chunk_pointer(What),Fd,ParseFun) of
- done ->
- crashdump_viewer_html:chunk_page(HtmlCB,SessionId,TW,HtmlExtra,done);
- {Chunk,Cont} ->
- HtmlInfo = crashdump_viewer_html:chunk_page(
- HtmlCB,
- SessionId,TW,HtmlExtra,Chunk),
- chunk_page_1(Fd,HtmlInfo,SessionId,ParseFun,
- lookup_and_parse_index_chunk(Cont,Fd,ParseFun))
- end.
-
-chunk_page_1(_Fd,HtmlInfo,SessionId,_ParseFun,done) ->
- crashdump_viewer_html:chunk(SessionId,done,HtmlInfo);
-chunk_page_1(Fd,HtmlInfo,SessionId,ParseFun,{Chunk,Cont}) ->
- crashdump_viewer_html:chunk(SessionId,Chunk,HtmlInfo),
- chunk_page_1(Fd,HtmlInfo,SessionId,ParseFun,
- lookup_and_parse_index_chunk(Cont,Fd,ParseFun)).
-
-lookup_and_parse_index_chunk(Pointer,Fd,ParseFun) ->
- case lookup_index_chunk(Pointer) of
- '$end_of_table' ->
- close(Fd),
- done;
- {Chunk,Cont} ->
- R = lists:map(fun({Id,Start}) ->
- pos_bof(Fd,Start),
- ParseFun(Fd,Id)
- end,
- Chunk),
- {R,Cont}
+ init_progress(ReportInterval, fun(_) -> Collector ! progress end, ok),
+ progress_map(Fd,Fun,List,[]).
+progress_map(Fd,Fun,[H|T],Acc) ->
+ update_progress(),
+ progress_map(Fd,Fun,T,[Fun(Fd,H)|Acc]);
+progress_map(Fd,_Fun,[],Acc) ->
+ close(Fd),
+ exit({pmap_done,Acc}).
+
+collect([],Acc) ->
+ end_progress(),
+ lists:append(Acc);
+collect(Pids,Acc) ->
+ receive
+ progress ->
+ update_progress(),
+ collect(Pids,Acc);
+ {'DOWN', _Ref, process, Pid, {pmap_done,Result}} ->
+ collect(lists:delete(Pid,Pids),[Result|Acc])
end.
+
+%%%-----------------------------------------------------------------
+%%% Help functions for progress reporting
+
+%% Set text in progress dialog and initialize the progress counter
+init_progress(Report,N) ->
+ observer_lib:report_progress({ok,Report}),
+ Interval = (N div 100) + 1,
+ Fun = fun(P0) -> P=P0+1,observer_lib:report_progress({ok,P}),P end,
+ init_progress(Interval,Fun,0).
+init_progress(Interval,Fun,Acc) ->
+ put(progress,{Interval,Interval,Fun,Acc}),
+ ok.
+
+%% Count progress and report on given interval
+update_progress() ->
+ update_progress(1).
+update_progress(Processed) ->
+ do_update_progress(get(progress),Processed).
+
+do_update_progress({Count,Interval,Fun,Acc},Processed) when Processed>Count ->
+ do_update_progress({Interval,Interval,Fun,Fun(Acc)},Processed-Count);
+do_update_progress({Count,Interval,Fun,Acc},Processed) ->
+ put(progress,{Count-Processed,Interval,Fun,Acc}),
+ ok.
+
+%% End progress reporting for this item
+end_progress() ->
+ end_progress({ok,100}).
+end_progress(Report) ->
+ observer_lib:report_progress(Report),
+ erase(progress),
+ ok.
diff --git a/lib/observer/src/crashdump_viewer.hrl b/lib/observer/src/crashdump_viewer.hrl
index 2e0ea5cf96..ae288ed573 100644
--- a/lib/observer/src/crashdump_viewer.hrl
+++ b/lib/observer/src/crashdump_viewer.hrl
@@ -16,7 +16,7 @@
%%
%% %CopyrightEnd%
%%
--define(space, "&nbsp;").
+-define(space, undefined).
-define(unknown, "unknown").
-define(r16b01_dump_vsn, [0,2]). % =erl_crash_dump:0.2
@@ -24,28 +24,28 @@
-record(general_info,
{created,
- slogan=?space,
- system_vsn=?space,
- compile_time=?space,
- taints=?space,
- node_name=?space,
- num_atoms=?space,
- num_procs=?space,
- num_ets=?space,
- num_timers=?space,
- num_fun=?space,
- mem_tot=?space,
- mem_max=?space,
- instr_info=?space}).
+ slogan,
+ system_vsn,
+ compile_time,
+ taints,
+ node_name,
+ num_atoms,
+ num_procs,
+ num_ets,
+ num_timers,
+ num_fun,
+ mem_tot,
+ mem_max,
+ instr_info}).
-record(proc,
%% Initial data according to the follwoing:
%%
- %% msg_q_len, reds and stack_heap are integers because it must
+ %% msg_q_len, reds, memory and stack_heap are integers because it must
%% be possible to sort on them. All other fields are strings
%%
- %% for old dumps start_time, parent and number of heap frament
- %% does not exist
+ %% for old dumps start_time, parent and number of heap framents
+ %% do not exist
%%
%% current_func can be both "current function" and
%% "last scheduled in for"
@@ -54,100 +54,102 @@
%% displayed as a link to "Expand" (if dump is from OTP R9B
%% or newer)
{pid,
- name=?space,
- init_func=?space,
+ name,
+ init_func,
parent=?unknown,
start_time=?unknown,
- state=?space,
- current_func={"Current Function",?space},
+ state,
+ current_func,
msg_q_len=0,
- msg_q=?space,
- last_calls=?space,
- links=?space,
- prog_count=?space,
- cp=?space,
- arity=?space,
- dict=?space,
- debug_dict=?space,
+ msg_q,
+ last_calls,
+ links,
+ monitors,
+ mon_by,
+ prog_count,
+ cp,
+ arity,
+ dict,
reds=0,
num_heap_frag=?unknown,
- heap_frag_data=?space,
+ heap_frag_data,
stack_heap=0,
- old_heap=?space,
- heap_unused=?space,
- old_heap_unused=?space,
- new_heap_start=?space,
- new_heap_top=?space,
- stack_top=?space,
- stack_end=?space,
- old_heap_start=?space,
- old_heap_top=?space,
- old_heap_end=?space,
+ old_heap,
+ heap_unused,
+ old_heap_unused,
+ new_heap_start,
+ new_heap_top,
+ stack_top,
+ stack_end,
+ old_heap_start,
+ old_heap_top,
+ old_heap_end,
memory,
- stack_dump=?space}).
+ stack_dump}).
-record(port,
{id,
- slot=?space,
- connected=?space,
- links=?space,
- name=?space,
- monitors=?space,
- controls=?space}).
+ slot,
+ connected,
+ links,
+ name,
+ monitors,
+ controls}).
-record(ets_table,
{pid,
- slot=?space,
- id=?space,
- name=?space,
+ slot,
+ id,
+ name,
type="hash",
- buckets=?space,
- size=?space,
- memory=?space}).
+ buckets,
+ size,
+ memory}).
-record(timer,
{pid,
- msg=?space,
- time=?space}).
+ msg,
+ time}).
-record(fu,
- {module=?space,
- uniq=?space,
- index=?space,
- address=?space,
- native_address=?space,
- refc=?space}).
+ {module,
+ uniq,
+ index,
+ address,
+ native_address,
+ refc}).
-record(nod,
- {name=?space,
+ {name,
channel,
- controller=?space,
- creation=?space,
- remote_links=?space,
- remote_mon=?space,
- remote_mon_by=?space,
- error=?space}).
+ conn_type,
+ controller,
+ creation,
+ remote_links=[],
+ remote_mon=[],
+ remote_mon_by=[],
+ error}).
-record(loaded_mod,
{mod,
- current_size=?space,
- current_attrib=?space,
- current_comp_info=?space,
- old_size=?space,
- old_attrib=?space,
- old_comp_info=?space}).
+ current_size,
+ current_attrib,
+ current_comp_info,
+ old_size,
+ old_attrib,
+ old_comp_info}).
-record(hash_table,
{name,
- size=?space,
- used=?space,
- objs=?space,
- depth=?space}).
+ size,
+ used,
+ objs,
+ depth}).
-record(index_table,
{name,
- size=?space,
- used=?space,
- limit=?space,
- rate=?space,
- entries=?space}).
+ size,
+ limit,
+ used,
+ rate,
+ entries}).
diff --git a/lib/observer/src/crashdump_viewer_html.erl b/lib/observer/src/crashdump_viewer_html.erl
deleted file mode 100644
index 93c1a842b5..0000000000
--- a/lib/observer/src/crashdump_viewer_html.erl
+++ /dev/null
@@ -1,1440 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-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(crashdump_viewer_html).
-
-%%
-%% This module implements the HTML generation for the crashdump
-%% viewer. No logic or states are kept by this module.
-%%
-
--export([welcome/0,
- read_file_frame/0,
- redirect/1,
- start_page/0,
- filename_frame/1,
- menu_frame/0,
- general_info/1,
- pretty_info_page/2,
- info_page/2,
- proc_details/4,
- expanded_memory/2,
- expanded_binary/1,
- port/3,
- internal_ets_tables/2,
- nods/2,
- loaded_mod_details/2,
- atoms/4,
- atoms_chunk/2,
- memory/2,
- allocated_areas/2,
- allocator_info/2,
- hash_tables/2,
- index_tables/2,
- error/2,
- chunk_page/5,
- chunk/3]).
-
--include("crashdump_viewer.hrl").
-
-%%%-----------------------------------------------------------------
-%%% Welcome frame
-welcome() ->
- header(body(welcome_body())).
-
-welcome_body() ->
- table(
- "WIDTH=100% HEIGHT=60%",
- [tr("VALIGN=middle",
- td("ALIGN=center",
- font("SIZE=6",
- ["Welcome to the Web Based",br(),
- "Erlang Crash Dump Analyser"]))),
- tr("VALIGN=middle",
- td("ALIGN=center",
- form(["name=load_new ACTION=\"./read_file_frame\""],
- input(["TYPE=submit VALUE=\"Load Crashdump\""]))))]).
-
-%%%-----------------------------------------------------------------
-%%% Present a form to enter file name of erlang crash dump
-read_file_frame() ->
- header("Read File",body(read_file_frame_body())).
-
-
-read_file_frame_body() ->
- %% Using a plain text input field instead of a file input field
- %% (e.g. <INPUT TYPE=file NAME=pathj SIZE=40">) because most
- %% browsers can not forward the full path from this dialog even if
- %% the browser is running on localhost (Ref 'fakepath'-problem)
- Entry = input("TYPE=text NAME=path SIZE=60"),
- Form =
- form(
- "NAME=read_file_form METHOD=post ACTION=\"./read_file\"",
- table(
- "BORDER=0",
- [tr(td("COLSPAN=2","Enter file to analyse")),
- tr(
- [td(Entry),
- td("ALIGN=center",input("TYPE=submit VALUE=Ok"))])])),
- table(
- "WIDTH=100% HEIGHT=60%",
- tr("VALIGN=middle",
- td("ALIGN=center",Form))).
-
-
-%%%-----------------------------------------------------------------
-%%% Display "Please wait..." while crashdump is being read
-redirect(Status) ->
- Head = ["<META HTTP-EQUIV=\"refresh\" CONTENT=\"3; URL=./redirect\">"],
- header("Please wait...",Head,body([Status,br(),"Please wait..."])).
-
-%%%-----------------------------------------------------------------
-%%% Frameset containing "filename", "menu", and "main" frames
-start_page() ->
- header("Crashdump Viewer Start Page",start_page_frameset()).
-
-start_page_frameset() ->
- frameset(
- "ROWS=\"70,*\"",
- [frame(["NAME=\"filename\" SRC=\"./filename_frame\""]),
- frameset(
- "COLS=\"200,*\"",
- [frame(["NAME=\"menu\" ",
- "SRC=\"/cdv_erl/crashdump_viewer/menu_frame\""]),
- frame("NAME=\"main\" SRC=\"./initial_info_frame\"")])]).
-
-
-
-%%%-----------------------------------------------------------------
-%%% Topmost frame presents the filename of the crashdump currently
-%%% viewed
-filename_frame(File) ->
- header("Filename",body(filename_body(File))).
-
-filename_body(File) ->
- p("ALIGN=center",[b("Crashdump currently viewed:"),br(),File]).
-
-
-%%%-----------------------------------------------------------------
-%%% Left frame displays the menu
-menu_frame() ->
- header("Menu", body(menu_body())).
-
-menu_body() ->
- [p(format_items(1,ets:info(cdv_menu_table,size),true)),
- p([br(),
- form(["name=load_new ACTION=\"./read_file_frame\" ",
- "TARGET=app_frame"],
- input("TYPE=submit VALUE=\"Load New Crashdump\""))])].
-
-format_items(I,Max,_ParentState) when I>Max->
- [];
-format_items(I,Max,ParentState) when I=<Max->
- case ets:lookup(cdv_menu_table,I) of
- [] -> [];
- [#menu_item{state=false,children=0}] ->
- format_items(I+1,Max,ParentState);
- [#menu_item{state=false,children=Children}] ->
- format_items(I+Children+1,Max,arentState);
- [Item=#menu_item{state=true,children=0}] when ParentState ->
- This = format_item(Item),
- [This|format_items(I+1,Max,ParentState)];
- [Item=#menu_item{state=true,children=Children}] when ParentState ->
- This = format_item(Item),
- Ch = format_items(I+1,I+Children,true),
- [[This | Ch] | format_items(I+Children+1,Max,ParentState)]
- end.
-
-format_item(Item) ->
- [lists:duplicate(Item#menu_item.depth*5,?space),
- format_picture(Item#menu_item.index,
- Item#menu_item.picture,
- Item#menu_item.children),
- format_title(Item#menu_item.text,Item#menu_item.target),
- br()].
-
-format_picture(_Index,Picture,0) ->
- img(Picture);
-format_picture(Index,Picture,_Children) ->
- href( ["./toggle?index=", integer_to_list(Index)], img(Picture)).
-
-format_title({Link,Text},Target) ->
- href(["TARGET=\"",Target,"\""],Link,Text);
-format_title(Text,_Type) ->
- Text.
-
-%%%-----------------------------------------------------------------
-%%% Display the general information
-general_info(GenInfo) ->
- Heading = "General Information",
- header(Heading,body(general_info_body(Heading,GenInfo))).
-
-general_info_body(Heading,GenInfo) ->
- TruncatedInfo =
- case get(truncated) of
- true ->
- p(font("SIZE=\"+1\" COLOR=\"#FF0000\"",
- b(["WARNING:",br(),
- "The crashdump is truncated",br(),
- "Some information might be missing",br()])));
- false ->
- ""
- end,
-
- [heading(Heading,"general_info"),
- TruncatedInfo,
- table(
- "BORDER=4 CELLPADDING=4",
- [tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Slogan"),
- td(GenInfo#general_info.slogan)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Node name"),
- td(GenInfo#general_info.node_name)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Crashdump created on"),
- td(GenInfo#general_info.created)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","System version"),
- td(GenInfo#general_info.system_vsn)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Compiled"),
- td(GenInfo#general_info.compile_time)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Taints"),
- td(GenInfo#general_info.taints)]),
- case GenInfo#general_info.mem_tot of
- "" -> "";
- MemTot ->
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Memory allocated"),
- td([MemTot," bytes"])])
- end,
- case GenInfo#general_info.mem_max of
- "" -> "";
- MemMax ->
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Memory maximum"),
- td([MemMax," bytes"])])
- end,
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Atoms"),
- td(GenInfo#general_info.num_atoms)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Processes"),
- td(GenInfo#general_info.num_procs)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","ETS tables"),
- td(GenInfo#general_info.num_ets)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Timers"),
- td(GenInfo#general_info.num_timers)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Funs"),
- td(GenInfo#general_info.num_fun)])]),
- case GenInfo#general_info.instr_info of
- old_instr_data ->
- [br(),br(),
- font("COLOR=\"#FF0000\"",
- ["Instrumentation information is found at the end of ",br(),
- "the dump. The information has an old format, and ",br(),
- "is not presented in this tool. Please read the ",br(),
- "crashdump manually to see this information."])];
- instr_data ->
- [br(),br(),
- font("COLOR=\"#FF0000\"",
- ["Instrumentation information is found at the end of ",br(),
- "the dump. The information is not presented in this ",br(),
- "tool. Please read the crashdump manually to see",br(),
- "this information."])];
- false ->
- []
- end].
-
-%%%-----------------------------------------------------------------
-%%% Display an error message
-error(Text,Args) ->
- Str = io_lib:format(Text,Args),
- header(body(error_body(Str))).
-
-error_body(Str) ->
- [h1("An error occured:"),Str,"\n"].
-
-
-%%%-----------------------------------------------------------------
-%%% Display the given information as is
-info_page(Heading,Info) ->
- info_page(Heading,Info,[]).
-info_page(Heading,Info,TW) ->
- header(Heading,body(info_body(Heading,Info,TW))).
-
-info_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No information was found\n"];
-info_body(Heading,Info,TW) ->
- [h1(Heading),
- warn(TW),
- pre(href_proc_port(lists:flatten(Info)))].
-
-%%%-----------------------------------------------------------------
-%%% Pretty print the given information
-pretty_info_page(Heading,Info) ->
- header(Heading,body(pretty_info_body(Heading,Info))).
-
-pretty_info_body(Heading,[]) ->
- [h1(Heading),
- "No information was found\n"];
-pretty_info_body(Heading,Info) ->
- [h1(Heading),
- pre(pretty_format(Info))].
-
-%%%-----------------------------------------------------------------
-%%% Print details for one process
-proc_details(Pid,Proc,TW,SharedHeap) ->
- Script =
-"<SCRIPT type=\"text/javascript\">
- function popup() {
- window.open(\"\",\"expanded\",'resizable=yes,scrollbars=yes')
-}
-</SCRIPT>\n",
-
- Heading = ["Process ", Pid],
- header(Heading,Script,body(proc_details_body(Heading,Proc,TW,SharedHeap))).
-
-proc_details_body(Heading,Proc,TW,SharedHeap) ->
- Pid = Proc#proc.pid,
- Name = if Proc#proc.name==Proc#proc.init_func -> ?space;
- true -> Proc#proc.name
- end,
- [help("processes"),
- warn(TW),
- table(
- "BORDER=4 COLS=4 WIDTH=\"100%\"",
- [tr(
- "BGCOLOR=\"#8899AA\"",
- [td("COLSPAN=4 ALIGN=center",Heading)]),
- tr(
- [td("NOWRAP=true",b("Name")),
- td("COLSPAN=1",Name),
- td("NOWRAP=true",b("Spawned as")),
- td("COLSPAN=1",Proc#proc.init_func)]),
- tr(
- [td("NOWRAP=true",b("State")),
- td("COLSPAN=1",Proc#proc.state),
- td("NOWRAP=true",b(element(1,Proc#proc.current_func))),
- td("COLSPAN=1",element(2,Proc#proc.current_func))]),
- tr(
- [td("NOWRAP=true",b("Started")),
- td("COLSPAN=1",Proc#proc.start_time),
- td("NOWRAP=true",b("Spawned by")),
- td("COLSPAN=1",href_proc_port(Proc#proc.parent))]),
- tr(
- [td("NOWRAP=true",b("Reductions")),
- td("COLSPAN=1",integer_to_list(Proc#proc.reds))] ++
- case Proc#proc.memory of
- undefined -> []; % before R16B01
- Mem ->
- [td("NOWRAP=true",b("Memory (bytes)")),
- td("COLSPAN=1",integer_to_list(Mem))]
- end),
- if SharedHeap ->
- Stack = case Proc#proc.stack_heap of
- -1 -> "unknown";
- S -> integer_to_list(S)
- end,
- tr(
- [td("NOWRAP=true",b("Stack")),
- td("COLSPAN=3",Stack)]);
- true ->
- [tr(
- [td("NOWRAP=true",b("Stack+heap")),
- td(integer_to_list(Proc#proc.stack_heap)),
- td("NOWRAP=true",b("OldHeap")),
- td(Proc#proc.old_heap)]),
- tr(
- [td("NOWRAP=true",b("Heap unused")),
- td(Proc#proc.heap_unused),
- td("NOWRAP=true",b("OldHeap unused")),
- td(Proc#proc.old_heap_unused)]),
- tr(
- [td("NOWRAP=true",b("Number of heap fragments")),
- td(Proc#proc.num_heap_frag),
- td("NOWRAP=true",b("Heap fragment data")),
- td(Proc#proc.heap_frag_data)])]
- end,
- case Proc#proc.new_heap_start of
- ?space -> "";
- _ ->
- %% Garbing
- [tr(
- [td("NOWRAP=true",b("New heap start")),
- td("COLSPAN=1",Proc#proc.new_heap_start),
- td("NOWRAP=true",b("New heap top")),
- td("COLSPAN=1",Proc#proc.new_heap_top)]),
- tr(
- [td("NOWRAP=true",b("Stack top")),
- td("COLSPAN=1",Proc#proc.stack_top),
- td("NOWRAP=true",b("Stack end")),
- td("COLSPAN=1",Proc#proc.stack_end)]),
- tr(
- [td("NOWRAP=true",b("Old heap start")),
- td("COLSPAN=1",Proc#proc.old_heap_start),
- td("NOWRAP=true",b("Old heap top")),
- td("COLSPAN=1",Proc#proc.old_heap_top)]),
- tr(
- [td("NOWRAP=true",b("Old heap end")),
- td("COLSPAN=3",Proc#proc.old_heap_end)])]
- end,
- case Proc#proc.prog_count of
- ?space -> "";
- _ ->
- [tr(
- [td("NOWRAP=true",b("Program counter")),
- td("COLSPAN=3",Proc#proc.prog_count)]),
- tr(
- [td("NOWRAP=true",b("Continuation pointer")),
- td("COLSPAN=3",Proc#proc.cp)]),
- tr(
- [td("NOWRAP=true",b("Arity")),
- td("COLSPAN=3",Proc#proc.arity)])]
- end,
- tr(
- [td("NOWRAP=true",b("Link list")),
- td("COLSPAN=3",href_proc_port(Proc#proc.links))]),
-
- tr(
- [td("NOWRAP=true",b("Msg queue length")),
- td("COLSPAN=3",integer_to_list(Proc#proc.msg_q_len))]),
-
- %% These are displayed only if data exist
- display_or_link_to_expand("MsgQueue",Proc#proc.msg_q,Pid),
- display_or_link_to_expand("Dictionary",Proc#proc.dict,Pid),
- display_or_link_to_expand("DebugDictionary",Proc#proc.debug_dict,Pid),
- display_or_link_to_expand("LastCalls",Proc#proc.last_calls,Pid),
- display_or_link_to_expand("StackDump",Proc#proc.stack_dump,Pid)]),
-
- p([href(["./ets_tables?pid=",Proc#proc.pid],
- "ETS tables owned by this process"),
- "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",
- href(["./timers?pid=",Proc#proc.pid],
- "Timers owned by this process")])].
-
-display_or_link_to_expand(Heading,Data,Pid) ->
- case Data of
- expand ->
- link_to_read_memory(Heading,Pid);
- truncated ->
- Text = font("COLOR=\"#FF0000\"",
- "The dump is truncated, no data available"),
- tr(
- [td("NOWRAP=true VALIGN=top",b(Heading)),
- td("COLSPAN=3",Text)]);
- ?space ->
- "";
- {size,Truncated,Size,Pos} ->
- %% Too much data, or truncated data -
- %% display a link to expand it
- tr(
- [td("NOWRAP=true",b(Heading)),
- td("COLSPAN=3",
- href("TARGET=\"expanded\" onClick=popup()",
- ["./expand?pos=",integer_to_list(Pos),
- "&size=",integer_to_list(Size),
- "&what=",Heading,
- "&truncated=",atom_to_list(Truncated)],
- ["Expand (",integer_to_list(Size)," bytes)"]))]);
- _ ->
- %% Not too much Data - display it
- tr(
- [td("NOWRAP=true VALIGN=top",b(Heading)),
- td("COLSPAN=3",pre(format(Heading,Data)))])
- end.
-
-link_to_read_memory(Heading,Pid) ->
- tr(
- [td("NOWRAP=true",b(Heading)),
- td("COLSPAN=3",
- href("TARGET=\"expanded\" onClick=popup()",
- ["./expand_memory?pid=",Pid,
- "&what=",Heading],
- ["Expand ", Heading]))]).
-
-format("LastCalls",Data) ->
- Data;
-format("StackDump",Data) ->
- Data;
-format(_Heading,Data) ->
- pretty_format(Data).
-
-
-
-%%%-----------------------------------------------------------------
-%%% Expanded memory
-expanded_memory(Heading,Expanded) ->
- header(Heading,body(expanded_memory_body(Heading,Expanded))).
-
-expanded_memory_body(Heading,[]) ->
- [heading(Heading,"processes"),
- case Heading of
- "MsgQueue" -> "No messages were found";
- "StackDump" -> "No stack dump was found";
- "Dictionary" -> "No dictionary was found";
- "DebugDictionary" -> "No debug dictionary was found"
- end];
-expanded_memory_body(Heading,Expanded) ->
- [heading(Heading,"processes"),
- case Heading of
- "MsgQueue" ->
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Message"),
- th("SeqTraceToken")]) |
- lists:map(fun(Msg) -> msgq_table(Msg) end, Expanded)]);
- "StackDump" ->
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Label"),
- th("Term")]) |
- lists:map(fun(Entry) -> stackdump_table(Entry) end, Expanded)]);
- _ ->
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Key"),
- th("Value")]) |
- lists:map(fun(Entry) -> dict_table(Entry) end, Expanded)])
- end].
-
-msgq_table({Msg0,Token0}) ->
- Token = case Token0 of
- [] -> ?space;
- _ -> io_lib:fwrite("~w",[Token0])
- end,
- Msg = href_proc_port(lists:flatten(io_lib:format("~p",[Msg0]))),
- tr([td(pre(Msg)), td(Token)]).
-
-stackdump_table({Label0,Term0}) ->
- Label = io_lib:format("~w",[Label0]),
- Term = href_proc_port(lists:flatten(io_lib:format("~p",[Term0]))),
- tr([td("VALIGN=top",Label), td(pre(Term))]).
-
-dict_table({Key0,Value0}) ->
- Key = href_proc_port(lists:flatten(io_lib:format("~p",[Key0]))),
- Value = href_proc_port(lists:flatten(io_lib:format("~p",[Value0]))),
- tr([td("VALIGN=top",pre(Key)), td(pre(Value))]).
-
-
-%%%-----------------------------------------------------------------
-%%% Display an expanded binary, i.e. the whole binary, not just the
-%%% size of it.
-expanded_binary(Bin) ->
- Heading = "Expanded binary",
- header(Heading,body(expanded_binary_body(Heading,Bin))).
-
-expanded_binary_body(Heading,Bin) ->
- [h1(Heading),
- pre(href_proc_port(lists:flatten(Bin))),
- br(),br(),
- href("javascript:history.go(-1)","BACK")].
-
-%%%-----------------------------------------------------------------
-%%% Print info for one port
-port(Heading,Port,TW) ->
- header(Heading,body(port_body(Heading,Port,TW))).
-
-port_body(Heading,Port,TW) ->
- [heading(Heading,"ports"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr([th(Head) || Head <- port_table_head()]), ports_table(Port)])].
-
-%%%-----------------------------------------------------------------
-%%% Print table of internal ETS tables
-internal_ets_tables(InternalEts,TW) ->
- Heading = "Internal ETS tables",
- header(Heading,body(internal_ets_tables_body(Heading,InternalEts,TW))).
-
-internal_ets_tables_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No internal ETS tables were found\n"];
-internal_ets_tables_body(Heading,InternalEts,TW) ->
- [heading(Heading,"internal_ets_tables"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Description"),
- th("Id"),
- th("Name"),
- th("Type"),
- th("Buckets"),
- th("Objects"),
- th("Memory (bytes)")]) |
- lists:map(fun(InternalEtsTable) ->
- internal_ets_tables_table1(InternalEtsTable)
- end,
- InternalEts)])].
-
-internal_ets_tables_table1({Descr,InternalEtsTable}) ->
- #ets_table{id=Id,name=Name,type=Type,buckets=Buckets,
- size=Size,memory=Memory} = InternalEtsTable,
- tr(
- [td(Descr),
- td(Id),
- td(Name),
- td(Type),
- td("ALIGN=right",Buckets),
- td("ALIGN=right",Size),
- td("ALIGN=right",Memory)]).
-
-%%%-----------------------------------------------------------------
-%%% Print table of nodes in distribution
-nods(Nods,TW) ->
- header("Distribution Information",body(nodes_body(Nods,TW))).
-
-nodes_body(no_distribution,_TW) ->
- [heading("Distribution Information","distribution_info"),
- "Not alive\n"];
-nodes_body({Type,Info,Node},TW) when is_record(Node,nod) ->
- %% Display only one node - used when a pid or port on a remote
- %% node is clicked.
- [heading("Remote Node","distribution_info"),
- warn(TW),
- Info,
- make_nodes_table(Type,[Node])];
-nodes_body({Visible,Hidden,NotConnected},TW) ->
- %% Display all nodes - this is the complete distribution info
- [heading("Distribution Information","distribution_info"),
- warn(TW),
- make_nodes_table("Visible Nodes",Visible),
- make_nodes_table("Hidden Nodes",Hidden),
- make_nodes_table("Not Connected Nodes",NotConnected)].
-
-make_nodes_table(Text,[]) ->
- p(["No \"",Text,"\" were found"]);
-make_nodes_table(Text,Nodes) ->
- p(table(
- "BORDER=4 CELLPADDING=4",
- [nodes_table_heading(Text),
- lists:map(fun(Node) -> nodes_table_row(Node) end, Nodes)])).
-
-nodes_table_heading(Text) ->
- [tr("BGCOLOR=\"#8899AA\"",[th("COLSPAN=6",Text)]),
- tr([th("Name"),
- th("Channel"),
- th("Controller"),
- th("Creation(s)"),
- th("Links/Monitors"),
- th("Extra info")])].
-
-nodes_table_row(Node) ->
- #nod{name=Name,channel=Channel,controller=Controller,creation=Creation,
- remote_links=Links,remote_mon=Mon,remote_mon_by=MonBy,error=Error}=Node,
- tr(
- [td(maybe_refcount(Name)),
- td("ALIGN=right",Channel),
- td(href_proc_port(Controller)),
- td("ALIGN=right",break_lines_creation(Creation)),
- td(format_links_and_monitors(Links,Mon,MonBy)),
- td(format_extra_info(Error))]).
-
-maybe_refcount(Name) ->
- maybe_refcount(Name, []).
-maybe_refcount([$ ,$( | Rest], Acc) ->
- [lists:reverse(Acc),br(),[$(|Rest]];
-maybe_refcount([Char | Rest], Acc) ->
- maybe_refcount(Rest, [Char | Acc]);
-maybe_refcount([],Acc) ->
- lists:reverse(Acc).
-
-break_lines_creation(Creation) ->
- break_lines_creation(Creation,[]).
-break_lines_creation([$ ,$( | Rest1], Acc) ->
- {RefCount,Rest2} = to_end_par(Rest1,[$(,$ ]),
- [lists:reverse(Acc),RefCount,br(),break_lines_creation(Rest2)];
-break_lines_creation([$ | Rest], Acc) ->
- [lists:reverse(Acc),br(),break_lines_creation(Rest)];
-break_lines_creation([Char | Rest], Acc) ->
- break_lines_creation(Rest, [Char | Acc]);
-break_lines_creation([],Acc) ->
- lists:reverse(Acc).
-
-to_end_par([$),$ | Rest], Acc) ->
- {lists:reverse([$) | Acc]),Rest};
-to_end_par([$) | Rest], Acc) ->
- {lists:reverse([$) | Acc]),Rest};
-to_end_par([Char | Rest], Acc) ->
- to_end_par(Rest, [Char | Acc]);
-to_end_par([],Acc) ->
- {lists:reverse(Acc),[]}.
-
-
-format_links_and_monitors(?space,?space,?space) ->
- ?space;
-format_links_and_monitors(Links,Mon,MonBy) ->
- [format_links_and_monitors(Links," is linked to "),
- format_links_and_monitors(Mon," is monitoring "),
- format_links_and_monitors(MonBy," is monitored by ")].
-
-format_links_and_monitors(?space,_Text) ->
- "";
-format_links_and_monitors([{Local,Remote}|Rest],Text) ->
- [[href_proc_port(Local),Text,href_proc_port(Remote),br()] |
- format_links_and_monitors(Rest,Text)];
-format_links_and_monitors([],_Text) ->
- [].
-
-format_extra_info(?space) ->
- ?space;
-format_extra_info(Error) ->
- case Error of
- ?space -> "";
- _ -> font("COLOR=\"#FF0000\"",["ERROR: ",Error,"\n"])
- end.
-
-%%%-----------------------------------------------------------------
-%%% Print detailed information about one module
-loaded_mod_details(ModInfo,TW) ->
- header(ModInfo#loaded_mod.mod,body(loaded_mod_details_body(ModInfo,TW))).
-
-loaded_mod_details_body(ModInfo,TW) ->
- #loaded_mod{mod=Mod,current_size=CS,current_attrib=CA,
- current_comp_info=CCI,old_size=OS,
- old_attrib=OA,old_comp_info=OCI} = ModInfo,
- [help("loaded_modules"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(th("BGCOLOR=\"#8899AA\" COLSPAN=3",
- ["Module: ",Mod])),
- tr([td(?space),th("Current"),th("Old")]),
- tr([th("ALIGN=left","Size (bytes)"),
- td(CS),
- td(OS)]),
- tr([th("ALIGN=left","Attributes"),
- td(pre(CA)),
- td(pre(OA))]),
- tr([th("ALIGN=left","Compilation info"),
- td(pre(CCI)),
- td(pre(OCI))])])].
-
-
-%%%-----------------------------------------------------------------
-%%% Print atoms
-atoms(SessionId,TW,Num,FirstChunk) ->
- Heading = "Atoms",
- case FirstChunk of
- done ->
- deliver_first(SessionId,[start_html_page(Heading),
- h1(Heading),
- warn(TW),
- "No atoms were found in log",br(),
- "Total number of atoms in node was ", Num,
- br()]);
- _ ->
- deliver_first(SessionId,[start_html_page(Heading),
- heading(Heading,"atoms"),
- warn(TW),
- "Total number of atoms in node was ", Num,
- br(),
- "The last created atom is shown first",
- br(),
- start_pre()]),
- atoms_chunk(SessionId,FirstChunk)
- end.
-
-atoms_chunk(SessionId,done) ->
- deliver(SessionId,[stop_pre(),stop_html_page()]);
-atoms_chunk(SessionId,Atoms) ->
- deliver(SessionId,Atoms).
-
-%%%-----------------------------------------------------------------
-%%% Print memory information
-memory(Memory,TW) ->
- Heading = "Memory Information",
- header(Heading,body(memory_body(Heading,Memory,TW))).
-
-memory_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No memory information was found\n"];
-memory_body(Heading,Memory,TW) ->
- [heading(Heading,"memory"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr("BGCOLOR=\"#8899AA\"",
- [th(?space),
- th("Bytes")]) |
- lists:map(fun(Entry) -> memory_table(Entry) end, Memory)])].
-
-memory_table({Key,Value}) ->
- tr([th("ALIGN=left",Key),td("ALIGN=right",Value)]).
-
-%%%-----------------------------------------------------------------
-%%% Print allocated areas information
-allocated_areas(AllocatedAreas,TW) ->
- Heading = "Information about allocated areas",
- header(Heading,body(allocated_areas_body(Heading,AllocatedAreas,TW))).
-
-allocated_areas_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No information was found about allocated areas\n"];
-allocated_areas_body(Heading,AllocatedAreas,TW) ->
- [heading(Heading,"memory"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr("BGCOLOR=\"#8899AA\"",
- [th(?space),
- th("Allocated (bytes)"),
- th("Used (bytes)")]) |
- lists:map(fun(Entry) -> allocated_areas_table(Entry) end,
- AllocatedAreas)])].
-
-allocated_areas_table({Key,Alloc,Used}) ->
- tr(
- [th("ALIGN=left",Key),
- td("ALIGN=right",Alloc),
- td("ALIGN=right",Used)]).
-
-
-%%%-----------------------------------------------------------------
-%%% Print allocator_info information
-allocator_info(Allocators,TW) ->
- Heading = "Allocator Information",
- header(Heading,body(allocator_info_body(Heading,Allocators,TW))).
-
-allocator_info_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No information was found about allocators\n"];
-allocator_info_body(Heading,Allocators,TW) ->
- [heading(Heading,"memory"),
- warn(TW),
- p(b("Sizes are in bytes")),
- lists:map(fun({Head,Allocator}) ->
- TableHead =
- case Head of
- {SubTitle,Columns} ->
- tr("BGCOLOR=\"#8899AA\"",
- [th("ALIGN=left",
- font("SIZE=+1",SubTitle)) |
- lists:map(
- fun(CH) ->
- th("ALIGN=right",CH)
- end,
- Columns)]);
- SubTitle ->
- tr("BGCOLOR=\"#8899AA\"",
- th("COLSPAN=10 ALIGN=left",
- font("SIZE=+1",SubTitle)))
- end,
- [table(
- "BORDER=4 CELLPADDING=4",
- [TableHead |
- lists:map(
- fun({Key,Values}) ->
- tr([th("ALIGN=left",Key) |
- lists:map(
- fun(Val) ->
- td("ALIGN=right",Val)
- end,Values)])
- end,
- Allocator)]),
- br(),br()]
- end,
- Allocators)].
-
-%%%-----------------------------------------------------------------
-%%% Print informatin about internal tables
-hash_tables(HashTables,TW) ->
- Heading = "Hash Table Information",
- header(Heading,body(hash_tables_body(Heading,HashTables,TW))).
-
-hash_tables_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No hash table information was found\n"];
-hash_tables_body(Heading,HashTables,TW) ->
- [heading(Heading,"internal_tables"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Name"),
- th("Size"),
- th("Used"),
- th("Objects"),
- th("Depth")]) |
- lists:map(fun(HashTable) -> hash_tables_table(HashTable) end,
- HashTables)])].
-
-hash_tables_table(HashTable) ->
- #hash_table{name=Name,size=Size,used=Used,objs=Objs,depth=Depth}=HashTable,
- tr(
- [td(Name),
- td("ALIGN=right",Size),
- td("ALIGN=right",Used),
- td("ALIGN=right",Objs),
- td("ALIGN=right",Depth)]).
-
-index_tables(IndexTables,TW) ->
- Heading = "Index Table Information",
- header(Heading,body(index_tables_body(Heading,IndexTables,TW))).
-
-index_tables_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No index table information was found\n"];
-index_tables_body(Heading,IndexTables,TW) ->
- [heading(Heading,"internal_tables"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Name"),
- th("Size"),
- th("Limit"),
- th("Used"),
- th("Rate"),
- th("Entries")]) |
- lists:map(fun(IndexTable) -> index_tables_table(IndexTable) end,
- IndexTables)])].
-
-index_tables_table(IndexTable) ->
- #index_table{name=Name,size=Size,limit=Limit,used=Used,
- rate=Rate,entries=Entries} = IndexTable,
- tr(
- [td(Name),
- td("ALIGN=right",Size),
- td("ALIGN=right",Limit),
- td("ALIGN=right",Used),
- td("ALIGN=right",Rate),
- td("ALIGN=right",Entries)]).
-
-%%%-----------------------------------------------------------------
-%%% Internal library
-start_html_page(Title) ->
- [only_http_header(),
- start_html(),
- only_html_header(Title),
- start_html_body()].
-
-stop_html_page() ->
- [stop_html_body(),
- stop_html()].
-
-only_http_header() ->
- ["Pragma:no-cache\r\n",
- "Content-type: text/html\r\n\r\n"].
-
-only_html_header(Title) ->
- only_html_header(Title,"").
-only_html_header(Title,JavaScript) ->
- ["<HEAD>\n",
- "<TITLE>", Title, "</TITLE>\n",
- JavaScript,
- "</HEAD>\n"].
-
-start_html() ->
- "<HTML>\n".
-stop_html() ->
- "</HTML>".
-start_html_body() ->
- "<BODY BGCOLOR=\"#FFFFFF\">\n".
-stop_html_body() ->
- "</BODY>\n".
-
-header(Body) ->
- header("","",Body).
-header(Title,Body) ->
- header(Title,"",Body).
-header(Title,JavaScript,Body) ->
- [only_http_header(),
- html_header(Title,JavaScript,Body)].
-
-html_header(Title,JavaScript,Body) ->
- [start_html(),
- only_html_header(Title,JavaScript),
- Body,
- stop_html()].
-
-body(Text) ->
- [start_html_body(),
- Text,
- stop_html_body()].
-
-frameset(Args,Frames) ->
- ["<FRAMESET ",Args,">\n", Frames, "\n</FRAMESET>\n"].
-frame(Args) ->
- ["<FRAME ",Args, ">\n"].
-
-start_visible_table() ->
- start_table("BORDER=\"4\" CELLPADDING=\"4\"").
-start_visible_table(ColTitles) ->
- [start_visible_table(),
- tr([th(ColTitle) || ColTitle <- ColTitles])].
-
-start_table(Args) ->
- ["<TABLE ", Args, ">\n"].
-stop_table() ->
- "</TABLE>\n".
-
-table(Args,Text) ->
- [start_table(Args), Text, stop_table()].
-tr(Text) ->
- ["<TR>\n", Text, "\n</TR>\n"].
-tr(Args,Text) ->
- ["<TR ", Args, ">\n", Text, "\n</TR>\n"].
-th(Text) ->
- ["<TH>", Text, "</TH>"].
-th(Args,Text) ->
- ["<TH ", Args, ">\n", Text, "\n</TH>\n"].
-td(Text) ->
- ["<TD>", Text, "</TD>"].
-td(Args,Text) ->
- ["<TD ", Args, ">", Text, "</TD>"].
-
-b(Text) ->
- ["<B>",Text,"</B>"].
-em(Text) ->
- ["<EM>",Text,"</EM>\n"].
-start_pre() ->
- "<PRE>".
-stop_pre() ->
- "</PRE>".
-pre(Text) ->
- [start_pre(),Text,stop_pre()].
-href(Link,Text) ->
- ["<A HREF=\"",Link,"\">",Text,"</A>"].
-href(Args,Link,Text) ->
- ["<A HREF=\"",Link,"\" ",Args,">",Text,"</A>"].
-img("") ->
- "";
-img(Picture) ->
- ["<IMG SRC=\"", Picture, "\" BORDER=0>"].
-form(Args,Text) ->
- ["<FORM ",Args,">\n",Text,"\n</FORM>\n"].
-input(Args) ->
- ["<INPUT ", Args, ">\n"].
-h1(Text) ->
- ["<H1>",Text,"</H1>\n"].
-font(Args,Text) ->
- ["<FONT ",Args,">\n",Text,"\n</FONT>\n"].
-p(Text) ->
- ["<P>",Text,"</P>\n"].
-p(Args, Text) ->
- ["<P ", Args, ">",Text,"</P>\n"].
-br() ->
- "<BR>\n".
-
-
-%% In all the following, "<" is changed to "&lt;" and ">" is changed to "&gt;"
-href_proc_port(Text) ->
- href_proc_port(Text,[]).
-href_proc_port([$#,$R,$e,$f,$<|T],Acc) ->
- %% No links to refs
- href_proc_port(T,[$;,$t,$l,$&,$f,$e,$R,$#|Acc]);
-href_proc_port([$#,$F,$u,$n,$<|T],Acc) ->
- %% No links to funs
- href_proc_port(T,[$;,$t,$l,$&,$n,$u,$F,$#|Acc]);
-href_proc_port([$#,$P,$o,$r,$t,$<|T],Acc) ->
- {[$#|Port]=HashPort,Rest} = to_gt(T,[$;,$t,$l,$&,$t,$r,$o,$P,$#]),
- href_proc_port(Rest,[href("TARGET=\"main\"",
- ["./port?port=",Port],HashPort)|Acc]);
-href_proc_port([$<,$<|T],Acc) ->
- %% No links to binaries
- href_proc_port(T,[$;,$t,$l,$&,$;,$t,$l,$&|Acc]);
-href_proc_port([$<,C|T],Acc) when $0 =< C, C =< $9 ->
- %% Pid
- {Pid,Rest} = to_gt(T,[C,$;,$t,$l,$&]),
- href_proc_port(Rest,[href("TARGET=\"main\"",
- ["./proc_details?pid=",Pid],Pid)|Acc]);
-href_proc_port([$",$#,$C,$D,$V,$B,$i,$n,$<|T],Acc) ->
- %% Binary written by crashdump_viewer:parse_heap_term(...)
- {SizeAndPos,[$"|Rest]} = split($>,T),
- {Size,Pos} = split($,,SizeAndPos),
- href_proc_port(Rest,[href("TARGET=\"expanded\"",
- ["./expand_binary?pos=",Pos],
- ["&lt;&lt; ",Size," bytes &gt;&gt;"]) | Acc]);
-href_proc_port([$",$#,$C,$D,$V,$P,$o,$r,$t,$<|T],Acc) ->
- %% Port written by crashdump_viewer:parse_term(...)
- {[$#|Port]=HashPort,[$"|Rest]} = to_gt(T,[$;,$t,$l,$&,$t,$r,$o,$P,$#]),
- href_proc_port(Rest,[href("TARGET=\"main\"",
- ["./port?port=",Port],HashPort)|Acc]);
-href_proc_port([$",$#,$C,$D,$V,$P,$i,$d,$<|T],Acc) ->
- %% Pid written by crashdump_viewer:parse_term(...)
- {Pid,[$"|Rest]} = to_gt(T,[$;,$t,$l,$&]),
- href_proc_port(Rest,[href("TARGET=\"main\"",
- ["./proc_details?pid=",Pid],Pid)|Acc]);
-href_proc_port([$',$#,$C,$D,$V,$I,$n,$c,$o,$m,$p,$l,$e,$t,$e,$H,$e,$a,$p,$'|T],
- Acc)->
- %% The heap is incomplete! Written by crashdump_viewer:deref_pts(...)
- IH = lists:reverse(
- lists:flatten(
- "<FONT COLOR=\"#FF0000\">...(Incomplete Heap)</FONT>")),
- href_proc_port(T,IH++Acc);
-href_proc_port([$',$#,$C,$D,$V,$T,$r,$u,$n,$c,$a,$t,$e,$d,$B,$i,$n,$a,$r,$y,$'
- |T], Acc)->
- %% A binary which is truncated! Written by
- %% crashdump_viewer:parse_heap_term(...)
- IH = lists:reverse(
- lists:flatten(
- "<FONT COLOR=\"#FF0000\">&lt;&lt;...(Truncated Binary)&gt;&gt;"
- "</FONT>")),
- href_proc_port(T,IH++Acc);
-href_proc_port([$',$#,$C,$D,$V,$N,$o,$n,$e,$x,$i,$s,$t,$i,$n,$g,$B,$i,$n,$a,$r,
- $y,$'|T], Acc)->
- %% A binary which could not be found in the dump! Written by
- %% crashdump_viewer:parse_heap_term(...)
- IH = lists:reverse(
- lists:flatten(
- "<FONT COLOR=\"#FF0000\">&lt;&lt;...(Nonexisting Binary)&gt;&gt;"
- "</FONT>")),
- href_proc_port(T,IH++Acc);
-href_proc_port([$<|T],Acc) ->
- href_proc_port(T,[$;,$t,$l,$&|Acc]);
-href_proc_port([$>|T],Acc) ->
- href_proc_port(T,[$;,$t,$g,$&|Acc]);
-href_proc_port([H|T],Acc) ->
- href_proc_port(T,[H|Acc]);
-href_proc_port([],Acc) ->
- lists:reverse(Acc).
-
-to_gt(Str,Acc) ->
- {Match,Rest} = to_gt_noreverse(Str,Acc),
- {lists:reverse(Match),Rest}.
-to_gt_noreverse([$>|T],Acc) ->
- {[$;,$t,$g,$&|Acc],T};
-to_gt_noreverse([H|T],Acc) ->
- to_gt_noreverse(T,[H|Acc]);
-to_gt_noreverse([],Acc) ->
- {Acc,[]}.
-
-split(Char,Str) ->
- split(Char,Str,[]).
-split(Char,[Char|Str],Acc) -> % match Char
- {lists:reverse(Acc),Str};
-split(Char,[H|T],Acc) ->
- split(Char,T,[H|Acc]).
-
-
-warn([]) ->
- [];
-warn(Warning) ->
- font("COLOR=\"#FF0000\"",p([Warning,br(),br()])).
-
-heading(Heading,HelpMarker) ->
- [font("SIZE=+2",b(Heading)),?space,?space,help(HelpMarker)].
-
-help(HelpMarker) ->
- [href("TARGET=doc",
- ["/crashdump_doc/crashdump_help.html#",HelpMarker],
- "Help"),
- br(),br()].
-
-%%%-----------------------------------------------------------------
-%%% This function pretty formats a string which contains erlang
-%%% terms (e.g. the message queue).
-%%% In all the following, "<" is changed to "&lt;" and ">" is changed to "&gt;"
-pretty_format(In) ->
- case catch scan(In,[],initial,[]) of
- {'EXIT',_Reason} ->
- %% Probably a truncated file, so the erlang term is not complete
- [font("COLOR=\"#FF0000\"","(This term might be truncated)"),
- href_proc_port(lists:flatten(In))];
- {[R],_,Insrt} ->
- InsrtString = lists:flatten(io_lib:format("~p",[R])),
- lists:flatten(replace_insrt(lists:reverse(InsrtString),Insrt,[]))
- end.
-
-%% Finish term
-scan(In,Acc,list,Insrt) when hd(In)==$] ->
- {lists:reverse(Acc),tl(In),Insrt};
-scan(In,Acc,tuple,Insrt) when hd(In)==$} ->
- {list_to_tuple(lists:reverse(Acc)),tl(In),Insrt};
-scan(In,Acc,atom,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- {list_to_atom(lists:reverse(Acc)),In,Insrt};
-scan(In,Acc,float,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- {list_to_float(lists:reverse(Acc)),In,Insrt};
-scan(In,Acc,integer,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- {list_to_integer(lists:reverse(Acc)),In,Insrt};
-scan([$"|In],Acc,string,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- {lists:reverse(Acc),In,Insrt};
-scan([$>|In],Acc,special,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- %% pid, ref, port, fun
- {lists:reverse([$;,$t,$g,$&|Acc]),In,Insrt};
-scan([$}|In],Acc,special,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- %% bignum integer, e.g. #integer(2) = {2452,4324}
- {lists:reverse([$}|Acc]),In,Insrt};
-scan([$,|In],Acc,Cur,Insrt) when Cur/=string,Cur/=special ->
- scan(In,Acc,Cur,Insrt);
-
-%% In the middle of an atom
-scan([$'|In],Acc,Cur,Insrt) when Cur==atom ->
- %% all $' are removed. They are added again by list_to_atom,
- %% so if we don't remove them we will get two of them.
- scan(In,Acc,Cur,Insrt);
-
-%% A $. in the middle of an integer - turn to float
-scan([C|T],Acc,integer,Insrt) when C==$. ->
- scan(T,[C|Acc],float,Insrt);
-
-%% In the middle of an atom, integer, float or string
-scan([$<|T],Acc,Cur,Insrt) when Cur==atom;Cur==string;Cur==special ->
- scan(T,[$;,$t,$l,$&|Acc],Cur,Insrt);
-scan([$>|T],Acc,Cur,Insrt) when Cur==atom;Cur==string ->
- scan(T,[$;,$t,$g,$&|Acc],Cur,Insrt);
-scan([C|T],Acc,Cur,Insrt) when Cur==atom;Cur==integer;Cur==float;Cur==string;Cur==special ->
- scan(T,[C|Acc],Cur,Insrt);
-
-%% Start list
-scan([$[|T],Acc,Cur,Insrt0) ->
- {L,Rest,Insrt} = scan(T,[],list,Insrt0),
- scan(Rest,[L|Acc],Cur,Insrt);
-
-%% Star tuple
-scan([${|T],Acc,Cur,Insrt0) ->
- {Tuple,Rest,Insrt} = scan(T,[],tuple,Insrt0),
- scan(Rest,[Tuple|Acc],Cur,Insrt);
-
-%% Star string
-scan([$"|T],Acc,Cur,Insrt0) ->
- {String,Rest,Insrt} = scan(T,[],string,Insrt0),
- scan(Rest,[String|Acc],Cur,Insrt);
-
-%% Start atom
-scan([$'|T],Acc,Cur,Insrt0) ->
- %% all $' are removed. They are added again by list_to_atom,
- %% so if we don't remove them we will get two of them.
- {Atom,Rest,Insrt} = scan(T,[],atom,Insrt0),
- scan(Rest,[Atom|Acc],Cur,Insrt);
-scan([C|T],Acc,Cur,Insrt0) when C>=$A,C=<$Z;C>=$a,C=<$z;C==$'->
- {Atom,Rest,Insrt} = scan(T,[C],atom,Insrt0),
- scan(Rest,[Atom|Acc],Cur,Insrt);
-
-%% Start integer or float
-scan([C|T],Acc,Cur,Insrt0) when C>=$0,C=<$9;C==$- ->
- {Num,Rest,Insrt} = scan(T,[C],integer,Insrt0), % can later change to float
- scan(Rest,[Num|Acc],Cur,Insrt);
-
-%% Start Pid/Port/Ref/Fun/Binary
-scan([$<|T],Acc,Cur,Insrt0) ->
- {Special,Rest,Insrt} = scan(T,[$;,$t,$l,$&],special,Insrt0),
- scan(Rest,['$insrt'|Acc],Cur,[Special|Insrt]);
-scan([$#|T],Acc,Cur,Insrt0) ->
- {Special,Rest,Insrt} = scan(T,[$#],special,Insrt0),
- scan(Rest,['$insrt'|Acc],Cur,[Special|Insrt]);
-
-
-%% done
-scan([],Acc,initial,Insrt) ->
- {Acc,[],Insrt}.
-
-
-replace_insrt("'trsni$'"++Rest,[H|T],Acc) -> % the list is reversed here!
- Special =
- case H of
- "&lt;&lt;" ++ _Binary ->
- H;
- "&lt;" ++ _Pid ->
- href("TARGET=\"main\"",["./proc_details?pid=",H],H);
- "#Port&lt;" ++ Port ->
- href("TARGET=\"main\"",["./port?port=","Port&lt;"++Port],H);
- "#" ++ _other ->
- H
- end,
- replace_insrt(Rest,T,[Special|Acc]);
-replace_insrt([H|T],Insrt,Acc) ->
- replace_insrt(T,Insrt,[H|Acc]);
-replace_insrt([],[],Acc) ->
- Acc.
-
-%%%-----------------------------------------------------------------
-%%% Create a page with one table by delivering chunk by chunk to
-%%% inets. crashdump_viewer first calls chunk_page/5 once, then
-%%% chunk/3 multiple times until all data is delivered.
-chunk_page(processes,SessionId,TW,{Sorted,SharedHeap,DumpVsn},FirstChunk) ->
- Columns = procs_summary_table_head(Sorted,SharedHeap,DumpVsn),
- chunk_page(SessionId, "Process Information", TW, FirstChunk,
- "processes", Columns, fun procs_summary_table/1);
-chunk_page(ports,SessionId,TW,_,FirstChunk) ->
- chunk_page(SessionId, "Port Information", TW, FirstChunk,
- "ports", port_table_head(), fun ports_table/1);
-chunk_page(ets_tables,SessionId,TW,Heading,FirstChunk) ->
- Columns = ["Owner",
- "Slot",
- "Id",
- "Name",
- "Type",
- "Buckets",
- "Objects",
- "Memory (bytes)"],
- chunk_page(SessionId, Heading, TW, FirstChunk,
- "ets_tables", Columns, fun ets_tables_table/1);
-chunk_page(timers,SessionId,TW,Heading,FirstChunk) ->
- chunk_page(SessionId, Heading, TW, FirstChunk, "timers",
- ["Owner","Message","Time left"], fun timers_table/1);
-chunk_page(loaded_mods,SessionId,TW,{CC,OC},FirstChunk) ->
- TotalsInfo = p([b("Current code: "),CC," bytes",br(),
- b("Old code: "),OC," bytes"]),
- Columns = ["Module","Current size (bytes)","Old size (bytes)"],
- chunk_page(SessionId, "Loaded Modules Information", TW, FirstChunk,
- "loaded_modules", TotalsInfo,Columns, fun loaded_mods_table/1);
-chunk_page(funs,SessionId, TW, _, FirstChunk) ->
- Columns = ["Module",
- "Uniq",
- "Index",
- "Address",
- "Native_address",
- "Refc"],
- chunk_page(SessionId, "Fun Information", TW, FirstChunk,
- "funs", Columns, fun funs_table/1).
-
-chunk_page(SessionId,Heading,TW,FirstChunk,Type,TableColumns,TableFun) ->
- chunk_page(SessionId,Heading,TW,FirstChunk,Type,[],TableColumns,TableFun).
-chunk_page(SessionId,Heading,TW,done,Type,_TotalsInfo,_TableColumns,_TableFun) ->
- no_info_found(SessionId,Heading,TW,Type);
-chunk_page(SessionId,Heading,TW,FirstChunk,Type,TotalsInfo,TableColumns,TableFun) ->
- deliver_first(SessionId,[start_html_page(Heading),
- heading(Heading,Type),
- warn(TW),
- TotalsInfo,
- start_visible_table(TableColumns)]),
- chunk(SessionId,FirstChunk,TableFun),
- TableFun.
-
-no_info_found(SessionId, Heading, TW, Type) ->
- Info = ["No ", Type, " were found\n"],
- deliver_first(SessionId,[start_html_page(Heading),
- h1(Heading),
- warn(TW),
- Info,
- stop_html_page()]).
-
-chunk(SessionId, done, _TableFun) ->
- deliver(SessionId,[stop_table(),stop_html_page()]);
-chunk(SessionId, Items, TableFun) ->
- deliver(SessionId, [lists:map(TableFun, Items),
- stop_table(), %! Will produce an empty table at the end
- start_visible_table()]). % of the page :(
-
-%%%-----------------------------------------------------------------
-%%% Deliver part of a page to inets
-%%% The first part, which includes the HTTP header, must always be
-%%% delivered as a string (i.e. no binaries). The rest of the page is
-%%% better delivered as binaries in order to avoid data copying.
-deliver_first(SessionId,String) ->
- mod_esi:deliver(SessionId,String).
-deliver(SessionId,IoList) ->
- mod_esi:deliver(SessionId,[list_to_binary(IoList)]).
-
-
-%%%-----------------------------------------------------------------
-%%% Page specific stuff for chunk pages
-procs_summary_table_head(Sorted,SharedHeap,DumpVsn) ->
- MemHeading =
- if DumpVsn>=?r16b01_dump_vsn ->
- "Memory (bytes)";
- true ->
- if SharedHeap ->
- "Stack";
- true ->
- "Stack+heap"
- end
- end,
- [procs_summary_table_head1("pid","Pid",Sorted),
- procs_summary_table_head1("name_func","Name/Spawned as",Sorted),
- procs_summary_table_head1("state","State",Sorted),
- procs_summary_table_head1("reds","Reductions",Sorted),
- procs_summary_table_head1("mem",MemHeading,Sorted),
- procs_summary_table_head1("msg_q_len","MsgQ Length",Sorted)].
-
-procs_summary_table_head1(_,Text,no_sort) ->
- Text;
-procs_summary_table_head1(Sorted,Text,Sorted) ->
- %% Mark the sorted column (bigger and italic)
- font("SIZE=\"+1\"",em(href("./sort_procs?sort="++Sorted,Text)));
-procs_summary_table_head1(SortOn,Text,_Sorted) ->
- href("./sort_procs?sort="++SortOn,Text).
-
-procs_summary_table(Proc) ->
- #proc{pid=Pid,name=Name,state=State,
- reds=Reds,stack_heap=Stack,memory=Memory,msg_q_len=MsgQLen}=Proc,
- Mem =
- case Memory of
- undefined -> % assuming pre-R16B01
- case Stack of
- -1 -> "unknown";
- _ -> integer_to_list(Stack)
- end;
- _ ->
- integer_to_list(Memory)
- end,
- tr(
- [td(href(["./proc_details?pid=",Pid],Pid)),
- td(Name),
- td(State),
- td("ALIGN=right",integer_to_list(Reds)),
- td("ALIGN=right",Mem),
- td("ALIGN=right",integer_to_list(MsgQLen))]).
-
-port_table_head() ->
- ["Id","Slot","Connected","Links","Name","Monitors","Controls"].
-
-ports_table(Port) ->
- #port{id=Id,slot=Slot,connected=Connected,links=Links,name=Name,
- monitors=Monitors,controls=Controls}=Port,
- tr(
- [td(Id),
- td("ALIGN=right",Slot),
- td(href_proc_port(Connected)),
- td(href_proc_port(Links)),
- td(Name),
- td(href_proc_port(Monitors)),
- td(Controls)]).
-
-ets_tables_table(EtsTable) ->
- #ets_table{pid=Pid,slot=Slot,id=Id,name=Name,type=Type,
- buckets=Buckets,size=Size,memory=Memory} = EtsTable,
- tr(
- [td(href_proc_port(Pid)),
- td(Slot),
- td(Id),
- td(Name),
- td(Type),
- td("ALIGN=right",Buckets),
- td("ALIGN=right",Size),
- td("ALIGN=right",Memory)]).
-
-timers_table(Timer) ->
- #timer{pid=Pid,msg=Msg,time=Time}=Timer,
- tr(
- [td(href_proc_port(Pid)),
- td(Msg),
- td("ALIGN=right",Time)]).
-
-loaded_mods_table(#loaded_mod{mod=Mod,current_size=CS,old_size=OS}) ->
- tr([td(href(["loaded_mod_details?mod=",http_uri:encode(Mod)],Mod)),
- td("ALIGN=right",CS),
- td("ALIGN=right",OS)]).
-
-funs_table(Fu) ->
- #fu{module=Module,uniq=Uniq,index=Index,address=Address,
- native_address=NativeAddress,refc=Refc}=Fu,
- tr(
- [td(Module),
- td("ALIGN=right",Uniq),
- td("ALIGN=right",Index),
- td(Address),
- td(NativeAddress),
- td("ALIGN=right",Refc)]).
diff --git a/lib/observer/src/etop_tr.erl b/lib/observer/src/etop_tr.erl
index dd326fe639..e6c69e4e1e 100644
--- a/lib/observer/src/etop_tr.erl
+++ b/lib/observer/src/etop_tr.erl
@@ -59,7 +59,7 @@ reader(Config) ->
Port = getopt(port, Config),
{ok, Sock} = gen_tcp:connect(Host, Port, [{active, false}]),
- spawn_link(fun() -> reader_init(Sock,getopt(store,Config),nopid) end).
+ spawn_link(fun() -> reader_init(Sock,getopt(store,Config),[]) end).
%%%%%%%%%%%%%% Socket reader %%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -73,24 +73,30 @@ reader(Sock, Store, Last) ->
New = handle_data(Last, Data, Store),
reader(Sock, Store, New).
-handle_data(_, {_, Pid, in, _, Time}, _) ->
- {Pid,Time};
-handle_data({Pid,Time1}, {_, Pid, out, _, Time2}, Store) ->
- Elapsed = elapsed(Time1, Time2),
- case ets:member(Store,Pid) of
- true -> ets:update_counter(Store, Pid, Elapsed);
- false -> ets:insert(Store,{Pid,Elapsed})
- end,
- nopid;
+handle_data(Last, {_, Pid, in, _, Time}, _) ->
+ [{Pid,Time}|Last];
+handle_data([], {_, _, out, _, _}, _Store) ->
+ %% ignore - there was probably just a 'drop'
+ [];
+handle_data(Last, {_, Pid, out, _, Time2} = G, Store) ->
+ case lists:keytake(Pid, 1, Last) of
+ {_, {_, Time1}, New} ->
+ Elapsed = elapsed(Time1, Time2),
+ case ets:member(Store,Pid) of
+ true -> ets:update_counter(Store, Pid, Elapsed);
+ false -> ets:insert(Store,{Pid,Elapsed})
+ end,
+ New;
+ false ->
+ io:format("Erlang top got garbage ~p~n", [G]),
+ Last
+ end;
handle_data(_W, {drop, D}, _) -> %% Error case we are missing data here!
io:format("Erlang top dropped data ~p~n", [D]),
- nopid;
-handle_data(nopid, {_, _, out, _, _}, _Store) ->
- %% ignore - there was probably just a 'drop'
- nopid;
-handle_data(_, G, _) ->
+ [];
+handle_data(Last, G, _) ->
io:format("Erlang top got garbage ~p~n", [G]),
- nopid.
+ Last.
elapsed({Me1, S1, Mi1}, {Me2, S2, Mi2}) ->
Me = (Me2 - Me1) * 1000000,
diff --git a/lib/observer/src/observer.app.src b/lib/observer/src/observer.app.src
index 6d5259624c..f14f0ee849 100644
--- a/lib/observer/src/observer.app.src
+++ b/lib/observer/src/observer.app.src
@@ -20,12 +20,32 @@
[{description, "OBSERVER version 1"},
{vsn, "%VSN%"},
{modules, [crashdump_viewer,
- crashdump_viewer_html,
+ cdv_atom_cb,
+ cdv_bin_cb,
+ cdv_detail_wx,
+ cdv_dist_cb,
+ cdv_ets_cb,
+ cdv_fun_cb,
+ cdv_gen_cb,
+ cdv_html_wx,
+ cdv_info_wx,
+ cdv_int_tab_cb,
+ cdv_mem_cb,
+ cdv_mod_cb,
+ cdv_multi_wx,
+ cdv_port_cb,
+ cdv_proc_cb,
+ cdv_table_wx,
+ cdv_term_cb,
+ cdv_timer_cb,
+ cdv_virtual_list_wx,
+ cdv_wx,
etop,
etop_tr,
etop_txt,
observer,
observer_app_wx,
+ observer_html_lib,
observer_lib,
observer_perf_wx,
observer_pro_wx,
diff --git a/lib/observer/src/observer_app_wx.erl b/lib/observer/src/observer_app_wx.erl
index 72bafcc5e0..a8ace10275 100644
--- a/lib/observer/src/observer_app_wx.erl
+++ b/lib/observer/src/observer_app_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-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
@@ -81,7 +81,7 @@ init([Notebook, Parent]) ->
]),
Main = wxBoxSizer:new(?wxHORIZONTAL),
Splitter = wxSplitterWindow:new(Panel, [{size, wxWindow:getClientSize(Panel)},
- {style, ?wxSP_LIVE_UPDATE},
+ {style, ?SASH_STYLE},
{id, 2}
]),
Apps = wxListBox:new(Splitter, 3, []),
@@ -178,11 +178,16 @@ handle_event(#wx{id=Id, event=_Sz=#wxSize{size=Size}},
{noreply, State};
handle_event(#wx{event=#wxMouse{type=Type, x=X0, y=Y0}},
- S0=#state{app=#app{ptree=Tree}, app_w=AppWin}) ->
- {X,Y} = wxScrolledWindow:calcUnscrolledPosition(AppWin, X0, Y0),
- Hit = locate_node(X,Y, [Tree]),
- State = handle_mouse_click(Hit, Type, S0),
- {noreply, State};
+ S0=#state{app=App, app_w=AppWin}) ->
+ case App of
+ #app{ptree=Tree} ->
+ {X,Y} = wxScrolledWindow:calcUnscrolledPosition(AppWin, X0, Y0),
+ Hit = locate_node(X,Y, [Tree]),
+ State = handle_mouse_click(Hit, Type, S0),
+ {noreply, State};
+ _ ->
+ {noreply, S0}
+ end;
handle_event(#wx{event=#wxCommand{type=command_menu_selected}},
State = #state{sel=undefined}) ->
@@ -190,8 +195,8 @@ handle_event(#wx{event=#wxCommand{type=command_menu_selected}},
{noreply, State};
handle_event(#wx{id=?ID_PROC_INFO, event=#wxCommand{type=command_menu_selected}},
- State = #state{panel=Panel, sel={#box{s1=#str{pid=Pid}},_}}) ->
- observer_procinfo:start(Pid, Panel, self()),
+ State = #state{sel={#box{s1=#str{pid=Pid}},_}}) ->
+ observer ! {open_link, Pid},
{noreply, State};
handle_event(#wx{id=?ID_PROC_MSG, event=#wxCommand{type=command_menu_selected}},
@@ -337,8 +342,8 @@ code_change(_, _, State) ->
handle_mouse_click(Node = {#box{s1=#str{pid=Pid}},_}, Type,
State=#state{app_w=AppWin,panel=Panel}) ->
case Type of
- left_dclick -> observer_procinfo:start(Pid, Panel, self());
- right_down -> popup_menu(Panel);
+ left_dclick -> observer ! {open_link, Pid};
+ right_down -> popup_menu(Panel);
_ -> ok
end,
observer_wx:set_status(io_lib:format("Pid: ~p", [Pid])),
diff --git a/lib/observer/src/observer_defs.hrl b/lib/observer/src/observer_defs.hrl
index 586e7bbff9..3adc358b95 100644
--- a/lib/observer/src/observer_defs.hrl
+++ b/lib/observer/src/observer_defs.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-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
@@ -35,13 +35,16 @@
check = false
}).
--record(attrs, {even, odd, deleted, changed, searched}).
+-record(attrs, {even, odd, searched, deleted, changed_odd, changed_even, new_odd, new_even}).
-define(EVEN(Row), ((Row rem 2) =:= 0)).
-define(BG_EVEN, {230,230,250}).
-define(BG_ODD, {255,255,255}).
-define(BG_DELETED, {100,100,100}).
--define(FG_DELETED, {240,30,30}).
+-define(FG_DELETED, {230,230,230}).
-define(BG_SEARCHED,{235,215,90}).
--define(BG_CHANGED, {230,230,250}).
+-define(BG_CHANGED, {184,207,184}).
+-define(BG_NEW, {123,168,123}).
-define(LCTRL_WDECR, 4). %% Remove some pixels in column width to avoid creating unnecessary scrollbar
+
+-define(SASH_STYLE, ?wxSP_LIVE_UPDATE bor ?wxSP_NOBORDER bor ?wxSP_3DSASH).
diff --git a/lib/observer/src/observer_html_lib.erl b/lib/observer/src/observer_html_lib.erl
new file mode 100644
index 0000000000..9f77891426
--- /dev/null
+++ b/lib/observer/src/observer_html_lib.erl
@@ -0,0 +1,388 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2003-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(observer_html_lib).
+
+%%
+%% This module implements the HTML generation for the crashdump
+%% viewer. No logic or states are kept by this module.
+%%
+
+-export([plain_page/1,
+ expandable_term/3,
+ warning/1]).
+
+-include("crashdump_viewer.hrl").
+-include("observer_defs.hrl").
+
+%%%-----------------------------------------------------------------
+%%% Display the given information as is, no heading
+%%% Empty body if no info exists.
+warning(Info) ->
+ header(body(warning_body(Info))).
+
+warning_body(Info) ->
+ [warn(Info)].
+
+%%%-----------------------------------------------------------------
+%%% Display the given information as is, no heading
+%%% Empty body if no info exists.
+plain_page(Info) ->
+ header(body(plain_body(Info))).
+
+plain_body(Info) ->
+ [pre(href_proc_port(lists:flatten(Info)))].
+
+%%%-----------------------------------------------------------------
+%%% Expanded memory
+expandable_term(Heading,Expanded,Tab) ->
+ header(Heading,body(expandable_term_body(Heading,Expanded,Tab))).
+
+expandable_term_body(Heading,[],_Tab) ->
+ [case Heading of
+ "MsgQueue" -> "No messages were found";
+ "Message Queue" -> "No messages were found";
+ "StackDump" -> "No stack dump was found";
+ "Dictionary" -> "No dictionary was found";
+ "ProcState" -> "Information could not be retrieved,"
+ " system messages may not be handled by this process."
+ end];
+expandable_term_body(Heading,Expanded,Tab) ->
+ Attr = "BORDER=0 CELLPADDING=0 CELLSPACING=1 WIDTH=100%",
+ [case Heading of
+ "MsgQueue" ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=70%","Message"),
+ th("WIDTH=30%","SeqTraceToken")]) |
+ element(1, lists:mapfoldl(fun(Msg, Even) ->
+ {msgq_table(Tab, Msg, Even),
+ not Even}
+ end,
+ true, Expanded))]);
+ "Message Queue" ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=10%","Id"),
+ th("WIDTH=90%","Message")]) |
+ element(1, lists:mapfoldl(fun(Msg, {Even,N}) ->
+ {msgq_table(Tab, Msg, N, Even),
+ {not Even, N+1}}
+ end,
+ {true,1}, Expanded))]);
+ "StackDump" ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=20%","Label"),
+ th("WIDTH=80%","Term")]) |
+ element(1, lists:mapfoldl(fun(Entry, Even) ->
+ {stackdump_table(Tab, Entry, Even),
+ not Even}
+ end, true, Expanded))]);
+ "ProcState" ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=20%","Label"),
+ th("WIDTH=80%","Information")]) |
+ element(1, lists:mapfoldl(fun(Entry, Even) ->
+ {proc_state(Tab, Entry,Even),
+ not Even}
+ end, true, Expanded))]);
+ _ ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=30%","Key"),
+ th("WIDTH=70%","Value")]) |
+ element(1, lists:mapfoldl(fun(Entry, Even) ->
+ {dict_table(Tab, Entry,Even),
+ not Even}
+ end, true, Expanded))])
+ end].
+
+msgq_table(Tab,{Msg0,Token0}, Even) ->
+ Token = case Token0 of
+ [] -> "";
+ _ -> io_lib:fwrite("~w",[Token0])
+ end,
+ Msg = all_or_expand(Tab,Msg0),
+ tr(color(Even),[td(pre(Msg)), td(Token)]).
+
+msgq_table(Tab,Msg0, Id, Even) ->
+ Msg = all_or_expand(Tab,Msg0),
+ tr(color(Even),[td(integer_to_list(Id)), td(pre(Msg))]).
+
+stackdump_table(Tab,{Label0,Term0},Even) ->
+ Label = io_lib:format("~w",[Label0]),
+ Term = all_or_expand(Tab,Term0),
+ tr(color(Even), [td("VALIGN=center",pre(Label)), td(pre(Term))]).
+
+dict_table(Tab,{Key0,Value0}, Even) ->
+ Key = all_or_expand(Tab,Key0),
+ Value = all_or_expand(Tab,Value0),
+ tr(color(Even), [td("VALIGN=center",pre(Key)), td(pre(Value))]).
+
+proc_state(Tab,{Key0,Value0}, Even) ->
+ Key = lists:flatten(io_lib:format("~s",[Key0])),
+ Value = all_or_expand(Tab,Value0),
+ tr(color(Even), [td("VALIGN=center",Key), td(pre(Value))]).
+
+all_or_expand(Tab,Term) ->
+ Preview = io_lib:format("~P",[Term,8]),
+ Check = io_lib:format("~P",[Term,100]),
+ Exp = Preview=/=Check,
+ all_or_expand(Tab,Term,Preview,Exp).
+all_or_expand(_Tab,_Term,Str,false) ->
+ href_proc_port(lists:flatten(Str));
+all_or_expand(Tab,Term,Preview,true)
+ when not is_binary(Term) ->
+ Key = {Key1,Key2,Key3} = now(),
+ ets:insert(Tab,{Key,Term}),
+ [href_proc_port(lists:flatten(Preview), false), $\n,
+ href("TARGET=\"expanded\"",
+ ["#Term?key1="++integer_to_list(Key1)++
+ "&key2="++integer_to_list(Key2)++
+ "&key3="++integer_to_list(Key3)],
+ "Click to expand above term")];
+all_or_expand(Tab,Bin,PreviewStr,true) when is_binary(Bin) ->
+ <<Preview:80, _/binary>> = Bin,
+ Size = byte_size(Bin),
+ Hash = erlang:phash2(Bin),
+ Key = {Preview, Size, Hash},
+ ets:insert(Tab,{Key,Bin}),
+ [href_proc_port(lists:flatten(PreviewStr), false), $\n,
+ href("TARGET=\"expanded\"",
+ ["#OBSBinary?key1="++integer_to_list(Preview)++
+ "&key2="++integer_to_list(Size)++
+ "&key3="++integer_to_list(Hash)],
+ "Click to expand above term")].
+
+
+
+color(true) -> io_lib:format("BGCOLOR=\"#~2.16.0B~2.16.0B~2.16.0B\"", tuple_to_list(?BG_EVEN));
+color(false) -> io_lib:format("BGCOLOR=\"#~2.16.0B~2.16.0B~2.16.0B\"", tuple_to_list(?BG_ODD)).
+
+%%%-----------------------------------------------------------------
+%%% Internal library
+start_html() ->
+ "<HTML>\n".
+stop_html() ->
+ "</HTML>".
+start_html_body() ->
+ "<BODY BGCOLOR=\"#FFFFFF\">\n".
+stop_html_body() ->
+ "</BODY>\n".
+
+header(Body) ->
+ header("","",Body).
+header(Title,Body) ->
+ header(Title,"",Body).
+header(Title,JavaScript,Body) ->
+ [%only_http_header(),
+ html_header(Title,JavaScript,Body)].
+
+html_header(Title,JavaScript,Body) ->
+ [start_html(),
+ only_html_header(Title,JavaScript),
+ Body,
+ stop_html()].
+
+only_html_header(Title,JavaScript) ->
+ ["<HEAD>\n",
+ "<TITLE>", Title, "</TITLE>\n",
+ JavaScript,
+ "</HEAD>\n"].
+
+body(Text) ->
+ [start_html_body(),
+ Text,
+ stop_html_body()].
+
+start_table(Args) ->
+ ["<TABLE ", Args, ">\n"].
+stop_table() ->
+ "</TABLE>\n".
+
+table(Args,Text) ->
+ [start_table(Args), Text, stop_table()].
+tr(Text) ->
+ ["<TR>\n", Text, "\n</TR>\n"].
+tr(Args,Text) ->
+ ["<TR ", Args, ">\n", Text, "\n</TR>\n"].
+th(Args,Text) ->
+ ["<TH ", Args, ">\n", Text, "\n</TH>\n"].
+td(Text) ->
+ ["<TD>", Text, "</TD>"].
+td(Args,Text) ->
+ ["<TD ", Args, ">", Text, "</TD>"].
+
+start_pre() ->
+ "<PRE>".
+stop_pre() ->
+ "</PRE>".
+pre(Text) ->
+ [start_pre(),Text,stop_pre()].
+href(Link,Text) ->
+ ["<A HREF=\"",Link,"\">",Text,"</A>"].
+href(Args,Link,Text) ->
+ ["<A HREF=\"",Link,"\" ",Args,">",Text,"</A>"].
+font(Args,Text) ->
+ ["<FONT ",Args,">\n",Text,"\n</FONT>\n"].
+p(Text) ->
+ ["<P>",Text,"</P>\n"].
+br() ->
+ "<BR>\n".
+
+
+%% In all the following, "<" is changed to "&lt;" and ">" is changed to "&gt;"
+href_proc_port(Text) ->
+ href_proc_port(Text,true).
+href_proc_port(Text,LinkToBin) ->
+ href_proc_port(Text,[],LinkToBin).
+href_proc_port("#Ref<"++T,Acc,LTB) ->
+ %% No links to refs
+ href_proc_port(T,["#Ref&lt;"|Acc],LTB);
+href_proc_port("#Fun<"++T,Acc,LTB) ->
+ %% No links to funs
+ href_proc_port(T,["#Fun&lt;"|Acc],LTB);
+href_proc_port("#Port<"++T,Acc,LTB) ->
+ {Port0,Rest} = split($>,T),
+ Port = "#Port&lt;"++Port0 ++ "&gt;",
+ href_proc_port(Rest,[href(Port,Port)|Acc],LTB);
+href_proc_port("<<"++T,Acc,LTB) ->
+ %% No links to binaries
+ href_proc_port(T,["&lt;&lt;"|Acc],LTB);
+href_proc_port("<"++([C|_]=T),Acc,LTB) when $0 =< C, C =< $9 ->
+ %% Pid
+ {Pid0,Rest} = split($>,T),
+ Pid = "&lt;" ++ Pid0 ++ "&gt",
+ href_proc_port(Rest,[href(Pid,Pid)|Acc],LTB);
+href_proc_port("['#CDVBin'"++T,Acc,LTB) ->
+ %% Binary written by crashdump_viewer:parse_heap_term(...)
+ href_proc_bin(cdv, T, Acc, LTB);
+href_proc_port("['#OBSBin'"++T,Acc,LTB) ->
+ %% Binary written by crashdump_viewer:parse_heap_term(...)
+ href_proc_bin(obs, T, Acc, LTB);
+href_proc_port("['#CDVPort'"++T,Acc,LTB) ->
+ %% Port written by crashdump_viewer:parse_term(...)
+ {Port0,Rest} = split($],T),
+ PortStr=
+ case string:tokens(Port0,",.|") of
+ [X,Y] ->
+ Port = "#Port&lt;"++X++"."++Y++"&gt;",
+ href(Port,Port);
+ Ns ->
+ "#Port&lt;" ++ string:join(Ns,".") ++"...&gt;"
+ end,
+ href_proc_port(Rest,[PortStr|Acc],LTB);
+href_proc_port("['#CDVPid'"++T,Acc,LTB) ->
+ %% Pid written by crashdump_viewer:parse_term(...)
+ {Pid0,Rest} = split($],T),
+ PidStr =
+ case string:tokens(Pid0,",.|") of
+ [X,Y,Z] ->
+ Pid = "&lt;"++X++"."++Y++"."++Z++"&gt;",
+ href(Pid,Pid);
+ Ns ->
+ "&lt;" ++ string:join(Ns,".") ++ "...&gt;"
+ end,
+ href_proc_port(Rest,[PidStr|Acc],LTB);
+href_proc_port("'#CDVIncompleteHeap'"++T,Acc,LTB)->
+ %% The heap is incomplete! Written by crashdump_viewer:deref_pts(...)
+ IH = lists:reverse(
+ lists:flatten(
+ "<FONT COLOR=\"#FF0000\">...(Incomplete Heap)</FONT>")),
+ href_proc_port(T,IH++Acc,LTB);
+href_proc_port("'#CDVTruncatedBinary'"++T,Acc,LTB)->
+ %% A binary which is truncated! Written by
+ %% crashdump_viewer:parse_heap_term(...)
+ IH = lists:reverse(
+ lists:flatten(
+ "<FONT COLOR=\"#FF0000\">&lt;&lt;...(Truncated Binary)&gt;&gt;"
+ "</FONT>")),
+ href_proc_port(T,IH++Acc,LTB);
+href_proc_port("'#CDVNonexistingBinary'"++T,Acc,LTB)->
+ %% A binary which could not be found in the dump! Written by
+ %% crashdump_viewer:parse_heap_term(...)
+ IH = lists:reverse(
+ lists:flatten(
+ "<FONT COLOR=\"#FF0000\">&lt;&lt;...(Nonexisting Binary)&gt;&gt;"
+ "</FONT>")),
+ href_proc_port(T,IH++Acc,LTB);
+href_proc_port("<"++T,Acc,LTB) ->
+ href_proc_port(T,["&lt;"|Acc],LTB);
+href_proc_port(">"++T,Acc,LTB) ->
+ href_proc_port(T,["&gt;"|Acc],LTB);
+href_proc_port([H|T],Acc,LTB) ->
+ href_proc_port(T,[H|Acc],LTB);
+href_proc_port([],Acc,_) ->
+ lists:reverse(Acc).
+
+href_proc_bin(From, T, Acc, LTB) ->
+ {OffsetSizePos,Rest} = split($],T),
+ BinStr =
+ case string:tokens(OffsetSizePos,",.| \n") of
+ [Offset,Size,Pos] when From =:= cdv ->
+ Id = {list_to_integer(Offset),10,list_to_integer(Pos)},
+ {ok,PreviewBin} = crashdump_viewer:expand_binary(Id),
+ PreviewStr = ["&lt;&lt;",
+ [integer_to_list(X)++"," || <<X:8>> <= PreviewBin],
+ "...(",
+ observer_lib:to_str({bytes,Size}),
+ ")&gt;&gt;"],
+ if LTB ->
+ href("TARGET=\"expanded\"",
+ ["#Binary?offset="++Offset++
+ "&size="++Size++
+ "&pos="++Pos],
+ PreviewStr);
+ true ->
+ PreviewStr
+ end;
+ [Preview,Size,Md5] when From =:= obs ->
+ PreviewBin = <<(list_to_integer(Preview)):80>>,
+ PreviewStr = ["&lt;&lt;",
+ [integer_to_list(X)++"," || <<X:8>> <= PreviewBin],
+ "...(",
+ observer_lib:to_str({bytes,list_to_integer(Size)}),
+ ")&gt;&gt;"],
+ if LTB ->
+ href("TARGET=\"expanded\"",
+ ["#OBSBinary?key1="++Preview++
+ "&key2="++Size++
+ "&key3="++Md5],
+ PreviewStr);
+ true ->
+ PreviewStr
+ end;
+ _ ->
+ "&lt;&lt; ... &gt;&gt;"
+ end,
+ href_proc_port(Rest,[BinStr|Acc],LTB).
+
+split(Char,Str) ->
+ split(Char,Str,[]).
+split(Char,[Char|Str],Acc) -> % match Char
+ {lists:reverse(Acc),Str};
+split(Char,[H|T],Acc) ->
+ split(Char,T,[H|Acc]).
+
+
+warn([]) ->
+ [];
+warn(Warning) ->
+ font("COLOR=\"#FF0000\"",p([Warning,br(),br()])).
diff --git a/lib/observer/src/observer_lib.erl b/lib/observer/src/observer_lib.erl
index f7712cf3da..e0f7bf482b 100644
--- a/lib/observer/src/observer_lib.erl
+++ b/lib/observer/src/observer_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2014. 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,17 +19,26 @@
-module(observer_lib).
-export([get_wx_parent/1,
- display_info_dialog/1, user_term/3, user_term_multiline/3,
+ display_info_dialog/1, display_yes_no_dialog/1,
+ display_progress_dialog/2, destroy_progress_dialog/0,
+ wait_for_progress/0, report_progress/1,
+ user_term/3, user_term_multiline/3,
interval_dialog/4, start_timer/1, stop_timer/1,
display_info/2, fill_info/2, update_info/2, to_str/1,
create_menus/3, create_menu_item/3,
create_attrs/0,
- set_listctrl_col_size/2
+ set_listctrl_col_size/2,
+ create_status_bar/1,
+ html_window/1, html_window/2
]).
-include_lib("wx/include/wx.hrl").
-include("observer_defs.hrl").
+-define(SINGLE_LINE_STYLE, ?wxBORDER_NONE bor ?wxTE_READONLY bor ?wxTE_RICH2).
+-define(MULTI_LINE_STYLE, ?SINGLE_LINE_STYLE bor ?wxTE_MULTILINE).
+
+
get_wx_parent(Window) ->
Parent = wxWindow:getParent(Window),
case wx:is_null(Parent) of
@@ -96,11 +105,19 @@ setup_timer(Bool, {Timer, Old}) ->
setup_timer(Bool, {false, Old}).
display_info_dialog(Str) ->
- Dlg = wxMessageDialog:new(wx:null(), Str),
+ display_info_dialog("",Str).
+display_info_dialog(Title,Str) ->
+ Dlg = wxMessageDialog:new(wx:null(), Str, [{caption,Title}]),
wxMessageDialog:showModal(Dlg),
wxMessageDialog:destroy(Dlg),
ok.
+display_yes_no_dialog(Str) ->
+ Dlg = wxMessageDialog:new(wx:null(), Str, [{style,?wxYES_NO}]),
+ R = wxMessageDialog:showModal(Dlg),
+ wxMessageDialog:destroy(Dlg),
+ R.
+
%% display_info(Parent, [{Title, [{Label, Info}]}]) -> {Panel, Sizer, InfoFieldsToUpdate}
display_info(Frame, Info) ->
Panel = wxPanel:new(Frame),
@@ -108,24 +125,50 @@ display_info(Frame, Info) ->
Sizer = wxBoxSizer:new(?wxVERTICAL),
wxSizer:addSpacer(Sizer, 5),
Add = fun(BoxInfo) ->
- {Box, InfoFs} = create_box(Panel, BoxInfo),
- wxSizer:add(Sizer, Box, [{flag, ?wxEXPAND bor ?wxALL},
- {border, 5}]),
- wxSizer:addSpacer(Sizer, 5),
- InfoFs
+ case create_box(Panel, BoxInfo) of
+ {Box, InfoFs} ->
+ wxSizer:add(Sizer, Box, [{flag, ?wxEXPAND bor ?wxALL},
+ {border, 5}]),
+ wxSizer:addSpacer(Sizer, 5),
+ InfoFs;
+ undefined ->
+ []
+ end
end,
InfoFs = [Add(I) || I <- Info],
wxWindow:setSizerAndFit(Panel, Sizer),
{Panel, Sizer, InfoFs}.
+fill_info([{dynamic, Key}|Rest], Data)
+ when is_atom(Key); is_function(Key) ->
+ %% Special case used by crashdump_viewer when the value decides
+ %% which header to use
+ case get_value(Key, Data) of
+ undefined -> [undefined | fill_info(Rest, Data)];
+ {Str,Value} -> [{Str, Value} | fill_info(Rest, Data)]
+ end;
fill_info([{Str, Key}|Rest], Data) when is_atom(Key); is_function(Key) ->
- [{Str, get_value(Key, Data)} | fill_info(Rest, Data)];
+ case get_value(Key, Data) of
+ undefined -> [undefined | fill_info(Rest, Data)];
+ Value -> [{Str, Value} | fill_info(Rest, Data)]
+ end;
+fill_info([{Str,Attrib,Key}|Rest], Data) when is_atom(Key); is_function(Key) ->
+ case get_value(Key, Data) of
+ undefined -> [undefined | fill_info(Rest, Data)];
+ Value -> [{Str,Attrib,Value} | fill_info(Rest, Data)]
+ end;
fill_info([{Str, {Format, Key}}|Rest], Data)
when is_atom(Key); is_function(Key), is_atom(Format) ->
case get_value(Key, Data) of
- undefined -> [{Str, undefined} | fill_info(Rest, Data)];
+ undefined -> [undefined | fill_info(Rest, Data)];
Value -> [{Str, {Format, Value}} | fill_info(Rest, Data)]
end;
+fill_info([{Str, Attrib, {Format, Key}}|Rest], Data)
+ when is_atom(Key); is_function(Key), is_atom(Format) ->
+ case get_value(Key, Data) of
+ undefined -> [undefined | fill_info(Rest, Data)];
+ Value -> [{Str, Attrib, {Format, Value}} | fill_info(Rest, Data)]
+ end;
fill_info([{Str,SubStructure}|Rest], Data) when is_list(SubStructure) ->
[{Str, fill_info(SubStructure, Data)}|fill_info(Rest,Data)];
fill_info([{Str,Attrib,SubStructure}|Rest], Data) ->
@@ -146,23 +189,49 @@ update_info([Fields|Fs], [{_Header, _Attrib, SubStructure}| Rest]) ->
update_info([], []) ->
ok.
+update_info2([undefined|Fs], [_|Rest]) ->
+ update_info2(Fs, Rest);
+update_info2([Scroll = {_, _, _}|Fs], [{_, NewInfo}|Rest]) ->
+ update_scroll_boxes(Scroll, NewInfo),
+ update_info2(Fs, Rest);
+update_info2([Field|Fs], [{_Str, {click, Value}}|Rest]) ->
+ wxTextCtrl:setValue(Field, to_str(Value)),
+ update_info2(Fs, Rest);
update_info2([Field|Fs], [{_Str, Value}|Rest]) ->
- wxStaticText:setLabel(Field, to_str(Value)),
+ wxTextCtrl:setValue(Field, to_str(Value)),
+ update_info2(Fs, Rest);
+update_info2([Field|Fs], [undefined|Rest]) ->
+ wxTextCtrl:setValue(Field, ""),
update_info2(Fs, Rest);
update_info2([], []) -> ok.
+update_scroll_boxes({_, _, 0}, {_, []}) -> ok;
+update_scroll_boxes({Win, Sizer, _}, {Type, List}) ->
+ [wxSizerItem:deleteWindows(Child) || Child <- wxSizer:getChildren(Sizer)],
+ BC = wxWindow:getBackgroundColour(Win),
+ Cursor = wxCursor:new(?wxCURSOR_HAND),
+ add_entries(Type, List, Win, Sizer, BC, Cursor),
+ wxCursor:destroy(Cursor),
+ wxSizer:recalcSizes(Sizer),
+ wxWindow:refresh(Win),
+ ok.
to_str(Value) when is_atom(Value) ->
atom_to_list(Value);
+to_str({Unit, X}) when (Unit==bytes orelse Unit==time_ms) andalso is_list(X) ->
+ try list_to_integer(X) of
+ B -> to_str({Unit,B})
+ catch error:badarg -> X
+ end;
to_str({bytes, B}) ->
KB = B div 1024,
MB = KB div 1024,
GB = MB div 1024,
if
- GB > 10 -> integer_to_list(GB) ++ " gB";
- MB > 10 -> integer_to_list(MB) ++ " mB";
+ GB > 10 -> integer_to_list(GB) ++ " GB";
+ MB > 10 -> integer_to_list(MB) ++ " MB";
KB > 0 -> integer_to_list(KB) ++ " kB";
- true -> integer_to_list(B) ++ " B "
+ true -> integer_to_list(B) ++ " B"
end;
to_str({time_ms, MS}) ->
S = MS div 1000,
@@ -207,27 +276,23 @@ create_menus(Menus, MenuBar, Type) ->
create_menu(Tag, Ms, Index, MenuBar, Type)
end,
[{First, _}|_] = Menus,
- OnMac = os:type() =:= {unix, darwin},
Index = if Type =:= default -> 0;
First =:= "File" -> 0;
- OnMac -> 0;
true -> 1
end,
wx:foldl(Add, Index, Menus),
ok.
create_menu("File", MenuItems, Index, MenuBar, Type) ->
- OnMac = os:type() =:= {unix, darwin},
- if OnMac, Type =:= default ->
- Index;
- not OnMac, Type =:= plugin ->
+ if
+ Type =:= plugin ->
MenuId = wxMenuBar:findMenu(MenuBar, "File"),
Menu = wxMenuBar:getMenu(MenuBar, MenuId),
lists:foldl(fun(Record, N) ->
create_menu_item(Record, Menu, N)
end, 0, MenuItems),
Index + 1;
- true ->
+ true ->
Menu = wxMenu:new(),
lists:foldl(fun(Record, N) ->
create_menu_item(Record, Menu, N)
@@ -279,36 +344,188 @@ create_attrs() ->
#attrs{even = wxListItemAttr:new(Text, ?BG_EVEN, Font),
odd = wxListItemAttr:new(Text, ?BG_ODD, Font),
deleted = wxListItemAttr:new(?FG_DELETED, ?BG_DELETED, Font),
- changed = wxListItemAttr:new(Text, ?BG_CHANGED, Font),
+ changed_even = wxListItemAttr:new(Text, mix(?BG_CHANGED,?BG_EVEN), Font),
+ changed_odd = wxListItemAttr:new(Text, mix(?BG_CHANGED,?BG_ODD), Font),
+ new_even = wxListItemAttr:new(Text, mix(?BG_NEW,?BG_EVEN), Font),
+ new_odd = wxListItemAttr:new(Text, mix(?BG_NEW, ?BG_ODD), Font),
searched = wxListItemAttr:new(Text, ?BG_SEARCHED, Font)
}.
+mix(RGB,_) -> RGB.
+
+%% mix({R,G,B},{MR,MG,MB}) ->
+%% {trunc(R*MR/255), trunc(G*MG/255), trunc(B*MB/255)}.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
get_box_info({Title, List}) when is_list(List) -> {Title, ?wxALIGN_LEFT, List};
get_box_info({Title, left, List}) -> {Title, ?wxALIGN_LEFT, List};
get_box_info({Title, right, List}) -> {Title, ?wxALIGN_RIGHT, List}.
+add_box(Panel, OuterBox, Cursor, Title, Proportion, {Format, List}) ->
+ Box = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label, Title}]),
+ Scroll = wxScrolledWindow:new(Panel),
+ wxScrolledWindow:enableScrolling(Scroll,true,true),
+ wxScrolledWindow:setScrollbars(Scroll,1,1,0,0),
+ ScrollSizer = wxBoxSizer:new(?wxVERTICAL),
+ wxScrolledWindow:setSizer(Scroll, ScrollSizer),
+ BC = wxWindow:getBackgroundColour(Panel),
+ wxWindow:setBackgroundColour(Scroll,BC),
+ add_entries(Format, List, Scroll, ScrollSizer, BC, Cursor),
+ wxSizer:add(Box,Scroll,[{proportion,1},{flag,?wxEXPAND}]),
+ wxSizer:add(OuterBox,Box,[{proportion,Proportion},{flag,?wxEXPAND}]),
+ {Scroll,ScrollSizer,length(List)}.
+
+add_entries(click, List, Scroll, ScrollSizer, BC, Cursor) ->
+ Add = fun(Link) ->
+ TC = link_entry(Scroll, Link, Cursor),
+ wxWindow:setBackgroundColour(TC,BC),
+ wxSizer:add(ScrollSizer,TC,[{flag,?wxEXPAND}])
+ end,
+ [Add(Link) || Link <- List];
+add_entries(plain, List, Scroll, ScrollSizer, _, _) ->
+ Add = fun(String) ->
+ TC = wxTextCtrl:new(Scroll, ?wxID_ANY,
+ [{style,?SINGLE_LINE_STYLE},
+ {value,String}]),
+ wxSizer:add(ScrollSizer,TC,[{flag,?wxEXPAND}])
+ end,
+ [Add(String) || String <- List].
+
+
+create_box(_Panel, {scroll_boxes,[]}) ->
+ undefined;
+create_box(Panel, {scroll_boxes,Data}) ->
+ OuterBox = wxBoxSizer:new(?wxHORIZONTAL),
+ Cursor = wxCursor:new(?wxCURSOR_HAND),
+ AddBox = fun({Title,Proportion,Format = {_,_}}) ->
+ add_box(Panel, OuterBox, Cursor, Title, Proportion, Format);
+ ({Title, Format = {_,_}}) ->
+ add_box(Panel, OuterBox, Cursor, Title, 1, Format);
+ (undefined) ->
+ undefined
+ end,
+ Boxes = [AddBox(Entry) || Entry <- Data],
+ wxCursor:destroy(Cursor),
+
+ MaxL = lists:foldl(fun({_,_,L},Max) when L>Max -> L;
+ (_,Max) -> Max
+ end,
+ 0,
+ Boxes),
+
+ Dummy = wxTextCtrl:new(Panel, ?wxID_ANY, [{style, ?SINGLE_LINE_STYLE}]),
+ {_,H} = wxWindow:getSize(Dummy),
+ wxTextCtrl:destroy(Dummy),
+
+ MaxH = if MaxL > 8 -> 8*H;
+ true -> MaxL*H
+ end,
+ [wxWindow:setMinSize(B,{0,MaxH}) || {B,_,_} <- Boxes],
+ wxSizer:layout(OuterBox),
+ {OuterBox, Boxes};
+
create_box(Panel, Data) ->
{Title, Align, Info} = get_box_info(Data),
- Box = wxStaticBoxSizer:new(?wxHORIZONTAL, Panel, [{label, Title}]),
- Left = wxBoxSizer:new(?wxVERTICAL),
- Right = wxBoxSizer:new(?wxVERTICAL),
- Expand = [{flag, ?wxEXPAND}],
- ExpAlign = [{flag, Align}],
- AddRow = fun({Desc, Value}) ->
- wxSizer:add(Left, wxStaticText:new(Panel, ?wxID_ANY, Desc ++ ":"), Expand),
- Field = wxStaticText:new(Panel, ?wxID_ANY, to_str(Value)),
- wxSizer:add(Right, Field, ExpAlign),
- Field
+ Box = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label, Title}]),
+ LeftSize = get_max_size(Panel,Info),
+ LeftProportion = [{proportion,0}],
+ RightProportion = [{proportion,1}, {flag, Align bor ?wxEXPAND}],
+ AddRow = fun({Desc0, Value0}) ->
+ Desc = Desc0++":",
+ Line = wxBoxSizer:new(?wxHORIZONTAL),
+ wxSizer:add(Line,
+ wxTextCtrl:new(Panel, ?wxID_ANY,
+ [{style,?SINGLE_LINE_STYLE},
+ {size,LeftSize},
+ {value,Desc}]),
+ LeftProportion),
+ Field =
+ case Value0 of
+ {click,"unknown"} ->
+ wxTextCtrl:new(Panel, ?wxID_ANY,
+ [{style,?SINGLE_LINE_STYLE},
+ {value,"unknown"}]);
+ {click,Value} ->
+ link_entry(Panel,Value);
+ _ ->
+ Value = to_str(Value0),
+ TCtrl = wxTextCtrl:new(Panel, ?wxID_ANY,
+ [{style,?SINGLE_LINE_STYLE},
+ {value,Value}]),
+ length(Value) > 50 andalso
+ wxWindow:setToolTip(TCtrl,wxToolTip:new(Value)),
+ TCtrl
+ end,
+ wxSizer:add(Line, 10, 0), % space of size 10 horisontally
+ wxSizer:add(Line, Field, RightProportion),
+
+ {_,H,_,_} = wxTextCtrl:getTextExtent(Field,"Wj"),
+ wxTextCtrl:setMinSize(Field,{0,H}),
+
+ wxSizer:add(Box, Line, [{proportion,0},{flag,?wxEXPAND}]),
+ Field;
+ (undefined) ->
+ undefined
end,
InfoFields = [AddRow(Entry) || Entry <- Info],
- wxSizer:add(Box, Left),
- wxSizer:addSpacer(Box, 10),
- wxSizer:add(Box, Right),
- wxSizer:addSpacer(Box, 30),
{Box, InfoFields}.
+link_entry(Panel, Link) ->
+ Cursor = wxCursor:new(?wxCURSOR_HAND),
+ TC = link_entry2(Panel, to_link(Link), Cursor),
+ wxCursor:destroy(Cursor),
+ TC.
+link_entry(Panel, Link, Cursor) ->
+ link_entry2(Panel, to_link(Link), Cursor).
+
+link_entry2(Panel,{Target,Str},Cursor) ->
+ TC = wxTextCtrl:new(Panel, ?wxID_ANY, [{style, ?SINGLE_LINE_STYLE}]),
+ wxTextCtrl:setForegroundColour(TC,?wxBLUE),
+ wxTextCtrl:appendText(TC, Str),
+ wxWindow:setCursor(TC, Cursor),
+ wxTextCtrl:connect(TC, left_down, [{userData,Target}]),
+ wxTextCtrl:connect(TC, enter_window),
+ wxTextCtrl:connect(TC, leave_window),
+ ToolTip = wxToolTip:new("Click to see properties for " ++ Str),
+ wxWindow:setToolTip(TC, ToolTip),
+ TC.
+
+to_link(Tuple = {_Target, _Str}) ->
+ Tuple;
+to_link(Target0) ->
+ Target=to_str(Target0),
+ {Target, Target}.
+
+html_window(Panel) ->
+ Win = wxHtmlWindow:new(Panel, [{style, ?wxHW_SCROLLBAR_AUTO}]),
+ %% wxHtmlWindow:setFonts(Win, "", FixedName),
+ wxHtmlWindow:connect(Win,command_html_link_clicked),
+ Win.
+
+html_window(Panel, Html) ->
+ Win = html_window(Panel),
+ wxHtmlWindow:setPage(Win, Html),
+ Win.
+
+get_max_size(Panel,Info) ->
+ Txt = wxTextCtrl:new(Panel, ?wxID_ANY, []),
+ Size = get_max_size(Txt,Info,0,0),
+ wxTextCtrl:destroy(Txt),
+ Size.
+
+get_max_size(Txt,[{Desc,_}|Info],MaxX,MaxY) ->
+ {X,Y,_,_} = wxTextCtrl:getTextExtent(Txt,Desc++":"),
+ if X>MaxX ->
+ get_max_size(Txt,Info,X,Y);
+ true ->
+ get_max_size(Txt,Info,MaxX,MaxY)
+ end;
+get_max_size(Txt,[undefined|Info],MaxX,MaxY) ->
+ get_max_size(Txt,Info,MaxX,MaxY);
+get_max_size(_,[],X,_Y) ->
+ {X+2,-1}.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set_listctrl_col_size(LCtrl, Total) ->
wx:batch(fun() -> calc_last(LCtrl, Total) end).
@@ -326,10 +543,7 @@ calc_last(LCtrl, _Total) ->
scroll_size(LCtrl) ->
case os:type() of
{win32, nt} -> 0;
- {unix, darwin} ->
- %% I can't figure out is there is a visible scrollbar
- %% Always make room for it
- wxSystemSettings:getMetric(?wxSYS_VSCROLL_X);
+ {unix, darwin} -> 0; %% Always 0 in wxWidgets-3.0
_ ->
case wxWindow:hasScrollbar(LCtrl, ?wxVERTICAL) of
true -> wxSystemSettings:getMetric(?wxSYS_VSCROLL_X);
@@ -430,3 +644,102 @@ ensure_last_is_dot(String) ->
false ->
String ++ "."
end.
+
+%%%-----------------------------------------------------------------
+%%% Status bar for warnings
+create_status_bar(Panel) ->
+ StatusStyle = ?wxTE_MULTILINE bor ?wxTE_READONLY bor ?wxTE_RICH2,
+ Red = wxTextAttr:new(?wxRED),
+
+ %% wxTextCtrl:setSize/3 does not work, so we must create a dummy
+ %% text ctrl first to get the size of the text, then set it when
+ %% creating the real text ctrl.
+ Dummy = wxTextCtrl:new(Panel, ?wxID_ANY,[{style,StatusStyle}]),
+ {X,Y,_,_} = wxTextCtrl:getTextExtent(Dummy,"WARNING"),
+ wxTextCtrl:destroy(Dummy),
+ StatusBar = wxTextCtrl:new(Panel, ?wxID_ANY,
+ [{style,StatusStyle},
+ {size,{X,Y+2}}]), % Y+2 to avoid scrollbar
+ wxTextCtrl:setDefaultStyle(StatusBar,Red),
+ wxTextAttr:destroy(Red),
+ StatusBar.
+
+%%%-----------------------------------------------------------------
+%%% Progress dialog
+-define(progress_handler,cdv_progress_handler).
+display_progress_dialog(Title,Str) ->
+ Caller = self(),
+ Env = wx:get_env(),
+ spawn_link(fun() ->
+ progress_handler(Caller,Env,Title,Str)
+ end),
+ ok.
+
+wait_for_progress() ->
+ receive
+ continue ->
+ ok;
+ Error ->
+ Error
+ end.
+
+destroy_progress_dialog() ->
+ report_progress(finish).
+
+report_progress(Progress) ->
+ case whereis(?progress_handler) of
+ Pid when is_pid(Pid) ->
+ Pid ! {progress,Progress},
+ ok;
+ _ ->
+ ok
+ end.
+
+progress_handler(Caller,Env,Title,Str) ->
+ register(?progress_handler,self()),
+ wx:set_env(Env),
+ PD = progress_dialog(Env,Title,Str),
+ progress_loop(Title,PD,Caller).
+progress_loop(Title,PD,Caller) ->
+ receive
+ {progress,{ok,done}} -> % to make wait_for_progress/0 return
+ Caller ! continue,
+ progress_loop(Title,PD,Caller);
+ {progress,{ok,Percent}} when is_integer(Percent) ->
+ update_progress(PD,Percent),
+ progress_loop(Title,PD,Caller);
+ {progress,{ok,Msg}} ->
+ update_progress_text(PD,Msg),
+ progress_loop(Title,PD,Caller);
+ {progress,{error, Reason}} ->
+ finish_progress(PD),
+ FailMsg =
+ if is_list(Reason) -> Reason;
+ true -> file:format_error(Reason)
+ end,
+ display_info_dialog("Crashdump Viewer Error",FailMsg),
+ Caller ! error,
+ unregister(?progress_handler),
+ unlink(Caller);
+ {progress,finish} ->
+ finish_progress(PD),
+ unregister(?progress_handler),
+ unlink(Caller)
+ end.
+
+progress_dialog(_Env,Title,Str) ->
+ PD = wxProgressDialog:new(Title,Str,
+ [{maximum,101},
+ {style,
+ ?wxPD_APP_MODAL bor
+ ?wxPD_SMOOTH bor
+ ?wxPD_AUTO_HIDE}]),
+ wxProgressDialog:setMinSize(PD,{200,-1}),
+ PD.
+
+update_progress(PD,Value) ->
+ wxProgressDialog:update(PD,Value).
+update_progress_text(PD,Text) ->
+ wxProgressDialog:update(PD,0,[{newmsg,Text}]).
+finish_progress(PD) ->
+ wxProgressDialog:destroy(PD).
diff --git a/lib/observer/src/observer_perf_wx.erl b/lib/observer/src/observer_perf_wx.erl
index 54c98f3ba3..8173349ed7 100644
--- a/lib/observer/src/observer_perf_wx.erl
+++ b/lib/observer/src/observer_perf_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-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
@@ -283,7 +283,12 @@ mem_types() ->
lmax([]) -> 0;
lmax(List) ->
- lists:max([lists:max(tuple_to_list(T)) || T <- List]).
+ Max = [lists:max(tuple_to_list(T)) || T <- List,
+ tuple_size(T) > 0],
+ case Max of
+ [] -> 0;
+ _ -> lists:max(Max)
+ end.
calc_delta([{Id, WN, TN}|Ss], [{Id, WP, TP}|Ps]) ->
[100*(WN-WP) div (TN-TP)|calc_delta(Ss, Ps)];
@@ -301,25 +306,23 @@ draw(Offset, Id, DC, Panel, Paint=#paint{pens=Pens, small=Small}, Data, Active)
{X0,Y0,WS,HS} = draw_borders(Id, NoGraphs, DC, Size, Max, Paint),
Last = 60*WS+X0-1,
Start = max(61-Len, 0)*WS+X0 - Offset*WS,
- case Hs of
- [] -> ignore;
- [_] -> ignore;
- _ ->
+ Samples = length(Hs),
+ case Active andalso Samples > 1 andalso NoGraphs > 0 of
+ true ->
Draw = fun(N) ->
Lines = make_lines(Hs, Start, N, {X0,Max*HS,Last}, Y0, WS, HS),
setPen(DC, element(1+ ((N-1) rem tuple_size(Pens)), Pens)),
strokeLines(DC, Lines),
N+1
end,
- [Draw(I) || I <- lists:seq(NoGraphs, 1, -1)]
- end,
- case Active of
+ [Draw(I) || I <- lists:seq(NoGraphs, 1, -1)];
false ->
- NotActive = "Service not available",
+ Info = case Active andalso Samples =< 1 of
+ true -> "Waiting on data";
+ false -> "Information not available"
+ end,
setFont(DC, Small, {0,0,0}),
- drawText(DC, NotActive, X0 + 100, element(2,Size) div 2);
- true ->
- ignore
+ drawText(DC, Info, X0 + 100, element(2,Size) div 2)
end,
ok.
diff --git a/lib/observer/src/observer_pro_wx.erl b/lib/observer/src/observer_pro_wx.erl
index 9aaf648ea2..0be8c18893 100644
--- a/lib/observer/src/observer_pro_wx.erl
+++ b/lib/observer/src/observer_pro_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-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
@@ -66,6 +66,7 @@
-record(holder, {parent,
info,
+ etop,
sort=#sort{},
accum=[],
attrs,
@@ -191,20 +192,16 @@ dump_to_file(Parent, FileName, Holder) ->
start_procinfo(undefined, _Frame, Opened) ->
Opened;
start_procinfo(Pid, Frame, Opened) ->
- %% This code doesn't work until we collect which windows have been
- %% closed maybe it should moved to observer_wx.erl
- %% and add a global menu which remembers windows.
- %% case lists:keyfind(Pid, 1, Opened) of
- %% false ->
- case observer_procinfo:start(Pid, Frame, self()) of
- {error, _} -> Opened;
- PI -> [{Pid, PI} | Opened]
+ case lists:keyfind(Pid, 1, Opened) of
+ false ->
+ case observer_procinfo:start(Pid, Frame, self()) of
+ {error, _} -> Opened;
+ PI -> [{Pid, PI} | Opened]
+ end;
+ {_, PI} ->
+ wxFrame:raise(PI),
+ Opened
end.
- %%;
- %% {_, PI} ->
- %% wxFrame:raise(PI),
- %% Opened
- %% end.
call(Holder, What) ->
Ref = erlang:monitor(process, Holder),
@@ -235,9 +232,14 @@ handle_info(refresh_interval, #state{holder=Holder}=State) ->
handle_info({procinfo_menu_closed, Pid},
#state{procinfo_menu_pids=Opened}=State) ->
- NewPids = lists:delete(Pid, Opened),
+ NewPids = lists:keydelete(Pid, 1, Opened),
{noreply, State#state{procinfo_menu_pids=NewPids}};
+handle_info({procinfo_open, Pid},
+ #state{panel=Panel, procinfo_menu_pids=Opened}=State) ->
+ Opened2 = start_procinfo(Pid, Panel, Opened),
+ {noreply, State#state{procinfo_menu_pids=Opened2}};
+
handle_info({active, Node},
#state{holder=Holder, timer=Timer, parent=Parent}=State) ->
create_pro_menu(Parent, Holder),
@@ -378,8 +380,7 @@ handle_event(#wx{event=#wxList{type=command_list_col_click, col=Col}},
handle_event(#wx{event=#wxList{type=command_list_item_activated}},
#state{panel=Panel, procinfo_menu_pids=Opened,
- sel={_, [Pid|_]}}=State)
- when Pid =/= undefined ->
+ sel={_, [Pid|_]}}=State) ->
Opened2 = start_procinfo(Pid, Panel, Opened),
{noreply, State#state{procinfo_menu_pids=Opened2}};
@@ -435,13 +436,14 @@ set_focus([Old|_], [New|_], Grid) ->
init_table_holder(Parent, Attrs) ->
Backend = spawn_link(node(), observer_backend,etop_collect,[self()]),
table_holder(#holder{parent=Parent,
- info=#etop_info{procinfo=[]},
+ etop=#etop_info{},
+ info=array:new(),
node=node(),
backend_pid=Backend,
attrs=Attrs
}).
-table_holder(#holder{info=#etop_info{procinfo=Info}, attrs=Attrs,
+table_holder(#holder{info=Info, attrs=Attrs,
node=Node, backend_pid=Backend}=S0) ->
receive
{get_row, From, Row, Col} ->
@@ -488,7 +490,8 @@ table_holder(#holder{info=#etop_info{procinfo=Info}, attrs=Attrs,
From ! {self(), S0#holder.accum == true},
table_holder(S0);
{dump, Fd} ->
- etop_txt:do_update(Fd, S0#holder.info, #opts{node=Node}),
+ EtopInfo = (S0#holder.etop)#etop_info{procinfo=array:to_list(Info)},
+ etop_txt:do_update(Fd, EtopInfo, #opts{node=Node}),
file:close(Fd),
table_holder(S0);
stop ->
@@ -498,23 +501,23 @@ table_holder(#holder{info=#etop_info{procinfo=Info}, attrs=Attrs,
table_holder(S0)
end.
-change_sort(Col, S0=#holder{parent=Parent, info=EI=#etop_info{procinfo=Data}, sort=Sort0}) ->
+change_sort(Col, S0=#holder{parent=Parent, info=Data, sort=Sort0}) ->
{Sort, ProcInfo}=sort(Col, Sort0, Data),
- Parent ! {holder_updated, length(Data)},
- S0#holder{info=EI#etop_info{procinfo=ProcInfo}, sort=Sort}.
+ Parent ! {holder_updated, array:size(Data)},
+ S0#holder{info=ProcInfo, sort=Sort}.
change_accum(true, S0) ->
S0#holder{accum=true};
-change_accum(false, S0=#holder{info=#etop_info{procinfo=Info}}) ->
+change_accum(false, S0=#holder{info=Info}) ->
self() ! refresh,
- S0#holder{accum=lists:sort(Info)}.
+ S0#holder{accum=lists:sort(array:to_list(Info))}.
handle_update(EI=#etop_info{procinfo=ProcInfo0},
S0=#holder{parent=Parent, sort=Sort=#sort{sort_key=KeyField}}) ->
{ProcInfo1, S1} = accum(ProcInfo0, S0),
{_SO, ProcInfo} = sort(KeyField, Sort#sort{sort_key=undefined}, ProcInfo1),
- Parent ! {holder_updated, length(ProcInfo)},
- S1#holder{info=EI#etop_info{procinfo=ProcInfo}}.
+ Parent ! {holder_updated, array:size(ProcInfo)},
+ S1#holder{info=ProcInfo, etop=EI#etop_info{procinfo=[]}}.
accum(ProcInfo, State=#holder{accum=true}) ->
{ProcInfo, State};
@@ -532,12 +535,18 @@ accum2([PI|PIs], Old, Acc) ->
accum2(PIs, Old, [PI|Acc]);
accum2([], _, Acc) -> Acc.
+sort(Col, Opt, Table)
+ when not is_list(Table) ->
+ sort(Col,Opt,array:to_list(Table));
sort(Col, Opt=#sort{sort_key=Col, sort_incr=Bool}, Table) ->
- {Opt#sort{sort_incr=not Bool}, lists:reverse(Table)};
+ {Opt#sort{sort_incr=not Bool},
+ array:from_list(lists:reverse(Table))};
sort(Col, S=#sort{sort_incr=true}, Table) ->
- {S#sort{sort_key=Col}, lists:keysort(col_to_element(Col), Table)};
+ {S#sort{sort_key=Col},
+ array:from_list(lists:keysort(col_to_element(Col), Table))};
sort(Col, S=#sort{sort_incr=false}, Table) ->
- {S#sort{sort_key=Col}, lists:reverse(lists:keysort(col_to_element(Col), Table))}.
+ {S#sort{sort_key=Col},
+ array:from_list(lists:reverse(lists:keysort(col_to_element(Col), Table)))}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -552,40 +561,50 @@ col_to_element(?COL_FUN) -> #etop_proc_info.cf;
col_to_element(?COL_MSG) -> #etop_proc_info.mq.
get_pids(From, Indices, ProcInfo) ->
- Processes = [(lists:nth(I+1, ProcInfo))#etop_proc_info.pid || I <- Indices],
+ Processes = [(array:get(I, ProcInfo))#etop_proc_info.pid || I <- Indices],
From ! {self(), Processes}.
get_name_or_pid(From, Indices, ProcInfo) ->
Get = fun(#etop_proc_info{name=Name}) when is_atom(Name) -> Name;
(#etop_proc_info{pid=Pid}) -> Pid
end,
- Processes = [Get(lists:nth(I+1, ProcInfo)) || I <- Indices],
+ Processes = [Get(array:get(I, ProcInfo)) || I <- Indices],
From ! {self(), Processes}.
-
get_row(From, Row, pid, Info) ->
Pid = case Row =:= -1 of
true -> {error, undefined};
- false -> {ok, get_procinfo_data(?COL_PID, lists:nth(Row+1, Info))}
+ false -> {ok, get_procinfo_data(?COL_PID, array:get(Row, Info))}
end,
From ! {self(), Pid};
get_row(From, Row, Col, Info) ->
- Data = case Row+1 > length(Info) of
+ Data = case Row > array:size(Info) of
true ->
"";
false ->
- ProcInfo = lists:nth(Row+1, Info),
+ ProcInfo = array:get(Row, Info),
get_procinfo_data(Col, ProcInfo)
end,
From ! {self(), observer_lib:to_str(Data)}.
get_rows_from_pids(From, Pids0, Info) ->
- Res = lists:foldl(fun(Pid, Data = {Ids, Pids}) ->
- case index(Pid, Info, 0) of
- false -> Data;
- Index -> {[Index|Ids], [Pid|Pids]}
- end
- end, {[],[]}, Pids0),
+ Search = fun(Idx, #etop_proc_info{pid=Pid}, Acc0={Pick0, {Idxs, Pids}}) ->
+ case ordsets:is_element(Pid, Pick0) of
+ true ->
+ Acc = {[Idx|Idxs],[Pid|Pids]},
+ Pick = ordsets:del_element(Pid, Pick0),
+ case Pick =:= [] of
+ true -> throw(Acc);
+ false -> {Pick, Acc}
+ end;
+ false -> Acc0
+ end
+ end,
+ Res = try
+ {_, R} = array:foldl(Search, {ordsets:from_list(Pids0), {[],[]}}, Info),
+ R
+ catch R0 -> R0
+ end,
From ! {self(), Res}.
get_attr(From, Row, Attrs) ->
@@ -594,7 +613,3 @@ get_attr(From, Row, Attrs) ->
false -> Attrs#attrs.odd
end,
From ! {self(), Attribute}.
-
-index(Pid, [#etop_proc_info{pid=Pid}|_], Index) -> Index;
-index(Pid, [_|PI], Index) -> index(Pid, PI, Index+1);
-index(_, _, _) -> false.
diff --git a/lib/observer/src/observer_procinfo.erl b/lib/observer/src/observer_procinfo.erl
index 98d0403139..988e04993c 100644
--- a/lib/observer/src/observer_procinfo.erl
+++ b/lib/observer/src/observer_procinfo.erl
@@ -35,7 +35,9 @@
-record(state, {parent,
frame,
pid,
- pages=[]
+ pages=[],
+ expand_table,
+ expand_wins=[]
}).
-record(worker, {panel, callback}).
@@ -47,6 +49,7 @@ start(Process, ParentFrame, Parent) ->
init([Pid, ParentFrame, Parent]) ->
try
+ Table = ets:new(observer_expand,[set,public]),
Title=case observer_wx:try_rpc(node(Pid), erlang, process_info, [Pid, registered_name]) of
[] -> io_lib:format("~p",[Pid]);
{registered_name, Registered} -> io_lib:format("~p (~p)",[Registered, Pid]);
@@ -60,11 +63,11 @@ init([Pid, ParentFrame, Parent]) ->
Notebook = wxNotebook:new(Frame, ?ID_NOTEBOOK, [{style, ?wxBK_DEFAULT}]),
- ProcessPage = init_panel(Notebook, "Process Information", Pid, fun init_process_page/2),
- MessagePage = init_panel(Notebook, "Messages", Pid, fun init_message_page/2),
- DictPage = init_panel(Notebook, "Dictionary", Pid, fun init_dict_page/2),
- StackPage = init_panel(Notebook, "Stack Trace", Pid, fun init_stack_page/2),
- StatePage = init_panel(Notebook, "State", Pid, fun init_state_page/2),
+ ProcessPage = init_panel(Notebook, "Process Information", [Pid], fun init_process_page/2),
+ MessagePage = init_panel(Notebook, "Messages", [Pid,Table], fun init_message_page/3),
+ DictPage = init_panel(Notebook, "Dictionary", [Pid,Table], fun init_dict_page/3),
+ StackPage = init_panel(Notebook, "Stack Trace", [Pid], fun init_stack_page/2),
+ StatePage = init_panel(Notebook, "State", [Pid,Table], fun init_state_page/3),
wxFrame:connect(Frame, close_window),
wxMenu:connect(Frame, command_menu_selected),
@@ -73,7 +76,8 @@ init([Pid, ParentFrame, Parent]) ->
{Frame, #state{parent=Parent,
pid=Pid,
frame=Frame,
- pages=[ProcessPage,MessagePage,DictPage,StackPage,StatePage]
+ pages=[ProcessPage,MessagePage,DictPage,StackPage,StatePage],
+ expand_table=Table
}}
catch error:{badrpc, _} ->
observer_wx:return_to_localnode(ParentFrame, node(Pid)),
@@ -83,10 +87,10 @@ init([Pid, ParentFrame, Parent]) ->
{stop, normal}
end.
-init_panel(Notebook, Str, Pid, Fun) ->
+init_panel(Notebook, Str, FunArgs, Fun) ->
Panel = wxPanel:new(Notebook),
Sizer = wxBoxSizer:new(?wxHORIZONTAL),
- {Window,Callback} = Fun(Panel, Pid),
+ {Window,Callback} = apply(Fun,[Panel|FunArgs]),
wxSizer:add(Sizer, Window, [{flag, ?wxEXPAND bor ?wxALL}, {proportion, 1}, {border, 5}]),
wxPanel:setSizer(Panel, Sizer),
true = wxNotebook:addPage(Notebook, Panel, Str),
@@ -99,13 +103,58 @@ handle_event(#wx{event=#wxClose{type=close_window}}, State) ->
handle_event(#wx{id=?wxID_CLOSE, event=#wxCommand{type=command_menu_selected}}, State) ->
{stop, normal, State};
-handle_event(#wx{id=?REFRESH}, #state{frame=Frame, pid=Pid, pages=Pages}=State) ->
+handle_event(#wx{id=?REFRESH}, #state{frame=Frame, pid=Pid, pages=Pages, expand_table=T}=State) ->
+ ets:delete_all_objects(T),
try [(W#worker.callback)() || W <- Pages]
catch process_undefined ->
wxFrame:setTitle(Frame, io_lib:format("*DEAD* ~p",[Pid]))
end,
{noreply, State};
+handle_event(#wx{event=#wxMouse{type=left_down}, userData=TargetPid}, State) ->
+ observer ! {open_link, TargetPid},
+ {noreply, State};
+
+handle_event(#wx{obj=Obj, event=#wxMouse{type=enter_window}}, State) ->
+ wxTextCtrl:setForegroundColour(Obj,{0,0,100,255}),
+ {noreply, State};
+
+handle_event(#wx{obj=Obj, event=#wxMouse{type=leave_window}}, State) ->
+ wxTextCtrl:setForegroundColour(Obj,?wxBLUE),
+ {noreply, State};
+
+handle_event(#wx{event=#wxHtmlLink{linkInfo=#wxHtmlLinkInfo{href=Href}}},
+ #state{frame=Frame,expand_table=T,expand_wins=Opened0}=State) ->
+ {Type, Rest} = case Href of
+ "#Term?"++Keys -> {cdv_term_cb, Keys};
+ "#OBSBinary?"++Keys -> {cdv_bin_cb, Keys};
+ _ -> {other, Href}
+ end,
+ case Type of
+ other ->
+ observer ! {open_link, Href},
+ {noreply, State};
+ Callback ->
+ [{"key1",Key1},{"key2",Key2},{"key3",Key3}] = httpd:parse_query(Rest),
+ Id = {observer, {T,{list_to_integer(Key1),
+ list_to_integer(Key2),
+ list_to_integer(Key3)}}},
+ Opened =
+ case lists:keyfind(Id,1,Opened0) of
+ false ->
+ Win = cdv_detail_wx:start_link(Id,Frame,Callback),
+ [{Id,Win}|Opened0];
+ {_,Win} ->
+ wxFrame:raise(Win),
+ Opened0
+ end,
+ {noreply,State#state{expand_wins=Opened}}
+ end;
+
+handle_event(#wx{event=#wxHtmlLink{linkInfo=#wxHtmlLinkInfo{href=Info}}}, State) ->
+ observer ! {open_link, Info},
+ {noreply, State};
+
handle_event(Event, _State) ->
error({unhandled_event, Event}).
@@ -116,10 +165,15 @@ handle_info(_Info, State) ->
handle_call(Call, From, _State) ->
error({unhandled_call, Call, From}).
+handle_cast({detail_win_closed,Id}, #state{expand_wins=Opened0}=State) ->
+ Opened = lists:keydelete(Id,1,Opened0),
+ {noreply,State#state{expand_wins=Opened}};
+
handle_cast(Cast, _State) ->
error({unhandled_cast, Cast}).
-terminate(_Reason, #state{parent=Parent,pid=Pid,frame=Frame}) ->
+terminate(_Reason, #state{parent=Parent,pid=Pid,frame=Frame,expand_table=T}) ->
+ T=/=undefined andalso ets:delete(T),
Parent ! {procinfo_menu_closed, Pid},
case Frame of
undefined -> ok;
@@ -139,58 +193,37 @@ init_process_page(Panel, Pid) ->
observer_lib:update_info(UpFields, Fields)
end}.
-init_text_page(Parent) ->
- Style = ?wxTE_MULTILINE bor ?wxTE_RICH2 bor ?wxTE_READONLY,
- Text = wxTextCtrl:new(Parent, ?wxID_ANY, [{style, Style}]),
- Font = observer_wx:get_attrib({font, fixed}),
- Attr = wxTextAttr:new(?wxBLACK, [{font, Font}]),
- true = wxTextCtrl:setDefaultStyle(Text, Attr),
- wxTextAttr:destroy(Attr),
- Text.
-
-init_message_page(Parent, Pid) ->
- Text = init_text_page(Parent),
- Format = fun(Message, Number) ->
- {io_lib:format("~-4.w ~p~n", [Number, Message]),
- Number+1}
- end,
+
+init_message_page(Parent, Pid, Table) ->
+ Win = observer_lib:html_window(Parent),
Update = fun() ->
case observer_wx:try_rpc(node(Pid), erlang, process_info,
[Pid, messages])
of
- {messages,RawMessages} ->
- {Messages,_} = lists:mapfoldl(Format, 1, RawMessages),
- Last = wxTextCtrl:getLastPosition(Text),
- wxTextCtrl:remove(Text, 0, Last),
- case Messages =:= [] of
- true ->
- wxTextCtrl:writeText(Text, "No messages");
- false ->
- wxTextCtrl:writeText(Text, Messages)
- end;
+ {messages, Messages} ->
+ Html = observer_html_lib:expandable_term("Message Queue", Messages, Table),
+ wxHtmlWindow:setPage(Win, Html);
_ ->
throw(process_undefined)
end
end,
Update(),
- {Text, Update}.
+ {Win, Update}.
-init_dict_page(Parent, Pid) ->
- Text = init_text_page(Parent),
+init_dict_page(Parent, Pid, Table) ->
+ Win = observer_lib:html_window(Parent),
Update = fun() ->
case observer_wx:try_rpc(node(Pid), erlang, process_info, [Pid, dictionary])
of
- {dictionary,RawDict} ->
- Dict = [io_lib:format("~-20.w ~p~n", [K, V]) || {K, V} <- RawDict],
- Last = wxTextCtrl:getLastPosition(Text),
- wxTextCtrl:remove(Text, 0, Last),
- wxTextCtrl:writeText(Text, Dict);
+ {dictionary,Dict} ->
+ Html = observer_html_lib:expandable_term("Dictionary", Dict, Table),
+ wxHtmlWindow:setPage(Win, Html);
_ ->
throw(process_undefined)
end
end,
Update(),
- {Text, Update}.
+ {Win, Update}.
init_stack_page(Parent, Pid) ->
LCtrl = wxListCtrl:new(Parent, [{style, ?wxLC_REPORT bor ?wxLC_HRULES}]),
@@ -236,58 +269,58 @@ init_stack_page(Parent, Pid) ->
Update(),
{LCtrl, Update}.
-
-init_state_page(Parent, Pid) ->
- Text = init_text_page(Parent),
+init_state_page(Parent, Pid, Table) ->
+ Win = observer_lib:html_window(Parent),
Update = fun() ->
- %% First, test if sys:get_status/2 have any chance to return an answer
- case rpc:call(node(Pid), proc_lib, translate_initial_call, [Pid])
- of
- %% Not a gen process
- {proc_lib,init_p,5} -> Misc = [{"Information", "Not available"}];
- %% May be a gen process
- {M, _F, _A} ->
- %% Get the behavio(u)r
- I = rpc:call(node(Pid), M, module_info, [attributes]),
- case lists:keyfind(behaviour, 1, I) of
- false -> case lists:keyfind(behavior, 1, I) of
- false -> B = undefined;
- {behavior, [B]} -> B
- end;
- {behaviour, [B]} -> B
- end,
- %% but not sure that system messages are treated by this process
- %% so using a rpc with a small timeout in order not to lag the display
- case rpc:call(node(Pid), sys, get_status, [Pid, 200])
- of
- {status, _, {module, _}, [_PDict, _SysState, _Parent, _Dbg,
- [Header,{data, First},{data, Second}]]} ->
- Misc = [{"Behaviour", B}] ++ [Header] ++ First ++ Second;
- {status, _, {module, _}, [_PDict, _SysState, _Parent, _Dbg,
- [Header,{data, First}, OtherFormat]]} ->
- Misc = [{"Behaviour", B}] ++ [Header] ++ First ++ [{"State",OtherFormat}];
- {status, _, {module, _}, [_PDict, _SysState, _Parent, _Dbg,
- OtherFormat]} ->
- %% Formatted status ?
- case lists:keyfind(format_status, 1, rpc:call(node(Pid), M, module_info, [exports])) of
- false -> Opt = {"Format", unknown};
- _ -> Opt = {"Format", overriden}
- end,
- Misc = [{"Behaviour", B}] ++ [Opt, {"State",OtherFormat}];
- {badrpc,{'EXIT',{timeout, _}}} ->
- Misc = [{"Information","Timed out"},
- {"Tip","system messages are probably not treated by this process"}]
- end;
- _ -> Misc=[], throw(process_undefined)
- end,
- Dict = [io_lib:format("~-20.s ~tp~n", [K, V]) || {K, V} <- Misc],
- Last = wxTextCtrl:getLastPosition(Text),
- wxTextCtrl:remove(Text, 0, Last),
- wxTextCtrl:writeText(Text, Dict)
+ StateInfo = fetch_state_info(Pid),
+ Html = observer_html_lib:expandable_term("ProcState", StateInfo, Table),
+ wxHtmlWindow:setPage(Win, Html)
end,
Update(),
- {Text, Update}.
+ {Win, Update}.
+
+fetch_state_info(Pid) ->
+ %% First, test if sys:get_status/2 have any chance to return an answer
+ case rpc:call(node(Pid), proc_lib, translate_initial_call, [Pid]) of
+ %% Not a gen process
+ {proc_lib,init_p,5} -> [];
+ %% May be a gen process
+ {M, _F, _A} -> fetch_state_info2(Pid, M);
+ _ -> throw(process_undefined)
+ end.
+fetch_state_info2(Pid, M) ->
+ %% Get the behavio(u)r
+ I = rpc:call(node(Pid), M, module_info, [attributes]),
+ case lists:keyfind(behaviour, 1, I) of
+ false -> case lists:keyfind(behavior, 1, I) of
+ false -> B = undefined;
+ {behavior, [B]} -> B
+ end;
+ {behaviour, [B]} -> B
+ end,
+ %% but not sure that system messages are treated by this process
+ %% so using a rpc with a small timeout in order not to lag the display
+ case rpc:call(node(Pid), sys, get_status, [Pid, 200])
+ of
+ {status, _, {module, _},
+ [_PDict, _SysState, _Parent, _Dbg,
+ [Header,{data, First},{data, Second}]]} ->
+ [{"Behaviour", B}, Header] ++ First ++ Second;
+ {status, _, {module, _},
+ [_PDict, _SysState, _Parent, _Dbg,
+ [Header,{data, First}, OtherFormat]]} ->
+ [{"Behaviour", B}, Header] ++ First ++ [{"State",OtherFormat}];
+ {status, _, {module, _},
+ [_PDict, _SysState, _Parent, _Dbg, OtherFormat]} ->
+ %% Formatted status ?
+ case lists:keyfind(format_status, 1, rpc:call(node(Pid), M, module_info, [exports])) of
+ false -> Opt = {"Format", unknown};
+ _ -> Opt = {"Format", overriden}
+ end,
+ [{"Behaviour", B}, Opt, {"State",OtherFormat}];
+ {badrpc,{'EXIT',{timeout, _}}} -> []
+ end.
create_menus(MenuBar) ->
Menus = [{"File", [#create_menu{id=?wxID_CLOSE, text="Close"}]},
@@ -301,6 +334,7 @@ process_info_fields(Pid) ->
{"Registered Name", registered_name},
{"Status", status},
{"Message Queue Len",message_queue_len},
+ {"Group Leader", {click, group_leader}},
{"Priority", priority},
{"Trap Exit", trap_exit},
{"Reductions", reductions},
@@ -311,11 +345,10 @@ process_info_fields(Pid) ->
{"Suspending", suspending},
{"Sequential Trace Token", sequential_trace_token},
{"Error Handler", error_handler}]},
- {"Connections",
- [{"Group Leader", group_leader},
- {"Links", links},
- {"Monitors", monitors},
- {"Monitored by", monitored_by}]},
+ {scroll_boxes,
+ [{"Links", {click, links}},
+ {"Monitors", {click, filter_monitor_info()}},
+ {"Monitored by", {click, monitored_by}}]},
{"Memory and Garbage Collection", right,
[{"Memory", {bytes, memory}},
{"Stack and Heaps", {bytes, total_heap_size}},
@@ -365,3 +398,9 @@ get_gc_info(Arg) ->
GC = proplists:get_value(garbage_collection, Data),
proplists:get_value(Arg, GC)
end.
+
+filter_monitor_info() ->
+ fun(Data) ->
+ Ms = proplists:get_value(monitors, Data),
+ [Pid || {process, Pid} <- Ms]
+ end.
diff --git a/lib/observer/src/observer_sys_wx.erl b/lib/observer/src/observer_sys_wx.erl
index 31800cf12a..f989f9cf97 100644
--- a/lib/observer/src/observer_sys_wx.erl
+++ b/lib/observer/src/observer_sys_wx.erl
@@ -60,10 +60,10 @@ init([Notebook, Parent]) ->
wxSizer:add(TopSizer, FPanel0, [{flag, ?wxEXPAND}, {proportion, 1}]),
wxSizer:add(TopSizer, FPanel1, [{flag, ?wxEXPAND}, {proportion, 1}]),
BorderFlags = ?wxLEFT bor ?wxRIGHT,
- MemoryInfo = create_mem_info(Panel, AllocInfo),
+ {MemPanel, MemoryInfo} = create_mem_info(Panel, AllocInfo),
wxSizer:add(Sizer, TopSizer, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
{proportion, 0}, {border, 5}]),
- wxSizer:add(Sizer, MemoryInfo, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
+ wxSizer:add(Sizer, MemPanel, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
{proportion, 1}, {border, 5}]),
wxPanel:setSizer(Panel, Sizer),
Timer = observer_lib:start_timer(10),
@@ -86,7 +86,9 @@ update_syspage(#sys_wx_state{node = Node, fields=Fields, sizer=Sizer, alloc=Allo
update_alloc(AllocCtrl, AllocInfo),
wxSizer:layout(Sizer).
-create_mem_info(Panel, Fields) ->
+create_mem_info(Parent, Fields) ->
+ Panel = wxPanel:new(Parent),
+ wxWindow:setBackgroundColour(Panel, {255,255,255}),
Style = ?wxLC_REPORT bor ?wxLC_SINGLE_SEL bor ?wxLC_HRULES bor ?wxLC_VRULES,
Grid = wxListCtrl:new(Panel, [{style, Style}]),
Li = wxListItem:new(),
@@ -103,7 +105,12 @@ create_mem_info(Panel, Fields) ->
lists:foldl(AddListEntry, 0, ListItems),
wxListItem:destroy(Li),
update_alloc(Grid, Fields),
- Grid.
+
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ wxSizer:add(Sizer, Grid, [{flag, ?wxEXPAND bor ?wxLEFT bor ?wxRIGHT},
+ {border, 5}, {proportion, 1}]),
+ wxWindow:setSizerAndFit(Panel, Sizer),
+ {Panel, Grid}.
update_alloc(Grid, AllocInfo) ->
Fields = alloc_info(AllocInfo, [], 0, 0, true),
@@ -167,9 +174,12 @@ info_fields() ->
{"Async thread pool size", thread_pool_size}
]},
{"CPU's and Threads",
- [{"System Logical CPU's", logical_processors},
- {"Erlang Logical CPU's", logical_processors_online},
- {"Used Logical CPU's", logical_processors_available}
+ [{"Logical CPU's", logical_processors},
+ {"Online Logical CPU's", logical_processors_online},
+ {"Available Logical CPU's", logical_processors_available},
+ {"Schedulers", schedulers},
+ {"Online schedulers", schedulers_online},
+ {"Available schedulers", schedulers_available}
]}
],
Stat = [{"Memory Usage", right,
diff --git a/lib/observer/src/observer_trace_wx.erl b/lib/observer/src/observer_trace_wx.erl
index f2a1084f85..2878842c23 100644
--- a/lib/observer/src/observer_trace_wx.erl
+++ b/lib/observer/src/observer_trace_wx.erl
@@ -84,7 +84,8 @@ create_window(Notebook, ParentPid) ->
%% Create the window
Panel = wxPanel:new(Notebook, [{size, wxWindow:getClientSize(Notebook)}]),
Sizer = wxBoxSizer:new(?wxVERTICAL),
- Splitter = wxSplitterWindow:new(Panel, [{size, wxWindow:getClientSize(Panel)}]),
+ Splitter = wxSplitterWindow:new(Panel, [{size, wxWindow:getClientSize(Panel)},
+ {style, ?SASH_STYLE}]),
{NodeProcView, NodeView, ProcessView} = create_process_view(Splitter),
{MatchSpecView,ModView,FuncView} = create_matchspec_view(Splitter),
wxSplitterWindow:setSashGravity(Splitter, 0.5),
@@ -120,7 +121,7 @@ create_process_view(Parent) ->
Panel = wxPanel:new(Parent),
MainSz = wxBoxSizer:new(?wxHORIZONTAL),
Style = ?wxLC_REPORT bor ?wxLC_HRULES,
- Splitter = wxSplitterWindow:new(Panel, []),
+ Splitter = wxSplitterWindow:new(Panel, [{style, ?SASH_STYLE}]),
Nodes = wxListCtrl:new(Splitter, [{winid, ?NODES_WIN}, {style, Style}]),
Procs = wxListCtrl:new(Splitter, [{winid, ?PROC_WIN}, {style, Style}]),
Li = wxListItem:new(),
@@ -157,7 +158,7 @@ create_matchspec_view(Parent) ->
Panel = wxPanel:new(Parent),
MainSz = wxBoxSizer:new(?wxHORIZONTAL),
Style = ?wxLC_REPORT bor ?wxLC_HRULES,
- Splitter = wxSplitterWindow:new(Panel, []),
+ Splitter = wxSplitterWindow:new(Panel, [{style, ?SASH_STYLE}]),
Modules = wxListCtrl:new(Splitter, [{winid, ?MODULES_WIN}, {style, Style}]),
Funcs = wxListCtrl:new(Splitter, [{winid, ?FUNCS_WIN}, {style, Style}]),
Li = wxListItem:new(),
diff --git a/lib/observer/src/observer_tv_table.erl b/lib/observer/src/observer_tv_table.erl
index b4832d9599..59fe5b5670 100644
--- a/lib/observer/src/observer_tv_table.erl
+++ b/lib/observer/src/observer_tv_table.erl
@@ -98,7 +98,7 @@ init([Parent, Opts]) ->
ets -> "TV Ets: " ++ Title0;
mnesia -> "TV Mnesia: " ++ Title0
end,
- Frame = wxFrame:new(Parent, ?wxID_ANY, Title, [{size, {800, 300}}]),
+ Frame = wxFrame:new(Parent, ?wxID_ANY, Title, [{size, {800, 600}}]),
IconFile = filename:join(code:priv_dir(observer), "erlang_observer.png"),
Icon = wxIcon:new(IconFile, [{type,?wxBITMAP_TYPE_PNG}]),
wxFrame:setIcon(Frame, Icon),
@@ -261,11 +261,12 @@ handle_event(#wx{id=?ID_EDIT}, State = #state{selected=Index}) ->
handle_event(#wx{id=?ID_DELETE}, State = #state{selected=undefined}) ->
{noreply, State};
handle_event(#wx{id=?ID_DELETE},
- State = #state{pid=Pid, status=StatusBar, selected=Index}) ->
+ State = #state{grid=Grid, pid=Pid, status=StatusBar, selected=Index}) ->
Str = get_row(Pid, Index, all),
Pid ! {delete, Index},
wxStatusBar:setStatusText(StatusBar, io_lib:format("Deleted object: ~s",[Str])),
- {noreply, State};
+ wxListCtrl:setItemState(Grid, Index, 0, ?wxLIST_STATE_FOCUSED),
+ {noreply, State#state{selected=undefined}};
handle_event(#wx{id=?wxID_CLOSE}, State = #state{frame=Frame}) ->
wxFrame:destroy(Frame),
@@ -279,8 +280,8 @@ handle_event(#wx{id=?GOTO_ENTRY, event=#wxCommand{cmdString=Str}},
State = #state{grid=Grid}) ->
try
Row0 = list_to_integer(Str),
- Row1 = min(0, Row0),
- Row = max(wxListCtrl:getItemCount(Grid)-1,Row1),
+ Row1 = max(0, Row0),
+ Row = min(wxListCtrl:getItemCount(Grid)-1,Row1),
wxListCtrl:ensureVisible(Grid, Row),
ok
catch _:_ -> ok
@@ -289,7 +290,9 @@ handle_event(#wx{id=?GOTO_ENTRY, event=#wxCommand{cmdString=Str}},
%% Search functionality
handle_event(#wx{id=?ID_SEARCH},
- State = #state{sizer=Sz, search=Search}) ->
+ State = #state{grid=Grid, sizer=Sz, search=Search, selected=Index}) ->
+ is_integer(Index) andalso
+ wxListCtrl:setItemState(Grid, Index, 0, ?wxLIST_STATE_FOCUSED),
wxSizer:show(Sz, Search#search.win),
wxWindow:setFocus(Search#search.search),
wxSizer:layout(Sz),
@@ -321,7 +324,7 @@ handle_event(#wx{id=?SEARCH_ENTRY, event=#wxCommand{type=command_text_enter,cmdS
Pid ! {mark_search_hit, false},
case search(Pid, Str, Pos, Dir, Case) of
false ->
- wxStatusBar:setStatusText(SB, "Not found"),
+ wxStatusBar:setStatusText(SB, io_lib:format("Not found (regexp): ~s",[Str])),
Pid ! {mark_search_hit, Find#find.start},
wxListCtrl:refreshItem(Grid, Find#find.start),
{noreply, State#state{search=Search#search{find=Find#find{found=false}}}};
@@ -355,7 +358,7 @@ handle_event(#wx{id=?SEARCH_ENTRY, event=#wxCommand{cmdString=Str}},
Pid ! {mark_search_hit, false},
case search(Pid, Str, Cont#find.start, Dir, Case) of
false ->
- wxStatusBar:setStatusText(SB, "Not found"),
+ wxStatusBar:setStatusText(SB, io_lib:format("Not found (regexp): ~s",[Str])),
{noreply, State};
Row ->
wxListCtrl:ensureVisible(Grid, Row),
@@ -402,8 +405,11 @@ handle_info({new_cols, New}, State = #state{grid=Grid, columns=Cols0}) ->
Cols = add_columns(Grid, Cols0, New),
{noreply, State#state{columns=Cols}};
+handle_info({refresh, Min, Min}, State = #state{grid=Grid}) ->
+ wxListCtrl:refreshItem(Grid, Min), %% Avoid assert in wx below if Max is 0
+ {noreply, State};
handle_info({refresh, Min, Max}, State = #state{grid=Grid}) ->
- Max > 0 andalso wxListCtrl:refreshItems(Grid, Min, Max),
+ wxListCtrl:refreshItems(Grid, Min, Max),
{noreply, State};
handle_info(refresh_interval, State = #state{pid=Pid}) ->
@@ -426,10 +432,14 @@ handle_info(_Event, State) ->
terminate(_Event, #state{pid=Pid, attrs=Attrs}) ->
%% ListItemAttr are not auto deleted
- #attrs{odd=Odd, deleted=D, changed=Ch, searched=S} = Attrs,
- wxListItemAttr:destroy(Odd),
+ #attrs{odd=Odd, even=Even, deleted=D, searched=S,
+ changed_odd=Ch1, changed_even=Ch2,
+ new_odd=New1, new_even=New2
+ } = Attrs,
+ wxListItemAttr:destroy(Odd), wxListItemAttr:destroy(Even),
wxListItemAttr:destroy(D),
- wxListItemAttr:destroy(Ch),
+ wxListItemAttr:destroy(Ch1),wxListItemAttr:destroy(Ch2),
+ wxListItemAttr:destroy(New1),wxListItemAttr:destroy(New2),
wxListItemAttr:destroy(S),
unlink(Pid),
exit(Pid, window_closed),
@@ -473,7 +483,7 @@ search(Table, Str, Row, Dir, Case) ->
end.
-record(holder, {node, parent, pid,
- table=[], n=0, columns,
+ table=array:new(), n=0, columns,
temp=[],
search,
source, tabid,
@@ -507,6 +517,7 @@ table_holder(S0 = #holder{parent=Parent, pid=Pid, table=Table}) ->
S1 = handle_new_data_chunk(Data, S0),
table_holder(S1);
{sort, Col} ->
+ Parent ! {refresh, 0, S0#holder.n-1},
table_holder(sort(Col, S0));
{search, Data} ->
table_holder(search(Data, S0));
@@ -530,11 +541,14 @@ table_holder(S0 = #holder{parent=Parent, pid=Pid, table=Table}) ->
table_holder(S0);
What ->
io:format("Table holder got ~p~n",[What]),
+ Parent ! {refresh, 0, S0#holder.n-1},
table_holder(S0)
end.
handle_new_data_chunk(Data, S0 = #holder{columns=Cols, parent=Parent}) ->
- S1 = #holder{columns=NewCols} = handle_new_data_chunk2(Data, S0),
+ S1 = #holder{n=N,columns=NewCols} = handle_new_data_chunk2(Data, S0),
+ Parent ! {no_rows, N},
+ Parent ! {refresh, 0, N-1},
case NewCols =:= Cols of
true -> S1;
false ->
@@ -543,15 +557,12 @@ handle_new_data_chunk(Data, S0 = #holder{columns=Cols, parent=Parent}) ->
end.
handle_new_data_chunk2('$end_of_table',
- S0 = #holder{parent=Parent, sort=Opt,
- key=Key,
+ S0 = #holder{sort=Opt0, key=Key,
table=Old, temp=New}) ->
- Table = merge(Old, New, Key),
- N = length(Table),
- Parent ! {no_rows, N},
- sort(Opt#opt.sort_key, S0#holder{n=N, pid=undefine,
- sort=Opt#opt{sort_key = undefined},
- table=Table, temp=[]});
+ Merged = merge(array:to_list(Old), New, Key),
+ {Opt,Sorted} = sort(Opt0#opt.sort_key, Opt0#opt{sort_key = undefined}, Merged),
+ SortedA = array:from_list(Sorted),
+ S0#holder{sort=Opt, table=SortedA, n=array:size(SortedA), temp=[], pid=undefined};
handle_new_data_chunk2(Data, S0 = #holder{columns=Cols0, source=ets, temp=Tab0}) ->
{Tab, Cols} = parse_ets_data(Data, Cols0, Tab0),
S0#holder{columns=Cols, temp=Tab};
@@ -566,10 +577,9 @@ parse_ets_data([Recs|Rs], C0, Tab0) ->
parse_ets_data([], Cols, Tab) ->
{Tab, Cols}.
-sort(Col, S=#holder{n=N, parent=Parent, sort=Opt0, table=Table0}) ->
- {Opt, Table} = sort(Col, Opt0, Table0),
- Parent ! {refresh, 0, N-1},
- S#holder{sort=Opt, table=Table}.
+sort(Col, S=#holder{sort=Opt0, table=Table0}) ->
+ {Opt, Table} = sort(Col, Opt0, array:to_list(Table0)),
+ S#holder{sort=Opt, table=array:from_list(Table)}.
sort(Col, Opt = #opt{sort_key=Col, sort_incr=Bool}, Table) ->
{Opt#opt{sort_incr=not Bool}, lists:reverse(Table)};
@@ -597,7 +607,7 @@ keysort(Col, Table) ->
lists:sort(Sort, Table).
search([Str, Row, Dir0, CaseSens],
- S=#holder{parent=Parent, table=Table0}) ->
+ S=#holder{parent=Parent, n=N, table=Table}) ->
Opt = case CaseSens of
true -> [];
false -> [caseless]
@@ -607,32 +617,26 @@ search([Str, Row, Dir0, CaseSens],
false -> -1
end,
Res = case re:compile(Str, Opt) of
- {ok, Re} ->
- Table =
- case Dir0 of
- true ->
- lists:nthtail(Row, Table0);
- false ->
- lists:reverse(lists:sublist(Table0, Row+1))
- end,
- search(Row, Dir, Re, Table);
+ {ok, Re} -> re_search(Row, Dir, N, Re, Table);
{error, _} -> false
end,
Parent ! {self(), Res},
S#holder{search=Res}.
-search(Row, Dir, Re, [ [Term|_] |Table]) ->
+re_search(Row, Dir, N, Re, Table) when Row >= 0, Row < N ->
+ [Term|_] = array:get(Row, Table),
Str = format(Term),
Res = re:run(Str, Re),
case Res of
- nomatch -> search(Row+Dir, Dir, Re, Table);
- {match,_} -> Row
+ nomatch -> re_search(Row+Dir, Dir, N, Re, Table);
+ {match,_} ->
+ Row
end;
-search(_, _, _, []) ->
+re_search(_, _, _, _, _) ->
false.
get_row(From, Row, Col, Table) ->
- case lists:nth(Row+1, Table) of
+ case array:get(Row, Table) of
[Object|_] when Col =:= all ->
From ! {self(), format(Object)};
[Object|_] when Col =:= all_multiline ->
@@ -647,14 +651,15 @@ get_attr(From, Row, #holder{attrs=Attrs, search=Row}) ->
What = Attrs#attrs.searched,
From ! {self(), What};
get_attr(From, Row, #holder{table=Table, attrs=Attrs}) ->
- What = case lists:nth(Row+1, Table) of
+ Odd = (Row rem 2) > 0,
+ What = case array:get(Row, Table) of
[_|deleted] -> Attrs#attrs.deleted;
- [_|changed] -> Attrs#attrs.changed;
- [_|new] -> Attrs#attrs.changed;
- _ when (Row rem 2) > 0 ->
- Attrs#attrs.odd;
- _ ->
- Attrs#attrs.even
+ [_|changed] when Odd -> Attrs#attrs.changed_odd;
+ [_|changed] -> Attrs#attrs.changed_even;
+ [_|new] when Odd -> Attrs#attrs.new_odd;
+ [_|new] -> Attrs#attrs.new_even;
+ _ when Odd -> Attrs#attrs.odd;
+ _ -> Attrs#attrs.even
end,
From ! {self(), What}.
@@ -665,19 +670,29 @@ merge(Old, New, Key) ->
merge2([[Obj|_]|Old], [Obj|New], Key) ->
[[Obj]|merge2(Old, New, Key)];
-merge2([[A|_]|Old], [B|New], Key)
+merge2([[A|Op]|Old], [B|New], Key)
when element(Key, A) == element(Key, B) ->
- [[B|changed]|merge2(Old, New, Key)];
-merge2([[A|_]|Old], New = [B|_], Key)
+ case Op of
+ deleted ->
+ [[B|new]|merge2(Old, New, Key)];
+ _ ->
+ [[B|changed]|merge2(Old, New, Key)]
+ end;
+merge2([[A|Op]|Old], New = [B|_], Key)
when element(Key, A) < element(Key, B) ->
- [[A|deleted]|merge2(Old, New, Key)];
+ case Op of
+ deleted -> merge2(Old, New, Key);
+ _ -> [[A|deleted]|merge2(Old, New, Key)]
+ end;
merge2(Old = [[A|_]|_], [B|New], Key)
when element(Key, A) > element(Key, B) ->
[[B|new]|merge2(Old, New, Key)];
merge2([], New, _Key) ->
[[N|new] || N <- New];
merge2(Old, [], _Key) ->
- [[O|deleted] || [O|_] <- Old].
+ lists:foldl(fun([_O|deleted], Acc) -> Acc;
+ ([O|_], Acc) -> [[O|deleted]|Acc]
+ end, [], Old).
delete_row(Row, S0 = #holder{parent=Parent}) ->
@@ -691,7 +706,7 @@ delete_row(Row, S0 = #holder{parent=Parent}) ->
delete(Row, #holder{tabid=Id, table=Table,
source=Source, node=Node}) ->
- [Object|_] = lists:nth(Row+1, Table),
+ [Object|_] = array:get(Row, Table),
try
case Source of
ets ->
diff --git a/lib/observer/src/observer_wx.erl b/lib/observer/src/observer_wx.erl
index 47740581f0..4c385b76aa 100644
--- a/lib/observer/src/observer_wx.erl
+++ b/lib/observer/src/observer_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-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
@@ -36,6 +36,7 @@
-define(ID_PING, 1).
-define(ID_CONNECT, 2).
-define(ID_NOTEBOOK, 3).
+-define(ID_CDV, 4).
-define(FIRST_NODES_MENU_ID, 1000).
-define(LAST_NODES_MENU_ID, 2000).
@@ -131,6 +132,9 @@ setup(#state{frame = Frame} = State) ->
wxMenu:connect(Frame, command_menu_selected),
wxFrame:show(Frame),
+ %% Freeze and thaw is buggy currently
+ DoFreeze = [?wxMAJOR_VERSION,?wxMINOR_VERSION] < [2,9],
+ DoFreeze andalso wxWindow:freeze(Panel),
%% I postpone the creation of the other tabs so they can query/use
%% the window size
@@ -154,9 +158,12 @@ setup(#state{frame = Frame} = State) ->
TracePanel = observer_trace_wx:start_link(Notebook, self()),
wxNotebook:addPage(Notebook, TracePanel, ?TRACE_STR, []),
-
- %% Force redraw (window needs it)
+ %% Force redraw (windows needs it)
wxWindow:refresh(Panel),
+ DoFreeze andalso wxWindow:thaw(Panel),
+
+ wxFrame:raise(Frame),
+ wxFrame:setFocus(Frame),
SysPid = wx_object:get_pid(SysPanel),
SysPid ! {active, node()},
@@ -206,6 +213,10 @@ handle_event(#wx{event=#wxNotebook{type=command_notebook_page_changing}},
handle_event(#wx{event = #wxClose{}}, State) ->
{stop, normal, State};
+handle_event(#wx{id = ?ID_CDV, event = #wxCommand{type = command_menu_selected}}, State) ->
+ crashdump_viewer:start(),
+ {noreply, State};
+
handle_event(#wx{id = ?wxID_EXIT, event = #wxCommand{type = command_menu_selected}}, State) ->
{stop, normal, State};
@@ -340,6 +351,22 @@ handle_info({nodedown, Node},
create_txt_dialog(Frame, Msg, "Node down", ?wxICON_EXCLAMATION),
{noreply, State3};
+handle_info({open_link, Pid0}, State = #state{pro_panel=ProcViewer, frame=Frame}) ->
+ Pid = case Pid0 of
+ [_|_] -> try list_to_pid(Pid0) catch _:_ -> Pid0 end;
+ _ -> Pid0
+ end,
+ %% Forward to process tab
+ case is_pid(Pid) of
+ true -> wx_object:get_pid(ProcViewer) ! {procinfo_open, Pid};
+ false ->
+ Msg = io_lib:format("Information about ~p is not available or implemented",[Pid]),
+ Info = wxMessageDialog:new(Frame, Msg),
+ wxMessageDialog:showModal(Info),
+ wxMessageDialog:destroy(Info)
+ end,
+ {noreply, State};
+
handle_info({'EXIT', Pid, _Reason}, State) ->
io:format("Child (~s) crashed exiting: ~p ~p~n",
[pid2panel(Pid, State), Pid,_Reason]),
@@ -517,9 +544,11 @@ create_connect_dialog(connect, #state{frame = Frame}) ->
end.
default_menus(NodesMenuItems) ->
+ CDV = #create_menu{id = ?ID_CDV, text = "Examine Crashdump"},
Quit = #create_menu{id = ?wxID_EXIT, text = "Quit"},
About = #create_menu{id = ?wxID_ABOUT, text = "About"},
Help = #create_menu{id = ?wxID_HELP},
+ FileMenu = {"File", [CDV, Quit]},
NodeMenu = case erlang:is_alive() of
true -> {"Nodes", NodesMenuItems ++
[#create_menu{id = ?ID_PING, text = "Connect Node"}]};
@@ -528,15 +557,15 @@ default_menus(NodesMenuItems) ->
end,
case os:type() =:= {unix, darwin} of
false ->
- FileMenu = {"File", [Quit]},
+ FileMenu = {"File", [CDV, Quit]},
HelpMenu = {"Help", [About,Help]},
[FileMenu, NodeMenu, HelpMenu];
true ->
%% On Mac quit and about will be moved to the "default' place
%% automagicly, so just add them to a menu that always exist.
%% But not to the help menu for some reason
- {Tag, Menus} = NodeMenu,
- [{Tag, Menus ++ [Quit,About]}, {"&Help", [Help]}]
+ {Tag, Menus} = FileMenu,
+ [{Tag, Menus ++ [About]}, NodeMenu, {"&Help", [Help]}]
end.
clean_menus(Menus, MenuBar) ->
@@ -550,13 +579,6 @@ remove_menu_items([{MenuStr = "File", Menus}|Rest], MenuBar) ->
Menu = wxMenuBar:getMenu(MenuBar, MenuId),
Items = [wxMenu:findItem(Menu, Tag) || #create_menu{text=Tag} <- Menus],
[wxMenu:delete(Menu, MItem) || MItem <- Items],
- case os:type() =:= {unix, darwin} of
- true ->
- wxMenuBar:remove(MenuBar, MenuId),
- wxMenu:destroy(Menu);
- false ->
- ignore
- end,
remove_menu_items(Rest, MenuBar)
end;
remove_menu_items([{"Nodes", _}|_], _MB) ->
diff --git a/lib/observer/test/crashdump_helper.erl b/lib/observer/test/crashdump_helper.erl
index 520fcdfd0d..40dbe28d46 100644
--- a/lib/observer/test/crashdump_helper.erl
+++ b/lib/observer/test/crashdump_helper.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-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
@@ -23,15 +23,15 @@
-include("test_server.hrl").
n1_proc(N2,Creator) ->
- spawn(fun() -> n1_proc(Creator,N2,x,[]) end).
-n1_proc(Creator,N2,P2,L) when P2==x;length(L)<2->
+ spawn(fun() -> n1_proc(Creator,N2,x,y,[]) end).
+n1_proc(Creator,N2,Pid2,Port2,L) when Pid2==x;length(L)<2->
receive
- {N2,P} ->
- n1_proc(Creator,N2,P,L);
+ {N2,Pid,Port} ->
+ n1_proc(Creator,N2,Pid,Port,L);
P ->
- n1_proc(Creator,N2,P2,[P|L])
+ n1_proc(Creator,N2,Pid2,Port2,[P|L])
end;
-n1_proc(Creator,_N2,P2,_L) ->
+n1_proc(Creator,_N2,Pid2,Port2,_L) ->
register(aaaaaaaa,self()),
process_flag(save_calls,3),
ets:new(cdv_test_ordset_table,[ordered_set]),
@@ -42,20 +42,50 @@ n1_proc(Creator,_N2,P2,_L) ->
Pid = self(),
Bin = list_to_binary(lists:seq(1, 255)),
SubBin = element(1, split_binary(element(2, split_binary(Bin, 8)), 17)),
- DictionaryValue = {"list",atom,42,54.654,math:pow(2,1023),{},
- Port,Fun,Ref,Pid,
- Bin,SubBin,83974938738373873,-38748762783736367},
- put(dictionary_key,DictionaryValue),
- spawn(fun() -> register(aaaaaaab,self()),
- receive after infinity -> ok end
- end),
- link(P2),
+
+ register(named_port,Port),
+
+ %% Dictionary
+ put(list,"list"),
+ put(atom,atom),
+ put(integer,42),
+ put(float,54.654),
+ put(big_float,math:pow(2,1023)),
+ put(tuple,{1,2,{}}),
+ put(port,Port),
+ put('fun',Fun),
+ put(ref,Ref),
+ put(pid,Pid),
+ put(bin,Bin),
+ put(sub_bin,SubBin),
+ put(bignum,83974938738373873),
+ put(neg_bignum,-38748762783736367),
+ put(ext_pid,Pid2),
+ put(ext_port,Port2),
+
+ %% Message queue
+ L = lists:seq(0,255),
+ BigMsg = {message,list_to_binary(L),L},
+ Port = hd(erlang:ports()),
+ self() ! {short,message,1,2.5,"hello world",Port,{}},
+ self() ! BigMsg,
+
+ OtherPid = spawn(fun() -> register(aaaaaaab,self()),
+ receive after infinity -> ok end
+ end),
+ link(OtherPid), % own node
+ link(Pid2), % external node
+ erlang:monitor(process,OtherPid),
+ erlang:monitor(process,Pid2),
+
+ code:load_file(?MODULE),
+
Creator ! {self(),done},
receive after infinity -> ok end.
remote_proc(P1,Creator) ->
spawn(fun() ->
- P1 ! {node(),self()},
+ P1 ! {node(),self(),hd(erlang:ports())},
Creator ! {self(),done},
receive after infinity -> ok end
end).
diff --git a/lib/observer/test/crashdump_viewer_SUITE.erl b/lib/observer/test/crashdump_viewer_SUITE.erl
index 28c7853eaf..7a582436b4 100644
--- a/lib/observer/test/crashdump_viewer_SUITE.erl
+++ b/lib/observer/test/crashdump_viewer_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2014. 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,9 +19,11 @@
-module(crashdump_viewer_SUITE).
+-include_lib("observer/src/crashdump_viewer.hrl").
+
%% Test functions
-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
- translate/1,start/1,fini/1,load_file/1,
+ start_stop/1,load_file/1,not_found_items/1,
non_existing/1,not_a_crashdump/1,old_crashdump/1]).
-export([init_per_suite/1, end_per_suite/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -30,22 +32,39 @@
-include("test_server_line.hrl").
-include_lib("kernel/include/file.hrl").
--include_lib("stdlib/include/ms_transform.hrl").
-
--define(default_timeout, ?t:minutes(30)).
--define(sl_alloc_vsns,[r9b]).
-define(failed_file,"failed-cases.txt").
+-define(helper_mod,crashdump_helper).
+
+
+init_per_testcase(start_stop, Config) ->
+ catch crashdump_viewer:stop(),
+ try
+ case os:type() of
+ {unix,darwin} ->
+ exit("Can not test on MacOSX");
+ {unix, _} ->
+ io:format("DISPLAY ~s~n", [os:getenv("DISPLAY")]),
+ case ct:get_config(xserver, none) of
+ none -> ignore;
+ Server -> os:putenv("DISPLAY", Server)
+ end;
+ _ -> ignore
+ end,
+ wx:new(),
+ wx:destroy(),
+ Config
+ catch
+ _:undef ->
+ {skipped, "No wx compiled for this platform"};
+ _:Reason ->
+ SkipReason = io_lib:format("Start wx failed: ~p", [Reason]),
+ {skipped, lists:flatten(SkipReason)}
+ end;
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir,Config),
- Fs = filelib:wildcard(filename:join(DataDir,"*translated*")),
- lists:foreach(fun(F) -> file:delete(F) end,Fs),
catch crashdump_viewer:stop(),
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(Case, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
case ?config(tc_status,Config) of
ok ->
ok;
@@ -60,8 +79,13 @@ end_per_testcase(Case, Config) ->
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [translate, load_file, non_existing, not_a_crashdump,
- old_crashdump].
+ [start_stop,
+ non_existing,
+ not_a_crashdump,
+ old_crashdump,
+ load_file,
+ not_found_items
+ ].
groups() ->
[].
@@ -73,18 +97,13 @@ end_per_group(_GroupName, Config) ->
Config.
-init_per_suite(doc) ->
- ["Create a lot of crashdumps which can be used in the testcases below"];
+%% Create a lot of crashdumps which can be used in the testcases below
init_per_suite(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?default_timeout),
delete_saved(Config),
- application:start(inets), % will be using the http client later
- httpc:set_options([{ipfamily,inet6fb4}]),
DataDir = ?config(data_dir,Config),
Rels = [R || R <- [r15b,r16b], ?t:is_release_available(R)] ++ [current],
io:format("Creating crash dumps for the following releases: ~p", [Rels]),
AllDumps = create_dumps(DataDir,Rels),
- ?t:timetrap_cancel(Dog),
[{dumps,AllDumps}|Config].
delete_saved(Config) ->
@@ -97,54 +116,64 @@ delete_saved(Config) ->
ok.
-translate(suite) ->
- [];
-translate(doc) ->
- ["Test that crash dumps from OTP R9B can be translated"];
-translate(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
- OutFile = filename:join(DataDir,"translated"),
-
- R9BFiles = filelib:wildcard(filename:join(DataDir,"r9b_dump.*")),
- AllFiles = R9BFiles,
- lists:foreach(
- fun(File) ->
- io:format("Translating file: ~s~n",[File]),
- ok = crashdump_translate:old2new(File,OutFile),
- check_result(File,OutFile)
- end,
- AllFiles),
- ok.
+start_stop(Config) when is_list(Config) ->
+ Dump = hd(?config(dumps,Config)),
+ timer:sleep(1000),
-start(suite) ->
- [];
-start(doc) ->
- ["Test start and stop of the Crashdump Viewer"];
-start(Config) when is_list(Config) ->
- %% Set a much shorter timeout here... We don't have all the time in world.
- AngryDog = ?t:timetrap(?t:seconds(30)),
- Port = start_cdv(),
+ ProcsBefore = length(processes()),
+ ok = crashdump_viewer:start(Dump),
true = is_pid(whereis(crashdump_viewer_server)),
- true = is_pid(whereis(web_tool)),
- Html = contents(Port,"start_page"),
- "Welcome to the Web BasedErlang Crash Dump Analyser" = strip(Html),
+ true = is_pid(whereis(cdv_wx)),
+ true = is_pid(whereis(cdv_proc_cb)),
+ true = is_pid(whereis(cdv_port_cb)),
+ true = is_pid(whereis(cdv_ets_cb)),
+ true = is_pid(whereis(cdv_timer_cb)),
+ true = is_pid(whereis(cdv_fun_cb)),
+ true = is_pid(whereis(cdv_atom_cb)),
+ true = is_pid(whereis(cdv_dist_cb)),
+ true = is_pid(whereis(cdv_mod_cb)),
+ timer:sleep(5000), % give some time to live
ok = crashdump_viewer:stop(),
- timer:sleep(10), % give some time to stop
+ timer:sleep(1000), % give some time to stop
undefined = whereis(crashdump_viewer_server),
- undefined = whereis(web_tool),
- Url = cdv_url(Port,"start_page"),
- {error,_} = httpc:request(Url),
-% exit(whereis(httpc_manager),kill),
- ?t:timetrap_cancel(AngryDog),
+ undefined = whereis(cdv_wx),
+ ProcsAfter=length(processes()),
+ ProcsAfter=ProcsBefore,
ok.
-fini(Config) when is_list(Config) ->
- ok.
+%% Try to load nonexisting file
+non_existing(Config) when is_list(Config) ->
+ ExpectedReason = "non-existing-file is not an Erlang crash dump\n",
+ {error, ExpectedReason} = start_backend("non-existing-file"),
+ ok = crashdump_viewer:stop().
+
+%% Try to load a crashdump of old (earlier than OTP R10B) format
+old_crashdump(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir,Config),
+ OldFile = filename:join(DataDir,"old_format.dump"),
+ ExpectedReason = "The crashdump " ++ OldFile ++
+ " is in the pre-R10B format, which is no longer supported.\n",
+ {error, ExpectedReason} = start_backend(OldFile),
+ ok = crashdump_viewer:stop().
+
+%% Try to load a file which is not an erlang crashdump
+not_a_crashdump(Config) when is_list(Config) ->
+ PrivDir = ?config(priv_dir,Config),
+ F1 = filename:join(PrivDir,"f1"),
+ F2 = filename:join(PrivDir,"f2"),
+
+ file:write_file(F1,"=unexpected_tag:xyz"),
+ file:write_file(F2,""),
+
+ ExpReason1 = F1 ++ " is not an Erlang crash dump\n",
+ ExpReason2 = F2 ++ " is not an Erlang crash dump\n",
-load_file(suite) ->
- [];
-load_file(doc) ->
- ["Load files into the tool and view all pages"];
+ {error,ExpReason1} = start_backend(F1),
+ {error,ExpReason2} = start_backend(F2),
+
+ ok = crashdump_viewer:stop().
+
+%% Load files into the tool and view all pages
load_file(Config) when is_list(Config) ->
case ?t:is_debug() of
true ->
@@ -156,65 +185,33 @@ load_file(Config) when is_list(Config) ->
load_file_1(Config) ->
DataDir = ?config(data_dir,Config),
- Port = start_cdv(),
+ crashdump_viewer:start_link(),
+ %% Read both created and predefined dumps
AllFiles = filelib:wildcard(filename:join(DataDir,"r*_dump.*")),
lists:foreach(
fun(File) ->
- browse_file(Port,File),
- special(Port,File)
+ Content = browse_file(File),
+ special(File,Content)
end,
AllFiles),
ok = crashdump_viewer:stop().
-non_existing(suite) ->
- [];
-non_existing(doc) ->
- ["Try to load nonexisting file"];
-non_existing(Config) when is_list(Config) ->
- Port = start_cdv(),
- Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
- Html = request_sync(post,{Url,[],[],"path=nonexistingfile"}),
- "Please wait..." = title(Html),
- "An error occured:nonexistingfile is not an Erlang crash dump" =
- strip(wait(10,Port,"redirect")),
- ok = crashdump_viewer:stop().
+%% Try to lookup nonexisting process, port and node
+not_found_items(Config) ->
+ Dump = hd(?config(dumps,Config)),
-old_crashdump(doc) ->
- ["Try to load nonexisting file"];
-old_crashdump(Config) when is_list(Config) ->
- Port = start_cdv(),
- DataDir = ?config(data_dir, Config),
- OldCrashDump = filename:join(DataDir, "old_format.dump"),
- Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
- Html = request_sync(post,{Url,[],[],"path="++OldCrashDump}),
- "Please wait..." = title(Html),
- Str = "An error occured:The crashdump "++OldCrashDump++
- " is in the pre-R10B format, which is no longer supported.",
- Str = strip(wait(10,Port,"redirect")),
- ok = crashdump_viewer:stop().
+ ok = start_backend(Dump),
+ {ok,#general_info{},_} = crashdump_viewer:general_info(),
-not_a_crashdump(suite) ->
- [];
-not_a_crashdump(doc) ->
- ["Try to load a file which is not an erlang crashdump"];
-not_a_crashdump(Config) when is_list(Config) ->
- Port = start_cdv(),
- NoCrashdump = code:which(?MODULE),
- Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
- Html = request_sync(post,{Url,[],[],"path="++NoCrashdump}),
- "Please wait..." = title(Html),
- Str = "An error occured:"++NoCrashdump++" is not an Erlang crash dump",
- Str = strip(wait(10,Port,"redirect")),
- ok = crashdump_viewer:stop(),
-% exit(whereis(httpc_manager),kill),
- ok.
-
+ {error,not_found} = crashdump_viewer:proc_details("<1111.1111.1111>"),
+ {error,not_found} = crashdump_viewer:port("#Port<1111.1111>"),
+ {error,not_found} = crashdump_viewer:node_info("1111"),
+ ok = crashdump_viewer:stop().
-end_per_suite(doc) ->
- ["Remove generated crashdumps"];
+%% Remove generated crashdumps
end_per_suite(Config) when is_list(Config) ->
Dumps = ?config(dumps,Config),
DataDir = ?config(data_dir,Config),
@@ -240,387 +237,165 @@ end_per_suite(Config) when is_list(Config) ->
%%%-----------------------------------------------------------------
%%% Internal
-start_cdv() ->
- ?t:capture_start(),
- ok = crashdump_viewer:start(),
- "WebTool is available at http://localhost:" ++ Where =
- lists:flatten(?t:capture_get()),
- ?t:capture_stop(),
- [Port|_] = string:tokens(Where,"/"),
- Port.
-
-
-check_result(File,OutFile) ->
- {ok,#file_info{size=FS}} = file:read_file_info(File),
- {ok,#file_info{size=OFS}} = file:read_file_info(OutFile),
- Rel =
- if OFS > 0 -> FS/OFS;
- true -> 1.25
- end,
- if Rel>0.75, Rel<1.25 -> ok;
- true -> ?t:fail({unreasonable_size,File,FS,OFS})
- end,
- {ok,Fd} = file:open(OutFile,[read]),
- "=erl_crash_dump:0.0\n" = io:get_line(Fd,''),
- case is_truncated(File) of
- true ->
- ok;
- false ->
- {ok,_} = file:position(Fd,{eof,-5}),
- case io:get_line(Fd,'') of
- "=end\n" -> ok;
- Other -> ?t:fail({truncated,File,Other})
- end
- end,
- ok = file:close(Fd).
-
-
-%% Read a page and check that the page title matches Title
-contents(Port,Link) ->
- Url = cdv_url(Port,Link),
- request_sync(get,{Url,[]}).
-
-cdv_url(Port,Link) ->
- "http://localhost:" ++ Port ++ "/cdv_erl/crashdump_viewer/" ++ Link.
-
-request_sync(Method,HTTPReqCont) ->
- case httpc:request(Method,
- HTTPReqCont,
- [{timeout,30000}],
- [{full_result, false}]) of
- {ok,{200,Html}} ->
- Html;
- {ok,{Code,Html}} ->
- io:format("~s\n", [Html]),
- io:format("Received ~w from httpc:request(...) with\nMethod=~w\n"
- "HTTPReqCont=~p\n",
- [Code,Method,HTTPReqCont]),
- ?t:fail();
- Other ->
- io:format(
- "Received ~w from httpc:request(...) with\nMethod=~w\n"
- "HTTPReqCont=~p\n",
- [Other,Method,HTTPReqCont]),
- ?t:fail()
- end.
-
-
+%%%-----------------------------------------------------------------
+%%% Start the crashdump_viewer backend and load a dump
+start_backend(File) ->
+ crashdump_viewer:start_link(),
+ register_progress_handler(),
+ ok = crashdump_viewer:read_file(File),
+ wait_for_progress_done().
+%%%-----------------------------------------------------------------
+%%% Simulate the progress handler in observer_lib
+register_progress_handler() ->
+ register(cdv_progress_handler,self()).
-strip([$<|Html]) ->
- strip(drop_tag(Html));
-strip([$\n|Html]) ->
- strip(Html);
-strip([X|Html]) ->
- [X|strip(Html)];
-strip([]) ->
- [].
-drop_tag([$>|Html]) ->
- Html;
-drop_tag([_|Html]) ->
- drop_tag(Html).
-
-title(Port,Link,Title) ->
- Html = contents(Port,Link),
- Title = title(Html).
-
-wait(0,_Port,Link) ->
- ?t:fail({wait,Link,timeout});
-wait(Time,Port,Link) ->
- Html = contents(Port,Link),
- case title(Html) of
- "Please wait..." ->
- timer:sleep(1000),
- wait(Time-1,Port,Link);
- _Title ->
- Html
+wait_for_progress_done() ->
+ receive
+ {progress,{error,Reason}} ->
+ unregister(cdv_progress_handler),
+ {error,lists:flatten(Reason)};
+ {progress,{ok,done}} ->
+ unregister(cdv_progress_handler),
+ ok;
+ {progress,_} ->
+ wait_for_progress_done()
end.
-title([$<,$T,$I,$T,$L,$E,$>|Html]) ->
- title_end(Html);
-title([_|Html]) ->
- title(Html);
-title([]) ->
- [].
-
-title_end([$<,$/,$T,$I,$T,$L,$E,$>|_]) ->
- [];
-title_end([X|Html]) ->
- [X|title_end(Html)].
-
-
%%%-----------------------------------------------------------------
%%% General check of what is displayed for a dump
-browse_file(Port,File) ->
+browse_file(File) ->
io:format("Browsing file: ~s~n",[File]),
- %% The page where a filename can be entered
- title(Port,"read_file_frame","Read File"),
-
- %% Load a file
- Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
- Html = request_sync(post,{Url,[],[],"path="++File}),
- "Please wait..." = title(Html),
- "Crashdump Viewer Start Page" = title(wait(10,Port,"start_page")),
-
- %% The frame with the initial information for a dump
- title(Port,"initial_info_frame","General Information"),
-
- %% Topmost frame of the page
- FilenameFrame = contents(Port,"filename_frame"),
- Match = "FilenameCrashdump currently viewed:" ++ File,
- true = lists:prefix(Match,strip(FilenameFrame)),
-
- %% Toggle a menu item and check that it explodes/collapses
- title(Port,"menu_frame","Menu"),
- exploded = toggle_menu(Port),
- collapsed = toggle_menu(Port),
-
- %% Open each page in menu and check that correct title is shown
- title(Port,"general_info","General Information"),
- title(Port,"processes","Process Information"),
- title(Port,"sort_procs?sort=state","Process Information"),
- title(Port,"sort_procs?sort=state","Process Information"),
- title(Port,"sort_procs?sort=pid","Process Information"),
- title(Port,"sort_procs?sort=pid","Process Information"),
- title(Port,"sort_procs?sort=msg_q_len","Process Information"),
- title(Port,"sort_procs?sort=msg_q_len","Process Information"),
- title(Port,"sort_procs?sort=reds","Process Information"),
- title(Port,"sort_procs?sort=reds","Process Information"),
- title(Port,"sort_procs?sort=mem","Process Information"),
- title(Port,"sort_procs?sort=mem","Process Information"),
- title(Port,"sort_procs?sort=name","Process Information"),
- title(Port,"sort_procs?sort=name","Process Information"),
- title(Port,"sort_procs?sort=init_func","Process Information"),
- title(Port,"sort_procs?sort=init_func","Process Information"),
- title(Port,"ports","Port Information"),
- title(Port,"ets_tables","ETS Table Information"),
- title(Port,"timers","Timer Information"),
- title(Port,"fun_table","Fun Information"),
- title(Port,"atoms","Atoms"),
- title(Port,"dist_info","Distribution Information"),
- title(Port,"loaded_modules","Loaded Modules Information"),
- title(Port,"hash_tables","Hash Table Information"),
- title(Port,"index_tables","Index Table Information"),
- title(Port,"memory","Memory Information"),
- title(Port,"allocated_areas","Information about allocated areas"),
- title(Port,"allocator_info","Allocator Information"),
-
- case is_truncated(File) of
- true ->
- ok;
- _ ->
- proc_details(Port),
- port_details(Port),
- title(Port,"loaded_mod_details?mod=kernel","kernel")
- end,
-
- ok.
-
-
-special(Port,File) ->
+ ok = start_backend(File),
+
+ {ok,_GI=#general_info{},_GenTW} = crashdump_viewer:general_info(),
+ {ok,Procs,_ProcsTW} = crashdump_viewer:processes(),
+ {ok,Ports,_PortsTW} = crashdump_viewer:ports(),
+ {ok,_Ets,_EtsTW} = crashdump_viewer:ets_tables(all),
+ {ok,_IntEts,_IntEtsTW} = crashdump_viewer:internal_ets_tables(),
+ {ok,_Timers,_TimersTW} = crashdump_viewer:timers(all),
+ {ok,_Funs,_FunsTW} = crashdump_viewer:funs(),
+ {ok,_Atoms,_AtomsTW} = crashdump_viewer:atoms(),
+ {ok,Nodes,_NodesTW} = crashdump_viewer:dist_info(),
+ {ok,Mods,_ModsTW} = crashdump_viewer:loaded_modules(),
+ {ok,_Mem,_MemTW} = crashdump_viewer:memory(),
+ {ok,_AllocAreas,_AreaTW} = crashdump_viewer:allocated_areas(),
+ {ok,_AllocINfo,_AllocInfoTW} = crashdump_viewer:allocator_info(),
+ {ok,_HashTabs,_HashTabsTW} = crashdump_viewer:hash_tables(),
+ {ok,_IndexTabs,_IndexTabsTW} = crashdump_viewer:index_tables(),
+
+ lookat_all_pids(Procs),
+ lookat_all_ports(Ports),
+ lookat_all_mods(Mods),
+ lookat_all_nodes(Nodes),
+
+ Procs. % used as second arg to special/2
+
+special(File,Procs) ->
case filename:extension(File) of
".full_dist" ->
- contents(Port,"processes"),
- AllProcs = contents(Port,"sort_procs?sort=name"),
-
%% I registered a process as aaaaaaaa in the full_dist dumps
%% to make sure it will be the first in the list when sorted
%% on names. There are some special data here, so I'll thoroughly
%% read the process details for this process. Other processes
%% are just briefly traversed.
- {Pid,Rest1} = get_first_process(AllProcs),
-
- ProcDetails = contents(Port,"proc_details?pid=" ++ Pid),
- ProcTitle = "Process " ++ Pid,
- ProcTitle = title(ProcDetails),
- title(Port,"ets_tables?pid="++Pid,"ETS Tables for Process "++Pid),
- title(Port,"timers?pid="++Pid,"Timers for Process "++Pid),
-
- case filename:basename(File) of
- "r10b_dump.full_dist" ->
- [MsgQueueLink,DictLink,StackDumpLink] =
- expand_memory_links(ProcDetails),
- MsgQueue = contents(Port,MsgQueueLink),
- "MsgQueue" = title(MsgQueue),
- title(Port,DictLink,"Dictionary"),
- title(Port,StackDumpLink,"StackDump"),
-
- ExpandBinaryLink = expand_binary_link(MsgQueue),
- title(Port,ExpandBinaryLink,"Expanded binary"),
- lookat_all_pids(Port,Rest1);
- _ ->
- ok
- end;
- ".strangemodname" ->
- AllMods = contents(Port,"loaded_modules"),
- open_all_modules(Port,AllMods),
+ [#proc{pid=Pid0}|_Rest] = lists:keysort(#proc.name,Procs),
+ Pid = pid_to_list(Pid0),
+ {ok,ProcDetails=#proc{},[]} = crashdump_viewer:proc_details(Pid),
+
+ #proc{dict=Dict} = ProcDetails,
+
+ ['#CDVBin',Offset,Size,Pos] = proplists:get_value(bin,Dict),
+ {ok,<<_:Size/binary>>} =
+ crashdump_viewer:expand_binary({Offset,Size,Pos}),
+ {ok,'#CDVTruncatedBinary'} =
+ crashdump_viewer:expand_binary({Offset,Size+1,Pos}),
+ ['#CDVBin',SOffset,SSize,SPos] = proplists:get_value(sub_bin,Dict),
+ {ok,<<_:SSize/binary>>} =
+ crashdump_viewer:expand_binary({SOffset,SSize,SPos}),
+
+ ['#CDVPid',X1,Y1,Z1] = proplists:get_value(ext_pid,Dict),
+ ChannelStr1 = integer_to_list(X1),
+ ExtPid =
+ "<" ++ ChannelStr1 ++ "." ++
+ integer_to_list(Y1) ++ "." ++
+ integer_to_list(Z1) ++ ">",
+ {error,{other_node,ChannelStr1}} =
+ crashdump_viewer:proc_details(ExtPid),
+
+ ['#CDVPort',X2,Y2] = proplists:get_value(port,Dict),
+ ChannelStr2 = integer_to_list(X2),
+ Port = "#Port<"++ChannelStr2++"."++integer_to_list(Y2)++">",
+ {ok,_PortDetails=#port{},[]} = crashdump_viewer:port(Port),
+
+ ['#CDVPort',X3,Y3] = proplists:get_value(ext_port,Dict),
+ ChannelStr3 = integer_to_list(X3),
+ ExtPort = "#Port<"++ChannelStr3++"."++integer_to_list(Y3)++">",
+ {error,{other_node,ChannelStr3}} = crashdump_viewer:port(ExtPort),
+
+ {ok,[_Ets=#ets_table{}],[]} = crashdump_viewer:ets_tables(Pid),
+ {ok,[_Timer=#timer{}],[]} = crashdump_viewer:timers(Pid),
+
+ {ok,Mod1=#loaded_mod{},[]} =
+ crashdump_viewer:loaded_mod_details(atom_to_list(?helper_mod)),
+ #loaded_mod{current_size=CS, old_size=OS,
+ old_attrib=A,old_comp_info=C}=Mod1,
+ true = is_integer(CS),
+ true = (CS==OS),
+ true = (A=/=undefined),
+ true = (C=/=undefined),
+ {ok,Mod2=#loaded_mod{},[]} =
+ crashdump_viewer:loaded_mod_details("application"),
+ #loaded_mod{old_size="No old code exists",
+ old_attrib=undefined,
+ old_comp_info=undefined}=Mod2,
ok;
- %%! No longer needed - all atoms are shown on one page!!
- %% ".250atoms" ->
- %% Html1 = contents(Port,"atoms"),
- %% NextLink1 = next_link(Html1),
- %% "Atoms" = title(Html1),
- %% Html2 = contents(Port,NextLink1),
- %% NextLink2 = next_link(Html2),
- %% "Atoms" = title(Html2),
- %% Html3 = contents(Port,NextLink2),
- %% "" = next_link(Html3),
- %% "Atoms" = title(Html3);
- _ ->
- ok
- end,
- case filename:basename(File) of
- "r10b_dump." ++ _ ->
- lookat_all_pids(Port,contents(Port,"processes"));
- "r11b_dump." ++ _ ->
- lookat_all_pids(Port,contents(Port,"processes"));
+ %% ".strangemodname" ->
+ %% {ok,Mods,[]} = crashdump_viewer:loaded_modules(),
+ %% lookat_all_mods(Mods),
+ %% ok;
+ %% ".sort" ->
+ %% %% sort ports, atoms and modules ????
+ %% ok;
+ %% ".trunc" ->
+ %% %% ????
+ %% ok;
_ ->
ok
end,
ok.
-lookat_all_pids(Port,Pids) ->
- case get_first_process(Pids) of
- {Pid,Rest} ->
- ProcDetails = contents(Port,"proc_details?pid=" ++ Pid),
- ProcTitle = "Process " ++ Pid,
- ProcTitle = title(ProcDetails),
- title(Port,"ets_tables?pid="++Pid,"ETS Tables for Process "++Pid),
- title(Port,"timers?pid="++Pid,"Timers for Process "++Pid),
-
- MemoryLinks = expand_memory_links(ProcDetails),
- lists:foreach(
- fun(Link) ->
- Cont = contents(Port,Link),
- true = lists:member(title(Cont),
- ["MsgQueue",
- "Dictionary",
- "StackDump"])
- end,
- MemoryLinks),
- lookat_all_pids(Port,Rest);
- false ->
- ok
- end.
-
-
-get_first_process([]) ->
- false;
-get_first_process(Html) ->
- case Html of
- "<TD><A HREF=\"./proc_details?pid=" ++ Rest ->
- {string:sub_word(Rest,1,$"),Rest};
- [_H|T] ->
- get_first_process(T)
- end.
-
-expand_memory_links(Html) ->
- case Html of
- "<B>MsgQueue</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
- [string:sub_word(Rest,1,$")|expand_memory_links(Rest)];
- "<B>Dictionary</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
- [string:sub_word(Rest,1,$")|expand_memory_links(Rest)];
- "<B>StackDump</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
- [string:sub_word(Rest,1,$")];
- [_H|T] ->
- expand_memory_links(T);
- [] ->
- []
- end.
-
-expand_binary_link(Html) ->
- case Html of
- "<A HREF=\"./expand_binary?pos=" ++ Rest ->
- "expand_binary?pos=" ++ string:sub_word(Rest,1,$");
- [_H|T] ->
- expand_binary_link(T)
- end.
-
-open_all_modules(Port,Modules) ->
- case get_first_module(Modules) of
- {Module,Rest} ->
- ModuleDetails = contents(Port,"loaded_mod_details?mod=" ++ Module),
- ModTitle = http_uri:decode(Module),
- ModTitle = title(ModuleDetails),
- open_all_modules(Port,Rest);
- false ->
- ok
- end.
-
-get_first_module([]) ->
- false;
-get_first_module(Html) ->
- case Html of
- "<TD><A HREF=\"loaded_mod_details?mod=" ++ Rest ->
- {string:sub_word(Rest,1,$"),Rest};
- [_H|T] ->
- get_first_module(T)
- end.
-
-%% next_link(Html) ->
-%% case Html of
-%% "<A HREF=\"./next?pos=" ++ Rest ->
-%% "next?pos=" ++ string:sub_word(Rest,1,$");
-%% [_H|T] ->
-%% next_link(T);
-%% [] ->
-%% []
-%% end.
-
-
-
-toggle_menu(Port) ->
- Html = contents(Port,"toggle?index=4"),
- check_toggle(Html).
-
-check_toggle(Html) ->
- case Html of
- "<A HREF=\"./toggle?index=4\"><IMG SRC=\"/crashdump_viewer/collapsd.gif\"" ++ _ ->
- collapsed;
- "<A HREF=\"./toggle?index=4\"><IMG SRC=\"/crashdump_viewer/exploded.gif\"" ++ _ ->
- exploded;
- [_H|T] ->
- check_toggle(T)
- end.
-
-
-proc_details(Port) ->
- ProcDetails = contents(Port,"proc_details?pid=<0.0.0>"),
- "Process <0.0.0>" = title(ProcDetails),
-
- ExpandLink = expand_link(ProcDetails),
- title(Port,ExpandLink,"StackDump"),
-
- Unknown = contents(Port,"proc_details?pid=<0.9999.0>"),
- "Could not find process: <0.9999.0>" = title(Unknown).
-
-expand_link(Html) ->
- case Html of
- "<B>StackDump</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
- string:sub_word(Rest,1,$");
- [_H|T] ->
- expand_link(T)
- end.
-
-
-port_details(Port) ->
- Port0 = contents(Port,"port?port=Port<0.0>"),
- Port1 = contents(Port,"port?port=Port<0.1>"),
- case title(Port0) of
- "#Port<0.0>" -> % R16 or later
- "Could not find port: #Port<0.1>" = title(Port1);
- "Could not find port: #Port<0.0>" -> % R15 or earlier
- "#Port<0.1>" = title(Port1)
- end.
-
-is_truncated(File) ->
- case filename:extension(filename:rootname(File)) of
- ".trunc" -> true;
- _ -> false
- end.
-
+lookat_all_pids([]) ->
+ ok;
+lookat_all_pids([#proc{pid=Pid0}|Procs]) ->
+ Pid = pid_to_list(Pid0),
+ {ok,_ProcDetails=#proc{},_ProcTW} = crashdump_viewer:proc_details(Pid),
+ {ok,_Ets,_EtsTW} = crashdump_viewer:ets_tables(Pid),
+ {ok,_Timers,_TimersTW} = crashdump_viewer:timers(Pid),
+ lookat_all_pids(Procs).
+
+lookat_all_ports([]) ->
+ ok;
+lookat_all_ports([#port{id=Port0}|Procs]) ->
+ Port = cdv_port_cb:format(Port0),
+ {ok,_PortDetails=#port{},_PortTW} = crashdump_viewer:port(Port),
+ lookat_all_ports(Procs).
+
+lookat_all_mods([]) ->
+ ok;
+lookat_all_mods([#loaded_mod{mod=ModId}|Mods]) ->
+ ModName = cdv_mod_cb:format(ModId),
+ {ok,_Mod=#loaded_mod{},_ModTW} = crashdump_viewer:loaded_mod_details(ModName),
+ lookat_all_mods(Mods).
+
+lookat_all_nodes([]) ->
+ ok;
+lookat_all_nodes([#nod{channel=Channel0}|Nodes]) ->
+ Channel = integer_to_list(Channel0),
+ {ok,_Node=#nod{},_NodeTW} = crashdump_viewer:node_info(Channel),
+ lookat_all_nodes(Nodes).
%%%-----------------------------------------------------------------
%%%
@@ -629,22 +404,13 @@ create_dumps(DataDir,Rels) ->
create_dumps(DataDir,[Rel|Rels],Acc) ->
Fun = fun() -> do_create_dumps(DataDir,Rel) end,
Pa = filename:dirname(code:which(?MODULE)),
- {SlAllocDumps,Dumps,DosDump} =
+ {Dumps,DosDump} =
?t:run_on_shielded_node(Fun, compat_rel(Rel) ++ "-pa \"" ++ Pa ++ "\""),
- create_dumps(DataDir,Rels,SlAllocDumps ++ Dumps ++ Acc ++ DosDump);
+ create_dumps(DataDir,Rels,Dumps ++ Acc ++ DosDump);
create_dumps(_DataDir,[],Acc) ->
Acc.
do_create_dumps(DataDir,Rel) ->
- SlAllocDumps =
- case lists:member(Rel,?sl_alloc_vsns) of
- true ->
- [dump_with_args(DataDir,Rel,"no_sl_alloc","+Se false"),
- dump_with_args(DataDir,Rel,"sl_alloc_1","+Se true +Sr 1"),
- dump_with_args(DataDir,Rel,"sl_alloc_2","+Se true +Sr 2")];
- false ->
- []
- end,
CD1 = full_dist_dump(DataDir,Rel),
CD2 = dump_with_args(DataDir,Rel,"port_is_unix_fd","-oldshell"),
DosDump =
@@ -656,9 +422,9 @@ do_create_dumps(DataDir,Rel) ->
current ->
CD3 = dump_with_args(DataDir,Rel,"instr","+Mim true"),
CD4 = dump_with_strange_module_name(DataDir,Rel,"strangemodname"),
- {SlAllocDumps, [CD1,CD2,CD3,CD4], DosDump};
+ {[CD1,CD2,CD3,CD4], DosDump};
_ ->
- {SlAllocDumps, [CD1,CD2], DosDump}
+ {[CD1,CD2], DosDump}
end.
@@ -674,23 +440,17 @@ full_dist_dump(DataDir,Rel) ->
{ok,N4} = ?t:start_node(n4,peer,Opt ++ [{args,"-hidden " ++ Pz}]),
Creator = self(),
- HelperMod = crashdump_helper,
-
- P1 = rpc:call(N1,HelperMod,n1_proc,[N2,Creator]),
- P2 = rpc:call(N2,HelperMod,remote_proc,[P1,Creator]),
- P3 = rpc:call(N3,HelperMod,remote_proc,[P1,Creator]),
- P4 = rpc:call(N4,HelperMod,remote_proc,[P1,Creator]),
+ P1 = rpc:call(N1,?helper_mod,n1_proc,[N2,Creator]),
+ P2 = rpc:call(N2,?helper_mod,remote_proc,[P1,Creator]),
+ P3 = rpc:call(N3,?helper_mod,remote_proc,[P1,Creator]),
+ P4 = rpc:call(N4,?helper_mod,remote_proc,[P1,Creator]),
get_response(P2),
get_response(P3),
get_response(P4),
get_response(P1),
- L = lists:seq(0,255),
- BigMsg = {message,list_to_binary(L),L},
- Port = hd(erlang:ports()),
- {aaaaaaaa,N1} ! {short,message,1,2.5,"hello world",Port,{}},
- {aaaaaaaa,N1} ! BigMsg,
+ {aaaaaaaa,N1} ! {hello,from,other,node}, % distribution message
?t:stop_node(N3),
DumpName = "full_dist",
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms
deleted file mode 100644
index 921c27bd0e..0000000000
--- a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms
+++ /dev/null
@@ -1,13135 +0,0 @@
-=erl_crash_dump:0.1
-Wed Apr 21 13:22:44 2004
-Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
-System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
-Compiled: Thu Dec 18 14:07:45 2003
-Atoms: 5614
-=memory
-total: 653336887
-processes: 1768396
-processes_used: 1765460
-system: 651568491
-atom: 244837
-atom_used: 237116
-binary: 648618369
-code: 2158413
-ets: 225620
-=hash_table:atom_tab
-size: 4813
-used: 3304
-objs: 5614
-depth: 7
-=index_table:atom_tab
-size: 5700
-limit: 1048576
-used: 5614
-rate: 100
-=hash_table:module_code
-size: 97
-used: 69
-objs: 107
-depth: 5
-=index_table:module_code
-size: 110
-limit: 65536
-used: 107
-rate: 10
-=hash_table:export_list
-size: 2411
-used: 1674
-objs: 2843
-depth: 6
-=index_table:export_list
-size: 2900
-limit: 65536
-used: 2843
-rate: 100
-=hash_table:process_reg
-size: 47
-used: 16
-objs: 23
-depth: 3
-=hash_table:fun_table
-size: 397
-used: 261
-objs: 400
-depth: 4
-=hash_table:node_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=hash_table:dist_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=allocated_areas
-processes: 1765460 1768396
-ets: 225620
-sys_misc: 24634
-static: 295033
-atom_space: 65544 57967
-binary: 648618369
-atom_table: 42141
-module_table: 920
-export_table: 21336
-register_table: 252
-fun_table: 1650
-module_refs: 1024
-loaded_code: 1968915
-dist_table: 159
-node_table: 131
-bits_bufs_size: 19
-bif_timer: 13392
-link_lh: 0
-dist_buf: 0
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:sys_alloc
-option e: true
-option m: libc
-=allocator:temp_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 90
-option rsbcmt: 80
-option mmbcs: 65536
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: af
-mbcs blocks: 0 9 9
-mbcs blocks size: 0 35376 35376
-mbcs carriers: 1 1 1
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 65568 65568 65568
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 65568
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-temp_alloc calls: 6155
-temp_free calls: 6155
-temp_realloc calls: 29
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 1
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:sl_alloc
-option e: false
-=allocator:std_alloc
-option e: false
-=allocator:ll_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 4294967295
-option asbcst: 0
-option rsbcst: 0
-option rsbcmt: 0
-option mmbcs: 2097152
-option mmsbc: 0
-option mmmbc: 0
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: aobf
-mbcs blocks: 592 592 592
-mbcs blocks size: 2838520 2863304 2863304
-mbcs carriers: 2 2 2
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 2
-mbcs carriers size: 3145760 3145760 3145760
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 3145760
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-ll_alloc calls: 592
-ll_free calls: 0
-ll_realloc calls: 235
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 2
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:eheap_alloc
-versions: 2.1 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 50
-option rsbcmt: 80
-option mmbcs: 524288
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option mbsd: 3
-option as: gf
-mbcs blocks: 56 102 102
-mbcs blocks size: 833280 1638920 1638920
-mbcs carriers: 2 3 3
-mbcs mseg carriers: 1
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 1998880 3047456 3047456
-mbcs mseg carriers size: 1474560
-mbcs sys_alloc carriers size: 524320
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-eheap_alloc calls: 6971
-eheap_free calls: 6914
-eheap_realloc calls: 461
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-sys_alloc calls: 3
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:binary_alloc
-option e: false
-=allocator:ets_alloc
-option e: false
-=allocator:fix_alloc
-option e: true
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:mseg_alloc
-version: 0.9
-option amcbf: 4194304
-option rmcbf: 20
-option mcs: 5
-option cci: 1000
-cached_segments: 0
-cache_hits: 13
-segments: 2
-segments_watermark: 2
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-mseg_create calls: 4
-mseg_destroy calls: 1
-mseg_clear_cache calls: 6
-mseg_check_cache calls: 2
-=allocator:alloc_util
-option mmc: 1024
-option ycs: 1048576
-=allocator:instr
-option m: false
-option s: false
-option t: false
-=proc:<0.0.0>
-State: Waiting
-Name: init
-Spawned as: otp_ring0:start/2
-Spawned by: []
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
-Reductions: 3851
-Stack+heap: 377
-OldHeap: 610
-Heap unused: 53
-OldHeap unused: 610
-Program counter: 0x1f496c (init:loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.2.0>
-State: Waiting
-Name: erl_prim_loader
-Spawned as: erlang:apply/2
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.0.0>,#Port<0.2>]
-Reductions: 201036
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 923
-OldHeap unused: 987
-Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.4.0>
-State: Waiting
-Name: error_logger
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.0.0>]
-Reductions: 296
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 851
-OldHeap unused: 0
-Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.5.0>
-State: Waiting
-Name: application_controller
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.7.0>,<0.0.0>]
-Reductions: 1508
-Stack+heap: 1597
-OldHeap: 0
-Heap unused: 835
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.7.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.6.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.8.0>,<0.5.0>]
-Reductions: 23
-Stack+heap: 377
-OldHeap: 0
-Heap unused: 79
-OldHeap unused: 0
-Program counter: 0x248d04 (application_master:main_loop/2 + 28)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.8.0>
-State: Waiting
-Spawned as: application_master:start_it/4
-Spawned by: <0.7.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>,<0.7.0>]
-Reductions: 91
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 177
-OldHeap unused: 0
-Program counter: 0x24a26c (application_master:loop_it/4 + 40)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.9.0>
-State: Waiting
-Name: kernel_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.8.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
-Reductions: 7402
-Stack+heap: 610
-OldHeap: 987
-Heap unused: 311
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.10.0>
-State: Waiting
-Name: rex
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 44
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 144
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.11.0>
-State: Waiting
-Name: global_name_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
-Reductions: 47
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 98
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.12.0>
-State: Waiting
-Spawned as: global:init_the_locker/1
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 3
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 227
-OldHeap unused: 0
-Program counter: 0x261340 (global:loop_the_locker/2 + 92)
-CP: 0x261184 (global:init_the_locker/1 + 112)
-arity = 0
-=proc:<0.13.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 4
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 221
-OldHeap unused: 0
-Program counter: 0x265288 (global:collect_deletions/2 + 76)
-CP: 0x2651ac (global:loop_the_deleter/1 + 36)
-arity = 0
-=proc:<0.14.0>
-State: Waiting
-Name: inet_db
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 376
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 30
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.15.0>
-State: Waiting
-Name: global_group
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 71
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 92
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.16.0>
-State: Waiting
-Name: file_server_2
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 119
-Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
-Reductions: 83605
-Stack+heap: 4181
-OldHeap: 4181
-Heap unused: 1720
-OldHeap unused: 4181
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.17.0>
-State: Waiting
-Name: file_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
-Reductions: 12
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 207
-OldHeap unused: 0
-Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.18.0>
-State: Waiting
-Name: code_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 108900
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 4389
-OldHeap unused: 6765
-Program counter: 0x2a6e64 (code_server:loop/1 + 64)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.19.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.9.0>]
-Reductions: 74
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 180
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.20.0>
-State: Waiting
-Spawned as: user_drv:server/2
-Spawned by: <0.19.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
-Reductions: 596
-Stack+heap: 233
-OldHeap: 377
-Heap unused: 214
-OldHeap unused: 377
-Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.21.0>
-State: Waiting
-Name: user
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
-Reductions: 26
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 202
-OldHeap unused: 0
-Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.22.0>
-State: Waiting
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
-Reductions: 1244
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 40
-OldHeap unused: 233
-Program counter: 0x2cf238 (group:get_line1/3 + 1652)
-CP: 0x2cf230 (group:get_line1/3 + 1644)
-arity = 0
-=proc:<0.23.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 45
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 63
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.24.0>
-State: Waiting
-Name: kernel_safe_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.31.0>,<0.9.0>]
-Reductions: 133
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 198
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.25.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.22.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
-Reductions: 161
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 169
-OldHeap unused: 0
-Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
-CP: 0x2e06fc (shell:server_loop/6 + 140)
-arity = 0
-=proc:<0.27.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.25.0>]
-Reductions: 506
-Stack+heap: 4181
-OldHeap: 0
-Heap unused: 1131
-OldHeap unused: 0
-Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.31.0>
-State: Waiting
-Name: inet_gethost_native_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.24.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.32.0>,<0.24.0>]
-Reductions: 49
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 87
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.32.0>
-State: Waiting
-Name: inet_gethost_native
-Spawned as: inet_gethost_native:server_init/2
-Spawned by: <0.31.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 118
-Link list: [#Port<0.105>,<0.31.0>]
-Reductions: 65
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 13
-OldHeap unused: 0
-Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.33.0>
-State: Waiting
-Name: web_tool
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.27.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.41.0>]
-Reductions: 131773
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 2941
-OldHeap unused: 6765
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.41.0>
-State: Waiting
-Name: websup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.48.0>,<0.33.0>]
-Reductions: 118
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 205
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.43.0>
-State: Waiting
-Name: httpd_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
-Reductions: 1220
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 277
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.44.0>
-State: Waiting
-Name: httpd_acc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.47.0>,<0.43.0>]
-Reductions: 147
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 77
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.45.0>
-State: Waiting
-Name: httpd_misc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 52
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 80
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.46.0>
-State: Waiting
-Name: httpd__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 2905
-Stack+heap: 6765
-OldHeap: 10946
-Heap unused: 138
-OldHeap unused: 10946
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.47.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.44.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
-Reductions: 874
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 190
-OldHeap unused: 233
-Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
-CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
-arity = 0
-=proc:<0.48.0>
-State: Waiting
-Name: crashdump_viewer_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.41.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.56.0>,<0.41.0>]
-Reductions: 1913
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 524
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.49.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
-Reductions: 15
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 190
-OldHeap unused: 0
-Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
-CP: 0x30174c (io:parse_erl_exprs/3 + 92)
-arity = 0
-=proc:<0.56.0>
-State: Garbing
-Spawned as: erlang:apply/2
-Last scheduled in for: erlang:garbage_collect/0
-Spawned by: <0.48.0>
-Started: Wed Apr 21 13:22:27 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 121
-Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
-Reductions: 2420470
-Stack+heap: 121393
-OldHeap: 0
-Heap unused: 22172
-OldHeap unused: 0
-New heap start: FE5768E0
-New heap top: FE5D7734
-Stack top: FE5ED130
-Stack end: FE5ED1A4
-Old heap start: 0
-Old heap top: 0
-Old heap end: 0
-Program counter: 0x1a4980 (unknown function)
-CP: 0x20710c (prim_file:read/2 + 436)
-=port:#Port<0.1>
-Slot: 1
-Connected: #Port<0.0>
-Port controls linked-in driver: async
-=port:#Port<0.2>
-Slot: 2
-Connected: <0.2.0>
-Links: <0.2.0>
-Port controls linked-in driver: efile
-=port:#Port<0.4>
-Slot: 4
-Connected: <0.16.0>
-Links: <0.16.0>
-Port controls linked-in driver: efile
-=port:#Port<0.72>
-Slot: 72
-Connected: <0.20.0>
-Links: <0.20.0>
-Port controls linked-in driver: tty_sl -c -e
-=port:#Port<0.105>
-Slot: 105
-Connected: <0.32.0>
-Links: <0.32.0>
-Port controls external process: inet_gethost 4
-=port:#Port<0.141>
-Slot: 141
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=port:#Port<0.157>
-Slot: 157
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.158>
-Slot: 158
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.161>
-Slot: 161
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=ets:<0.18.0>
-Slot: 9
-Table: 9
-Name: code
-Buckets: 256
-Objects: 289
-Words: 14108
-=ets:<0.18.0>
-Slot: 10
-Table: 10
-Name: code_names
-Buckets: 256
-Objects: 47
-Words: 4334
-=ets:<0.32.0>
-Slot: 11
-Table: 11
-Name: ign_requests
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.32.0>
-Slot: 12
-Table: 12
-Name: ign_req_index
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.33.0>
-Slot: 13
-Table: 13
-Name: app_data
-Buckets: 256
-Objects: 7
-Words: 952
-=ets:<0.46.0>
-Slot: 15
-Table: 15
-Name: httpd_mime__127_0_0_1__8888
-Buckets: 256
-Objects: 105
-Words: 5742
-=ets:<0.11.0>
-Slot: 84
-Table: global_names
-Name: global_names
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 95
-Table: global_locks
-Name: global_locks
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 96
-Table: global_names_ext
-Name: global_names_ext
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.14.0>
-Slot: 316
-Table: inet_cache
-Name: inet_cache
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 340
-Table: cdv_menu_table
-Name: cdv_menu_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 341
-Table: cdv_dump_index_table
-Name: cdv_dump_index_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 342
-Table: cdv_decode_heap_table
-Name: cdv_decode_heap_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.16.0>
-Slot: 780
-Table: file_io_servers
-Name: file_io_servers
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.46.0>
-Slot: 984
-Table: httpd_conf__127_0_0_1__8888
-Name: httpd_conf__127_0_0_1__8888
-Buckets: 256
-Objects: 17
-Words: 1176
-=ets:<0.14.0>
-Slot: 1342
-Table: inet_hosts
-Name: inet_hosts
-Buckets: 256
-Objects: 4
-Words: 421
-=ets:<0.14.0>
-Slot: 1362
-Table: inet_db
-Name: inet_db
-Buckets: 256
-Objects: 20
-Words: 671
-=ets:<0.5.0>
-Slot: 1655
-Table: ac_tab
-Name: ac_tab
-Buckets: 256
-Objects: 6
-Words: 843
-=timer:<0.14.0>
-Message: refresh_timeout
-Time left: 3565692 ms
-=node:'nonode@nohost'
-=no_distribution
-=loaded_modules
-Current code: 1968915
-Old code: 0
-=mod:otp_ring0
-Current size: 489
-=mod:init
-Current size: 30110
-=mod:prim_inet
-Current size: 35532
-=mod:prim_file
-Current size: 24965
-=mod:erl_prim_loader
-Current size: 19607
-=mod:erlang
-Current size: 11137
-=mod:error_handler
-Current size: 2389
-Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
-=mod:heart
-Current size: 6687
-Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
-=mod:error_logger
-Current size: 7051
-Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
-=mod:gen_event
-Current size: 18288
-Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
-=mod:gen
-Current size: 7129
-Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
-=mod:proc_lib
-Current size: 11658
-Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
-=mod:application_controller
-Current size: 55249
-Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
-=mod:gen_server
-Current size: 18728
-Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
-=mod:sys
-Current size: 11589
-Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
-=mod:lists
-Current size: 18638
-Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
-=mod:application
-Current size: 2666
-Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
-=mod:application_master
-Current size: 10912
-Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
-=mod:kernel
-Current size: 7639
-Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
-=mod:supervisor
-Current size: 24469
-Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
-=mod:rpc
-Current size: 14539
-Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
-=mod:gb_trees
-Current size: 8274
-Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
-=mod:global
-Current size: 40753
-Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
-=mod:inet_db
-Current size: 34555
-Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
-=mod:inet_config
-Current size: 13575
-Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
-=mod:os
-Current size: 5997
-Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
-=mod:inet_udp
-Current size: 2451
-Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
-=mod:inet
-Current size: 28288
-Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
-=mod:inet_parse
-Current size: 21928
-Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
-=mod:filename
-Current size: 17411
-Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
-=mod:inet_hosts
-Current size: 3745
-Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
-=mod:erl_distribution
-Current size: 2512
-Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
-=mod:global_group
-Current size: 30960
-Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
-=mod:net_kernel
-Current size: 37648
-Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
-=mod:file_server
-Current size: 8372
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
-=mod:old_file_server
-Current size: 3074
-Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
-=mod:code
-Current size: 7419
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
-=mod:code_server
-Current size: 30811
-Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
-=mod:code_aux
-Current size: 1736
-Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
-=mod:packages
-Current size: 3119
-Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
-=mod:hipe_unified_loader
-Current size: 37330
-Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
-=mod:hipe_sparc_loader
-Current size: 1821
-Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
-=mod:ets
-Current size: 16577
-Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
-=mod:lists_sort
-Current size: 38692
-Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
-=mod:user_sup
-Current size: 2355
-Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
-=mod:supervisor_bridge
-Current size: 2944
-Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
-=mod:user_drv
-Current size: 14630
-Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
-=mod:group
-Current size: 10165
-Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
-=mod:io_lib
-Current size: 12601
-Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
-=mod:edlin
-Current size: 18178
-Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
-=mod:io_lib_format
-Current size: 16189
-Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
-=mod:kernel_config
-Current size: 3295
-Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
-=mod:shell
-Current size: 22571
-Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
-=mod:error_logger_tty_h
-Current size: 7773
-Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
-=mod:erl_eval
-Current size: 33481
-Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
-=mod:orddict
-Current size: 4872
-Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
-=mod:c
-Current size: 19555
-Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
-=mod:io
-Current size: 7417
-Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
-=mod:file
-Current size: 20795
-Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
-=mod:file_io_server
-Current size: 12071
-Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
-=mod:erl_scan
-Current size: 21891
-Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
-=mod:erl_parse
-Current size: 161233
-Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
-=mod:erl_lint
-Current size: 73159
-Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
-=mod:ordsets
-Current size: 3257
-Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
-=mod:dict
-Current size: 15637
-Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
-=mod:otp_internal
-Current size: 7133
-Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
-=mod:user_default
-Current size: 1261
-Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
-=mod:tt
-Current size: 2959
-Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
-=mod:distel
-Current size: 18214
-Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
-Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
-=mod:crashdump_viewer
-Current size: 125756
-Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
-=mod:webtool
-Current size: 29229
-Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
-=mod:gen_tcp
-Current size: 3574
-Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
-=mod:inet_tcp
-Current size: 2743
-Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
-=mod:inet_gethost_native
-Current size: 15611
-Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
-=mod:filelib
-Current size: 7202
-Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
-=mod:httpd_util
-Current size: 24068
-Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
-=mod:webtool_sup
-Current size: 695
-Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
-=mod:httpd_conf
-Current size: 33659
-Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
-=mod:regexp
-Current size: 13698
-Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
-=mod:string
-Current size: 7740
-Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
-=mod:httpd
-Current size: 7563
-Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
-=mod:httpd_sup
-Current size: 4068
-Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
-=mod:httpd_acceptor_sup
-Current size: 2161
-Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
-=mod:httpd_verbosity
-Current size: 2672
-Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
-=mod:timer
-Current size: 8223
-Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
-=mod:httpd_misc_sup
-Current size: 2066
-Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
-=mod:httpd_manager
-Current size: 28916
-Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
-=mod:mod_alias
-Current size: 6720
-Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
-=mod:mod_auth
-Current size: 25168
-Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
-=mod:mod_esi
-Current size: 22534
-Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
-=mod:mod_actions
-Current size: 3625
-Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
-=mod:mod_cgi
-Current size: 25891
-Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
-=mod:mod_include
-Current size: 34923
-Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
-=mod:mod_dir
-Current size: 13488
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
-=mod:mod_get
-Current size: 4672
-Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
-=mod:mod_head
-Current size: 3074
-Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
-=mod:mod_log
-Current size: 8546
-Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
-=mod:mod_disk_log
-Current size: 15160
-Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
-=mod:httpd_socket
-Current size: 7426
-Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
-=mod:httpd_acceptor
-Current size: 4472
-Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
-=mod:io_lib_pretty
-Current size: 8171
-Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
-=mod:httpd_request_handler
-Current size: 26393
-Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
-=mod:calendar
-Current size: 7158
-Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
-=mod:httpd_parse
-Current size: 9977
-Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
-=mod:httpd_response
-Current size: 13535
-Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
-=mod:crashdump_viewer_html
-Current size: 68343
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
-=mod:crashdump_translate
-Current size: 89840
-Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
-=fun
-Module: crashdump_viewer_html
-Uniq: 9122590
-Index: 0
-Address: 526308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 77168418
-Index: 14
-Address: 26541c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 88083515
-Index: 9
-Address: 284c30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 36747896
-Index: 4
-Address: 26df84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 80395734
-Index: 8
-Address: 265838
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 103184573
-Index: 5
-Address: 2fa59c
-Native_address: bce80
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 88265811
-Index: 24
-Address: 34f6a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 9644262
-Index: 2
-Address: 292cec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 100885585
-Index: 0
-Address: 29eb2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 128335479
-Index: 6
-Address: 26de84
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 42988083
-Index: 1
-Address: 210c14
-Native_address: bcf04
-Refc: 1
-=fun
-Module: dict
-Uniq: 7105125
-Index: 7
-Address: 354f84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 29030584
-Index: 8
-Address: 234978
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 29214351
-Index: 2
-Address: 285660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 5158633
-Index: 4
-Address: 274034
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 74624950
-Index: 25
-Address: 34f63c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 6477018
-Index: 3
-Address: 2adb6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 117885138
-Index: 7
-Address: 2ffff8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 47566924
-Index: 6
-Address: 354fb8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 114637756
-Index: 12
-Address: 313c60
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121316204
-Index: 31
-Address: 313a68
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61363639
-Index: 12
-Address: 2ad6a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 116208699
-Index: 3
-Address: 274094
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 113750737
-Index: 0
-Address: 292d54
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 12853672
-Index: 0
-Address: 222e74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108046357
-Index: 12
-Address: 4ab0b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 111569299
-Index: 47
-Address: 34e80c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 20108653
-Index: 15
-Address: 2f9f94
-Native_address: bcea4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 45252965
-Index: 15
-Address: 313c0c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 12437425
-Index: 9
-Address: 4ab3e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 30942993
-Index: 22
-Address: 34f6ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 93430337
-Index: 3
-Address: 33b100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 6604883
-Index: 2
-Address: 33b16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 36867745
-Index: 5
-Address: 255e28
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 90563105
-Index: 1
-Address: 285708
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 18519297
-Index: 7
-Address: 26ddfc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8058975
-Index: 16
-Address: 4a36b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 30694569
-Index: 7
-Address: 27d018
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 76933943
-Index: 0
-Address: 2741b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 9033258
-Index: 6
-Address: 4a4690
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 74851752
-Index: 5
-Address: 4a4798
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 50855382
-Index: 4
-Address: 2659a8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39211582
-Index: 52
-Address: 34e504
-Native_address: bceec
-Refc: 1
-=fun
-Module: file_server
-Uniq: 77665472
-Index: 0
-Address: 2a0dec
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 57487277
-Index: 8
-Address: 2fa3c4
-Native_address: bce94
-Refc: 1
-=fun
-Module: webtool
-Uniq: 87386575
-Index: 11
-Address: 4ab1c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 58991950
-Index: 8
-Address: 4a4338
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 118859163
-Index: 17
-Address: 4a34d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 38265609
-Index: 12
-Address: 354dec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 56903339
-Index: 1
-Address: 2527c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 129504763
-Index: 0
-Address: 28aae8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 44817307
-Index: 10
-Address: 354e3c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 52856894
-Index: 41
-Address: 34eb70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22623360
-Index: 23
-Address: 34f5d4
-Native_address: bceec
-Refc: 1
-=fun
-Module: orddict
-Uniq: 34963136
-Index: 0
-Address: 2fbbbc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erlang
-Uniq: 24496633
-Index: 0
-Address: 213744
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 99313855
-Index: 27
-Address: 2f9914
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 99137703
-Index: 3
-Address: 4b5dfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 124043500
-Index: 3
-Address: 222b84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 102650878
-Index: 22
-Address: 313b48
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 13333720
-Index: 12
-Address: 34fb2c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 133457
-Index: 5
-Address: 292a80
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 64640983
-Index: 4
-Address: 29e944
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 7580218
-Index: 2
-Address: 255f08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 131850870
-Index: 59
-Address: 34e6b8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 56617403
-Index: 10
-Address: 284b40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108680306
-Index: 4
-Address: 4ab5e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 90880071
-Index: 2
-Address: 26e150
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_io_server
-Uniq: 23980778
-Index: 0
-Address: 30ac30
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 12006418
-Index: 19
-Address: 2f9d54
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 81701030
-Index: 8
-Address: 526228
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 71013875
-Index: 1
-Address: 4a4ddc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: distel
-Uniq: 87740845
-Index: 2
-Address: 35c0e0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 90782401
-Index: 17
-Address: 2f9e8c
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 133882676
-Index: 6
-Address: 2e52ac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 105698088
-Index: 3
-Address: 2855b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 58370899
-Index: 0
-Address: 27d370
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 15274536
-Index: 25
-Address: 2f9a94
-Native_address: bcef4
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 94349557
-Index: 0
-Address: 252844
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 33328185
-Index: 1
-Address: 33b1d8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86971387
-Index: 16
-Address: 313db0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 53364473
-Index: 38
-Address: 34ee84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 128145687
-Index: 0
-Address: 4ab944
-Native_address: bcee4
-Refc: 1
-=fun
-Module: c
-Uniq: 98651404
-Index: 10
-Address: 2fff20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 78224618
-Index: 0
-Address: 313dcc
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 40779085
-Index: 11
-Address: 2e50c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 93517350
-Index: 4
-Address: 300090
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 58551291
-Index: 0
-Address: 234f14
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 10055518
-Index: 17
-Address: 526170
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 15795706
-Index: 19
-Address: 313bd4
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 31129467
-Index: 13
-Address: 313c44
-Native_address: bced4
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 115635393
-Index: 0
-Address: 2a1a4c
-Native_address: bcf04
-Refc: 2
-=fun
-Module: erl_eval
-Uniq: 65839696
-Index: 22
-Address: 2f9c00
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 69275064
-Index: 28
-Address: 313aa0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 55938066
-Index: 11
-Address: 354d6c
-Native_address: bceec
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 22323433
-Index: 3
-Address: 252688
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 129726129
-Index: 29
-Address: 313abc
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 84346832
-Index: 0
-Address: 3550fc
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 102096820
-Index: 7
-Address: 2e5290
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 70385762
-Index: 11
-Address: 27cf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_cgi
-Uniq: 1483038
-Index: 0
-Address: 4ec2e8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 3664813
-Index: 1
-Address: 3550b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 131143671
-Index: 6
-Address: 27d08c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 46286977
-Index: 2
-Address: 2740b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_esi
-Uniq: 49099432
-Index: 0
-Address: 4e522c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 95764905
-Index: 2
-Address: 24aaa8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: packages
-Uniq: 62890926
-Index: 0
-Address: 2ae814
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 41564771
-Index: 35
-Address: 3139f8
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 95490768
-Index: 0
-Address: 4a4dc0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121559432
-Index: 3
-Address: 313d78
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_conf
-Uniq: 21152662
-Index: 0
-Address: 4be5a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 41630916
-Index: 5
-Address: 29e914
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 19747201
-Index: 5
-Address: 313d24
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 100584837
-Index: 36
-Address: 34f0f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 64635712
-Index: 15
-Address: 34f94c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 46398361
-Index: 3
-Address: 29e9a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86699817
-Index: 27
-Address: 313b2c
-Native_address: bced4
-Refc: 1
-=fun
-Module: distel
-Uniq: 40869731
-Index: 0
-Address: 35c12c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 83701641
-Index: 1
-Address: 27d33c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_auth
-Uniq: 85845790
-Index: 0
-Address: 4dfd84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 101292714
-Index: 9
-Address: 2e519c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 134173702
-Index: 1
-Address: 265b68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 92433687
-Index: 6
-Address: 2ad9f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 62315241
-Index: 8
-Address: 354f38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 11615541
-Index: 12
-Address: 265530
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 11160090
-Index: 2
-Address: 2b6bb4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 12116524
-Index: 15
-Address: 2342c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 61620901
-Index: 2
-Address: 4fc670
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 23665189
-Index: 12
-Address: 4a3b94
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 43844413
-Index: 0
-Address: 300100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 100514258
-Index: 6
-Address: 313d08
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 54271286
-Index: 17
-Address: 34f8a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 47017252
-Index: 3
-Address: 26dfa0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 1228304
-Index: 7
-Address: 4a45a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 127131470
-Index: 10
-Address: 2655a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_server
-Uniq: 22638227
-Index: 1
-Address: 2a0e20
-Native_address: bcf04
-Refc: 1
-=fun
-Module: code_server
-Uniq: 112704920
-Index: 15
-Address: 2ad488
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88302875
-Index: 2
-Address: 2fa76c
-Native_address: bceb4
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 85808984
-Index: 1
-Address: 28ab18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 106391799
-Index: 0
-Address: 33b22c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25830519
-Index: 5
-Address: 27d0c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 110491036
-Index: 1
-Address: 2e5398
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 13128736
-Index: 5
-Address: 52627c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 84644982
-Index: 21
-Address: 313b9c
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 120577486
-Index: 3
-Address: 34fffc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 4504456
-Index: 44
-Address: 34e938
-Native_address: bceec
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 28754183
-Index: 0
-Address: 500140
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 88043334
-Index: 14
-Address: 313c28
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61592373
-Index: 0
-Address: 2adc28
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74468346
-Index: 26
-Address: 313ad8
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69896253
-Index: 21
-Address: 2f9c40
-Native_address: bce80
-Refc: 1
-=fun
-Module: global_group
-Uniq: 59656873
-Index: 4
-Address: 292ac0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 103891261
-Index: 2
-Address: 4a4d70
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 89619733
-Index: 0
-Address: 4b5e64
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 133201466
-Index: 10
-Address: 2e5180
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 32159369
-Index: 2
-Address: 4ab820
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 76861396
-Index: 2
-Address: 2adbb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 48206487
-Index: 0
-Address: 4fc6f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 118996551
-Index: 28
-Address: 34f384
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 12593774
-Index: 50
-Address: 34e60c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 48542841
-Index: 1
-Address: 50e88c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56178490
-Index: 9
-Address: 4a420c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 88212576
-Index: 4
-Address: 35bf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 79562132
-Index: 29
-Address: 34f368
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 129524917
-Index: 32
-Address: 34f2c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54029891
-Index: 23
-Address: 2f9af0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 108872092
-Index: 4
-Address: 27d0f0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 40905124
-Index: 6
-Address: 234ac0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 50124876
-Index: 10
-Address: 2ad760
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 791358
-Index: 48
-Address: 34e7b0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 18404828
-Index: 24
-Address: 313af4
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 13278653
-Index: 1
-Address: 4b5e48
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 110307423
-Index: 13
-Address: 284a7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 99592247
-Index: 0
-Address: 256118
-Native_address: bcf04
-Refc: 1
-=fun
-Module: global
-Uniq: 99918211
-Index: 2
-Address: 265af4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 71442319
-Index: 27
-Address: 34f510
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 7612785
-Index: 13
-Address: 2fa0fc
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56095795
-Index: 15
-Address: 4a38a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 23626796
-Index: 25
-Address: 313b10
-Native_address: bced4
-Refc: 1
-=fun
-Module: file_server
-Uniq: 126074974
-Index: 2
-Address: 2a0cac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 104278122
-Index: 1
-Address: 274154
-Native_address: bcefc
-Refc: 1
-=fun
-Module: sys
-Uniq: 90854051
-Index: 0
-Address: 240344
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 113334594
-Index: 2
-Address: 313d5c
-Native_address: bced4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 8832142
-Index: 7
-Address: 284e30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9159706
-Index: 42
-Address: 34eb54
-Native_address: bceec
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 123946665
-Index: 8
-Address: 26e494
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3149789
-Index: 1
-Address: 5262d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 48288621
-Index: 11
-Address: 2ffed8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8953292
-Index: 20
-Address: 4a4d54
-Native_address: bcee4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9632158
-Index: 4
-Address: 34ff88
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 31111567
-Index: 7
-Address: 29e8c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 85307443
-Index: 10
-Address: 2fa29c
-Native_address: bcec4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 104417191
-Index: 7
-Address: 313cd0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 43625777
-Index: 5
-Address: 354fec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 92698798
-Index: 3
-Address: 4ab780
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 39074546
-Index: 6
-Address: 2fa54c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 71451126
-Index: 5
-Address: 234b98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 122084387
-Index: 6
-Address: 300038
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 9625924
-Index: 14
-Address: 284a60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 128777368
-Index: 11
-Address: 313c7c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 10203723
-Index: 7
-Address: 4ab4f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 35032400
-Index: 10
-Address: 313c98
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 17252586
-Index: 34
-Address: 313a14
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 7177165
-Index: 11
-Address: 2ad734
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 115778175
-Index: 3
-Address: 4a4930
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 96440880
-Index: 51
-Address: 34e590
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 68275407
-Index: 0
-Address: 2b7340
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88854488
-Index: 16
-Address: 2f9f04
-Native_address: bcebc
-Refc: 1
-=fun
-Module: global
-Uniq: 26353848
-Index: 13
-Address: 2654e8
-Native_address: bcf04
-Refc: 3
-=fun
-Module: global
-Uniq: 93414722
-Index: 11
-Address: 265568
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 11194189
-Index: 60
-Address: 34fe0c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 125189992
-Index: 8
-Address: 2fffdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 112472016
-Index: 2
-Address: 355088
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 104426442
-Index: 5
-Address: 2e52e0
-Native_address: bceec
-Refc: 1
-=fun
-Module: global
-Uniq: 17426458
-Index: 0
-Address: 265bc4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 81191039
-Index: 5
-Address: 2ada48
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 71765042
-Index: 5
-Address: 284f74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 85855821
-Index: 2
-Address: 1fa298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 70586122
-Index: 10
-Address: 4a3fe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 87067911
-Index: 49
-Address: 34e708
-Native_address: bcef4
-Refc: 1
-=fun
-Module: distel
-Uniq: 63126735
-Index: 1
-Address: 35c0fc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: c
-Uniq: 58270309
-Index: 1
-Address: 3000e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: ets
-Uniq: 80538457
-Index: 1
-Address: 2bc1a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 69827241
-Index: 9
-Address: 34fd70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 103968752
-Index: 3
-Address: 355054
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 117175573
-Index: 21
-Address: 34f728
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 57865450
-Index: 2
-Address: 2e537c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 14705965
-Index: 20
-Address: 313b80
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 85360931
-Index: 6
-Address: 4ab56c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: kernel_config
-Uniq: 41755598
-Index: 0
-Address: 2d9e20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 7110547
-Index: 37
-Address: 34ef14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 28091577
-Index: 16
-Address: 234244
-Native_address: bcef4
-Refc: 2
-=fun
-Module: code_server
-Uniq: 96448152
-Index: 14
-Address: 2ad4e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 40177568
-Index: 13
-Address: 4a39a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 31948320
-Index: 58
-Address: 34dfdc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 54153760
-Index: 7
-Address: 265854
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 60156260
-Index: 3
-Address: 5262b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 1010616
-Index: 2
-Address: 350064
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 96784459
-Index: 1
-Address: 1fa2b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 48691771
-Index: 18
-Address: 313bb8
-Native_address: bced4
-Refc: 1
-=fun
-Module: global
-Uniq: 26895060
-Index: 9
-Address: 265710
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 109625093
-Index: 7
-Address: 2ad8fc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 59436171
-Index: 1
-Address: 3500dc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 92768306
-Index: 9
-Address: 354f04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 106430008
-Index: 3
-Address: 292b38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 79749196
-Index: 6
-Address: 1fa01c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 6014929
-Index: 9
-Address: 2fa324
-Native_address: bceac
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 57051922
-Index: 7
-Address: 234a28
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 77043468
-Index: 6
-Address: 29e8e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 36176045
-Index: 9
-Address: 52620c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 35862809
-Index: 3
-Address: 255edc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113649451
-Index: 4
-Address: 2850a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 67943969
-Index: 5
-Address: 2658f4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 109003032
-Index: 16
-Address: 5260d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 104711447
-Index: 13
-Address: 525f5c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 107666872
-Index: 9
-Address: 27cfb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 89410000
-Index: 10
-Address: 5261f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 47356870
-Index: 11
-Address: 284ab4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17873449
-Index: 56
-Address: 34e1e8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 8839441
-Index: 33
-Address: 34f25c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 82513204
-Index: 2
-Address: 222c18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 5973059
-Index: 0
-Address: 24ab7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 127832132
-Index: 0
-Address: 4b065c
-Native_address: bcefc
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 39322658
-Index: 14
-Address: 525f40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_server
-Uniq: 100284021
-Index: 0
-Address: 23d288
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 17430070
-Index: 12
-Address: 284a98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 97509773
-Index: 3
-Address: 1fa27c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 32364818
-Index: 3
-Address: 35c050
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 58576084
-Index: 32
-Address: 313a4c
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 38384851
-Index: 14
-Address: 4a3988
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 14139883
-Index: 4
-Address: 234d78
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 122590256
-Index: 0
-Address: 2fa8b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 14705629
-Index: 11
-Address: 2fa22c
-Native_address: bcedc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 9273769
-Index: 4
-Address: 2fa684
-Native_address: bcee4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 87950142
-Index: 11
-Address: 5261d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 54913678
-Index: 1
-Address: 4fc6b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 28370334
-Index: 0
-Address: 26e4b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 24927227
-Index: 40
-Address: 34ed4c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 105437500
-Index: 33
-Address: 313a30
-Native_address: bced4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 10921695
-Index: 1
-Address: 234eac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 112431564
-Index: 55
-Address: 34e22c
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 129460863
-Index: 5
-Address: 4ab5c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 89001648
-Index: 3
-Address: 27d2ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 36199507
-Index: 8
-Address: 27cfe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 35620771
-Index: 2
-Address: 5262ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 83214871
-Index: 18
-Address: 2f9e34
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 122455383
-Index: 1
-Address: 2adc0c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22389488
-Index: 31
-Address: 34f1b8
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 41869059
-Index: 12
-Address: 2fa1d4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 18130505
-Index: 45
-Address: 34e904
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 107414126
-Index: 1
-Address: 2b706c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 116638945
-Index: 28
-Address: 2f98f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 48465762
-Index: 9
-Address: 2348c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 87633852
-Index: 0
-Address: 50e97c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 28213098
-Index: 8
-Address: 4ab42c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 123630574
-Index: 4
-Address: 222b58
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 127425508
-Index: 13
-Address: 354eb4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 95048118
-Index: 16
-Address: 2ad46c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 108661978
-Index: 19
-Address: 34f75c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 21272619
-Index: 13
-Address: 34fad8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29943747
-Index: 17
-Address: 313bf0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 120240397
-Index: 4
-Address: 313d94
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 124060676
-Index: 0
-Address: 350124
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 100975346
-Index: 6
-Address: 526260
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61421476
-Index: 4
-Address: 2ada9c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45197232
-Index: 7
-Address: 34fe5c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3151900
-Index: 15
-Address: 525f24
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 77509245
-Index: 2
-Address: 4b5e2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 94110229
-Index: 8
-Address: 2ad7e4
-Native_address: bcef4
-Refc: 3
-=fun
-Module: rpc
-Uniq: 101217130
-Index: 1
-Address: 2560c4
-Native_address: bcf04
-Refc: 1
-=fun
-Module: lists
-Uniq: 103647452
-Index: 0
-Address: 244b7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 37841211
-Index: 9
-Address: 2ad77c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 40109251
-Index: 54
-Address: 34e2b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 98012300
-Index: 0
-Address: 1fa2d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 73604759
-Index: 10
-Address: 4ab270
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 12042434
-Index: 1
-Address: 313d40
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 127137775
-Index: 4
-Address: 2e531c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 45498037
-Index: 12
-Address: 27cec0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 122441107
-Index: 34
-Address: 34f1d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70933889
-Index: 46
-Address: 34e8d0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 69850797
-Index: 2
-Address: 27d308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 103965539
-Index: 13
-Address: 234684
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29979659
-Index: 30
-Address: 313a84
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17148721
-Index: 20
-Address: 34f778
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_response
-Uniq: 100673049
-Index: 0
-Address: 5165dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 10508176
-Index: 1
-Address: 4b04dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32476064
-Index: 57
-Address: 34e1c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74835078
-Index: 9
-Address: 313cec
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 60689814
-Index: 19
-Address: 4a3b78
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39269715
-Index: 5
-Address: 34ff14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 112923172
-Index: 0
-Address: 2e5404
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43010824
-Index: 14
-Address: 2fa03c
-Native_address: bce8c
-Refc: 1
-=fun
-Module: global
-Uniq: 82495254
-Index: 3
-Address: 265ac8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 48568081
-Index: 8
-Address: 2e5220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 77236637
-Index: 7
-Address: 1fa000
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 109386574
-Index: 1
-Address: 2fa804
-Native_address: bce9c
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 42613220
-Index: 14
-Address: 34f980
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 67093144
-Index: 23
-Address: 313b64
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 86833790
-Index: 11
-Address: 34fbe8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 6344855
-Index: 1
-Address: 29eabc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 5149749
-Index: 35
-Address: 34f220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 93451769
-Index: 5
-Address: 1fa120
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 117428568
-Index: 11
-Address: 234758
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 15225890
-Index: 4
-Address: 526298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 120760477
-Index: 2
-Address: 234cdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 88561919
-Index: 3
-Address: 3000ac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 108931174
-Index: 8
-Address: 313cb4
-Native_address: bced4
-Refc: 1
-=fun
-Module: rpc
-Uniq: 122901192
-Index: 4
-Address: 255e44
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32985930
-Index: 10
-Address: 34fc40
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 97968498
-Index: 1
-Address: 292b7c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 45671671
-Index: 18
-Address: 4a32d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 117968056
-Index: 3
-Address: 2fa6ec
-Native_address: bcecc
-Refc: 1
-=fun
-Module: init
-Uniq: 108717591
-Index: 4
-Address: 1fa194
-Native_address: bcf04
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 15091954
-Index: 2
-Address: 2526dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 65707495
-Index: 6
-Address: 2658a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 34473969
-Index: 17
-Address: 2ad450
-Native_address: bcef4
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 124296602
-Index: 7
-Address: 526244
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 23074707
-Index: 15
-Address: 265460
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25972856
-Index: 10
-Address: 27cf74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43110452
-Index: 24
-Address: 2f9ad4
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 106445918
-Index: 13
-Address: 2ad660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 116071286
-Index: 12
-Address: 5261b8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 130814477
-Index: 8
-Address: 284cfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 121017037
-Index: 39
-Address: 34ed80
-Native_address: bcef4
-Refc: 1
-=fun
-Module: ets
-Uniq: 104895267
-Index: 0
-Address: 2bc1bc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 104682437
-Index: 11
-Address: 4a3de0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70248777
-Index: 30
-Address: 34f30c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 13274975
-Index: 5
-Address: 300074
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 98442771
-Index: 53
-Address: 34e2d0
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69829006
-Index: 7
-Address: 2fa47c
-Native_address: bce80
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 36444943
-Index: 1
-Address: 2a1a80
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 58719455
-Index: 26
-Address: 34f5f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: timer
-Uniq: 42505885
-Index: 0
-Address: 4cd62c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54682479
-Index: 20
-Address: 2f9d08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 86070332
-Index: 1
-Address: 222d7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 54728136
-Index: 9
-Address: 2fff68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 16474219
-Index: 3
-Address: 234c60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 108831556
-Index: 10
-Address: 234810
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 72053761
-Index: 16
-Address: 34f8ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 65127616
-Index: 2
-Address: 29ea04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 126167637
-Index: 14
-Address: 234640
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113704917
-Index: 0
-Address: 285788
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 75279647
-Index: 1
-Address: 500100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 119218247
-Index: 5
-Address: 26df68
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 85690044
-Index: 4
-Address: 4b5d6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 53075592
-Index: 1
-Address: 26e16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 39490182
-Index: 2
-Address: 3000c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 75189006
-Index: 12
-Address: 234714
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 14980808
-Index: 43
-Address: 34eb38
-Native_address: bceec
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 16463468
-Index: 4
-Address: 4a4914
-Native_address: bcee4
-Refc: 1
-=fun
-Module: dict
-Uniq: 99965326
-Index: 4
-Address: 355020
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 36900786
-Index: 6
-Address: 284f3c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45447147
-Index: 18
-Address: 34f794
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32353825
-Index: 6
-Address: 34fe78
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 134052338
-Index: 8
-Address: 34fdc0
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_master
-Uniq: 23840924
-Index: 1
-Address: 24aae0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108282500
-Index: 1
-Address: 4ab918
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 31081110
-Index: 0
-Address: 210c68
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54275742
-Index: 26
-Address: 2f9a4c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 45083091
-Index: 3
-Address: 2e5350
-Native_address: bcf04
-Refc: 3
-=proc_stack:<0.0.0>
-3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H371264
-=proc_heap:<0.0.0>
-371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
-3710FC:t2:H371138,H371140
-371140:lI80|H371194
-371194:lI49|H3711E0
-3711E0:lI48|H371204
-371204:lI66|N
-371138:lI79|H37118C
-37118C:lI84|H3711D8
-3711D8:lI80|H3711FC
-3711FC:lI32|H37120C
-37120C:lI32|H371214
-371214:lI65|H37121C
-37121C:lI80|H371224
-371224:lI78|H37122C
-37122C:lI32|H371234
-371234:lI49|H37123C
-37123C:lI56|H371244
-371244:lI49|H37124C
-37124C:lI32|H371254
-371254:lI48|H37125C
-37125C:lI49|N
-37128C:t2:A7:started,A7:started
-3710F4:lH371124|H371130
-371124:t2:A16:application_controller,P<0.5.0>
-371130:lH371178|H371184
-371178:t2:AC:error_logger,P<0.4.0>
-371184:lH3711CC|N
-3711CC:t2:AF:erl_prim_loader,P<0.2.0>
-3710D8:lH3710E0|H3710EC
-3710E0:t2:A5:-root,H371108
-371108:lH371148|N
-371148:Yh13:2F636C656172636173652F6F74702F65727473
-3710EC:lH371110|H37111C
-371110:t2:A9:-progname,H371164
-371164:lH37119C|N
-37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
-37111C:lH37116C|N
-37116C:t2:A5:-home,H3711C4
-3711C4:lH3711E8|N
-3711E8:YhA:2F686F6D652F73697269
-=proc_stack:<0.2.0>
-38eca8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H367D20
-y1:P<0.1.0>
-y2:H367D28
-y3:A8:infinity
-=proc_heap:<0.2.0>
-367D20:lH367D48|H367D50
-367D48:lI47|H367D58
-367D58:lI99|H367D68
-367D68:lI108|H367D78
-367D78:lI101|H367D88
-367D88:lI97|H367D98
-367D98:lI114|H367DA8
-367DA8:lI99|H367DB8
-367DB8:lI97|H367DC8
-367DC8:lI115|H367DD8
-367DD8:lI101|H367DE8
-367DE8:lI47|H367DF8
-367DF8:lI111|H367E08
-367E08:lI116|H367E18
-367E18:lI112|H367E28
-367E28:lI47|H367E38
-367E38:lI101|H367E48
-367E48:lI114|H367E58
-367E58:lI116|H367E68
-367E68:lI115|H367E78
-367E78:lI47|H367E88
-367E88:lI108|H367E98
-367E98:lI105|H367EA8
-367EA8:lI98|H367EB8
-367EB8:lI47|H367EC8
-367EC8:lI107|H367ED8
-367ED8:lI101|H367EE8
-367EE8:lI114|H367EF8
-367EF8:lI110|H367F08
-367F08:lI101|H367F18
-367F18:lI108|H367F28
-367F28:lI47|H367F38
-367F38:lI101|H367F48
-367F48:lI98|H367F58
-367F58:lI105|H367F68
-367F68:lI110|N
-367D50:lH367D60|N
-367D60:lI47|H367D70
-367D70:lI99|H367D80
-367D80:lI108|H367D90
-367D90:lI101|H367DA0
-367DA0:lI97|H367DB0
-367DB0:lI114|H367DC0
-367DC0:lI99|H367DD0
-367DD0:lI97|H367DE0
-367DE0:lI115|H367DF0
-367DF0:lI101|H367E00
-367E00:lI47|H367E10
-367E10:lI111|H367E20
-367E20:lI116|H367E30
-367E30:lI112|H367E40
-367E40:lI47|H367E50
-367E50:lI101|H367E60
-367E60:lI114|H367E70
-367E70:lI116|H367E80
-367E80:lI115|H367E90
-367E90:lI47|H367EA0
-367EA0:lI108|H367EB0
-367EB0:lI105|H367EC0
-367EC0:lI98|H367ED0
-367ED0:lI47|H367EE0
-367EE0:lI115|H367EF0
-367EF0:lI116|H367F00
-367F00:lI100|H367F10
-367F10:lI108|H367F20
-367F20:lI105|H367F30
-367F30:lI98|H367F40
-367F40:lI47|H367F50
-367F50:lI101|H367F60
-367F60:lI98|H367F70
-367F70:lI105|H367F78
-367F78:lI110|N
-367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
-=proc_dictionary:<0.4.0>
-H3AC588
-H3AC594
-=proc_stack:<0.4.0>
-3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:H3B21E8
-y2:AC:error_logger
-y3:P<0.1.0>
-3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3AC5A8
-=proc_heap:<0.4.0>
-3B21E8:lH3B2144|H3B21E0
-3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
-3B21E0:lH3B21BC|N
-3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
-3AC610:t2:P<0.21.0>,AC:error_logger
-3AC5A8:lA9:gen_event|H3AC5E8
-3AC5E8:lP<0.1.0>|H3AC608
-3AC608:lP<0.1.0>|H3AC61C
-3AC61C:lH3AC624|H3AC630
-3AC624:t2:A5:local,AC:error_logger
-3AC630:lN|H3AC638
-3AC638:lN|H3AC640
-3AC640:lN|N
-3AC588:t2:AD:$initial_call,H3AC5B0
-3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
-3AC594:t2:AA:$ancestors,H3AC5C0
-3AC5C0:lP<0.1.0>|N
-=proc_dictionary:<0.5.0>
-H372E4C
-H372E58
-=proc_stack:<0.5.0>
-374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A16:application_controller
-y3:H3739F4
-y4:A16:application_controller
-y5:P<0.1.0>
-374720:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H372ED0
-=proc_heap:<0.5.0>
-3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
-373928:lH37391C|H372F54
-37391C:t2:A6:stdlib,A9:permanent
-372F54:lH372F90|N
-372F90:t2:A6:kernel,A9:permanent
-373914:lH373908|H372F4C
-373908:t2:A6:stdlib,A9:undefined
-372F4C:lH372F84|N
-372F84:t2:A6:kernel,P<0.7.0>
-372ED0:lAA:gen_server|H372F5C
-372F5C:lP<0.1.0>|H372F9C
-372F9C:lP<0.1.0>|H372FC4
-372FC4:lH372FEC|H372FF8
-372FEC:t2:A5:local,A16:application_controller
-372FF8:lA16:application_controller|H373018
-373018:lH373038|H373048
-373038:t3:AB:application,A6:kernel,H373060
-373060:lH373078|H373084
-373078:t2:AB:description,H37309C
-37309C:lI69|H3730C8
-3730C8:lI82|H3730FC
-3730FC:lI84|H373130
-373130:lI83|H37316C
-37316C:lI32|H3731A8
-3731A8:lI32|H3731E4
-3731E4:lI67|H373220
-373220:lI88|H37325C
-37325C:lI67|H37329C
-37329C:lI32|H3732D0
-3732D0:lI49|H3732FC
-3732FC:lI51|H373328
-373328:lI56|H373348
-373348:lI32|H373368
-373368:lI49|H373388
-373388:lI48|N
-373084:lH3730A4|H3730B0
-3730A4:t2:A3:vsn,H3730D0
-3730D0:lI50|H373104
-373104:lI46|H373138
-373138:lI57|N
-3730B0:lH3730D8|H3730E4
-3730D8:t2:A2:id,N
-3730E4:lH37310C|H373118
-37310C:t2:A7:modules,H373140
-373140:lAB:application|H373174
-373174:lA16:application_controller|H3731B0
-3731B0:lA12:application_master|H3731EC
-3731EC:lA13:application_starter|H373228
-373228:lA4:auth|H373264
-373264:lA4:code|H3732A4
-3732A4:lA8:code_aux|H3732D8
-3732D8:lA8:packages|H373304
-373304:lAB:code_server|H373330
-373330:lA9:dist_util|H373350
-373350:lAF:erl_boot_server|H373370
-373370:lA10:erl_distribution|H373390
-373390:lAF:erl_prim_loader|H3733A8
-3733A8:lA9:erl_reply|H3733C0
-3733C0:lA6:erlang|H3733D8
-3733D8:lAD:error_handler|H3733F0
-3733F0:lAC:error_logger|H373408
-373408:lA4:file|H373420
-373420:lAB:file_server|H373438
-373438:lAF:old_file_server|H373450
-373450:lAE:file_io_server|H373468
-373468:lA9:prim_file|H373480
-373480:lA6:global|H373498
-373498:lAC:global_group|H3734B0
-3734B0:lAD:global_search|H3734C8
-3734C8:lA5:group|H3734E0
-3734E0:lA5:heart|H3734F8
-3734F8:lA13:hipe_unified_loader|H373510
-373510:lA11:hipe_sparc_loader|H373520
-373520:lAF:hipe_x86_loader|H373530
-373530:lA9:inet6_tcp|H373540
-373540:lAE:inet6_tcp_dist|H373550
-373550:lA9:inet6_udp|H373560
-373560:lAB:inet_config|H373570
-373570:lAA:inet_hosts|H373580
-373580:lA13:inet_gethost_native|H373590
-373590:lAD:inet_tcp_dist|H3735A0
-3735A0:lA4:init|H3735B0
-3735B0:lA6:kernel|H3735C0
-3735C0:lAD:kernel_config|H3735D0
-3735D0:lA3:net|H3735E0
-3735E0:lA7:net_adm|H3735F0
-3735F0:lAA:net_kernel|H373600
-373600:lA2:os|H373610
-373610:lA8:ram_file|H373620
-373620:lA3:rpc|H373630
-373630:lA4:user|H373640
-373640:lA8:user_drv|H373650
-373650:lA8:user_sup|H373660
-373660:lA8:disk_log|H373670
-373670:lAA:disk_log_1|H373680
-373680:lAF:disk_log_server|H373690
-373690:lAC:disk_log_sup|H3736A0
-3736A0:lA7:dist_ac|H3736B0
-3736B0:lA8:erl_ddll|H3736C0
-3736C0:lA8:erl_epmd|H3736D0
-3736D0:lAA:erts_debug|H3736E0
-3736E0:lA7:gen_tcp|H3736F0
-3736F0:lA7:gen_udp|H373700
-373700:lA9:prim_inet|H373708
-373708:lA4:inet|H373710
-373710:lA7:inet_db|H373718
-373718:lA8:inet_dns|H373720
-373720:lAA:inet_parse|H373728
-373728:lA8:inet_res|H373730
-373730:lA8:inet_tcp|H373738
-373738:lA8:inet_udp|H373740
-373740:lA3:pg2|H373748
-373748:lA9:seq_trace|H373750
-373750:lA6:socks5|H373758
-373758:lAB:socks5_auth|H373760
-373760:lAA:socks5_tcp|H373768
-373768:lAA:socks5_udp|H373770
-373770:lAF:wrap_log_reader|H373778
-373778:lA4:zlib|H373780
-373780:lA9:otp_ring0|N
-373118:lH373148|H373154
-373148:t2:AA:registered,H37317C
-37317C:lA16:application_controller|H3731B8
-3731B8:lA9:erl_reply|H3731F4
-3731F4:lA4:auth|H373230
-373230:lAB:boot_server|H37326C
-37326C:lAB:code_server|H3732AC
-3732AC:lAF:disk_log_server|H3732E0
-3732E0:lAC:disk_log_sup|H37330C
-37330C:lAF:erl_prim_loader|H373338
-373338:lAC:error_logger|H373358
-373358:lAB:file_server|H373378
-373378:lAD:file_server_2|H373398
-373398:lAF:fixtable_server|H3733B0
-3733B0:lAC:global_group|H3733C8
-3733C8:lA12:global_name_server|H3733E0
-3733E0:lA5:heart|H3733F8
-3733F8:lA4:init|H373410
-373410:lAD:kernel_config|H373428
-373428:lAA:kernel_sup|H373440
-373440:lAA:net_kernel|H373458
-373458:lA7:net_sup|H373470
-373470:lA3:rex|H373488
-373488:lA4:user|H3734A0
-3734A0:lA9:os_server|H3734B8
-3734B8:lAB:ddll_server|H3734D0
-3734D0:lA8:erl_epmd|H3734E8
-3734E8:lA7:inet_db|H373500
-373500:lA3:pg2|N
-373154:lH373184|H373190
-373184:t2:AC:applications,N
-373190:lH3731C0|H3731CC
-3731C0:t2:A15:included_applications,N
-3731CC:lH3731FC|H373208
-3731FC:t2:A3:env,H373238
-373238:lH373274|N
-373274:t2:AC:error_logger,A3:tty
-373208:lH373240|H37324C
-373240:t2:AC:start_phases,A9:undefined
-37324C:lH373280|H37328C
-373280:t2:A4:maxT,A8:infinity
-37328C:lH3732B4|H3732C0
-3732B4:t2:A4:maxP,A8:infinity
-3732C0:lH3732E8|N
-3732E8:t2:A3:mod,H373314
-373314:t2:A6:kernel,N
-373048:lN|N
-372E4C:t2:AD:$initial_call,H372EE4
-372EE4:t3:A3:gen,A7:init_it,H372ED0
-372E58:t2:AA:$ancestors,H372EF4
-372EF4:lP<0.1.0>|N
-=proc_dictionary:<0.7.0>
-H369B78
-H369B5C
-=proc_stack:<0.7.0>
-369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:H369C2C
-y1:P<0.5.0>
-369d70:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A12:application_master
-y2:A4:init
-y3:H369B2C
-=proc_heap:<0.7.0>
-369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
-3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
-369A3C:lAB:application|H369A34
-369A34:lA16:application_controller|H369A2C
-369A2C:lA12:application_master|H369A24
-369A24:lA13:application_starter|H369A1C
-369A1C:lA4:auth|H369A14
-369A14:lA4:code|H369A0C
-369A0C:lA8:code_aux|H369A04
-369A04:lA8:packages|H3699FC
-3699FC:lAB:code_server|H3699F4
-3699F4:lA9:dist_util|H3699EC
-3699EC:lAF:erl_boot_server|H3699E4
-3699E4:lA10:erl_distribution|H3699DC
-3699DC:lAF:erl_prim_loader|H3699D4
-3699D4:lA9:erl_reply|H3699CC
-3699CC:lA6:erlang|H3699C4
-3699C4:lAD:error_handler|H3699BC
-3699BC:lAC:error_logger|H3699B4
-3699B4:lA4:file|H3699AC
-3699AC:lAB:file_server|H3699A4
-3699A4:lAF:old_file_server|H36999C
-36999C:lAE:file_io_server|H369994
-369994:lA9:prim_file|H36998C
-36998C:lA6:global|H369984
-369984:lAC:global_group|H36997C
-36997C:lAD:global_search|H369974
-369974:lA5:group|H36996C
-36996C:lA5:heart|H369964
-369964:lA13:hipe_unified_loader|H36995C
-36995C:lA11:hipe_sparc_loader|H369954
-369954:lAF:hipe_x86_loader|H36994C
-36994C:lA9:inet6_tcp|H369944
-369944:lAE:inet6_tcp_dist|H36993C
-36993C:lA9:inet6_udp|H369934
-369934:lAB:inet_config|H36992C
-36992C:lAA:inet_hosts|H369924
-369924:lA13:inet_gethost_native|H36991C
-36991C:lAD:inet_tcp_dist|H369914
-369914:lA4:init|H36990C
-36990C:lA6:kernel|H369904
-369904:lAD:kernel_config|H3698FC
-3698FC:lA3:net|H3698F4
-3698F4:lA7:net_adm|H3698EC
-3698EC:lAA:net_kernel|H3698E4
-3698E4:lA2:os|H3698DC
-3698DC:lA8:ram_file|H3698D4
-3698D4:lA3:rpc|H3698CC
-3698CC:lA4:user|H3698C4
-3698C4:lA8:user_drv|H3698BC
-3698BC:lA8:user_sup|H3698B4
-3698B4:lA8:disk_log|H3698AC
-3698AC:lAA:disk_log_1|H3698A4
-3698A4:lAF:disk_log_server|H36989C
-36989C:lAC:disk_log_sup|H369894
-369894:lA7:dist_ac|H36988C
-36988C:lA8:erl_ddll|H369884
-369884:lA8:erl_epmd|H36987C
-36987C:lAA:erts_debug|H369874
-369874:lA7:gen_tcp|H36986C
-36986C:lA7:gen_udp|H369864
-369864:lA9:prim_inet|H36985C
-36985C:lA4:inet|H369854
-369854:lA7:inet_db|H36984C
-36984C:lA8:inet_dns|H369844
-369844:lAA:inet_parse|H36983C
-36983C:lA8:inet_res|H369834
-369834:lA8:inet_tcp|H36982C
-36982C:lA8:inet_udp|H369824
-369824:lA3:pg2|H36981C
-36981C:lA9:seq_trace|H369814
-369814:lA6:socks5|H36980C
-36980C:lAB:socks5_auth|H369804
-369804:lAA:socks5_tcp|H3697FC
-3697FC:lAA:socks5_udp|H3697F4
-3697F4:lAF:wrap_log_reader|H3697EC
-3697EC:lA4:zlib|H3697E4
-3697E4:lA9:otp_ring0|N
-3697D8:t2:A6:kernel,N
-369B14:lA16:application_controller|H369B0C
-369B0C:lA9:erl_reply|H369B04
-369B04:lA4:auth|H369AFC
-369AFC:lAB:boot_server|H369AF4
-369AF4:lAB:code_server|H369AEC
-369AEC:lAF:disk_log_server|H369AE4
-369AE4:lAC:disk_log_sup|H369ADC
-369ADC:lAF:erl_prim_loader|H369AD4
-369AD4:lAC:error_logger|H369ACC
-369ACC:lAB:file_server|H369AC4
-369AC4:lAD:file_server_2|H369ABC
-369ABC:lAF:fixtable_server|H369AB4
-369AB4:lAC:global_group|H369AAC
-369AAC:lA12:global_name_server|H369AA4
-369AA4:lA5:heart|H369A9C
-369A9C:lA4:init|H369A94
-369A94:lAD:kernel_config|H369A8C
-369A8C:lAA:kernel_sup|H369A84
-369A84:lAA:net_kernel|H369A7C
-369A7C:lA7:net_sup|H369A74
-369A74:lA3:rex|H369A6C
-369A6C:lA4:user|H369A64
-369A64:lA9:os_server|H369A5C
-369A5C:lAB:ddll_server|H369A54
-369A54:lA8:erl_epmd|H369A4C
-369A4C:lA7:inet_db|H369A44
-369A44:lA3:pg2|N
-369B2C:lP<0.5.0>|H369B24
-369B24:lP<0.6.0>|H3697A8
-3697A8:lH3697B0|H369B1C
-369B1C:lA6:normal|N
-369B78:t2:AD:$initial_call,H369B68
-369B68:t3:A12:application_master,A4:init,H369B2C
-369B5C:t2:AA:$ancestors,H369B54
-369B54:lP<0.6.0>|N
-=proc_stack:<0.8.0>
-384ec0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H384BDC
-y1:A6:kernel
-y2:P<0.9.0>
-y3:P<0.7.0>
-=proc_heap:<0.8.0>
-384BDC:t2:A5:state,A3:tty
-=proc_dictionary:<0.9.0>
-H376850
-H37685C
-=proc_stack:<0.9.0>
-36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36B8E8
-y4:AA:kernel_sup
-y5:P<0.8.0>
-36be04:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3768D4
-=proc_heap:<0.9.0>
-36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
-36B8D4:lH36B8B0|H36B6E8
-36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
-376C00:lA6:kernel|N
-376BF0:t3:AA:supervisor,AA:start_link,H376C08
-376C08:lH376C10|H376C1C
-376C10:t2:A5:local,AF:kernel_safe_sup
-376C1C:lA6:kernel|H376C24
-376C24:lA4:safe|N
-36B6E8:lH36B6C4|H36B490
-36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
-376BC4:lAD:kernel_config|N
-376BB4:t3:AD:kernel_config,AA:start_link,N
-36B490:lH36B498|H36B4BC
-36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
-376B80:lA8:user_sup|N
-376B70:t3:A8:user_sup,A5:start,N
-36B4BC:lH36B4C4|H376CB0
-36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
-376B1C:lA4:code|N
-376B0C:t3:A4:code,AA:start_link,N
-376CB0:lH376CB8|H376CDC
-376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
-376AC8:lAF:old_file_server|N
-376AB8:t3:AF:old_file_server,AA:start_link,N
-376CDC:lH376CE4|H376C2C
-376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
-376A68:lA4:file|H376AB0
-376AB0:lAB:file_server|H376B04
-376B04:lAE:file_io_server|H376B68
-376B68:lA9:prim_file|N
-376A58:t3:AB:file_server,AA:start_link,N
-376C2C:lH376C34|H376C58
-376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
-376A04:lAC:global_group|N
-3769F4:t3:AC:global_group,AA:start_link,N
-376C58:lH376C60|H376C84
-376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
-37697C:lA10:erl_distribution|N
-37696C:t3:A10:erl_distribution,AA:start_link,N
-376C84:lH376C8C|H3768A0
-376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
-376904:lA7:inet_db|N
-3768F4:t3:A7:inet_db,AA:start_link,N
-3768A0:lH376938|H37695C
-376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
-3769C0:lA6:global|N
-3769B0:t3:A6:global,AA:start_link,N
-37695C:lH3769C8|N
-3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
-376A48:lA3:rpc|N
-376A38:t3:A3:rpc,AA:start_link,N
-376868:t2:A5:local,AA:kernel_sup
-3768D4:lAA:gen_server|H376964
-376964:lP<0.8.0>|H3769EC
-3769EC:lP<0.8.0>|H376A50
-376A50:lH376A9C|H376AA8
-376A9C:t2:A5:local,AA:kernel_sup
-376AA8:lAA:supervisor|H376AFC
-376AFC:lH376B50|H376B60
-376B50:t3:H376868,A6:kernel,N
-376B60:lN|N
-376850:t2:AD:$initial_call,H3768DC
-3768DC:t3:A3:gen,A7:init_it,H3768D4
-37685C:t2:AA:$ancestors,H3768EC
-3768EC:lP<0.8.0>|N
-=proc_dictionary:<0.10.0>
-H367A10
-H3679F4
-=proc_stack:<0.10.0>
-367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A3:rpc
-y3:H367AA8
-y4:A3:rex
-y5:P<0.9.0>
-367d08:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3679C4
-=proc_heap:<0.10.0>
-367AA8:t2:I0,A3:nil
-3679C4:lAA:gen_server|H3679BC
-3679BC:lP<0.9.0>|H3679B4
-3679B4:lP<0.9.0>|H367988
-367988:lH367990|H3679AC
-367990:t2:A5:local,A3:rex
-3679AC:lA3:rpc|H3679A4
-3679A4:lN|H36799C
-36799C:lN|N
-367A10:t2:AD:$initial_call,H367A00
-367A00:t3:A3:gen,A7:init_it,H3679C4
-3679F4:t2:AA:$ancestors,H3679EC
-3679EC:lAA:kernel_sup|H3679CC
-3679CC:lP<0.8.0>|N
-=proc_dictionary:<0.11.0>
-H36ADD8
-H36ADBC
-=proc_stack:<0.11.0>
-36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A6:global
-y3:H36AF0C
-y4:A12:global_name_server
-y5:P<0.9.0>
-36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36AD8C
-=proc_heap:<0.11.0>
-36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
-36AD8C:lAA:gen_server|H36AD84
-36AD84:lP<0.9.0>|H36AD7C
-36AD7C:lP<0.9.0>|H36AD50
-36AD50:lH36AD58|H36AD74
-36AD58:t2:A5:local,A12:global_name_server
-36AD74:lA6:global|H36AD6C
-36AD6C:lN|H36AD64
-36AD64:lN|N
-36ADD8:t2:AD:$initial_call,H36ADC8
-36ADC8:t3:A3:gen,A7:init_it,H36AD8C
-36ADBC:t2:AA:$ancestors,H36ADB4
-36ADB4:lAA:kernel_sup|H36AD94
-36AD94:lP<0.8.0>|N
-=proc_stack:<0.12.0>
-36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
-y0:N
-y1:N
-y2:N
-y3:N
-y4:N
-y5:N
-y6:A8:infinity
-y7:H368EB0
-y8:P<0.11.0>
-369244:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-=proc_heap:<0.12.0>
-368EB0:t3:A5:multi,A9:undefined,N
-=proc_stack:<0.13.0>
-3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
-y0:A8:infinity
-y1:N
-y2:P<0.11.0>
-3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
-y0:N
-y1:N
-y2:P<0.11.0>
-3695f0:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.13.0>
-=proc_dictionary:<0.14.0>
-H36A998
-H36A9A4
-=proc_stack:<0.14.0>
-372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:inet_db
-y3:H36A9B0
-y4:A7:inet_db
-y5:P<0.9.0>
-372e28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36A9C8
-=proc_heap:<0.14.0>
-36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
-36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
-36A9C8:lAA:gen_server|H36A9F8
-36A9F8:lP<0.9.0>|H36AA08
-36AA08:lP<0.9.0>|H36AA10
-36AA10:lH36AA18|H36AA24
-36AA18:t2:A5:local,A7:inet_db
-36AA24:lA7:inet_db|H36AA2C
-36AA2C:lN|H36AA34
-36AA34:lN|N
-36A998:t2:AD:$initial_call,H36A9D0
-36A9D0:t3:A3:gen,A7:init_it,H36A9C8
-36A9A4:t2:AA:$ancestors,H36A9E0
-36A9E0:lAA:kernel_sup|H36AA00
-36AA00:lP<0.8.0>|N
-=proc_dictionary:<0.15.0>
-H372788
-H3727F8
-H37276C
-H37280C
-H372820
-=proc_stack:<0.15.0>
-372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AC:global_group
-y3:H3728C8
-y4:AC:global_group
-y5:P<0.9.0>
-372a80:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37273C
-=proc_heap:<0.15.0>
-3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
-37273C:lAA:gen_server|H372734
-372734:lP<0.9.0>|H37272C
-37272C:lP<0.9.0>|H372700
-372700:lH372708|H372724
-372708:t2:A5:local,AC:global_group
-372724:lAC:global_group|H37271C
-37271C:lN|H372714
-372714:lN|N
-372788:t2:AD:$initial_call,H372778
-372778:t3:A3:gen,A7:init_it,H37273C
-3727F8:t2:A10:registered_names,H3727F0
-3727F0:lA9:undefined|N
-37276C:t2:AA:$ancestors,H372764
-372764:lAA:kernel_sup|H372744
-372744:lP<0.8.0>|N
-37280C:t2:A4:send,H372804
-372804:lA9:undefined|N
-372820:t2:AC:whereis_name,H372818
-372818:lA9:undefined|N
-=proc_dictionary:<0.16.0>
-H37B918
-H37B924
-=proc_stack:<0.16.0>
-3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AB:file_server
-y3:p<0.4>
-y4:AD:file_server_2
-y5:P<0.9.0>
-3d3058:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37B930
-=proc_heap:<0.16.0>
-37B930:lAA:gen_server|H37B950
-37B950:lP<0.9.0>|H37B960
-37B960:lP<0.9.0>|H37B968
-37B968:lH37B970|H37B97C
-37B970:t2:A5:local,AD:file_server_2
-37B97C:lAB:file_server|H37B984
-37B984:lN|H37B98C
-37B98C:lN|N
-37B918:t2:AD:$initial_call,H37B938
-37B938:t3:A3:gen,A7:init_it,H37B930
-37B924:t2:AA:$ancestors,H37B948
-37B948:lAA:kernel_sup|H37B958
-37B958:lP<0.8.0>|N
-=proc_stack:<0.17.0>
-3763cc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H376084
-y1:P<0.16.0>
-y2:P<0.9.0>
-=proc_heap:<0.17.0>
-376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
-=proc_stack:<0.18.0>
-3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H38AE84
-y1:P<0.9.0>
-=proc_heap:<0.18.0>
-38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
-38AEB8:lH3873D4|H38AEE0
-3873D4:lI46|N
-38AEE0:lH3873EC|H38AF10
-3873EC:lI47|H387404
-387404:lI99|H387424
-387424:lI108|H38744C
-38744C:lI101|H38747C
-38747C:lI97|H3874B4
-3874B4:lI114|H3874F4
-3874F4:lI99|H38753C
-38753C:lI97|H38758C
-38758C:lI115|H3875E4
-3875E4:lI101|H387644
-387644:lI47|H3876AC
-3876AC:lI111|H38771C
-38771C:lI116|H387794
-387794:lI112|H387814
-387814:lI47|H38789C
-38789C:lI101|H38792C
-38792C:lI114|H3879BC
-3879BC:lI116|H387A54
-387A54:lI115|H387AF4
-387AF4:lI47|H387B9C
-387B9C:lI108|H387C4C
-387C4C:lI105|H387D04
-387D04:lI98|H387DC4
-387DC4:lI47|H387E8C
-387E8C:lI107|H387F5C
-387F5C:lI101|H388034
-388034:lI114|H388114
-388114:lI110|H3881FC
-3881FC:lI101|H3882EC
-3882EC:lI108|H3883E4
-3883E4:lI47|H3884E4
-3884E4:lI101|H3885EC
-3885EC:lI98|H3886FC
-3886FC:lI105|H388814
-388814:lI110|N
-38AF10:lH38740C|H38AF48
-38740C:lI47|H38742C
-38742C:lI99|H387454
-387454:lI108|H387484
-387484:lI101|H3874BC
-3874BC:lI97|H3874FC
-3874FC:lI114|H387544
-387544:lI99|H387594
-387594:lI97|H3875EC
-3875EC:lI115|H38764C
-38764C:lI101|H3876B4
-3876B4:lI47|H387724
-387724:lI111|H38779C
-38779C:lI116|H38781C
-38781C:lI112|H3878A4
-3878A4:lI47|H387934
-387934:lI101|H3879C4
-3879C4:lI114|H387A5C
-387A5C:lI116|H387AFC
-387AFC:lI115|H387BA4
-387BA4:lI47|H387C54
-387C54:lI108|H387D0C
-387D0C:lI105|H387DCC
-387DCC:lI98|H387E94
-387E94:lI47|H387F64
-387F64:lI115|H38803C
-38803C:lI116|H38811C
-38811C:lI100|H388204
-388204:lI108|H3882F4
-3882F4:lI105|H3883EC
-3883EC:lI98|H3884EC
-3884EC:lI47|H3885F4
-3885F4:lI101|H388704
-388704:lI98|H38881C
-38881C:lI105|H38892C
-38892C:lI110|N
-38AF48:lH387434|H38AF70
-387434:lI47|H38745C
-38745C:lI99|H38748C
-38748C:lI108|H3874C4
-3874C4:lI101|H387504
-387504:lI97|H38754C
-38754C:lI114|H38759C
-38759C:lI99|H3875F4
-3875F4:lI97|H387654
-387654:lI115|H3876BC
-3876BC:lI101|H38772C
-38772C:lI47|H3877A4
-3877A4:lI111|H387824
-387824:lI116|H3878AC
-3878AC:lI112|H38793C
-38793C:lI47|H3879CC
-3879CC:lI101|H387A64
-387A64:lI114|H387B04
-387B04:lI116|H387BAC
-387BAC:lI115|H387C5C
-387C5C:lI47|H387D14
-387D14:lI108|H387DD4
-387DD4:lI105|H387E9C
-387E9C:lI98|H387F6C
-387F6C:lI47|H388044
-388044:lI119|H388124
-388124:lI101|H38820C
-38820C:lI98|H3882FC
-3882FC:lI116|H3883F4
-3883F4:lI111|H3884F4
-3884F4:lI111|H3885FC
-3885FC:lI108|H38870C
-38870C:lI47|H388824
-388824:lI101|H388934
-388934:lI98|H388A44
-388A44:lI105|H388B54
-388B54:lI110|N
-38AF70:lH387464|H38AF98
-387464:lI47|H387494
-387494:lI99|H3874CC
-3874CC:lI108|H38750C
-38750C:lI101|H387554
-387554:lI97|H3875A4
-3875A4:lI114|H3875FC
-3875FC:lI99|H38765C
-38765C:lI97|H3876C4
-3876C4:lI115|H387734
-387734:lI101|H3877AC
-3877AC:lI47|H38782C
-38782C:lI111|H3878B4
-3878B4:lI116|H387944
-387944:lI112|H3879D4
-3879D4:lI47|H387A6C
-387A6C:lI101|H387B0C
-387B0C:lI114|H387BB4
-387BB4:lI116|H387C64
-387C64:lI115|H387D1C
-387D1C:lI47|H387DDC
-387DDC:lI108|H387EA4
-387EA4:lI105|H387F74
-387F74:lI98|H38804C
-38804C:lI47|H38812C
-38812C:lI116|H388214
-388214:lI118|H388304
-388304:lI47|H3883FC
-3883FC:lI101|H3884FC
-3884FC:lI98|H388604
-388604:lI105|H388714
-388714:lI110|N
-38AF98:lH38749C|H38AFC0
-38749C:lI47|H3874D4
-3874D4:lI99|H387514
-387514:lI108|H38755C
-38755C:lI101|H3875AC
-3875AC:lI97|H387604
-387604:lI114|H387664
-387664:lI99|H3876CC
-3876CC:lI97|H38773C
-38773C:lI115|H3877B4
-3877B4:lI101|H387834
-387834:lI47|H3878BC
-3878BC:lI111|H38794C
-38794C:lI116|H3879DC
-3879DC:lI112|H387A74
-387A74:lI47|H387B14
-387B14:lI101|H387BBC
-387BBC:lI114|H387C6C
-387C6C:lI116|H387D24
-387D24:lI115|H387DE4
-387DE4:lI47|H387EAC
-387EAC:lI108|H387F7C
-387F7C:lI105|H388054
-388054:lI98|H388134
-388134:lI47|H38821C
-38821C:lI116|H38830C
-38830C:lI115|H388404
-388404:lI112|H388504
-388504:lI47|H38860C
-38860C:lI101|H38871C
-38871C:lI98|H38882C
-38882C:lI105|H38893C
-38893C:lI110|N
-38AFC0:lH3874DC|H38AFE8
-3874DC:lI47|H38751C
-38751C:lI99|H387564
-387564:lI108|H3875B4
-3875B4:lI101|H38760C
-38760C:lI97|H38766C
-38766C:lI114|H3876D4
-3876D4:lI99|H387744
-387744:lI97|H3877BC
-3877BC:lI115|H38783C
-38783C:lI101|H3878C4
-3878C4:lI47|H387954
-387954:lI111|H3879E4
-3879E4:lI116|H387A7C
-387A7C:lI112|H387B1C
-387B1C:lI47|H387BC4
-387BC4:lI101|H387C74
-387C74:lI114|H387D2C
-387D2C:lI116|H387DEC
-387DEC:lI115|H387EB4
-387EB4:lI47|H387F84
-387F84:lI108|H38805C
-38805C:lI105|H38813C
-38813C:lI98|H388224
-388224:lI47|H388314
-388314:lI116|H38840C
-38840C:lI111|H38850C
-38850C:lI111|H388614
-388614:lI108|H388724
-388724:lI115|H388834
-388834:lI47|H388944
-388944:lI101|H388A4C
-388A4C:lI98|H388B5C
-388B5C:lI105|H388C6C
-388C6C:lI110|N
-38AFE8:lH387524|H38B008
-387524:lI47|H38756C
-38756C:lI99|H3875BC
-3875BC:lI108|H387614
-387614:lI101|H387674
-387674:lI97|H3876DC
-3876DC:lI114|H38774C
-38774C:lI99|H3877C4
-3877C4:lI97|H387844
-387844:lI115|H3878CC
-3878CC:lI101|H38795C
-38795C:lI47|H3879EC
-3879EC:lI111|H387A84
-387A84:lI116|H387B24
-387B24:lI112|H387BCC
-387BCC:lI47|H387C7C
-387C7C:lI101|H387D34
-387D34:lI114|H387DF4
-387DF4:lI116|H387EBC
-387EBC:lI115|H387F8C
-387F8C:lI47|H388064
-388064:lI108|H388144
-388144:lI105|H38822C
-38822C:lI98|H38831C
-38831C:lI47|H388414
-388414:lI116|H388514
-388514:lI111|H38861C
-38861C:lI111|H38872C
-38872C:lI108|H38883C
-38883C:lI98|H38894C
-38894C:lI97|H388A54
-388A54:lI114|H388B64
-388B64:lI47|H388C74
-388C74:lI101|H388D84
-388D84:lI98|H388E9C
-388E9C:lI105|H388FB4
-388FB4:lI110|N
-38B008:lH387574|H38B018
-387574:lI47|H3875C4
-3875C4:lI99|H38761C
-38761C:lI108|H38767C
-38767C:lI101|H3876E4
-3876E4:lI97|H387754
-387754:lI114|H3877CC
-3877CC:lI99|H38784C
-38784C:lI97|H3878D4
-3878D4:lI115|H387964
-387964:lI101|H3879F4
-3879F4:lI47|H387A8C
-387A8C:lI111|H387B2C
-387B2C:lI116|H387BD4
-387BD4:lI112|H387C84
-387C84:lI47|H387D3C
-387D3C:lI101|H387DFC
-387DFC:lI114|H387EC4
-387EC4:lI116|H387F94
-387F94:lI115|H38806C
-38806C:lI47|H38814C
-38814C:lI108|H388234
-388234:lI105|H388324
-388324:lI98|H38841C
-38841C:lI47|H38851C
-38851C:lI116|H388624
-388624:lI101|H388734
-388734:lI115|H388844
-388844:lI116|H388954
-388954:lI95|H388A5C
-388A5C:lI115|H388B6C
-388B6C:lI101|H388C7C
-388C7C:lI114|H388D8C
-388D8C:lI118|H388EA4
-388EA4:lI101|H388FBC
-388FBC:lI114|H3890D4
-3890D4:lI47|H3891EC
-3891EC:lI101|H3892FC
-3892FC:lI98|H38940C
-38940C:lI105|H38951C
-38951C:lI110|N
-38B018:lH3875CC|H38AE7C
-3875CC:lI47|H387624
-387624:lI99|H387684
-387684:lI108|H3876EC
-3876EC:lI101|H38775C
-38775C:lI97|H3877D4
-3877D4:lI114|H387854
-387854:lI99|H3878DC
-3878DC:lI97|H38796C
-38796C:lI115|H3879FC
-3879FC:lI101|H387A94
-387A94:lI47|H387B34
-387B34:lI111|H387BDC
-387BDC:lI116|H387C8C
-387C8C:lI112|H387D44
-387D44:lI47|H387E04
-387E04:lI101|H387ECC
-387ECC:lI114|H387F9C
-387F9C:lI116|H388074
-388074:lI115|H388154
-388154:lI47|H38823C
-38823C:lI108|H38832C
-38832C:lI105|H388424
-388424:lI98|H388524
-388524:lI47|H38862C
-38862C:lI115|H38873C
-38873C:lI115|H38884C
-38884C:lI108|H38895C
-38895C:lI47|H388A64
-388A64:lI101|H388B74
-388B74:lI98|H388C84
-388C84:lI105|H388D94
-388D94:lI110|N
-38AE7C:lH38762C|H38AEB0
-38762C:lI47|H38768C
-38768C:lI99|H3876F4
-3876F4:lI108|H387764
-387764:lI101|H3877DC
-3877DC:lI97|H38785C
-38785C:lI114|H3878E4
-3878E4:lI99|H387974
-387974:lI97|H387A04
-387A04:lI115|H387A9C
-387A9C:lI101|H387B3C
-387B3C:lI47|H387BE4
-387BE4:lI111|H387C94
-387C94:lI116|H387D4C
-387D4C:lI112|H387E0C
-387E0C:lI47|H387ED4
-387ED4:lI101|H387FA4
-387FA4:lI114|H38807C
-38807C:lI116|H38815C
-38815C:lI115|H388244
-388244:lI47|H388334
-388334:lI108|H38842C
-38842C:lI105|H38852C
-38852C:lI98|H388634
-388634:lI47|H388744
-388744:lI115|H388854
-388854:lI110|H388964
-388964:lI109|H388A6C
-388A6C:lI112|H388B7C
-388B7C:lI47|H388C8C
-388C8C:lI101|H388D9C
-388D9C:lI98|H388EAC
-388EAC:lI105|H388FC4
-388FC4:lI110|N
-38AEB0:lH387694|H38AED8
-387694:lI47|H3876FC
-3876FC:lI99|H38776C
-38776C:lI108|H3877E4
-3877E4:lI101|H387864
-387864:lI97|H3878EC
-3878EC:lI114|H38797C
-38797C:lI99|H387A0C
-387A0C:lI97|H387AA4
-387AA4:lI115|H387B44
-387B44:lI101|H387BEC
-387BEC:lI47|H387C9C
-387C9C:lI111|H387D54
-387D54:lI116|H387E14
-387E14:lI112|H387EDC
-387EDC:lI47|H387FAC
-387FAC:lI101|H388084
-388084:lI114|H388164
-388164:lI116|H38824C
-38824C:lI115|H38833C
-38833C:lI47|H388434
-388434:lI108|H388534
-388534:lI105|H38863C
-38863C:lI98|H38874C
-38874C:lI47|H38885C
-38885C:lI115|H38896C
-38896C:lI97|H388A74
-388A74:lI115|H388B84
-388B84:lI108|H388C94
-388C94:lI47|H388DA4
-388DA4:lI101|H388EB4
-388EB4:lI98|H388FCC
-388FCC:lI105|H3890DC
-3890DC:lI110|N
-38AED8:lH387704|H38AF08
-387704:lI47|H387774
-387774:lI99|H3877EC
-3877EC:lI108|H38786C
-38786C:lI101|H3878F4
-3878F4:lI97|H387984
-387984:lI114|H387A14
-387A14:lI99|H387AAC
-387AAC:lI97|H387B4C
-387B4C:lI115|H387BF4
-387BF4:lI101|H387CA4
-387CA4:lI47|H387D5C
-387D5C:lI111|H387E1C
-387E1C:lI116|H387EE4
-387EE4:lI112|H387FB4
-387FB4:lI47|H38808C
-38808C:lI101|H38816C
-38816C:lI114|H388254
-388254:lI116|H388344
-388344:lI115|H38843C
-38843C:lI47|H38853C
-38853C:lI108|H388644
-388644:lI105|H388754
-388754:lI98|H388864
-388864:lI47|H388974
-388974:lI114|H388A7C
-388A7C:lI117|H388B8C
-388B8C:lI110|H388C9C
-388C9C:lI116|H388DAC
-388DAC:lI105|H388EBC
-388EBC:lI109|H388FD4
-388FD4:lI101|H3890E4
-3890E4:lI95|H3891F4
-3891F4:lI116|H389304
-389304:lI111|H389414
-389414:lI111|H389524
-389524:lI108|H389624
-389624:lI115|H38971C
-38971C:lI47|H389814
-389814:lI101|H38990C
-38990C:lI98|H389A04
-389A04:lI105|H389AE4
-389AE4:lI110|N
-38AF08:lH38777C|H38AF40
-38777C:lI47|H3877F4
-3877F4:lI99|H387874
-387874:lI108|H3878FC
-3878FC:lI101|H38798C
-38798C:lI97|H387A1C
-387A1C:lI114|H387AB4
-387AB4:lI99|H387B54
-387B54:lI97|H387BFC
-387BFC:lI115|H387CAC
-387CAC:lI101|H387D64
-387D64:lI47|H387E24
-387E24:lI111|H387EEC
-387EEC:lI116|H387FBC
-387FBC:lI112|H388094
-388094:lI47|H388174
-388174:lI101|H38825C
-38825C:lI114|H38834C
-38834C:lI116|H388444
-388444:lI115|H388544
-388544:lI47|H38864C
-38864C:lI108|H38875C
-38875C:lI105|H38886C
-38886C:lI98|H38897C
-38897C:lI47|H388A84
-388A84:lI114|H388B94
-388B94:lI115|H388CA4
-388CA4:lI104|H388DB4
-388DB4:lI101|H388EC4
-388EC4:lI108|H388FDC
-388FDC:lI108|H3890EC
-3890EC:lI47|H3891FC
-3891FC:lI101|H38930C
-38930C:lI98|H38941C
-38941C:lI105|H38952C
-38952C:lI110|N
-38AF40:lH3877FC|H38AF68
-3877FC:lI47|H38787C
-38787C:lI99|H387904
-387904:lI108|H387994
-387994:lI101|H387A24
-387A24:lI97|H387ABC
-387ABC:lI114|H387B5C
-387B5C:lI99|H387C04
-387C04:lI97|H387CB4
-387CB4:lI115|H387D6C
-387D6C:lI101|H387E2C
-387E2C:lI47|H387EF4
-387EF4:lI111|H387FC4
-387FC4:lI116|H38809C
-38809C:lI112|H38817C
-38817C:lI47|H388264
-388264:lI101|H388354
-388354:lI114|H38844C
-38844C:lI116|H38854C
-38854C:lI115|H388654
-388654:lI47|H388764
-388764:lI108|H388874
-388874:lI105|H388984
-388984:lI98|H388A8C
-388A8C:lI47|H388B9C
-388B9C:lI112|H388CAC
-388CAC:lI109|H388DBC
-388DBC:lI97|H388ECC
-388ECC:lI110|H388FE4
-388FE4:lI47|H3890F4
-3890F4:lI101|H389204
-389204:lI98|H389314
-389314:lI105|H389424
-389424:lI110|N
-38AF68:lH387884|H38AF90
-387884:lI47|H38790C
-38790C:lI99|H38799C
-38799C:lI108|H387A2C
-387A2C:lI101|H387AC4
-387AC4:lI97|H387B64
-387B64:lI114|H387C0C
-387C0C:lI99|H387CBC
-387CBC:lI97|H387D74
-387D74:lI115|H387E34
-387E34:lI101|H387EFC
-387EFC:lI47|H387FCC
-387FCC:lI111|H3880A4
-3880A4:lI116|H388184
-388184:lI112|H38826C
-38826C:lI47|H38835C
-38835C:lI101|H388454
-388454:lI114|H388554
-388554:lI116|H38865C
-38865C:lI115|H38876C
-38876C:lI47|H38887C
-38887C:lI108|H38898C
-38898C:lI105|H388A94
-388A94:lI98|H388BA4
-388BA4:lI47|H388CB4
-388CB4:lI112|H388DC4
-388DC4:lI97|H388ED4
-388ED4:lI114|H388FEC
-388FEC:lI115|H3890FC
-3890FC:lI101|H38920C
-38920C:lI116|H38931C
-38931C:lI111|H38942C
-38942C:lI111|H389534
-389534:lI108|H38962C
-38962C:lI115|H389724
-389724:lI47|H38981C
-38981C:lI101|H389914
-389914:lI98|H389A0C
-389A0C:lI105|H389AEC
-389AEC:lI110|N
-38AF90:lH387914|H38AFB8
-387914:lI47|H3879A4
-3879A4:lI99|H387A34
-387A34:lI108|H387ACC
-387ACC:lI101|H387B6C
-387B6C:lI97|H387C14
-387C14:lI114|H387CC4
-387CC4:lI99|H387D7C
-387D7C:lI97|H387E3C
-387E3C:lI115|H387F04
-387F04:lI101|H387FD4
-387FD4:lI47|H3880AC
-3880AC:lI111|H38818C
-38818C:lI116|H388274
-388274:lI112|H388364
-388364:lI47|H38845C
-38845C:lI101|H38855C
-38855C:lI114|H388664
-388664:lI116|H388774
-388774:lI115|H388884
-388884:lI47|H388994
-388994:lI108|H388A9C
-388A9C:lI105|H388BAC
-388BAC:lI98|H388CBC
-388CBC:lI47|H388DCC
-388DCC:lI111|H388EDC
-388EDC:lI116|H388FF4
-388FF4:lI112|H389104
-389104:lI95|H389214
-389214:lI109|H389324
-389324:lI105|H389434
-389434:lI98|H38953C
-38953C:lI115|H389634
-389634:lI47|H38972C
-38972C:lI101|H389824
-389824:lI98|H38991C
-38991C:lI105|H389A14
-389A14:lI110|N
-38AFB8:lH3879AC|H38AFE0
-3879AC:lI47|H387A3C
-387A3C:lI99|H387AD4
-387AD4:lI108|H387B74
-387B74:lI101|H387C1C
-387C1C:lI97|H387CCC
-387CCC:lI114|H387D84
-387D84:lI99|H387E44
-387E44:lI97|H387F0C
-387F0C:lI115|H387FDC
-387FDC:lI101|H3880B4
-3880B4:lI47|H388194
-388194:lI111|H38827C
-38827C:lI116|H38836C
-38836C:lI112|H388464
-388464:lI47|H388564
-388564:lI101|H38866C
-38866C:lI114|H38877C
-38877C:lI116|H38888C
-38888C:lI115|H38899C
-38899C:lI47|H388AA4
-388AA4:lI108|H388BB4
-388BB4:lI105|H388CC4
-388CC4:lI98|H388DD4
-388DD4:lI47|H388EE4
-388EE4:lI111|H388FFC
-388FFC:lI115|H38910C
-38910C:lI95|H38921C
-38921C:lI109|H38932C
-38932C:lI111|H38943C
-38943C:lI110|H389544
-389544:lI47|H38963C
-38963C:lI101|H389734
-389734:lI98|H38982C
-38982C:lI105|H389924
-389924:lI110|N
-38AFE0:lH387A44|H38B000
-387A44:lI47|H387ADC
-387ADC:lI99|H387B7C
-387B7C:lI108|H387C24
-387C24:lI101|H387CD4
-387CD4:lI97|H387D8C
-387D8C:lI114|H387E4C
-387E4C:lI99|H387F14
-387F14:lI97|H387FE4
-387FE4:lI115|H3880BC
-3880BC:lI101|H38819C
-38819C:lI47|H388284
-388284:lI111|H388374
-388374:lI116|H38846C
-38846C:lI112|H38856C
-38856C:lI47|H388674
-388674:lI101|H388784
-388784:lI114|H388894
-388894:lI116|H3889A4
-3889A4:lI115|H388AAC
-388AAC:lI47|H388BBC
-388BBC:lI108|H388CCC
-388CCC:lI105|H388DDC
-388DDC:lI98|H388EEC
-388EEC:lI47|H389004
-389004:lI111|H389114
-389114:lI114|H389224
-389224:lI98|H389334
-389334:lI101|H389444
-389444:lI114|H38954C
-38954C:lI47|H389644
-389644:lI101|H38973C
-38973C:lI98|H389834
-389834:lI105|H38992C
-38992C:lI110|N
-38B000:lH387AE4|H38B010
-387AE4:lI47|H387B84
-387B84:lI99|H387C2C
-387C2C:lI108|H387CDC
-387CDC:lI101|H387D94
-387D94:lI97|H387E54
-387E54:lI114|H387F1C
-387F1C:lI99|H387FEC
-387FEC:lI97|H3880C4
-3880C4:lI115|H3881A4
-3881A4:lI101|H38828C
-38828C:lI47|H38837C
-38837C:lI111|H388474
-388474:lI116|H388574
-388574:lI112|H38867C
-38867C:lI47|H38878C
-38878C:lI101|H38889C
-38889C:lI114|H3889AC
-3889AC:lI116|H388AB4
-388AB4:lI115|H388BC4
-388BC4:lI47|H388CD4
-388CD4:lI108|H388DE4
-388DE4:lI105|H388EF4
-388EF4:lI98|H38900C
-38900C:lI47|H38911C
-38911C:lI111|H38922C
-38922C:lI100|H38933C
-38933C:lI98|H38944C
-38944C:lI99|H389554
-389554:lI47|H38964C
-38964C:lI101|H389744
-389744:lI98|H38983C
-38983C:lI105|H389934
-389934:lI110|N
-38B010:lH387B8C|H38B020
-387B8C:lI47|H387C34
-387C34:lI99|H387CE4
-387CE4:lI108|H387D9C
-387D9C:lI101|H387E5C
-387E5C:lI97|H387F24
-387F24:lI114|H387FF4
-387FF4:lI99|H3880CC
-3880CC:lI97|H3881AC
-3881AC:lI115|H388294
-388294:lI101|H388384
-388384:lI47|H38847C
-38847C:lI111|H38857C
-38857C:lI116|H388684
-388684:lI112|H388794
-388794:lI47|H3888A4
-3888A4:lI101|H3889B4
-3889B4:lI114|H388ABC
-388ABC:lI116|H388BCC
-388BCC:lI115|H388CDC
-388CDC:lI47|H388DEC
-388DEC:lI108|H388EFC
-388EFC:lI105|H389014
-389014:lI98|H389124
-389124:lI47|H389234
-389234:lI111|H389344
-389344:lI98|H389454
-389454:lI115|H38955C
-38955C:lI101|H389654
-389654:lI114|H38974C
-38974C:lI118|H389844
-389844:lI101|H38993C
-38993C:lI114|H389A1C
-389A1C:lI47|H389AF4
-389AF4:lI101|H389BBC
-389BBC:lI98|H389C84
-389C84:lI105|H389D4C
-389D4C:lI110|N
-38B020:lH387C3C|H38B028
-387C3C:lI47|H387CEC
-387CEC:lI99|H387DA4
-387DA4:lI108|H387E64
-387E64:lI101|H387F2C
-387F2C:lI97|H387FFC
-387FFC:lI114|H3880D4
-3880D4:lI99|H3881B4
-3881B4:lI97|H38829C
-38829C:lI115|H38838C
-38838C:lI101|H388484
-388484:lI47|H388584
-388584:lI111|H38868C
-38868C:lI116|H38879C
-38879C:lI112|H3888AC
-3888AC:lI47|H3889BC
-3889BC:lI101|H388AC4
-388AC4:lI114|H388BD4
-388BD4:lI116|H388CE4
-388CE4:lI115|H388DF4
-388DF4:lI47|H388F04
-388F04:lI108|H38901C
-38901C:lI105|H38912C
-38912C:lI98|H38923C
-38923C:lI47|H38934C
-38934C:lI109|H38945C
-38945C:lI110|H389564
-389564:lI101|H38965C
-38965C:lI115|H389754
-389754:lI105|H38984C
-38984C:lI97|H389944
-389944:lI95|H389A24
-389A24:lI115|H389AFC
-389AFC:lI101|H389BC4
-389BC4:lI115|H389C8C
-389C8C:lI115|H389D54
-389D54:lI105|H389E14
-389E14:lI111|H389ECC
-389ECC:lI110|H389F7C
-389F7C:lI47|H38A01C
-38A01C:lI101|H38A0AC
-38A0AC:lI98|H38A12C
-38A12C:lI105|H38A19C
-38A19C:lI110|N
-38B028:lH387CF4|H38B030
-387CF4:lI47|H387DAC
-387DAC:lI99|H387E6C
-387E6C:lI108|H387F34
-387F34:lI101|H388004
-388004:lI97|H3880DC
-3880DC:lI114|H3881BC
-3881BC:lI99|H3882A4
-3882A4:lI97|H388394
-388394:lI115|H38848C
-38848C:lI101|H38858C
-38858C:lI47|H388694
-388694:lI111|H3887A4
-3887A4:lI116|H3888B4
-3888B4:lI112|H3889C4
-3889C4:lI47|H388ACC
-388ACC:lI101|H388BDC
-388BDC:lI114|H388CEC
-388CEC:lI116|H388DFC
-388DFC:lI115|H388F0C
-388F0C:lI47|H389024
-389024:lI108|H389134
-389134:lI105|H389244
-389244:lI98|H389354
-389354:lI47|H389464
-389464:lI109|H38956C
-38956C:lI110|H389664
-389664:lI101|H38975C
-38975C:lI115|H389854
-389854:lI105|H38994C
-38994C:lI97|H389A2C
-389A2C:lI47|H389B04
-389B04:lI101|H389BCC
-389BCC:lI98|H389C94
-389C94:lI105|H389D5C
-389D5C:lI110|N
-38B030:lH387DB4|H38B038
-387DB4:lI47|H387E74
-387E74:lI99|H387F3C
-387F3C:lI108|H38800C
-38800C:lI101|H3880E4
-3880E4:lI97|H3881C4
-3881C4:lI114|H3882AC
-3882AC:lI99|H38839C
-38839C:lI97|H388494
-388494:lI115|H388594
-388594:lI101|H38869C
-38869C:lI47|H3887AC
-3887AC:lI111|H3888BC
-3888BC:lI116|H3889CC
-3889CC:lI112|H388AD4
-388AD4:lI47|H388BE4
-388BE4:lI101|H388CF4
-388CF4:lI114|H388E04
-388E04:lI116|H388F14
-388F14:lI115|H38902C
-38902C:lI47|H38913C
-38913C:lI108|H38924C
-38924C:lI105|H38935C
-38935C:lI98|H38946C
-38946C:lI47|H389574
-389574:lI109|H38966C
-38966C:lI110|H389764
-389764:lI101|H38985C
-38985C:lI109|H389954
-389954:lI111|H389A34
-389A34:lI115|H389B0C
-389B0C:lI121|H389BD4
-389BD4:lI110|H389C9C
-389C9C:lI101|H389D64
-389D64:lI47|H389E1C
-389E1C:lI101|H389ED4
-389ED4:lI98|H389F84
-389F84:lI105|H38A024
-38A024:lI110|N
-38B038:lH387E7C|H38B040
-387E7C:lI47|H387F44
-387F44:lI99|H388014
-388014:lI108|H3880EC
-3880EC:lI101|H3881CC
-3881CC:lI97|H3882B4
-3882B4:lI114|H3883A4
-3883A4:lI99|H38849C
-38849C:lI97|H38859C
-38859C:lI115|H3886A4
-3886A4:lI101|H3887B4
-3887B4:lI47|H3888C4
-3888C4:lI111|H3889D4
-3889D4:lI116|H388ADC
-388ADC:lI112|H388BEC
-388BEC:lI47|H388CFC
-388CFC:lI101|H388E0C
-388E0C:lI114|H388F1C
-388F1C:lI116|H389034
-389034:lI115|H389144
-389144:lI47|H389254
-389254:lI108|H389364
-389364:lI105|H389474
-389474:lI98|H38957C
-38957C:lI47|H389674
-389674:lI109|H38976C
-38976C:lI101|H389864
-389864:lI103|H38995C
-38995C:lI97|H389A3C
-389A3C:lI99|H389B14
-389B14:lI111|H389BDC
-389BDC:lI47|H389CA4
-389CA4:lI101|H389D6C
-389D6C:lI98|H389E24
-389E24:lI105|H389EDC
-389EDC:lI110|N
-38B040:lH387F4C|H38B048
-387F4C:lI47|H38801C
-38801C:lI99|H3880F4
-3880F4:lI108|H3881D4
-3881D4:lI101|H3882BC
-3882BC:lI97|H3883AC
-3883AC:lI114|H3884A4
-3884A4:lI99|H3885A4
-3885A4:lI97|H3886AC
-3886AC:lI115|H3887BC
-3887BC:lI101|H3888CC
-3888CC:lI47|H3889DC
-3889DC:lI111|H388AE4
-388AE4:lI116|H388BF4
-388BF4:lI112|H388D04
-388D04:lI47|H388E14
-388E14:lI101|H388F24
-388F24:lI114|H38903C
-38903C:lI116|H38914C
-38914C:lI115|H38925C
-38925C:lI47|H38936C
-38936C:lI108|H38947C
-38947C:lI105|H389584
-389584:lI98|H38967C
-38967C:lI47|H389774
-389774:lI106|H38986C
-38986C:lI105|H389964
-389964:lI110|H389A44
-389A44:lI116|H389B1C
-389B1C:lI101|H389BE4
-389BE4:lI114|H389CAC
-389CAC:lI102|H389D74
-389D74:lI97|H389E2C
-389E2C:lI99|H389EE4
-389EE4:lI101|N
-38B048:lH388024|H38B050
-388024:lI47|H3880FC
-3880FC:lI99|H3881DC
-3881DC:lI108|H3882C4
-3882C4:lI101|H3883B4
-3883B4:lI97|H3884AC
-3884AC:lI114|H3885AC
-3885AC:lI99|H3886B4
-3886B4:lI97|H3887C4
-3887C4:lI115|H3888D4
-3888D4:lI101|H3889E4
-3889E4:lI47|H388AEC
-388AEC:lI111|H388BFC
-388BFC:lI116|H388D0C
-388D0C:lI112|H388E1C
-388E1C:lI47|H388F2C
-388F2C:lI101|H389044
-389044:lI114|H389154
-389154:lI116|H389264
-389264:lI115|H389374
-389374:lI47|H389484
-389484:lI108|H38958C
-38958C:lI105|H389684
-389684:lI98|H38977C
-38977C:lI47|H389874
-389874:lI105|H38996C
-38996C:lI110|H389A4C
-389A4C:lI101|H389B24
-389B24:lI116|H389BEC
-389BEC:lI115|H389CB4
-389CB4:lI47|H389D7C
-389D7C:lI101|H389E34
-389E34:lI98|H389EEC
-389EEC:lI105|H389F8C
-389F8C:lI110|N
-38B050:lH388104|H38B058
-388104:lI47|H3881E4
-3881E4:lI99|H3882CC
-3882CC:lI108|H3883BC
-3883BC:lI101|H3884B4
-3884B4:lI97|H3885B4
-3885B4:lI114|H3886BC
-3886BC:lI99|H3887CC
-3887CC:lI97|H3888DC
-3888DC:lI115|H3889EC
-3889EC:lI101|H388AF4
-388AF4:lI47|H388C04
-388C04:lI111|H388D14
-388D14:lI116|H388E24
-388E24:lI112|H388F34
-388F34:lI47|H38904C
-38904C:lI101|H38915C
-38915C:lI114|H38926C
-38926C:lI116|H38937C
-38937C:lI115|H38948C
-38948C:lI47|H389594
-389594:lI108|H38968C
-38968C:lI105|H389784
-389784:lI98|H38987C
-38987C:lI47|H389974
-389974:lI105|H389A54
-389A54:lI99|H389B2C
-389B2C:lI47|H389BF4
-389BF4:lI101|H389CBC
-389CBC:lI98|H389D84
-389D84:lI105|H389E3C
-389E3C:lI110|N
-38B058:lH3881EC|H38B060
-3881EC:lI47|H3882D4
-3882D4:lI99|H3883C4
-3883C4:lI108|H3884BC
-3884BC:lI101|H3885BC
-3885BC:lI97|H3886C4
-3886C4:lI114|H3887D4
-3887D4:lI99|H3888E4
-3888E4:lI97|H3889F4
-3889F4:lI115|H388AFC
-388AFC:lI101|H388C0C
-388C0C:lI47|H388D1C
-388D1C:lI111|H388E2C
-388E2C:lI116|H388F3C
-388F3C:lI112|H389054
-389054:lI47|H389164
-389164:lI101|H389274
-389274:lI114|H389384
-389384:lI116|H389494
-389494:lI115|H38959C
-38959C:lI47|H389694
-389694:lI108|H38978C
-38978C:lI105|H389884
-389884:lI98|H38997C
-38997C:lI47|H389A5C
-389A5C:lI104|H389B34
-389B34:lI105|H389BFC
-389BFC:lI112|H389CC4
-389CC4:lI101|H389D8C
-389D8C:lI47|H389E44
-389E44:lI101|H389EF4
-389EF4:lI98|H389F94
-389F94:lI105|H38A02C
-38A02C:lI110|N
-38B060:lH3882DC|H38B068
-3882DC:lI47|H3883CC
-3883CC:lI99|H3884C4
-3884C4:lI108|H3885C4
-3885C4:lI101|H3886CC
-3886CC:lI97|H3887DC
-3887DC:lI114|H3888EC
-3888EC:lI99|H3889FC
-3889FC:lI97|H388B04
-388B04:lI115|H388C14
-388C14:lI101|H388D24
-388D24:lI47|H388E34
-388E34:lI111|H388F44
-388F44:lI116|H38905C
-38905C:lI112|H38916C
-38916C:lI47|H38927C
-38927C:lI101|H38938C
-38938C:lI114|H38949C
-38949C:lI116|H3895A4
-3895A4:lI115|H38969C
-38969C:lI47|H389794
-389794:lI108|H38988C
-38988C:lI105|H389984
-389984:lI98|H389A64
-389A64:lI47|H389B3C
-389B3C:lI103|H389C04
-389C04:lI115|H389CCC
-389CCC:lI47|H389D94
-389D94:lI101|H389E4C
-389E4C:lI98|H389EFC
-389EFC:lI105|H389F9C
-389F9C:lI110|N
-38B068:lH3883D4|H38B070
-3883D4:lI47|H3884CC
-3884CC:lI99|H3885CC
-3885CC:lI108|H3886D4
-3886D4:lI101|H3887E4
-3887E4:lI97|H3888F4
-3888F4:lI114|H388A04
-388A04:lI99|H388B0C
-388B0C:lI97|H388C1C
-388C1C:lI115|H388D2C
-388D2C:lI101|H388E3C
-388E3C:lI47|H388F4C
-388F4C:lI111|H389064
-389064:lI116|H389174
-389174:lI112|H389284
-389284:lI47|H389394
-389394:lI101|H3894A4
-3894A4:lI114|H3895AC
-3895AC:lI116|H3896A4
-3896A4:lI115|H38979C
-38979C:lI47|H389894
-389894:lI108|H38998C
-38998C:lI105|H389A6C
-389A6C:lI98|H389B44
-389B44:lI47|H389C0C
-389C0C:lI101|H389CD4
-389CD4:lI118|H389D9C
-389D9C:lI97|H389E54
-389E54:lI47|H389F04
-389F04:lI101|H389FA4
-389FA4:lI98|H38A034
-38A034:lI105|H38A0B4
-38A0B4:lI110|N
-38B070:lH3884D4|H38B078
-3884D4:lI47|H3885D4
-3885D4:lI99|H3886DC
-3886DC:lI108|H3887EC
-3887EC:lI101|H3888FC
-3888FC:lI97|H388A0C
-388A0C:lI114|H388B14
-388B14:lI99|H388C24
-388C24:lI97|H388D34
-388D34:lI115|H388E44
-388E44:lI101|H388F54
-388F54:lI47|H38906C
-38906C:lI111|H38917C
-38917C:lI116|H38928C
-38928C:lI112|H38939C
-38939C:lI47|H3894AC
-3894AC:lI101|H3895B4
-3895B4:lI114|H3896AC
-3896AC:lI116|H3897A4
-3897A4:lI115|H38989C
-38989C:lI47|H389994
-389994:lI108|H389A74
-389A74:lI105|H389B4C
-389B4C:lI98|H389C14
-389C14:lI47|H389CDC
-389CDC:lI101|H389DA4
-389DA4:lI116|H389E5C
-389E5C:lI47|H389F0C
-389F0C:lI101|H389FAC
-389FAC:lI98|H38A03C
-38A03C:lI105|H38A0BC
-38A0BC:lI110|N
-38B078:lH3885DC|H38B080
-3885DC:lI47|H3886E4
-3886E4:lI99|H3887F4
-3887F4:lI108|H388904
-388904:lI101|H388A14
-388A14:lI97|H388B1C
-388B1C:lI114|H388C2C
-388C2C:lI99|H388D3C
-388D3C:lI97|H388E4C
-388E4C:lI115|H388F5C
-388F5C:lI101|H389074
-389074:lI47|H389184
-389184:lI111|H389294
-389294:lI116|H3893A4
-3893A4:lI112|H3894B4
-3894B4:lI47|H3895BC
-3895BC:lI101|H3896B4
-3896B4:lI114|H3897AC
-3897AC:lI116|H3898A4
-3898A4:lI115|H38999C
-38999C:lI47|H389A7C
-389A7C:lI108|H389B54
-389B54:lI105|H389C1C
-389C1C:lI98|H389CE4
-389CE4:lI47|H389DAC
-389DAC:lI101|H389E64
-389E64:lI114|H389F14
-389F14:lI108|H389FB4
-389FB4:lI95|H38A044
-38A044:lI105|H38A0C4
-38A0C4:lI110|H38A134
-38A134:lI116|H38A1A4
-38A1A4:lI101|H38A20C
-38A20C:lI114|H38A274
-38A274:lI102|H38A2DC
-38A2DC:lI97|H38A344
-38A344:lI99|H38A3AC
-38A3AC:lI101|N
-38B080:lH3886EC|H38B088
-3886EC:lI47|H3887FC
-3887FC:lI99|H38890C
-38890C:lI108|H388A1C
-388A1C:lI101|H388B24
-388B24:lI97|H388C34
-388C34:lI114|H388D44
-388D44:lI99|H388E54
-388E54:lI97|H388F64
-388F64:lI115|H38907C
-38907C:lI101|H38918C
-38918C:lI47|H38929C
-38929C:lI111|H3893AC
-3893AC:lI116|H3894BC
-3894BC:lI112|H3895C4
-3895C4:lI47|H3896BC
-3896BC:lI101|H3897B4
-3897B4:lI114|H3898AC
-3898AC:lI116|H3899A4
-3899A4:lI115|H389A84
-389A84:lI47|H389B5C
-389B5C:lI108|H389C24
-389C24:lI105|H389CEC
-389CEC:lI98|H389DB4
-389DB4:lI47|H389E6C
-389E6C:lI100|H389F1C
-389F1C:lI101|H389FBC
-389FBC:lI98|H38A04C
-38A04C:lI117|H38A0CC
-38A0CC:lI103|H38A13C
-38A13C:lI103|H38A1AC
-38A1AC:lI101|H38A214
-38A214:lI114|H38A27C
-38A27C:lI47|H38A2E4
-38A2E4:lI101|H38A34C
-38A34C:lI98|H38A3B4
-38A3B4:lI105|H38A414
-38A414:lI110|N
-38B088:lH388804|H38B090
-388804:lI47|H388914
-388914:lI99|H388A24
-388A24:lI108|H388B2C
-388B2C:lI101|H388C3C
-388C3C:lI97|H388D4C
-388D4C:lI114|H388E5C
-388E5C:lI99|H388F6C
-388F6C:lI97|H389084
-389084:lI115|H389194
-389194:lI101|H3892A4
-3892A4:lI47|H3893B4
-3893B4:lI111|H3894C4
-3894C4:lI116|H3895CC
-3895CC:lI112|H3896C4
-3896C4:lI47|H3897BC
-3897BC:lI101|H3898B4
-3898B4:lI114|H3899AC
-3899AC:lI116|H389A8C
-389A8C:lI115|H389B64
-389B64:lI47|H389C2C
-389C2C:lI108|H389CF4
-389CF4:lI105|H389DBC
-389DBC:lI98|H389E74
-389E74:lI47|H389F24
-389F24:lI99|H389FC4
-389FC4:lI114|H38A054
-38A054:lI121|H38A0D4
-38A0D4:lI112|H38A144
-38A144:lI116|H38A1B4
-38A1B4:lI111|H38A21C
-38A21C:lI47|H38A284
-38A284:lI101|H38A2EC
-38A2EC:lI98|H38A354
-38A354:lI105|H38A3BC
-38A3BC:lI110|N
-38B090:lH38891C|H38B098
-38891C:lI47|H388A2C
-388A2C:lI99|H388B34
-388B34:lI108|H388C44
-388C44:lI101|H388D54
-388D54:lI97|H388E64
-388E64:lI114|H388F74
-388F74:lI99|H38908C
-38908C:lI97|H38919C
-38919C:lI115|H3892AC
-3892AC:lI101|H3893BC
-3893BC:lI47|H3894CC
-3894CC:lI111|H3895D4
-3895D4:lI116|H3896CC
-3896CC:lI112|H3897C4
-3897C4:lI47|H3898BC
-3898BC:lI101|H3899B4
-3899B4:lI114|H389A94
-389A94:lI116|H389B6C
-389B6C:lI115|H389C34
-389C34:lI47|H389CFC
-389CFC:lI108|H389DC4
-389DC4:lI105|H389E7C
-389E7C:lI98|H389F2C
-389F2C:lI47|H389FCC
-389FCC:lI99|H38A05C
-38A05C:lI111|H38A0DC
-38A0DC:lI115|H38A14C
-38A14C:lI84|H38A1BC
-38A1BC:lI114|H38A224
-38A224:lI97|H38A28C
-38A28C:lI110|H38A2F4
-38A2F4:lI115|H38A35C
-38A35C:lI97|H38A3C4
-38A3C4:lI99|H38A41C
-38A41C:lI116|H38A46C
-38A46C:lI105|H38A4BC
-38A4BC:lI111|H38A50C
-38A50C:lI110|H38A554
-38A554:lI115|H38A59C
-38A59C:lI47|H38A5E4
-38A5E4:lI101|H38A62C
-38A62C:lI98|H38A66C
-38A66C:lI105|H38A6A4
-38A6A4:lI110|N
-38B098:lH388A34|H38B0A0
-388A34:lI47|H388B3C
-388B3C:lI99|H388C4C
-388C4C:lI108|H388D5C
-388D5C:lI101|H388E6C
-388E6C:lI97|H388F7C
-388F7C:lI114|H389094
-389094:lI99|H3891A4
-3891A4:lI97|H3892B4
-3892B4:lI115|H3893C4
-3893C4:lI101|H3894D4
-3894D4:lI47|H3895DC
-3895DC:lI111|H3896D4
-3896D4:lI116|H3897CC
-3897CC:lI112|H3898C4
-3898C4:lI47|H3899BC
-3899BC:lI101|H389A9C
-389A9C:lI114|H389B74
-389B74:lI116|H389C3C
-389C3C:lI115|H389D04
-389D04:lI47|H389DCC
-389DCC:lI108|H389E84
-389E84:lI105|H389F34
-389F34:lI98|H389FD4
-389FD4:lI47|H38A064
-38A064:lI99|H38A0E4
-38A0E4:lI111|H38A154
-38A154:lI115|H38A1C4
-38A1C4:lI84|H38A22C
-38A22C:lI105|H38A294
-38A294:lI109|H38A2FC
-38A2FC:lI101|H38A364
-38A364:lI47|H38A3CC
-38A3CC:lI101|H38A424
-38A424:lI98|H38A474
-38A474:lI105|H38A4C4
-38A4C4:lI110|N
-38B0A0:lH388B44|H38B0A8
-388B44:lI47|H388C54
-388C54:lI99|H388D64
-388D64:lI108|H388E74
-388E74:lI101|H388F84
-388F84:lI97|H38909C
-38909C:lI114|H3891AC
-3891AC:lI99|H3892BC
-3892BC:lI97|H3893CC
-3893CC:lI115|H3894DC
-3894DC:lI101|H3895E4
-3895E4:lI47|H3896DC
-3896DC:lI111|H3897D4
-3897D4:lI116|H3898CC
-3898CC:lI112|H3899C4
-3899C4:lI47|H389AA4
-389AA4:lI101|H389B7C
-389B7C:lI114|H389C44
-389C44:lI116|H389D0C
-389D0C:lI115|H389DD4
-389DD4:lI47|H389E8C
-389E8C:lI108|H389F3C
-389F3C:lI105|H389FDC
-389FDC:lI98|H38A06C
-38A06C:lI47|H38A0EC
-38A0EC:lI99|H38A15C
-38A15C:lI111|H38A1CC
-38A1CC:lI115|H38A234
-38A234:lI80|H38A29C
-38A29C:lI114|H38A304
-38A304:lI111|H38A36C
-38A36C:lI112|H38A3D4
-38A3D4:lI101|H38A42C
-38A42C:lI114|H38A47C
-38A47C:lI116|H38A4CC
-38A4CC:lI121|H38A514
-38A514:lI47|H38A55C
-38A55C:lI101|H38A5A4
-38A5A4:lI98|H38A5EC
-38A5EC:lI105|H38A634
-38A634:lI110|N
-38B0A8:lH388C5C|H38B0B0
-388C5C:lI47|H388D6C
-388D6C:lI99|H388E7C
-388E7C:lI108|H388F8C
-388F8C:lI101|H3890A4
-3890A4:lI97|H3891B4
-3891B4:lI114|H3892C4
-3892C4:lI99|H3893D4
-3893D4:lI97|H3894E4
-3894E4:lI115|H3895EC
-3895EC:lI101|H3896E4
-3896E4:lI47|H3897DC
-3897DC:lI111|H3898D4
-3898D4:lI116|H3899CC
-3899CC:lI112|H389AAC
-389AAC:lI47|H389B84
-389B84:lI101|H389C4C
-389C4C:lI114|H389D14
-389D14:lI116|H389DDC
-389DDC:lI115|H389E94
-389E94:lI47|H389F44
-389F44:lI108|H389FE4
-389FE4:lI105|H38A074
-38A074:lI98|H38A0F4
-38A0F4:lI47|H38A164
-38A164:lI99|H38A1D4
-38A1D4:lI111|H38A23C
-38A23C:lI115|H38A2A4
-38A2A4:lI78|H38A30C
-38A30C:lI111|H38A374
-38A374:lI116|H38A3DC
-38A3DC:lI105|H38A434
-38A434:lI102|H38A484
-38A484:lI105|H38A4D4
-38A4D4:lI99|H38A51C
-38A51C:lI97|H38A564
-38A564:lI116|H38A5AC
-38A5AC:lI105|H38A5F4
-38A5F4:lI111|H38A63C
-38A63C:lI110|H38A674
-38A674:lI47|H38A6AC
-38A6AC:lI101|H38A6D4
-38A6D4:lI98|H38A6EC
-38A6EC:lI105|H38A704
-38A704:lI110|N
-38B0B0:lH388D74|H38B0B8
-388D74:lI47|H388E84
-388E84:lI99|H388F94
-388F94:lI108|H3890AC
-3890AC:lI101|H3891BC
-3891BC:lI97|H3892CC
-3892CC:lI114|H3893DC
-3893DC:lI99|H3894EC
-3894EC:lI97|H3895F4
-3895F4:lI115|H3896EC
-3896EC:lI101|H3897E4
-3897E4:lI47|H3898DC
-3898DC:lI111|H3899D4
-3899D4:lI116|H389AB4
-389AB4:lI112|H389B8C
-389B8C:lI47|H389C54
-389C54:lI101|H389D1C
-389D1C:lI114|H389DE4
-389DE4:lI116|H389E9C
-389E9C:lI115|H389F4C
-389F4C:lI47|H389FEC
-389FEC:lI108|H38A07C
-38A07C:lI105|H38A0FC
-38A0FC:lI98|H38A16C
-38A16C:lI47|H38A1DC
-38A1DC:lI99|H38A244
-38A244:lI111|H38A2AC
-38A2AC:lI115|H38A314
-38A314:lI70|H38A37C
-38A37C:lI105|H38A3E4
-38A3E4:lI108|H38A43C
-38A43C:lI101|H38A48C
-38A48C:lI84|H38A4DC
-38A4DC:lI114|H38A524
-38A524:lI97|H38A56C
-38A56C:lI110|H38A5B4
-38A5B4:lI115|H38A5FC
-38A5FC:lI102|H38A644
-38A644:lI101|H38A67C
-38A67C:lI114|H38A6B4
-38A6B4:lI47|H38A6DC
-38A6DC:lI101|H38A6F4
-38A6F4:lI98|H38A70C
-38A70C:lI105|H38A71C
-38A71C:lI110|N
-38B0B8:lH388E8C|H38B0C0
-388E8C:lI47|H388F9C
-388F9C:lI99|H3890B4
-3890B4:lI108|H3891C4
-3891C4:lI101|H3892D4
-3892D4:lI97|H3893E4
-3893E4:lI114|H3894F4
-3894F4:lI99|H3895FC
-3895FC:lI97|H3896F4
-3896F4:lI115|H3897EC
-3897EC:lI101|H3898E4
-3898E4:lI47|H3899DC
-3899DC:lI111|H389ABC
-389ABC:lI116|H389B94
-389B94:lI112|H389C5C
-389C5C:lI47|H389D24
-389D24:lI101|H389DEC
-389DEC:lI114|H389EA4
-389EA4:lI116|H389F54
-389F54:lI115|H389FF4
-389FF4:lI47|H38A084
-38A084:lI108|H38A104
-38A104:lI105|H38A174
-38A174:lI98|H38A1E4
-38A1E4:lI47|H38A24C
-38A24C:lI99|H38A2B4
-38A2B4:lI111|H38A31C
-38A31C:lI115|H38A384
-38A384:lI69|H38A3EC
-38A3EC:lI118|H38A444
-38A444:lI101|H38A494
-38A494:lI110|H38A4E4
-38A4E4:lI116|H38A52C
-38A52C:lI68|H38A574
-38A574:lI111|H38A5BC
-38A5BC:lI109|H38A604
-38A604:lI97|H38A64C
-38A64C:lI105|H38A684
-38A684:lI110|H38A6BC
-38A6BC:lI47|H38A6E4
-38A6E4:lI101|H38A6FC
-38A6FC:lI98|H38A714
-38A714:lI105|H38A724
-38A724:lI110|N
-38B0C0:lH388FA4|H38B0C8
-388FA4:lI47|H3890BC
-3890BC:lI99|H3891CC
-3891CC:lI108|H3892DC
-3892DC:lI101|H3893EC
-3893EC:lI97|H3894FC
-3894FC:lI114|H389604
-389604:lI99|H3896FC
-3896FC:lI97|H3897F4
-3897F4:lI115|H3898EC
-3898EC:lI101|H3899E4
-3899E4:lI47|H389AC4
-389AC4:lI111|H389B9C
-389B9C:lI116|H389C64
-389C64:lI112|H389D2C
-389D2C:lI47|H389DF4
-389DF4:lI101|H389EAC
-389EAC:lI114|H389F5C
-389F5C:lI116|H389FFC
-389FFC:lI115|H38A08C
-38A08C:lI47|H38A10C
-38A10C:lI108|H38A17C
-38A17C:lI105|H38A1EC
-38A1EC:lI98|H38A254
-38A254:lI47|H38A2BC
-38A2BC:lI99|H38A324
-38A324:lI111|H38A38C
-38A38C:lI115|H38A3F4
-38A3F4:lI69|H38A44C
-38A44C:lI118|H38A49C
-38A49C:lI101|H38A4EC
-38A4EC:lI110|H38A534
-38A534:lI116|H38A57C
-38A57C:lI47|H38A5C4
-38A5C4:lI101|H38A60C
-38A60C:lI98|H38A654
-38A654:lI105|H38A68C
-38A68C:lI110|N
-38B0C8:lH3890C4|H38B0D0
-3890C4:lI47|H3891D4
-3891D4:lI99|H3892E4
-3892E4:lI108|H3893F4
-3893F4:lI101|H389504
-389504:lI97|H38960C
-38960C:lI114|H389704
-389704:lI99|H3897FC
-3897FC:lI97|H3898F4
-3898F4:lI115|H3899EC
-3899EC:lI101|H389ACC
-389ACC:lI47|H389BA4
-389BA4:lI111|H389C6C
-389C6C:lI116|H389D34
-389D34:lI112|H389DFC
-389DFC:lI47|H389EB4
-389EB4:lI101|H389F64
-389F64:lI114|H38A004
-38A004:lI116|H38A094
-38A094:lI115|H38A114
-38A114:lI47|H38A184
-38A184:lI108|H38A1F4
-38A1F4:lI105|H38A25C
-38A25C:lI98|H38A2C4
-38A2C4:lI47|H38A32C
-38A32C:lI99|H38A394
-38A394:lI111|H38A3FC
-38A3FC:lI109|H38A454
-38A454:lI112|H38A4A4
-38A4A4:lI105|H38A4F4
-38A4F4:lI108|H38A53C
-38A53C:lI101|H38A584
-38A584:lI114|H38A5CC
-38A5CC:lI47|H38A614
-38A614:lI101|H38A65C
-38A65C:lI98|H38A694
-38A694:lI105|H38A6C4
-38A6C4:lI110|N
-38B0D0:lH3891DC|H38B0D8
-3891DC:lI47|H3892EC
-3892EC:lI99|H3893FC
-3893FC:lI108|H38950C
-38950C:lI101|H389614
-389614:lI97|H38970C
-38970C:lI114|H389804
-389804:lI99|H3898FC
-3898FC:lI97|H3899F4
-3899F4:lI115|H389AD4
-389AD4:lI101|H389BAC
-389BAC:lI47|H389C74
-389C74:lI111|H389D3C
-389D3C:lI116|H389E04
-389E04:lI112|H389EBC
-389EBC:lI47|H389F6C
-389F6C:lI101|H38A00C
-38A00C:lI114|H38A09C
-38A09C:lI116|H38A11C
-38A11C:lI115|H38A18C
-38A18C:lI47|H38A1FC
-38A1FC:lI108|H38A264
-38A264:lI105|H38A2CC
-38A2CC:lI98|H38A334
-38A334:lI47|H38A39C
-38A39C:lI97|H38A404
-38A404:lI115|H38A45C
-38A45C:lI110|H38A4AC
-38A4AC:lI49|H38A4FC
-38A4FC:lI47|H38A544
-38A544:lI101|H38A58C
-38A58C:lI98|H38A5D4
-38A5D4:lI105|H38A61C
-38A61C:lI110|N
-38B0D8:lH3892F4|H38B0E0
-3892F4:lI47|H389404
-389404:lI99|H389514
-389514:lI108|H38961C
-38961C:lI101|H389714
-389714:lI97|H38980C
-38980C:lI114|H389904
-389904:lI99|H3899FC
-3899FC:lI97|H389ADC
-389ADC:lI115|H389BB4
-389BB4:lI101|H389C7C
-389C7C:lI47|H389D44
-389D44:lI111|H389E0C
-389E0C:lI116|H389EC4
-389EC4:lI112|H389F74
-389F74:lI47|H38A014
-38A014:lI101|H38A0A4
-38A0A4:lI114|H38A124
-38A124:lI116|H38A194
-38A194:lI115|H38A204
-38A204:lI47|H38A26C
-38A26C:lI108|H38A2D4
-38A2D4:lI105|H38A33C
-38A33C:lI98|H38A3A4
-38A3A4:lI47|H38A40C
-38A40C:lI97|H38A464
-38A464:lI112|H38A4B4
-38A4B4:lI112|H38A504
-38A504:lI109|H38A54C
-38A54C:lI111|H38A594
-38A594:lI110|H38A5DC
-38A5DC:lI47|H38A624
-38A624:lI101|H38A664
-38A664:lI98|H38A69C
-38A69C:lI105|H38A6CC
-38A6CC:lI110|N
-38B0E0:lH38AA88|H38B0E8
-38AA88:lI47|H38AA90
-38AA90:lI104|H38AA98
-38AA98:lI111|H38AAA0
-38AAA0:lI109|H38AAA8
-38AAA8:lI101|H38AAB0
-38AAB0:lI47|H38AAB8
-38AAB8:lI115|H38AAC0
-38AAC0:lI105|H38AAC8
-38AAC8:lI114|H38AAD0
-38AAD0:lI105|H38AAD8
-38AAD8:lI47|H38AAE0
-38AAE0:lI101|H38AAE8
-38AAE8:lI114|H38AAF0
-38AAF0:lI108|H38AAF8
-38AAF8:lI97|H38AB00
-38AB00:lI110|H38AB08
-38AB08:lI103|N
-38B0E8:lH38AB1C|H38B0F0
-38AB1C:lI47|H38AB2C
-38AB2C:lI104|H38AB4C
-38AB4C:lI111|H38AB74
-38AB74:lI109|H38ABA4
-38ABA4:lI101|H38ABC4
-38ABC4:lI47|H38ABE4
-38ABE4:lI115|H38AC04
-38AC04:lI105|H38AC24
-38AC24:lI114|H38AC3C
-38AC3C:lI105|H38AC44
-38AC44:lI47|H38AC4C
-38AC4C:lI116|H38AC54
-38AC54:lI111|H38AC5C
-38AC5C:lI111|H38AC64
-38AC64:lI108|H38AC6C
-38AC6C:lI115|H38AC74
-38AC74:lI47|H38AC7C
-38AC7C:lI100|H38AC84
-38AC84:lI105|H38AC8C
-38AC8C:lI115|H38AC94
-38AC94:lI116|H38AC9C
-38AC9C:lI101|H38ACA4
-38ACA4:lI108|H38ACAC
-38ACAC:lI47|H38ACB4
-38ACB4:lI101|H38ACBC
-38ACBC:lI98|H38ACC4
-38ACC4:lI105|H38ACCC
-38ACCC:lI110|N
-38B0F0:lH38B0F8|N
-38B0F8:lI47|H38B100
-38B100:lI104|H38B108
-38B108:lI111|H38B110
-38B110:lI109|H38B118
-38B118:lI101|H38B120
-38B120:lI47|H38B128
-38B128:lI115|H38B130
-38B130:lI105|H38B138
-38B138:lI114|H38B140
-38B140:lI105|H38B148
-38B148:lI47|H38B150
-38B150:lI79|H38B158
-38B158:lI84|H38B160
-38B160:lI80|H38B168
-38B168:lI47|H38B170
-38B170:lI103|H38B178
-38B178:lI112|H38B180
-38B180:lI114|H38B188
-38B188:lI115|H38B190
-38B190:lI95|H38B198
-38B198:lI116|H38B1A0
-38B1A0:lI114|H38B1A8
-38B1A8:lI97|H38B1B0
-38B1B0:lI99|H38B1B8
-38B1B8:lI101|H38B1C0
-38B1C0:lI47|H38B1C8
-38B1C8:lI106|H38B1D0
-38B1D0:lI97|H38B1D8
-38B1D8:lI110|N
-3873BC:lI47|H3873CC
-3873CC:lI99|H3873E4
-3873E4:lI108|H3873FC
-3873FC:lI101|H38741C
-38741C:lI97|H387444
-387444:lI114|H387474
-387474:lI99|H3874AC
-3874AC:lI97|H3874EC
-3874EC:lI115|H387534
-387534:lI101|H387584
-387584:lI47|H3875DC
-3875DC:lI111|H38763C
-38763C:lI116|H3876A4
-3876A4:lI112|H387714
-387714:lI47|H38778C
-38778C:lI101|H38780C
-38780C:lI114|H387894
-387894:lI116|H387924
-387924:lI115|N
-=proc_dictionary:<0.19.0>
-H370244
-H370250
-=proc_stack:<0.19.0>
-36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36B17C
-y4:P<0.19.0>
-y5:P<0.9.0>
-36b478:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37025C
-=proc_heap:<0.19.0>
-36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
-370238:t2:P<0.19.0>,A8:user_sup
-37025C:lAA:gen_server|H37027C
-37027C:lP<0.9.0>|H37028C
-37028C:lP<0.9.0>|H370294
-370294:lA11:supervisor_bridge|H37029C
-37029C:lH3702A4|H3702AC
-3702A4:lA8:user_sup|H3702B4
-3702B4:lN|H3702BC
-3702BC:lA4:self|N
-3702AC:lN|N
-370244:t2:AD:$initial_call,H370264
-370264:t3:A3:gen,A7:init_it,H37025C
-370250:t2:AA:$ancestors,H370274
-370274:lAA:kernel_sup|H370284
-370284:lP<0.8.0>|N
-=proc_dictionary:<0.20.0>
-H36F8A8
-=proc_stack:<0.20.0>
-36a714:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:H36F8C4
-y3:P<0.21.0>
-y4:P<0.22.0>
-y5:p<0.72>
-y6:p<0.72>
-=proc_heap:<0.20.0>
-36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
-36F8F0:lH36F900|H36F910
-36F900:t3:I1,P<0.21.0>,H36F920
-36F920:t0:
-36F910:lH36F924|N
-36F924:t3:I2,P<0.22.0>,H36F93C
-36F93C:t3:A5:shell,A5:start,N
-36F8A8:t2:A3:eof,A5:false
-=proc_dictionary:<0.21.0>
-H3709DC
-H3709D0
-H3709F8
-=proc_stack:<0.21.0>
-370d1c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:A9:undefined
-y2:P<0.20.0>
-=proc_heap:<0.21.0>
-3709DC:t2:AB:line_buffer,N
-3709D0:t2:AB:kill_buffer,N
-3709F8:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.22.0>
-H370D44
-H370D60
-H370D7C
-H370D38
-=proc_stack:<0.22.0>
-374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
-y0:N
-y1:N
-y2:A8:infinity
-y3:H374A00
-y4:P<0.20.0>
-y5:H374A28
-374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
-y0:H37499C
-y1:A6:io_lib
-y2:A9:get_until
-y3:H3748B8
-y4:P<0.20.0>
-y5:A5:start
-374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
-y0:P<0.49.0>
-y1:P<0.22.0>
-374acc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:P<0.25.0>
-y2:P<0.20.0>
-=proc_heap:<0.22.0>
-374A00:t4:A4:line,H37499C,H3749A4,A4:none
-3749A4:t2:N,N
-37499C:lI50|H374994
-374994:lI62|H37498C
-37498C:lI32|N
-374A28:t4:A5:stack,H370D58,H374A24,N
-374A24:t0:
-370D58:lH370D74|N
-370D74:lI99|H370D88
-370D88:lI114|H370D90
-370D90:lI97|H370D98
-370D98:lI115|H370DA0
-370DA0:lI104|H370DA8
-370DA8:lI100|H370DB0
-370DB0:lI117|H370DB8
-370DB8:lI109|H370DC0
-370DC0:lI112|H370DC8
-370DC8:lI95|H370DD0
-370DD0:lI118|H370DD8
-370DD8:lI105|H370DE0
-370DE0:lI101|H370DE8
-370DE8:lI119|H370DF0
-370DF0:lI101|H370DF8
-370DF8:lI114|H370E00
-370E00:lI58|H370E08
-370E08:lI115|H370E10
-370E10:lI116|H370E18
-370E18:lI97|H370E20
-370E20:lI114|H370E28
-370E28:lI116|H370E30
-370E30:lI40|H370E38
-370E38:lI41|H370E40
-370E40:lI46|H370E48
-370E48:lI10|N
-3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
-3748B0:lI1|N
-370D44:t2:AB:line_buffer,H370D58
-370D60:t2:A5:shell,P<0.25.0>
-370D7C:t2:AB:kill_buffer,N
-370D38:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.23.0>
-H376464
-H376448
-=proc_stack:<0.23.0>
-376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:kernel_config
-y3:N
-y4:P<0.23.0>
-y5:P<0.9.0>
-376770:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H376418
-=proc_heap:<0.23.0>
-376418:lAA:gen_server|H376410
-376410:lP<0.9.0>|H376408
-376408:lP<0.9.0>|H376400
-376400:lAD:kernel_config|H3763F8
-3763F8:lN|H3763F0
-3763F0:lN|N
-376464:t2:AD:$initial_call,H376454
-376454:t3:A3:gen,A7:init_it,H376418
-376448:t2:AA:$ancestors,H376440
-376440:lAA:kernel_sup|H376420
-376420:lP<0.8.0>|N
-=proc_dictionary:<0.24.0>
-H3705E0
-H3705EC
-=proc_stack:<0.24.0>
-36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F018
-y4:AF:kernel_safe_sup
-y5:P<0.9.0>
-36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37063C
-=proc_heap:<0.24.0>
-36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
-36F044:lH36F04C|N
-36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
-370660:lA13:inet_gethost_native|N
-370650:t3:A13:inet_gethost_native,AA:start_link,N
-370644:t2:A5:local,AF:kernel_safe_sup
-37063C:lAA:gen_server|H3706AC
-3706AC:lP<0.9.0>|H3706BC
-3706BC:lP<0.9.0>|H3706C4
-3706C4:lH3706CC|H3706D8
-3706CC:t2:A5:local,AF:kernel_safe_sup
-3706D8:lAA:supervisor|H3706E0
-3706E0:lH3706E8|H3706F8
-3706E8:t3:H370644,A6:kernel,A4:safe
-3706F8:lN|N
-3705E0:t2:AD:$initial_call,H370668
-370668:t3:A3:gen,A7:init_it,H37063C
-3705EC:t2:AA:$ancestors,H370678
-370678:lAA:kernel_sup|H3706B4
-3706B4:lP<0.8.0>|N
-=proc_dictionary:<0.25.0>
-H36E304
-H36E31C
-=proc_stack:<0.25.0>
-36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
-y0:N
-y1:N
-y2:P<0.27.0>
-y3:P<0.49.0>
-36e624:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:I2
-y3:I1
-y4:N
-y5:N
-y6:N
-y7:I20
-y8:I20
-=proc_heap:<0.25.0>
-36E304:t2:H36E2F8,H36E2A8
-36E2A8:lH36E2B0|N
-36E2B0:t4:A4:call,I1,H36E2C4,N
-36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
-36E2E8:t3:A4:atom,I1,A5:start
-36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
-36E2F8:t2:A7:command,I1
-36E31C:t2:H36E310,A2:ok
-36E310:t2:A6:result,I1
-=proc_stack:<0.27.0>
-3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:P<0.25.0>
-=proc_heap:<0.27.0>
-=proc_dictionary:<0.31.0>
-H36DA24
-H36DA08
-=proc_stack:<0.31.0>
-36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36DB68
-y4:A17:inet_gethost_native_sup
-y5:P<0.24.0>
-36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36D9D0
-=proc_heap:<0.31.0>
-36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
-36D994:t2:A5:local,A17:inet_gethost_native_sup
-36D9D0:lAA:gen_server|H36D9C8
-36D9C8:lP<0.24.0>|H36D9C0
-36D9C0:lP<0.24.0>|H36D970
-36D970:lH36D980|H36D9B8
-36D980:t2:A5:local,A17:inet_gethost_native_sup
-36D9B8:lA11:supervisor_bridge|H36D978
-36D978:lH36D9A8|H36D9B0
-36D9A8:lA13:inet_gethost_native|H36D9A0
-36D9A0:lN|H36D98C
-36D98C:lH36D994|N
-36D9B0:lN|N
-36DA24:t2:AD:$initial_call,H36DA14
-36DA14:t3:A3:gen,A7:init_it,H36D9D0
-36DA08:t2:AA:$ancestors,H36DA00
-36DA00:lAF:kernel_safe_sup|H36D9E0
-36D9E0:lAA:kernel_sup|H36D9D8
-36D9D8:lP<0.8.0>|N
-=proc_dictionary:<0.32.0>
-H36CFD4
-H36D0BC
-=proc_stack:<0.32.0>
-36d12c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H36CF18
-=proc_heap:<0.32.0>
-36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
-36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
-36CFD4:t2:A3:rid,I1
-36D0BC:t2:AC:num_requests,I0
-=proc_dictionary:<0.33.0>
-H3905C4
-H3905D0
-=proc_stack:<0.33.0>
-3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:webtool
-y3:H3C8570
-y4:A8:web_tool
-y5:P<0.33.0>
-3cef00:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3905FC
-=proc_heap:<0.33.0>
-3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
-3C85D4:lA10:crashdump_viewer|N
-3905F4:lH390650|H39065C
-390650:t2:A4:port,I8888
-39065C:lH3906C8|H3906D4
-3906C8:t2:AC:bind_address,H390760
-390760:t4:I127,I0,I0,I1
-3906D4:lH390774|H390780
-390774:t2:AB:server_name,H39082C
-39082C:lI108|H390908
-390908:lI111|H3909DC
-3909DC:lI99|H390AC0
-390AC0:lI97|H390B98
-390B98:lI108|H390C78
-390C78:lI104|H390D58
-390D58:lI111|H390E2C
-390E2C:lI115|H390F10
-390F10:lI116|N
-390780:lH390834|H390840
-390834:t2:AE:max_header_siz,I1024
-390840:lH390910|H39091C
-390910:t2:A11:max_header_action,A8:reply414
-39091C:lH3909E4|H3909F0
-3909E4:t2:A8:com_type,A7:ip_comm
-3909F0:lH390AC8|H390AD4
-390AC8:t2:A7:modules,H390BA0
-390BA0:lA9:mod_alias|H390C80
-390C80:lA8:mod_auth|H390D60
-390D60:lA7:mod_esi|H390E34
-390E34:lAB:mod_actions|H390F18
-390F18:lA7:mod_cgi|H390FF4
-390FF4:lAB:mod_include|H3910D8
-3910D8:lA7:mod_dir|H3911B4
-3911B4:lA7:mod_get|H3912A0
-3912A0:lA8:mod_head|H39139C
-39139C:lA7:mod_log|H3914A0
-3914A0:lAC:mod_disk_log|N
-390AD4:lH390BA8|H390BB4
-390BA8:t2:AF:directory_index,H390C88
-390C88:lH390D68|N
-390D68:lI105|H390E3C
-390E3C:lI110|H390F20
-390F20:lI100|H390FFC
-390FFC:lI101|H3910E0
-3910E0:lI120|H3911BC
-3911BC:lI46|H3912A8
-3912A8:lI104|H3913A4
-3913A4:lI116|H3914A8
-3914A8:lI109|H39159C
-39159C:lI108|N
-390BB4:lH390C90|N
-390C90:t2:AC:default_type,H390D70
-390D70:lI116|H390E44
-390E44:lI101|H390F28
-390F28:lI120|H391004
-391004:lI116|H3910E8
-3910E8:lI47|H3911C4
-3911C4:lI112|H3912B0
-3912B0:lI108|H3913AC
-3913AC:lI97|H3914B0
-3914B0:lI105|H3915A4
-3915A4:lI110|N
-3905EC:lI47|H390648
-390648:lI99|H3906C0
-3906C0:lI108|H390758
-390758:lI101|H390824
-390824:lI97|H390900
-390900:lI114|H3909D4
-3909D4:lI99|H390AB8
-390AB8:lI97|H390B90
-390B90:lI115|H390C70
-390C70:lI101|H390D50
-390D50:lI47|H390E24
-390E24:lI111|H390F08
-390F08:lI116|H390FEC
-390FEC:lI112|H3910D0
-3910D0:lI47|H3911AC
-3911AC:lI101|H391298
-391298:lI114|H391394
-391394:lI116|H391498
-391498:lI115|H391594
-391594:lI47|H391680
-391680:lI108|H39175C
-39175C:lI105|H391840
-391840:lI98|H391924
-391924:lI47|H3919F8
-3919F8:lI119|H391AC4
-391AC4:lI101|H391B90
-391B90:lI98|H391C54
-391C54:lI116|H391D18
-391D18:lI111|H391DD4
-391DD4:lI111|H391E90
-391E90:lI108|H391F5C
-391F5C:lI47|H392030
-392030:lI112|H3920EC
-3920EC:lI114|H3921A8
-3921A8:lI105|H392264
-392264:lI118|N
-3905FC:lAA:gen_server|H390664
-390664:lP<0.27.0>|H3906DC
-3906DC:lA4:self|H390788
-390788:lH390848|H390854
-390848:t2:A5:local,A8:web_tool
-390854:lA7:webtool|H390924
-390924:lH3909F8|H390A04
-3909F8:t2:H3905EC,H3905F4
-390A04:lN|N
-3905C4:t2:AD:$initial_call,H390614
-390614:t3:A3:gen,A7:init_it,H3905FC
-3905D0:t2:AA:$ancestors,H390624
-390624:lP<0.27.0>|N
-=proc_dictionary:<0.41.0>
-H36DF0C
-H36DF18
-=proc_stack:<0.41.0>
-36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36EA3C
-y4:A6:websup
-y5:P<0.33.0>
-36edc0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36DF24
-=proc_heap:<0.41.0>
-36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
-36EA68:lH36EA70|N
-36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
-36DF54:lA10:crashdump_viewer|N
-36DF44:t3:A10:crashdump_viewer,AA:start_link,N
-36DF38:t2:A5:local,A17:crashdump_viewer_server
-36DF2C:t2:A5:local,A6:websup
-36DF24:lAA:gen_server|H36DF84
-36DF84:lP<0.33.0>|H36DF94
-36DF94:lP<0.33.0>|H36DF9C
-36DF9C:lH36DFA4|H36DFB0
-36DFA4:t2:A5:local,A6:websup
-36DFB0:lAA:supervisor|H36DFB8
-36DFB8:lH36DFC0|H36DFD0
-36DFC0:t3:H36DF2C,AB:webtool_sup,N
-36DFD0:lN|N
-36DF0C:t2:AD:$initial_call,H36DF6C
-36DF6C:t3:A3:gen,A7:init_it,H36DF24
-36DF18:t2:AA:$ancestors,H36DF7C
-36DF7C:lA8:web_tool|H36DF8C
-36DF8C:lP<0.27.0>|N
-=proc_dictionary:<0.43.0>
-H39D940
-H39D94C
-=proc_stack:<0.43.0>
-3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H3A3E34
-y4:A1A:httpd_sup__127_0_0_1__8888
-y5:P<0.33.0>
-3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H39D9CC
-=proc_heap:<0.43.0>
-3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
-39DA88:lA9:undefined|H39DB18
-39DB18:lH39DB50|H39DB58
-39DB50:lH39DB88|H39DB94
-39DB88:t2:AB:server_root,H39DBD0
-39DBD0:lI47|H39DC0C
-39DC0C:lI99|H39DC50
-39DC50:lI108|H39DC84
-39DC84:lI101|H39DCC4
-39DCC4:lI97|H39DD28
-39DD28:lI114|H39DD90
-39DD90:lI99|H39DE00
-39DE00:lI97|H39DE78
-39DE78:lI115|H39DF00
-39DF00:lI101|H39DF90
-39DF90:lI47|H39E038
-39E038:lI111|H39E0E8
-39E0E8:lI116|H39E1AC
-39E1AC:lI112|H39E288
-39E288:lI47|H39E37C
-39E37C:lI101|H39E478
-39E478:lI114|H39E580
-39E580:lI116|H39E69C
-39E69C:lI115|H39E7B0
-39E7B0:lI47|H39E8C4
-39E8C4:lI108|H39E9D8
-39E9D8:lI105|H39EACC
-39EACC:lI98|H39EBC0
-39EBC0:lI47|H39ECB4
-39ECB4:lI119|H39EDA8
-39EDA8:lI101|H39EE7C
-39EE7C:lI98|H39EF50
-39EF50:lI116|H39F02C
-39F02C:lI111|H39F110
-39F110:lI111|H39F1E4
-39F1E4:lI108|H39F2B0
-39F2B0:lI47|H39F36C
-39F36C:lI112|H39F430
-39F430:lI114|H39F4FC
-39F4FC:lI105|H39F5C0
-39F5C0:lI118|H39F694
-39F694:lI47|H39F768
-39F768:lI114|H39F83C
-39F83C:lI111|H39F920
-39F920:lI111|H39F9FC
-39F9FC:lI116|N
-39DB94:lH39DBD8|H39DBE4
-39DBD8:t2:AD:document_root,H39DC14
-39DC14:lI47|H39DC58
-39DC58:lI99|H39DC8C
-39DC8C:lI108|H39DCCC
-39DCCC:lI101|H39DD30
-39DD30:lI97|H39DD98
-39DD98:lI114|H39DE08
-39DE08:lI99|H39DE80
-39DE80:lI97|H39DF08
-39DF08:lI115|H39DF98
-39DF98:lI101|H39E040
-39E040:lI47|H39E0F0
-39E0F0:lI111|H39E1B4
-39E1B4:lI116|H39E290
-39E290:lI112|H39E384
-39E384:lI47|H39E480
-39E480:lI101|H39E588
-39E588:lI114|H39E6A4
-39E6A4:lI116|H39E7B8
-39E7B8:lI115|H39E8CC
-39E8CC:lI47|H39E9E0
-39E9E0:lI108|H39EAD4
-39EAD4:lI105|H39EBC8
-39EBC8:lI98|H39ECBC
-39ECBC:lI47|H39EDB0
-39EDB0:lI119|H39EE84
-39EE84:lI101|H39EF58
-39EF58:lI98|H39F034
-39F034:lI116|H39F118
-39F118:lI111|H39F1EC
-39F1EC:lI111|H39F2B8
-39F2B8:lI108|H39F374
-39F374:lI47|H39F438
-39F438:lI112|H39F504
-39F504:lI114|H39F5C8
-39F5C8:lI105|H39F69C
-39F69C:lI118|H39F770
-39F770:lI47|H39F844
-39F844:lI114|H39F928
-39F928:lI111|H39FA04
-39FA04:lI111|H39FAD8
-39FAD8:lI116|H39FBB4
-39FBB4:lI47|H39FC80
-39FC80:lI100|H39FD44
-39FD44:lI111|H39FE10
-39FE10:lI99|N
-39DBE4:lH39DC1C|H39DC28
-39DC1C:t2:AA:mime_types,H39DC60
-39DC60:lH39DC94|H39DCA0
-39DC94:t2:H39DCD4,H39DCDC
-39DCDC:lI120|H39DD40
-39DD40:lI45|H39DDA8
-39DDA8:lI119|H39DE10
-39DE10:lI111|H39DE88
-39DE88:lI114|H39DF10
-39DF10:lI108|H39DFA0
-39DFA0:lI100|H39E048
-39E048:lI47|H39E0F8
-39E0F8:lI120|H39E1BC
-39E1BC:lI45|H39E298
-39E298:lI118|H39E38C
-39E38C:lI114|H39E488
-39E488:lI109|H39E590
-39E590:lI108|N
-39DCD4:lI119|H39DD38
-39DD38:lI114|H39DDA0
-39DDA0:lI108|N
-39DCA0:lH39DCE4|H39DCF0
-39DCE4:t2:H39DD48,H39DD50
-39DD50:lI120|H39DDB8
-39DDB8:lI45|H39DE20
-39DE20:lI119|H39DE98
-39DE98:lI111|H39DF18
-39DF18:lI114|H39DFA8
-39DFA8:lI108|H39E050
-39E050:lI100|H39E100
-39E100:lI47|H39E1C4
-39E1C4:lI120|H39E2A0
-39E2A0:lI45|H39E394
-39E394:lI118|H39E490
-39E490:lI114|H39E598
-39E598:lI109|H39E6AC
-39E6AC:lI108|N
-39DD48:lI118|H39DDB0
-39DDB0:lI114|H39DE18
-39DE18:lI109|H39DE90
-39DE90:lI108|N
-39DCF0:lH39DD58|H39DD64
-39DD58:t2:H39DDC0,H39DDC8
-39DDC8:lI120|H39DE30
-39DE30:lI45|H39DEA8
-39DEA8:lI99|H39DF20
-39DF20:lI111|H39DFB0
-39DFB0:lI110|H39E058
-39E058:lI102|H39E108
-39E108:lI101|H39E1CC
-39E1CC:lI114|H39E2A8
-39E2A8:lI101|H39E39C
-39E39C:lI110|H39E498
-39E498:lI99|H39E5A0
-39E5A0:lI101|H39E6B4
-39E6B4:lI47|H39E7C0
-39E7C0:lI120|H39E8D4
-39E8D4:lI45|H39E9E8
-39E9E8:lI99|H39EADC
-39EADC:lI111|H39EBD0
-39EBD0:lI111|H39ECC4
-39ECC4:lI108|H39EDB8
-39EDB8:lI116|H39EE8C
-39EE8C:lI97|H39EF60
-39EF60:lI108|H39F03C
-39F03C:lI107|N
-39DDC0:lI105|H39DE28
-39DE28:lI99|H39DEA0
-39DEA0:lI101|N
-39DD64:lH39DDD0|H39DDDC
-39DDD0:t2:H39DE38,H39DE40
-39DE40:lI118|H39DEB8
-39DEB8:lI105|H39DF30
-39DF30:lI100|H39DFC0
-39DFC0:lI101|H39E068
-39E068:lI111|H39E110
-39E110:lI47|H39E1D4
-39E1D4:lI120|H39E2B0
-39E2B0:lI45|H39E3A4
-39E3A4:lI115|H39E4A0
-39E4A0:lI103|H39E5A8
-39E5A8:lI105|H39E6BC
-39E6BC:lI45|H39E7C8
-39E7C8:lI109|H39E8DC
-39E8DC:lI111|H39E9F0
-39E9F0:lI118|H39EAE4
-39EAE4:lI105|H39EBD8
-39EBD8:lI101|N
-39DE38:lI109|H39DEB0
-39DEB0:lI111|H39DF28
-39DF28:lI118|H39DFB8
-39DFB8:lI105|H39E060
-39E060:lI101|N
-39DDDC:lH39DE48|H39DE54
-39DE48:t2:H39DEC0,H39DEC8
-39DEC8:lI118|H39DF40
-39DF40:lI105|H39DFD0
-39DFD0:lI100|H39E070
-39E070:lI101|H39E118
-39E118:lI111|H39E1DC
-39E1DC:lI47|H39E2B8
-39E2B8:lI120|H39E3AC
-39E3AC:lI45|H39E4A8
-39E4A8:lI109|H39E5B0
-39E5B0:lI115|H39E6C4
-39E6C4:lI118|H39E7D0
-39E7D0:lI105|H39E8E4
-39E8E4:lI100|H39E9F8
-39E9F8:lI101|H39EAEC
-39EAEC:lI111|N
-39DEC0:lI97|H39DF38
-39DF38:lI118|H39DFC8
-39DFC8:lI105|N
-39DE54:lH39DED0|H39DEDC
-39DED0:t2:H39DF48,H39DF50
-39DF50:lI118|H39DFE0
-39DFE0:lI105|H39E078
-39E078:lI100|H39E120
-39E120:lI101|H39E1E4
-39E1E4:lI111|H39E2C0
-39E2C0:lI47|H39E3B4
-39E3B4:lI113|H39E4B0
-39E4B0:lI117|H39E5B8
-39E5B8:lI105|H39E6CC
-39E6CC:lI99|H39E7D8
-39E7D8:lI107|H39E8EC
-39E8EC:lI116|H39EA00
-39EA00:lI105|H39EAF4
-39EAF4:lI109|H39EBE0
-39EBE0:lI101|N
-39DF48:lI113|H39DFD8
-39DFD8:lI116|N
-39DEDC:lH39DF58|H39DF64
-39DF58:t2:H39DFE8,H39DFF0
-39DFF0:lI118|H39E088
-39E088:lI105|H39E130
-39E130:lI100|H39E1EC
-39E1EC:lI101|H39E2C8
-39E2C8:lI111|H39E3BC
-39E3BC:lI47|H39E4B8
-39E4B8:lI113|H39E5C0
-39E5C0:lI117|H39E6D4
-39E6D4:lI105|H39E7E0
-39E7E0:lI99|H39E8F4
-39E8F4:lI107|H39EA08
-39EA08:lI116|H39EAFC
-39EAFC:lI105|H39EBE8
-39EBE8:lI109|H39ECCC
-39ECCC:lI101|N
-39DFE8:lI109|H39E080
-39E080:lI111|H39E128
-39E128:lI118|N
-39DF64:lH39DFF8|H39E004
-39DFF8:t2:H39E090,H39E098
-39E098:lI118|H39E140
-39E140:lI105|H39E1FC
-39E1FC:lI100|H39E2D8
-39E2D8:lI101|H39E3C4
-39E3C4:lI111|H39E4C0
-39E4C0:lI47|H39E5C8
-39E5C8:lI109|H39E6DC
-39E6DC:lI112|H39E7E8
-39E7E8:lI101|H39E8FC
-39E8FC:lI103|N
-39E090:lI109|H39E138
-39E138:lI112|H39E1F4
-39E1F4:lI101|H39E2D0
-39E2D0:lI103|N
-39E004:lH39E0A0|H39E0AC
-39E0A0:t2:H39E148,H39E150
-39E150:lI118|H39E20C
-39E20C:lI105|H39E2E8
-39E2E8:lI100|H39E3CC
-39E3CC:lI101|H39E4C8
-39E4C8:lI111|H39E5D0
-39E5D0:lI47|H39E6E4
-39E6E4:lI109|H39E7F0
-39E7F0:lI112|H39E904
-39E904:lI101|H39EA10
-39EA10:lI103|N
-39E148:lI109|H39E204
-39E204:lI112|H39E2E0
-39E2E0:lI103|N
-39E0AC:lH39E158|H39E164
-39E158:t2:H39E214,H39E21C
-39E21C:lI118|H39E2F8
-39E2F8:lI105|H39E3DC
-39E3DC:lI100|H39E4D0
-39E4D0:lI101|H39E5D8
-39E5D8:lI111|H39E6EC
-39E6EC:lI47|H39E7F8
-39E7F8:lI109|H39E90C
-39E90C:lI112|H39EA18
-39EA18:lI101|H39EB04
-39EB04:lI103|N
-39E214:lI109|H39E2F0
-39E2F0:lI112|H39E3D4
-39E3D4:lI101|N
-39E164:lH39E224|H39E230
-39E224:t2:H39E300,H39E308
-39E308:lI116|H39E3EC
-39E3EC:lI101|H39E4E0
-39E4E0:lI120|H39E5E8
-39E5E8:lI116|H39E6F4
-39E6F4:lI47|H39E800
-39E800:lI120|H39E914
-39E914:lI45|H39EA20
-39EA20:lI115|H39EB0C
-39EB0C:lI103|H39EBF0
-39EBF0:lI109|H39ECD4
-39ECD4:lI108|N
-39E300:lI115|H39E3E4
-39E3E4:lI103|H39E4D8
-39E4D8:lI109|H39E5E0
-39E5E0:lI108|N
-39E230:lH39E310|H39E31C
-39E310:t2:H39E3F4,H39E3FC
-39E3FC:lI116|H39E4F0
-39E4F0:lI101|H39E5F8
-39E5F8:lI120|H39E6FC
-39E6FC:lI116|H39E808
-39E808:lI47|H39E91C
-39E91C:lI120|H39EA28
-39EA28:lI45|H39EB14
-39EB14:lI115|H39EBF8
-39EBF8:lI103|H39ECDC
-39ECDC:lI109|H39EDC0
-39EDC0:lI108|N
-39E3F4:lI115|H39E4E8
-39E4E8:lI103|H39E5F0
-39E5F0:lI109|N
-39E31C:lH39E404|H39E410
-39E404:t2:H39E4F8,H39E500
-39E500:lI116|H39E608
-39E608:lI101|H39E70C
-39E70C:lI120|H39E810
-39E810:lI116|H39E924
-39E924:lI47|H39EA30
-39EA30:lI120|H39EB1C
-39EB1C:lI45|H39EC00
-39EC00:lI115|H39ECE4
-39ECE4:lI101|H39EDC8
-39EDC8:lI116|H39EE94
-39EE94:lI101|H39EF68
-39EF68:lI120|H39F044
-39F044:lI116|N
-39E4F8:lI101|H39E600
-39E600:lI116|H39E704
-39E704:lI120|N
-39E410:lH39E508|H39E514
-39E508:t2:H39E610,H39E618
-39E618:lI116|H39E71C
-39E71C:lI101|H39E820
-39E820:lI120|H39E92C
-39E92C:lI116|H39EA38
-39EA38:lI47|H39EB24
-39EB24:lI116|H39EC08
-39EC08:lI97|H39ECEC
-39ECEC:lI98|H39EDD0
-39EDD0:lI45|H39EE9C
-39EE9C:lI115|H39EF70
-39EF70:lI101|H39F04C
-39F04C:lI112|H39F120
-39F120:lI97|H39F1F4
-39F1F4:lI114|H39F2C0
-39F2C0:lI97|H39F37C
-39F37C:lI116|H39F440
-39F440:lI101|H39F50C
-39F50C:lI100|H39F5D0
-39F5D0:lI45|H39F6A4
-39F6A4:lI118|H39F778
-39F778:lI97|H39F84C
-39F84C:lI108|H39F930
-39F930:lI117|H39FA0C
-39FA0C:lI101|H39FAE0
-39FAE0:lI115|N
-39E610:lI116|H39E714
-39E714:lI115|H39E818
-39E818:lI118|N
-39E514:lH39E620|H39E62C
-39E620:t2:H39E724,H39E72C
-39E72C:lI116|H39E830
-39E830:lI101|H39E93C
-39E93C:lI120|H39EA40
-39EA40:lI116|H39EB2C
-39EB2C:lI47|H39EC10
-39EC10:lI114|H39ECF4
-39ECF4:lI105|H39EDD8
-39EDD8:lI99|H39EEA4
-39EEA4:lI104|H39EF78
-39EF78:lI116|H39F054
-39F054:lI101|H39F128
-39F128:lI120|H39F1FC
-39F1FC:lI116|N
-39E724:lI114|H39E828
-39E828:lI116|H39E934
-39E934:lI120|N
-39E62C:lH39E734|H39E740
-39E734:t2:H39E838,H39E840
-39E840:lI116|H39E94C
-39E94C:lI101|H39EA50
-39EA50:lI120|H39EB34
-39EB34:lI116|H39EC18
-39EC18:lI47|H39ECFC
-39ECFC:lI112|H39EDE0
-39EDE0:lI108|H39EEAC
-39EEAC:lI97|H39EF80
-39EF80:lI105|H39F05C
-39F05C:lI110|N
-39E838:lI116|H39E944
-39E944:lI120|H39EA48
-39EA48:lI116|N
-39E740:lH39E848|H39E854
-39E848:t2:H39E954,H39E95C
-39E95C:lI116|H39EA60
-39EA60:lI101|H39EB44
-39EB44:lI120|H39EC28
-39EC28:lI116|H39ED0C
-39ED0C:lI47|H39EDE8
-39EDE8:lI120|H39EEB4
-39EEB4:lI45|H39EF88
-39EF88:lI115|H39F064
-39F064:lI101|H39F130
-39F130:lI114|H39F204
-39F204:lI118|H39F2C8
-39F2C8:lI101|H39F384
-39F384:lI114|H39F448
-39F448:lI45|H39F514
-39F514:lI112|H39F5D8
-39F5D8:lI97|H39F6AC
-39F6AC:lI114|H39F780
-39F780:lI115|H39F854
-39F854:lI101|H39F938
-39F938:lI100|H39FA14
-39FA14:lI45|H39FAE8
-39FAE8:lI104|H39FBBC
-39FBBC:lI116|H39FC88
-39FC88:lI109|H39FD4C
-39FD4C:lI108|N
-39E954:lI115|H39EA58
-39EA58:lI104|H39EB3C
-39EB3C:lI116|H39EC20
-39EC20:lI109|H39ED04
-39ED04:lI108|N
-39E854:lH39E964|H39E970
-39E964:t2:H39EA68,H39EA70
-39EA70:lI116|H39EB54
-39EB54:lI101|H39EC38
-39EC38:lI120|H39ED1C
-39ED1C:lI116|H39EDF0
-39EDF0:lI47|H39EEBC
-39EEBC:lI104|H39EF90
-39EF90:lI116|H39F06C
-39F06C:lI109|H39F138
-39F138:lI108|N
-39EA68:lI104|H39EB4C
-39EB4C:lI116|H39EC30
-39EC30:lI109|H39ED14
-39ED14:lI108|N
-39E970:lH39EA78|H39EA84
-39EA78:t2:H39EB5C,H39EB64
-39EB64:lI116|H39EC48
-39EC48:lI101|H39ED2C
-39ED2C:lI120|H39EDF8
-39EDF8:lI116|H39EEC4
-39EEC4:lI47|H39EF98
-39EF98:lI104|H39F074
-39F074:lI116|H39F140
-39F140:lI109|H39F20C
-39F20C:lI108|N
-39EB5C:lI104|H39EC40
-39EC40:lI116|H39ED24
-39ED24:lI109|N
-39EA84:lH39EB6C|H39EB78
-39EB6C:t2:H39EC50,H39EC58
-39EC58:lI105|H39ED3C
-39ED3C:lI109|H39EE08
-39EE08:lI97|H39EECC
-39EECC:lI103|H39EFA0
-39EFA0:lI101|H39F07C
-39F07C:lI47|H39F148
-39F148:lI120|H39F214
-39F214:lI45|H39F2D0
-39F2D0:lI120|H39F38C
-39F38C:lI119|H39F450
-39F450:lI105|H39F51C
-39F51C:lI110|H39F5E0
-39F5E0:lI100|H39F6B4
-39F6B4:lI111|H39F788
-39F788:lI119|H39F85C
-39F85C:lI100|H39F940
-39F940:lI117|H39FA1C
-39FA1C:lI109|H39FAF0
-39FAF0:lI112|N
-39EC50:lI120|H39ED34
-39ED34:lI119|H39EE00
-39EE00:lI100|N
-39EB78:lH39EC60|H39EC6C
-39EC60:t2:H39ED44,H39ED4C
-39ED4C:lI105|H39EE18
-39EE18:lI109|H39EEDC
-39EEDC:lI97|H39EFA8
-39EFA8:lI103|H39F084
-39F084:lI101|H39F150
-39F150:lI47|H39F21C
-39F21C:lI120|H39F2D8
-39F2D8:lI45|H39F394
-39F394:lI120|H39F458
-39F458:lI112|H39F524
-39F524:lI105|H39F5E8
-39F5E8:lI120|H39F6BC
-39F6BC:lI109|H39F790
-39F790:lI97|H39F864
-39F864:lI112|N
-39ED44:lI120|H39EE10
-39EE10:lI112|H39EED4
-39EED4:lI109|N
-39EC6C:lH39ED54|H39ED60
-39ED54:t2:H39EE20,H39EE28
-39EE28:lI105|H39EEEC
-39EEEC:lI109|H39EFB8
-39EFB8:lI97|H39F08C
-39F08C:lI103|H39F158
-39F158:lI101|H39F224
-39F224:lI47|H39F2E0
-39F2E0:lI120|H39F39C
-39F39C:lI45|H39F460
-39F460:lI120|H39F52C
-39F52C:lI98|H39F5F0
-39F5F0:lI105|H39F6C4
-39F6C4:lI116|H39F798
-39F798:lI109|H39F86C
-39F86C:lI97|H39F948
-39F948:lI112|N
-39EE20:lI120|H39EEE4
-39EEE4:lI98|H39EFB0
-39EFB0:lI109|N
-39ED60:lH39EE30|H39EE3C
-39EE30:t2:H39EEF4,H39EEFC
-39EEFC:lI105|H39EFC8
-39EFC8:lI109|H39F09C
-39F09C:lI97|H39F160
-39F160:lI103|H39F22C
-39F22C:lI101|H39F2E8
-39F2E8:lI47|H39F3A4
-39F3A4:lI120|H39F468
-39F468:lI45|H39F534
-39F534:lI114|H39F5F8
-39F5F8:lI103|H39F6CC
-39F6CC:lI98|N
-39EEF4:lI114|H39EFC0
-39EFC0:lI103|H39F094
-39F094:lI98|N
-39EE3C:lH39EF04|H39EF10
-39EF04:t2:H39EFD0,H39EFD8
-39EFD8:lI105|H39F0AC
-39F0AC:lI109|H39F170
-39F170:lI97|H39F234
-39F234:lI103|H39F2F0
-39F2F0:lI101|H39F3AC
-39F3AC:lI47|H39F470
-39F470:lI120|H39F53C
-39F53C:lI45|H39F600
-39F600:lI112|H39F6D4
-39F6D4:lI111|H39F7A0
-39F7A0:lI114|H39F874
-39F874:lI116|H39F950
-39F950:lI97|H39FA24
-39FA24:lI98|H39FAF8
-39FAF8:lI108|H39FBC4
-39FBC4:lI101|H39FC90
-39FC90:lI45|H39FD54
-39FD54:lI112|H39FE18
-39FE18:lI105|H39FECC
-39FECC:lI120|H39FF88
-39FF88:lI109|H3A003C
-3A003C:lI97|H3A00E8
-3A00E8:lI112|N
-39EFD0:lI112|H39F0A4
-39F0A4:lI112|H39F168
-39F168:lI109|N
-39EF10:lH39EFE0|H39EFEC
-39EFE0:t2:H39F0B4,H39F0BC
-39F0BC:lI105|H39F180
-39F180:lI109|H39F244
-39F244:lI97|H39F2F8
-39F2F8:lI103|H39F3B4
-39F3B4:lI101|H39F478
-39F478:lI47|H39F544
-39F544:lI120|H39F608
-39F608:lI45|H39F6DC
-39F6DC:lI112|H39F7A8
-39F7A8:lI111|H39F87C
-39F87C:lI114|H39F958
-39F958:lI116|H39FA2C
-39FA2C:lI97|H39FB00
-39FB00:lI98|H39FBCC
-39FBCC:lI108|H39FC98
-39FC98:lI101|H39FD5C
-39FD5C:lI45|H39FE20
-39FE20:lI103|H39FED4
-39FED4:lI114|H39FF90
-39FF90:lI97|H3A0044
-3A0044:lI121|H3A00F0
-3A00F0:lI109|H3A0194
-3A0194:lI97|H3A0248
-3A0248:lI112|N
-39F0B4:lI112|H39F178
-39F178:lI103|H39F23C
-39F23C:lI109|N
-39EFEC:lH39F0C4|H39F0D0
-39F0C4:t2:H39F188,H39F190
-39F190:lI105|H39F254
-39F254:lI109|H39F308
-39F308:lI97|H39F3BC
-39F3BC:lI103|H39F480
-39F480:lI101|H39F54C
-39F54C:lI47|H39F610
-39F610:lI120|H39F6E4
-39F6E4:lI45|H39F7B0
-39F7B0:lI112|H39F884
-39F884:lI111|H39F960
-39F960:lI114|H39FA34
-39FA34:lI116|H39FB08
-39FB08:lI97|H39FBD4
-39FBD4:lI98|H39FCA0
-39FCA0:lI108|H39FD64
-39FD64:lI101|H39FE28
-39FE28:lI45|H39FEDC
-39FEDC:lI98|H39FF98
-39FF98:lI105|H3A004C
-3A004C:lI116|H3A00F8
-3A00F8:lI109|H3A019C
-3A019C:lI97|H3A0250
-3A0250:lI112|N
-39F188:lI112|H39F24C
-39F24C:lI98|H39F300
-39F300:lI109|N
-39F0D0:lH39F198|H39F1A4
-39F198:t2:H39F25C,H39F264
-39F264:lI105|H39F318
-39F318:lI109|H39F3CC
-39F3CC:lI97|H39F488
-39F488:lI103|H39F554
-39F554:lI101|H39F618
-39F618:lI47|H39F6EC
-39F6EC:lI120|H39F7B8
-39F7B8:lI45|H39F88C
-39F88C:lI112|H39F968
-39F968:lI111|H39FA3C
-39FA3C:lI114|H39FB10
-39FB10:lI116|H39FBDC
-39FBDC:lI97|H39FCA8
-39FCA8:lI98|H39FD6C
-39FD6C:lI108|H39FE30
-39FE30:lI101|H39FEE4
-39FEE4:lI45|H39FFA0
-39FFA0:lI97|H3A0054
-3A0054:lI110|H3A0100
-3A0100:lI121|H3A01A4
-3A01A4:lI109|H3A0258
-3A0258:lI97|H3A0304
-3A0304:lI112|N
-39F25C:lI112|H39F310
-39F310:lI110|H39F3C4
-39F3C4:lI109|N
-39F1A4:lH39F26C|H39F278
-39F26C:t2:H39F320,H39F328
-39F328:lI105|H39F3DC
-39F3DC:lI109|H39F498
-39F498:lI97|H39F55C
-39F55C:lI103|H39F620
-39F620:lI101|H39F6F4
-39F6F4:lI47|H39F7C0
-39F7C0:lI120|H39F894
-39F894:lI45|H39F970
-39F970:lI99|H39FA44
-39FA44:lI109|H39FB18
-39FB18:lI117|H39FBE4
-39FBE4:lI45|H39FCB0
-39FCB0:lI114|H39FD74
-39FD74:lI97|H39FE38
-39FE38:lI115|H39FEEC
-39FEEC:lI116|H39FFA8
-39FFA8:lI101|H3A005C
-3A005C:lI114|N
-39F320:lI114|H39F3D4
-39F3D4:lI97|H39F490
-39F490:lI115|N
-39F278:lH39F330|H39F33C
-39F330:t2:H39F3E4,H39F3EC
-39F3EC:lI105|H39F4A8
-39F4A8:lI109|H39F56C
-39F56C:lI97|H39F630
-39F630:lI103|H39F6FC
-39F6FC:lI101|H39F7C8
-39F7C8:lI47|H39F89C
-39F89C:lI116|H39F978
-39F978:lI105|H39FA4C
-39FA4C:lI102|H39FB20
-39FB20:lI102|N
-39F3E4:lI116|H39F4A0
-39F4A0:lI105|H39F564
-39F564:lI102|H39F628
-39F628:lI102|N
-39F33C:lH39F3F4|H39F400
-39F3F4:t2:H39F4B0,H39F4B8
-39F4B8:lI105|H39F57C
-39F57C:lI109|H39F640
-39F640:lI97|H39F704
-39F704:lI103|H39F7D0
-39F7D0:lI101|H39F8A4
-39F8A4:lI47|H39F980
-39F980:lI116|H39FA54
-39FA54:lI105|H39FB28
-39FB28:lI102|H39FBEC
-39FBEC:lI102|N
-39F4B0:lI116|H39F574
-39F574:lI105|H39F638
-39F638:lI102|N
-39F400:lH39F4C0|H39F4CC
-39F4C0:t2:H39F584,H39F58C
-39F58C:lI105|H39F650
-39F650:lI109|H39F714
-39F714:lI97|H39F7D8
-39F7D8:lI103|H39F8AC
-39F8AC:lI101|H39F988
-39F988:lI47|H39FA5C
-39FA5C:lI112|H39FB30
-39FB30:lI110|H39FBF4
-39FBF4:lI103|N
-39F584:lI112|H39F648
-39F648:lI110|H39F70C
-39F70C:lI103|N
-39F4CC:lH39F594|H39F5A0
-39F594:t2:H39F658,H39F660
-39F660:lI105|H39F724
-39F724:lI109|H39F7E8
-39F7E8:lI97|H39F8BC
-39F8BC:lI103|H39F990
-39F990:lI101|H39FA64
-39FA64:lI47|H39FB38
-39FB38:lI106|H39FBFC
-39FBFC:lI112|H39FCB8
-39FCB8:lI101|H39FD7C
-39FD7C:lI103|N
-39F658:lI106|H39F71C
-39F71C:lI112|H39F7E0
-39F7E0:lI101|H39F8B4
-39F8B4:lI103|N
-39F5A0:lH39F668|H39F674
-39F668:t2:H39F72C,H39F734
-39F734:lI105|H39F7F8
-39F7F8:lI109|H39F8CC
-39F8CC:lI97|H39F998
-39F998:lI103|H39FA6C
-39FA6C:lI101|H39FB40
-39FB40:lI47|H39FC04
-39FC04:lI106|H39FCC0
-39FCC0:lI112|H39FD84
-39FD84:lI101|H39FE40
-39FE40:lI103|N
-39F72C:lI106|H39F7F0
-39F7F0:lI112|H39F8C4
-39F8C4:lI103|N
-39F674:lH39F73C|H39F748
-39F73C:t2:H39F800,H39F808
-39F808:lI105|H39F8DC
-39F8DC:lI109|H39F9A8
-39F9A8:lI97|H39FA74
-39FA74:lI103|H39FB48
-39FB48:lI101|H39FC0C
-39FC0C:lI47|H39FCC8
-39FCC8:lI106|H39FD8C
-39FD8C:lI112|H39FE48
-39FE48:lI101|H39FEF4
-39FEF4:lI103|N
-39F800:lI106|H39F8D4
-39F8D4:lI112|H39F9A0
-39F9A0:lI101|N
-39F748:lH39F810|H39F81C
-39F810:t2:H39F8E4,H39F8EC
-39F8EC:lI105|H39F9B8
-39F9B8:lI109|H39FA84
-39FA84:lI97|H39FB50
-39FB50:lI103|H39FC14
-39FC14:lI101|H39FCD0
-39FCD0:lI47|H39FD94
-39FD94:lI105|H39FE50
-39FE50:lI101|H39FEFC
-39FEFC:lI102|N
-39F8E4:lI105|H39F9B0
-39F9B0:lI101|H39FA7C
-39FA7C:lI102|N
-39F81C:lH39F8F4|H39F900
-39F8F4:t2:H39F9C0,H39F9C8
-39F9C8:lI105|H39FA94
-39FA94:lI109|H39FB60
-39FB60:lI97|H39FC1C
-39FC1C:lI103|H39FCD8
-39FCD8:lI101|H39FD9C
-39FD9C:lI47|H39FE58
-39FE58:lI103|H39FF04
-39FF04:lI105|H39FFB0
-39FFB0:lI102|N
-39F9C0:lI103|H39FA8C
-39FA8C:lI105|H39FB58
-39FB58:lI102|N
-39F900:lH39F9D0|H39F9DC
-39F9D0:t2:H39FA9C,H39FAA4
-39FAA4:lI99|H39FB70
-39FB70:lI104|H39FC2C
-39FC2C:lI101|H39FCE0
-39FCE0:lI109|H39FDA4
-39FDA4:lI105|H39FE60
-39FE60:lI99|H39FF0C
-39FF0C:lI97|H39FFB8
-39FFB8:lI108|H3A0064
-3A0064:lI47|H3A0108
-3A0108:lI120|H3A01AC
-3A01AC:lI45|H3A0260
-3A0260:lI112|H3A030C
-3A030C:lI100|H3A03B8
-3A03B8:lI98|N
-39FA9C:lI112|H39FB68
-39FB68:lI100|H39FC24
-39FC24:lI98|N
-39F9DC:lH39FAAC|H39FAB8
-39FAAC:t2:H39FB78,H39FB80
-39FB80:lI99|H39FC3C
-39FC3C:lI104|H39FCF0
-39FCF0:lI101|H39FDAC
-39FDAC:lI109|H39FE68
-39FE68:lI105|H39FF14
-39FF14:lI99|H39FFC0
-39FFC0:lI97|H3A006C
-3A006C:lI108|H3A0110
-3A0110:lI47|H3A01B4
-3A01B4:lI120|H3A0268
-3A0268:lI45|H3A0314
-3A0314:lI112|H3A03C0
-3A03C0:lI100|H3A0454
-3A0454:lI98|N
-39FB78:lI120|H39FC34
-39FC34:lI121|H39FCE8
-39FCE8:lI122|N
-39FAB8:lH39FB88|H39FB94
-39FB88:t2:H39FC44,H39FC4C
-39FC4C:lI97|H39FD00
-39FD00:lI117|H39FDBC
-39FDBC:lI100|H39FE70
-39FE70:lI105|H39FF1C
-39FF1C:lI111|H39FFC8
-39FFC8:lI47|H3A0074
-3A0074:lI120|H3A0118
-3A0118:lI45|H3A01BC
-3A01BC:lI119|H3A0270
-3A0270:lI97|H3A031C
-3A031C:lI118|N
-39FC44:lI119|H39FCF8
-39FCF8:lI97|H39FDB4
-39FDB4:lI118|N
-39FB94:lH39FC54|H39FC60
-39FC54:t2:H39FD08,H39FD10
-39FD10:lI97|H39FDCC
-39FDCC:lI117|H39FE78
-39FE78:lI100|H39FF24
-39FF24:lI105|H39FFD0
-39FFD0:lI111|H3A007C
-3A007C:lI47|H3A0120
-3A0120:lI120|H3A01C4
-3A01C4:lI45|H3A0278
-3A0278:lI114|H3A0324
-3A0324:lI101|H3A03C8
-3A03C8:lI97|H3A045C
-3A045C:lI108|H3A04F8
-3A04F8:lI97|H3A059C
-3A059C:lI117|H3A0648
-3A0648:lI100|H3A06F4
-3A06F4:lI105|H3A07A0
-3A07A0:lI111|N
-39FD08:lI114|H39FDC4
-39FDC4:lI97|N
-39FC60:lH39FD18|H39FD24
-39FD18:t2:H39FDD4,H39FDDC
-39FDDC:lI97|H39FE88
-39FE88:lI117|H39FF34
-39FF34:lI100|H39FFD8
-39FFD8:lI105|H3A0084
-3A0084:lI111|H3A0128
-3A0128:lI47|H3A01CC
-3A01CC:lI120|H3A0280
-3A0280:lI45|H3A032C
-3A032C:lI112|H3A03D0
-3A03D0:lI110|H3A0464
-3A0464:lI45|H3A0500
-3A0500:lI114|H3A05A4
-3A05A4:lI101|H3A0650
-3A0650:lI97|H3A06FC
-3A06FC:lI108|H3A07A8
-3A07A8:lI97|H3A0844
-3A0844:lI117|H3A08D0
-3A08D0:lI100|H3A0964
-3A0964:lI105|H3A09F8
-3A09F8:lI111|H3A0A94
-3A0A94:lI45|H3A0B40
-3A0B40:lI112|H3A0BEC
-3A0BEC:lI108|H3A0CA8
-3A0CA8:lI117|H3A0D64
-3A0D64:lI103|H3A0E18
-3A0E18:lI105|H3A0ECC
-3A0ECC:lI110|N
-39FDD4:lI114|H39FE80
-39FE80:lI112|H39FF2C
-39FF2C:lI109|N
-39FD24:lH39FDE4|H39FDF0
-39FDE4:t2:H39FE90,H39FE98
-39FE98:lI97|H39FF44
-39FF44:lI117|H39FFE8
-39FFE8:lI100|H3A008C
-3A008C:lI105|H3A0130
-3A0130:lI111|H3A01D4
-3A01D4:lI47|H3A0288
-3A0288:lI120|H3A0334
-3A0334:lI45|H3A03D8
-3A03D8:lI112|H3A046C
-3A046C:lI110|H3A0508
-3A0508:lI45|H3A05AC
-3A05AC:lI114|H3A0658
-3A0658:lI101|H3A0704
-3A0704:lI97|H3A07B0
-3A07B0:lI108|H3A084C
-3A084C:lI97|H3A08D8
-3A08D8:lI117|H3A096C
-3A096C:lI100|H3A0A00
-3A0A00:lI105|H3A0A9C
-3A0A9C:lI111|N
-39FE90:lI114|H39FF3C
-39FF3C:lI97|H39FFE0
-39FFE0:lI109|N
-39FDF0:lH39FEA0|H39FEAC
-39FEA0:t2:H39FF4C,H39FF54
-39FF54:lI97|H39FFF8
-39FFF8:lI117|H3A009C
-3A009C:lI100|H3A0138
-3A0138:lI105|H3A01DC
-3A01DC:lI111|H3A0290
-3A0290:lI47|H3A033C
-3A033C:lI120|H3A03E0
-3A03E0:lI45|H3A0474
-3A0474:lI97|H3A0510
-3A0510:lI105|H3A05B4
-3A05B4:lI102|H3A0660
-3A0660:lI102|N
-39FF4C:lI97|H39FFF0
-39FFF0:lI105|H3A0094
-3A0094:lI102|N
-39FEAC:lH39FF5C|H39FF68
-39FF5C:t2:H3A0000,H3A0008
-3A0008:lI97|H3A00AC
-3A00AC:lI117|H3A0148
-3A0148:lI100|H3A01EC
-3A01EC:lI105|H3A0298
-3A0298:lI111|H3A0344
-3A0344:lI47|H3A03E8
-3A03E8:lI120|H3A047C
-3A047C:lI45|H3A0518
-3A0518:lI97|H3A05BC
-3A05BC:lI105|H3A0668
-3A0668:lI102|H3A070C
-3A070C:lI102|N
-3A0000:lI97|H3A00A4
-3A00A4:lI105|H3A0140
-3A0140:lI102|H3A01E4
-3A01E4:lI102|N
-39FF68:lH3A0010|H3A001C
-3A0010:t2:H3A00B4,H3A00BC
-3A00BC:lI97|H3A0158
-3A0158:lI117|H3A01FC
-3A01FC:lI100|H3A02A8
-3A02A8:lI105|H3A034C
-3A034C:lI111|H3A03F0
-3A03F0:lI47|H3A0484
-3A0484:lI120|H3A0520
-3A0520:lI45|H3A05C4
-3A05C4:lI97|H3A0670
-3A0670:lI105|H3A0714
-3A0714:lI102|H3A07B8
-3A07B8:lI102|N
-3A00B4:lI97|H3A0150
-3A0150:lI105|H3A01F4
-3A01F4:lI102|H3A02A0
-3A02A0:lI99|N
-3A001C:lH3A00C4|H3A00D0
-3A00C4:t2:H3A0160,H3A0168
-3A0168:lI97|H3A020C
-3A020C:lI117|H3A02B8
-3A02B8:lI100|H3A035C
-3A035C:lI105|H3A03F8
-3A03F8:lI111|H3A048C
-3A048C:lI47|H3A0528
-3A0528:lI109|H3A05CC
-3A05CC:lI112|H3A0678
-3A0678:lI101|H3A071C
-3A071C:lI103|N
-3A0160:lI109|H3A0204
-3A0204:lI112|H3A02B0
-3A02B0:lI103|H3A0354
-3A0354:lI97|N
-3A00D0:lH3A0170|H3A017C
-3A0170:t2:H3A0214,H3A021C
-3A021C:lI97|H3A02C8
-3A02C8:lI117|H3A036C
-3A036C:lI100|H3A0400
-3A0400:lI105|H3A0494
-3A0494:lI111|H3A0530
-3A0530:lI47|H3A05D4
-3A05D4:lI109|H3A0680
-3A0680:lI112|H3A0724
-3A0724:lI101|H3A07C0
-3A07C0:lI103|N
-3A0214:lI109|H3A02C0
-3A02C0:lI112|H3A0364
-3A0364:lI50|N
-3A017C:lH3A0224|H3A0230
-3A0224:t2:H3A02D0,H3A02D8
-3A02D8:lI97|H3A037C
-3A037C:lI117|H3A0408
-3A0408:lI100|H3A049C
-3A049C:lI105|H3A0538
-3A0538:lI111|H3A05DC
-3A05DC:lI47|H3A0688
-3A0688:lI98|H3A072C
-3A072C:lI97|H3A07C8
-3A07C8:lI115|H3A0854
-3A0854:lI105|H3A08E0
-3A08E0:lI99|N
-3A02D0:lI97|H3A0374
-3A0374:lI117|N
-3A0230:lH3A02E0|H3A02EC
-3A02E0:t2:H3A0384,H3A038C
-3A038C:lI97|H3A0418
-3A0418:lI117|H3A04AC
-3A04AC:lI100|H3A0540
-3A0540:lI105|H3A05E4
-3A05E4:lI111|H3A0690
-3A0690:lI47|H3A0734
-3A0734:lI98|H3A07D0
-3A07D0:lI97|H3A085C
-3A085C:lI115|H3A08E8
-3A08E8:lI105|H3A0974
-3A0974:lI99|N
-3A0384:lI115|H3A0410
-3A0410:lI110|H3A04A4
-3A04A4:lI100|N
-3A02EC:lH3A0394|H3A03A0
-3A0394:t2:H3A0420,H3A0428
-3A0428:lI97|H3A04BC
-3A04BC:lI112|H3A0550
-3A0550:lI112|H3A05EC
-3A05EC:lI108|H3A0698
-3A0698:lI105|H3A073C
-3A073C:lI99|H3A07D8
-3A07D8:lI97|H3A0864
-3A0864:lI116|H3A08F0
-3A08F0:lI105|H3A097C
-3A097C:lI111|H3A0A08
-3A0A08:lI110|H3A0AA4
-3A0AA4:lI47|H3A0B48
-3A0B48:lI122|H3A0BF4
-3A0BF4:lI105|H3A0CB0
-3A0CB0:lI112|N
-3A0420:lI122|H3A04B4
-3A04B4:lI105|H3A0548
-3A0548:lI112|N
-3A03A0:lH3A0430|H3A043C
-3A0430:t2:H3A04C4,H3A04CC
-3A04CC:lI97|H3A0560
-3A0560:lI112|H3A05FC
-3A05FC:lI112|H3A06A0
-3A06A0:lI108|H3A0744
-3A0744:lI105|H3A07E0
-3A07E0:lI99|H3A086C
-3A086C:lI97|H3A08F8
-3A08F8:lI116|H3A0984
-3A0984:lI105|H3A0A10
-3A0A10:lI111|H3A0AAC
-3A0AAC:lI110|H3A0B50
-3A0B50:lI47|H3A0BFC
-3A0BFC:lI120|H3A0CB8
-3A0CB8:lI45|H3A0D6C
-3A0D6C:lI119|H3A0E20
-3A0E20:lI97|H3A0ED4
-3A0ED4:lI105|H3A0F90
-3A0F90:lI115|H3A105C
-3A105C:lI45|H3A1130
-3A1130:lI115|H3A1204
-3A1204:lI111|H3A12D0
-3A12D0:lI117|H3A13A4
-3A13A4:lI114|H3A1480
-3A1480:lI99|H3A1564
-3A1564:lI101|N
-3A04C4:lI115|H3A0558
-3A0558:lI114|H3A05F4
-3A05F4:lI99|N
-3A043C:lH3A04D4|H3A04E0
-3A04D4:t2:H3A0568,H3A0570
-3A0570:lI97|H3A060C
-3A060C:lI112|H3A06B0
-3A06B0:lI112|H3A0754
-3A0754:lI108|H3A07F0
-3A07F0:lI105|H3A0874
-3A0874:lI99|H3A0900
-3A0900:lI97|H3A098C
-3A098C:lI116|H3A0A18
-3A0A18:lI105|H3A0AB4
-3A0AB4:lI111|H3A0B58
-3A0B58:lI110|H3A0C04
-3A0C04:lI47|H3A0CC0
-3A0CC0:lI120|H3A0D74
-3A0D74:lI45|H3A0E28
-3A0E28:lI117|H3A0EDC
-3A0EDC:lI115|H3A0F98
-3A0F98:lI116|H3A1064
-3A1064:lI97|H3A1138
-3A1138:lI114|N
-3A0568:lI117|H3A0604
-3A0604:lI115|H3A06A8
-3A06A8:lI116|H3A074C
-3A074C:lI97|H3A07E8
-3A07E8:lI114|N
-3A04E0:lH3A0578|H3A0584
-3A0578:t2:H3A0614,H3A061C
-3A061C:lI97|H3A06C0
-3A06C0:lI112|H3A075C
-3A075C:lI112|H3A07F8
-3A07F8:lI108|H3A087C
-3A087C:lI105|H3A0908
-3A0908:lI99|H3A0994
-3A0994:lI97|H3A0A20
-3A0A20:lI116|H3A0ABC
-3A0ABC:lI105|H3A0B60
-3A0B60:lI111|H3A0C0C
-3A0C0C:lI110|H3A0CC8
-3A0CC8:lI47|H3A0D7C
-3A0D7C:lI120|H3A0E30
-3A0E30:lI45|H3A0EE4
-3A0EE4:lI116|H3A0FA0
-3A0FA0:lI114|H3A106C
-3A106C:lI111|H3A1140
-3A1140:lI102|H3A120C
-3A120C:lI102|H3A12D8
-3A12D8:lI45|H3A13AC
-3A13AC:lI109|H3A1488
-3A1488:lI115|N
-3A0614:lI109|H3A06B8
-3A06B8:lI115|N
-3A0584:lH3A0624|H3A0630
-3A0624:t2:H3A06C8,H3A06D0
-3A06D0:lI97|H3A076C
-3A076C:lI112|H3A0800
-3A0800:lI112|H3A0884
-3A0884:lI108|H3A0910
-3A0910:lI105|H3A099C
-3A099C:lI99|H3A0A28
-3A0A28:lI97|H3A0AC4
-3A0AC4:lI116|H3A0B68
-3A0B68:lI105|H3A0C14
-3A0C14:lI111|H3A0CD0
-3A0CD0:lI110|H3A0D84
-3A0D84:lI47|H3A0E38
-3A0E38:lI120|H3A0EEC
-3A0EEC:lI45|H3A0FA8
-3A0FA8:lI116|H3A1074
-3A1074:lI114|H3A1148
-3A1148:lI111|H3A1214
-3A1214:lI102|H3A12E0
-3A12E0:lI102|H3A13B4
-3A13B4:lI45|H3A1490
-3A1490:lI109|H3A156C
-3A156C:lI101|N
-3A06C8:lI109|H3A0764
-3A0764:lI101|N
-3A0630:lH3A06D8|H3A06E4
-3A06D8:t2:H3A0774,H3A077C
-3A077C:lI97|H3A0810
-3A0810:lI112|H3A0894
-3A0894:lI112|H3A0918
-3A0918:lI108|H3A09A4
-3A09A4:lI105|H3A0A30
-3A0A30:lI99|H3A0ACC
-3A0ACC:lI97|H3A0B70
-3A0B70:lI116|H3A0C1C
-3A0C1C:lI105|H3A0CD8
-3A0CD8:lI111|H3A0D8C
-3A0D8C:lI110|H3A0E40
-3A0E40:lI47|H3A0EF4
-3A0EF4:lI120|H3A0FB0
-3A0FB0:lI45|H3A107C
-3A107C:lI116|H3A1150
-3A1150:lI114|H3A121C
-3A121C:lI111|H3A12E8
-3A12E8:lI102|H3A13BC
-3A13BC:lI102|H3A1498
-3A1498:lI45|H3A1574
-3A1574:lI109|H3A1648
-3A1648:lI97|H3A171C
-3A171C:lI110|N
-3A0774:lI109|H3A0808
-3A0808:lI97|H3A088C
-3A088C:lI110|N
-3A06E4:lH3A0784|H3A0790
-3A0784:t2:H3A0818,H3A0820
-3A0820:lI97|H3A089C
-3A089C:lI112|H3A0920
-3A0920:lI112|H3A09AC
-3A09AC:lI108|H3A0A38
-3A0A38:lI105|H3A0AD4
-3A0AD4:lI99|H3A0B78
-3A0B78:lI97|H3A0C24
-3A0C24:lI116|H3A0CE0
-3A0CE0:lI105|H3A0D94
-3A0D94:lI111|H3A0E48
-3A0E48:lI110|H3A0EFC
-3A0EFC:lI47|H3A0FB8
-3A0FB8:lI120|H3A1084
-3A1084:lI45|H3A1158
-3A1158:lI116|H3A1224
-3A1224:lI114|H3A12F0
-3A12F0:lI111|H3A13C4
-3A13C4:lI102|H3A14A0
-3A14A0:lI102|N
-3A0818:lI116|N
-3A0790:lH3A0828|H3A0834
-3A0828:t2:H3A08A4,H3A08AC
-3A08AC:lI97|H3A0930
-3A0930:lI112|H3A09B4
-3A09B4:lI112|H3A0A40
-3A0A40:lI108|H3A0ADC
-3A0ADC:lI105|H3A0B80
-3A0B80:lI99|H3A0C2C
-3A0C2C:lI97|H3A0CE8
-3A0CE8:lI116|H3A0D9C
-3A0D9C:lI105|H3A0E50
-3A0E50:lI111|H3A0F04
-3A0F04:lI110|H3A0FC0
-3A0FC0:lI47|H3A108C
-3A108C:lI120|H3A1160
-3A1160:lI45|H3A122C
-3A122C:lI116|H3A12F8
-3A12F8:lI114|H3A13CC
-3A13CC:lI111|H3A14A8
-3A14A8:lI102|H3A157C
-3A157C:lI102|N
-3A08A4:lI116|H3A0928
-3A0928:lI114|N
-3A0834:lH3A08B4|H3A08C0
-3A08B4:t2:H3A0938,H3A0940
-3A0940:lI97|H3A09C4
-3A09C4:lI112|H3A0A50
-3A0A50:lI112|H3A0AEC
-3A0AEC:lI108|H3A0B88
-3A0B88:lI105|H3A0C34
-3A0C34:lI99|H3A0CF0
-3A0CF0:lI97|H3A0DA4
-3A0DA4:lI116|H3A0E58
-3A0E58:lI105|H3A0F0C
-3A0F0C:lI111|H3A0FC8
-3A0FC8:lI110|H3A1094
-3A1094:lI47|H3A1168
-3A1168:lI120|H3A1234
-3A1234:lI45|H3A1300
-3A1300:lI116|H3A13D4
-3A13D4:lI114|H3A14B0
-3A14B0:lI111|H3A1584
-3A1584:lI102|H3A1650
-3A1650:lI102|N
-3A0938:lI114|H3A09BC
-3A09BC:lI111|H3A0A48
-3A0A48:lI102|H3A0AE4
-3A0AE4:lI102|N
-3A08C0:lH3A0948|H3A0954
-3A0948:t2:H3A09CC,H3A09D4
-3A09D4:lI97|H3A0A60
-3A0A60:lI112|H3A0AFC
-3A0AFC:lI112|H3A0B98
-3A0B98:lI108|H3A0C44
-3A0C44:lI105|H3A0D00
-3A0D00:lI99|H3A0DB4
-3A0DB4:lI97|H3A0E60
-3A0E60:lI116|H3A0F14
-3A0F14:lI105|H3A0FD0
-3A0FD0:lI111|H3A109C
-3A109C:lI110|H3A1170
-3A1170:lI47|H3A123C
-3A123C:lI120|H3A1308
-3A1308:lI45|H3A13DC
-3A13DC:lI116|H3A14B8
-3A14B8:lI101|H3A158C
-3A158C:lI120|H3A1658
-3A1658:lI105|H3A1724
-3A1724:lI110|H3A17E8
-3A17E8:lI102|H3A18AC
-3A18AC:lI111|N
-3A09CC:lI116|H3A0A58
-3A0A58:lI101|H3A0AF4
-3A0AF4:lI120|H3A0B90
-3A0B90:lI105|H3A0C3C
-3A0C3C:lI110|H3A0CF8
-3A0CF8:lI102|H3A0DAC
-3A0DAC:lI111|N
-3A0954:lH3A09DC|H3A09E8
-3A09DC:t2:H3A0A68,H3A0A70
-3A0A70:lI97|H3A0B0C
-3A0B0C:lI112|H3A0BA8
-3A0BA8:lI112|H3A0C54
-3A0C54:lI108|H3A0D08
-3A0D08:lI105|H3A0DBC
-3A0DBC:lI99|H3A0E68
-3A0E68:lI97|H3A0F1C
-3A0F1C:lI116|H3A0FD8
-3A0FD8:lI105|H3A10A4
-3A10A4:lI111|H3A1178
-3A1178:lI110|H3A1244
-3A1244:lI47|H3A1310
-3A1310:lI120|H3A13E4
-3A13E4:lI45|H3A14C0
-3A14C0:lI116|H3A1594
-3A1594:lI101|H3A1660
-3A1660:lI120|H3A172C
-3A172C:lI105|H3A17F0
-3A17F0:lI110|H3A18B4
-3A18B4:lI102|H3A1970
-3A1970:lI111|N
-3A0A68:lI116|H3A0B04
-3A0B04:lI101|H3A0BA0
-3A0BA0:lI120|H3A0C4C
-3A0C4C:lI105|N
-3A09E8:lH3A0A78|H3A0A84
-3A0A78:t2:H3A0B14,H3A0B1C
-3A0B1C:lI97|H3A0BB8
-3A0BB8:lI112|H3A0C64
-3A0C64:lI112|H3A0D10
-3A0D10:lI108|H3A0DC4
-3A0DC4:lI105|H3A0E70
-3A0E70:lI99|H3A0F24
-3A0F24:lI97|H3A0FE0
-3A0FE0:lI116|H3A10AC
-3A10AC:lI105|H3A1180
-3A1180:lI111|H3A124C
-3A124C:lI110|H3A1318
-3A1318:lI47|H3A13EC
-3A13EC:lI120|H3A14C8
-3A14C8:lI45|H3A159C
-3A159C:lI116|H3A1668
-3A1668:lI101|H3A1734
-3A1734:lI120|N
-3A0B14:lI116|H3A0BB0
-3A0BB0:lI101|H3A0C5C
-3A0C5C:lI120|N
-3A0A84:lH3A0B24|H3A0B30
-3A0B24:t2:H3A0BC0,H3A0BC8
-3A0BC8:lI97|H3A0C74
-3A0C74:lI112|H3A0D20
-3A0D20:lI112|H3A0DCC
-3A0DCC:lI108|H3A0E78
-3A0E78:lI105|H3A0F2C
-3A0F2C:lI99|H3A0FE8
-3A0FE8:lI97|H3A10B4
-3A10B4:lI116|H3A1188
-3A1188:lI105|H3A1254
-3A1254:lI111|H3A1320
-3A1320:lI110|H3A13F4
-3A13F4:lI47|H3A14D0
-3A14D0:lI120|H3A15A4
-3A15A4:lI45|H3A1670
-3A1670:lI116|H3A173C
-3A173C:lI99|H3A17F8
-3A17F8:lI108|N
-3A0BC0:lI116|H3A0C6C
-3A0C6C:lI99|H3A0D18
-3A0D18:lI108|N
-3A0B30:lH3A0BD0|H3A0BDC
-3A0BD0:t2:H3A0C7C,H3A0C84
-3A0C84:lI97|H3A0D30
-3A0D30:lI112|H3A0DDC
-3A0DDC:lI112|H3A0E80
-3A0E80:lI108|H3A0F34
-3A0F34:lI105|H3A0FF0
-3A0FF0:lI99|H3A10BC
-3A10BC:lI97|H3A1190
-3A1190:lI116|H3A125C
-3A125C:lI105|H3A1328
-3A1328:lI111|H3A13FC
-3A13FC:lI110|H3A14D8
-3A14D8:lI47|H3A15AC
-3A15AC:lI120|H3A1678
-3A1678:lI45|H3A1744
-3A1744:lI116|H3A1800
-3A1800:lI97|H3A18BC
-3A18BC:lI114|N
-3A0C7C:lI116|H3A0D28
-3A0D28:lI97|H3A0DD4
-3A0DD4:lI114|N
-3A0BDC:lH3A0C8C|H3A0C98
-3A0C8C:t2:H3A0D38,H3A0D40
-3A0D40:lI97|H3A0DEC
-3A0DEC:lI112|H3A0E90
-3A0E90:lI112|H3A0F44
-3A0F44:lI108|H3A1000
-3A1000:lI105|H3A10CC
-3A10CC:lI99|H3A1198
-3A1198:lI97|H3A1264
-3A1264:lI116|H3A1330
-3A1330:lI105|H3A1404
-3A1404:lI111|H3A14E0
-3A14E0:lI110|H3A15B4
-3A15B4:lI47|H3A1680
-3A1680:lI120|H3A174C
-3A174C:lI45|H3A1808
-3A1808:lI115|H3A18C4
-3A18C4:lI118|H3A1978
-3A1978:lI52|H3A1A2C
-3A1A2C:lI99|H3A1AE0
-3A1AE0:lI114|H3A1BA4
-3A1BA4:lI99|N
-3A0D38:lI115|H3A0DE4
-3A0DE4:lI118|H3A0E88
-3A0E88:lI52|H3A0F3C
-3A0F3C:lI99|H3A0FF8
-3A0FF8:lI114|H3A10C4
-3A10C4:lI99|N
-3A0C98:lH3A0D48|H3A0D54
-3A0D48:t2:H3A0DF4,H3A0DFC
-3A0DFC:lI97|H3A0EA0
-3A0EA0:lI112|H3A0F54
-3A0F54:lI112|H3A1010
-3A1010:lI108|H3A10DC
-3A10DC:lI105|H3A11A8
-3A11A8:lI99|H3A1274
-3A1274:lI97|H3A1338
-3A1338:lI116|H3A140C
-3A140C:lI105|H3A14E8
-3A14E8:lI111|H3A15BC
-3A15BC:lI110|H3A1688
-3A1688:lI47|H3A1754
-3A1754:lI120|H3A1810
-3A1810:lI45|H3A18CC
-3A18CC:lI115|H3A1980
-3A1980:lI118|H3A1A34
-3A1A34:lI52|H3A1AE8
-3A1AE8:lI99|H3A1BAC
-3A1BAC:lI112|H3A1C78
-3A1C78:lI105|H3A1D3C
-3A1D3C:lI111|N
-3A0DF4:lI115|H3A0E98
-3A0E98:lI118|H3A0F4C
-3A0F4C:lI52|H3A1008
-3A1008:lI99|H3A10D4
-3A10D4:lI112|H3A11A0
-3A11A0:lI105|H3A126C
-3A126C:lI111|N
-3A0D54:lH3A0E04|H3A0E10
-3A0E04:t2:H3A0EA8,H3A0EB0
-3A0EB0:lI97|H3A0F64
-3A0F64:lI112|H3A1020
-3A1020:lI112|H3A10E4
-3A10E4:lI108|H3A11B0
-3A11B0:lI105|H3A127C
-3A127C:lI99|H3A1340
-3A1340:lI97|H3A1414
-3A1414:lI116|H3A14F0
-3A14F0:lI105|H3A15C4
-3A15C4:lI111|H3A1690
-3A1690:lI110|H3A175C
-3A175C:lI47|H3A1818
-3A1818:lI120|H3A18D4
-3A18D4:lI45|H3A1988
-3A1988:lI115|H3A1A3C
-3A1A3C:lI116|H3A1AF0
-3A1AF0:lI117|H3A1BB4
-3A1BB4:lI102|H3A1C80
-3A1C80:lI102|H3A1D44
-3A1D44:lI105|H3A1E00
-3A1E00:lI116|N
-3A0EA8:lI115|H3A0F5C
-3A0F5C:lI105|H3A1018
-3A1018:lI116|N
-3A0E10:lH3A0EB8|H3A0EC4
-3A0EB8:t2:H3A0F6C,H3A0F74
-3A0F74:lI97|H3A1030
-3A1030:lI112|H3A10F4
-3A10F4:lI112|H3A11C0
-3A11C0:lI108|H3A1284
-3A1284:lI105|H3A1348
-3A1348:lI99|H3A141C
-3A141C:lI97|H3A14F8
-3A14F8:lI116|H3A15CC
-3A15CC:lI105|H3A1698
-3A1698:lI111|H3A1764
-3A1764:lI110|H3A1820
-3A1820:lI47|H3A18DC
-3A18DC:lI120|H3A1990
-3A1990:lI45|H3A1A44
-3A1A44:lI115|H3A1AF8
-3A1AF8:lI104|H3A1BBC
-3A1BBC:lI97|H3A1C88
-3A1C88:lI114|N
-3A0F6C:lI115|H3A1028
-3A1028:lI104|H3A10EC
-3A10EC:lI97|H3A11B8
-3A11B8:lI114|N
-3A0EC4:lH3A0F7C|H3A0F88
-3A0F7C:t2:H3A1038,H3A1040
-3A1040:lI97|H3A1104
-3A1104:lI112|H3A11C8
-3A11C8:lI112|H3A128C
-3A128C:lI108|H3A1350
-3A1350:lI105|H3A1424
-3A1424:lI99|H3A1500
-3A1500:lI97|H3A15D4
-3A15D4:lI116|H3A16A0
-3A16A0:lI105|H3A176C
-3A176C:lI111|H3A1828
-3A1828:lI110|H3A18E4
-3A18E4:lI47|H3A1998
-3A1998:lI120|H3A1A4C
-3A1A4C:lI45|H3A1B00
-3A1B00:lI115|H3A1BC4
-3A1BC4:lI104|N
-3A1038:lI115|H3A10FC
-3A10FC:lI104|N
-3A0F88:lH3A1048|H3A1054
-3A1048:t2:H3A110C,H3A1114
-3A1114:lI97|H3A11D8
-3A11D8:lI112|H3A1294
-3A1294:lI112|H3A1358
-3A1358:lI108|H3A142C
-3A142C:lI105|H3A1508
-3A1508:lI99|H3A15DC
-3A15DC:lI97|H3A16A8
-3A16A8:lI116|H3A1774
-3A1774:lI105|H3A1830
-3A1830:lI111|H3A18EC
-3A18EC:lI110|H3A19A0
-3A19A0:lI47|H3A1A54
-3A1A54:lI120|H3A1B08
-3A1B08:lI45|H3A1BCC
-3A1BCC:lI110|H3A1C90
-3A1C90:lI101|H3A1D4C
-3A1D4C:lI116|H3A1E08
-3A1E08:lI99|H3A1EC4
-3A1EC4:lI100|H3A1F88
-3A1F88:lI102|N
-3A110C:lI110|H3A11D0
-3A11D0:lI99|N
-3A1054:lH3A111C|H3A1128
-3A111C:t2:H3A11E0,H3A11E8
-3A11E8:lI97|H3A12A4
-3A12A4:lI112|H3A1368
-3A1368:lI112|H3A1434
-3A1434:lI108|H3A1510
-3A1510:lI105|H3A15E4
-3A15E4:lI99|H3A16B0
-3A16B0:lI97|H3A177C
-3A177C:lI116|H3A1838
-3A1838:lI105|H3A18F4
-3A18F4:lI111|H3A19A8
-3A19A8:lI110|H3A1A5C
-3A1A5C:lI47|H3A1B10
-3A1B10:lI120|H3A1BD4
-3A1BD4:lI45|H3A1C98
-3A1C98:lI110|H3A1D54
-3A1D54:lI101|H3A1E10
-3A1E10:lI116|H3A1ECC
-3A1ECC:lI99|H3A1F90
-3A1F90:lI100|H3A2044
-3A2044:lI102|N
-3A11E0:lI99|H3A129C
-3A129C:lI100|H3A1360
-3A1360:lI102|N
-3A1128:lH3A11F0|H3A11FC
-3A11F0:t2:H3A12AC,H3A12B4
-3A12B4:lI97|H3A1378
-3A1378:lI112|H3A1444
-3A1444:lI112|H3A1518
-3A1518:lI108|H3A15EC
-3A15EC:lI105|H3A16B8
-3A16B8:lI99|H3A1784
-3A1784:lI97|H3A1840
-3A1840:lI116|H3A18FC
-3A18FC:lI105|H3A19B0
-3A19B0:lI111|H3A1A64
-3A1A64:lI110|H3A1B18
-3A1B18:lI47|H3A1BDC
-3A1BDC:lI120|H3A1CA0
-3A1CA0:lI45|H3A1D5C
-3A1D5C:lI109|H3A1E18
-3A1E18:lI105|H3A1ED4
-3A1ED4:lI102|N
-3A12AC:lI109|H3A1370
-3A1370:lI105|H3A143C
-3A143C:lI102|N
-3A11FC:lH3A12BC|H3A12C8
-3A12BC:t2:H3A1380,H3A1388
-3A1388:lI97|H3A1454
-3A1454:lI112|H3A1528
-3A1528:lI112|H3A15FC
-3A15FC:lI108|H3A16C8
-3A16C8:lI105|H3A178C
-3A178C:lI99|H3A1848
-3A1848:lI97|H3A1904
-3A1904:lI116|H3A19B8
-3A19B8:lI105|H3A1A6C
-3A1A6C:lI111|H3A1B20
-3A1B20:lI110|H3A1BE4
-3A1BE4:lI47|H3A1CA8
-3A1CA8:lI120|H3A1D64
-3A1D64:lI45|H3A1E20
-3A1E20:lI108|H3A1EDC
-3A1EDC:lI97|H3A1F98
-3A1F98:lI116|H3A204C
-3A204C:lI101|H3A2108
-3A2108:lI120|N
-3A1380:lI108|H3A144C
-3A144C:lI97|H3A1520
-3A1520:lI116|H3A15F4
-3A15F4:lI101|H3A16C0
-3A16C0:lI120|N
-3A12C8:lH3A1390|H3A139C
-3A1390:t2:H3A145C,H3A1464
-3A1464:lI97|H3A1538
-3A1538:lI112|H3A160C
-3A160C:lI112|H3A16D0
-3A16D0:lI108|H3A1794
-3A1794:lI105|H3A1850
-3A1850:lI99|H3A190C
-3A190C:lI97|H3A19C0
-3A19C0:lI116|H3A1A74
-3A1A74:lI105|H3A1B28
-3A1B28:lI111|H3A1BEC
-3A1BEC:lI110|H3A1CB0
-3A1CB0:lI47|H3A1D6C
-3A1D6C:lI120|H3A1E28
-3A1E28:lI45|H3A1EE4
-3A1EE4:lI107|H3A1FA0
-3A1FA0:lI111|H3A2054
-3A2054:lI97|H3A2110
-3A2110:lI110|N
-3A145C:lI115|H3A1530
-3A1530:lI107|H3A1604
-3A1604:lI112|N
-3A139C:lH3A146C|H3A1478
-3A146C:t2:H3A1540,H3A1548
-3A1548:lI97|H3A161C
-3A161C:lI112|H3A16E0
-3A16E0:lI112|H3A179C
-3A179C:lI108|H3A1858
-3A1858:lI105|H3A1914
-3A1914:lI99|H3A19C8
-3A19C8:lI97|H3A1A7C
-3A1A7C:lI116|H3A1B30
-3A1B30:lI105|H3A1BF4
-3A1BF4:lI111|H3A1CB8
-3A1CB8:lI110|H3A1D74
-3A1D74:lI47|H3A1E30
-3A1E30:lI120|H3A1EEC
-3A1EEC:lI45|H3A1FA8
-3A1FA8:lI107|H3A205C
-3A205C:lI111|H3A2118
-3A2118:lI97|H3A21CC
-3A21CC:lI110|N
-3A1540:lI115|H3A1614
-3A1614:lI107|H3A16D8
-3A16D8:lI100|N
-3A1478:lH3A1550|H3A155C
-3A1550:t2:H3A1624,H3A162C
-3A162C:lI97|H3A16F0
-3A16F0:lI112|H3A17AC
-3A17AC:lI112|H3A1860
-3A1860:lI108|H3A191C
-3A191C:lI105|H3A19D0
-3A19D0:lI99|H3A1A84
-3A1A84:lI97|H3A1B38
-3A1B38:lI116|H3A1BFC
-3A1BFC:lI105|H3A1CC0
-3A1CC0:lI111|H3A1D7C
-3A1D7C:lI110|H3A1E38
-3A1E38:lI47|H3A1EF4
-3A1EF4:lI120|H3A1FB0
-3A1FB0:lI45|H3A2064
-3A2064:lI107|H3A2120
-3A2120:lI111|H3A21D4
-3A21D4:lI97|H3A2288
-3A2288:lI110|N
-3A1624:lI115|H3A16E8
-3A16E8:lI107|H3A17A4
-3A17A4:lI116|N
-3A155C:lH3A1634|H3A1640
-3A1634:t2:H3A16F8,H3A1700
-3A1700:lI97|H3A17BC
-3A17BC:lI112|H3A1870
-3A1870:lI112|H3A1924
-3A1924:lI108|H3A19D8
-3A19D8:lI105|H3A1A8C
-3A1A8C:lI99|H3A1B40
-3A1B40:lI97|H3A1C04
-3A1C04:lI116|H3A1CC8
-3A1CC8:lI105|H3A1D84
-3A1D84:lI111|H3A1E40
-3A1E40:lI110|H3A1EFC
-3A1EFC:lI47|H3A1FB8
-3A1FB8:lI120|H3A206C
-3A206C:lI45|H3A2128
-3A2128:lI107|H3A21DC
-3A21DC:lI111|H3A2290
-3A2290:lI97|H3A234C
-3A234C:lI110|N
-3A16F8:lI115|H3A17B4
-3A17B4:lI107|H3A1868
-3A1868:lI109|N
-3A1640:lH3A1708|H3A1714
-3A1708:t2:H3A17C4,H3A17CC
-3A17CC:lI97|H3A1880
-3A1880:lI112|H3A1934
-3A1934:lI112|H3A19E0
-3A19E0:lI108|H3A1A94
-3A1A94:lI105|H3A1B48
-3A1B48:lI99|H3A1C0C
-3A1C0C:lI97|H3A1CD0
-3A1CD0:lI116|H3A1D8C
-3A1D8C:lI105|H3A1E48
-3A1E48:lI111|H3A1F04
-3A1F04:lI110|H3A1FC0
-3A1FC0:lI47|H3A2074
-3A2074:lI120|H3A2130
-3A2130:lI45|H3A21E4
-3A21E4:lI104|H3A2298
-3A2298:lI116|H3A2354
-3A2354:lI116|H3A2410
-3A2410:lI112|H3A24C4
-3A24C4:lI100|H3A2580
-3A2580:lI45|H3A263C
-3A263C:lI99|H3A2700
-3A2700:lI103|H3A27BC
-3A27BC:lI105|N
-3A17C4:lI99|H3A1878
-3A1878:lI103|H3A192C
-3A192C:lI105|N
-3A1714:lH3A17D4|H3A17E0
-3A17D4:t2:H3A1888,H3A1890
-3A1890:lI97|H3A1944
-3A1944:lI112|H3A19F0
-3A19F0:lI112|H3A1A9C
-3A1A9C:lI108|H3A1B50
-3A1B50:lI105|H3A1C14
-3A1C14:lI99|H3A1CD8
-3A1CD8:lI97|H3A1D94
-3A1D94:lI116|H3A1E50
-3A1E50:lI105|H3A1F0C
-3A1F0C:lI111|H3A1FC8
-3A1FC8:lI110|H3A207C
-3A207C:lI47|H3A2138
-3A2138:lI120|H3A21EC
-3A21EC:lI45|H3A22A0
-3A22A0:lI104|H3A235C
-3A235C:lI100|H3A2418
-3A2418:lI102|N
-3A1888:lI104|H3A193C
-3A193C:lI100|H3A19E8
-3A19E8:lI102|N
-3A17E0:lH3A1898|H3A18A4
-3A1898:t2:H3A194C,H3A1954
-3A1954:lI97|H3A1A00
-3A1A00:lI112|H3A1AA4
-3A1AA4:lI112|H3A1B58
-3A1B58:lI108|H3A1C1C
-3A1C1C:lI105|H3A1CE0
-3A1CE0:lI99|H3A1D9C
-3A1D9C:lI97|H3A1E58
-3A1E58:lI116|H3A1F14
-3A1F14:lI105|H3A1FD0
-3A1FD0:lI111|H3A2084
-3A2084:lI110|H3A2140
-3A2140:lI47|H3A21F4
-3A21F4:lI120|H3A22A8
-3A22A8:lI45|H3A2364
-3A2364:lI103|H3A2420
-3A2420:lI122|H3A24CC
-3A24CC:lI105|H3A2588
-3A2588:lI112|N
-3A194C:lI103|H3A19F8
-3A19F8:lI122|N
-3A18A4:lH3A195C|H3A1968
-3A195C:t2:H3A1A08,H3A1A10
-3A1A10:lI97|H3A1AB4
-3A1AB4:lI112|H3A1B68
-3A1B68:lI112|H3A1C2C
-3A1C2C:lI108|H3A1CE8
-3A1CE8:lI105|H3A1DA4
-3A1DA4:lI99|H3A1E60
-3A1E60:lI97|H3A1F1C
-3A1F1C:lI116|H3A1FD8
-3A1FD8:lI105|H3A208C
-3A208C:lI111|H3A2148
-3A2148:lI110|H3A21FC
-3A21FC:lI47|H3A22B0
-3A22B0:lI120|H3A236C
-3A236C:lI45|H3A2428
-3A2428:lI103|H3A24D4
-3A24D4:lI116|H3A2590
-3A2590:lI97|H3A2644
-3A2644:lI114|N
-3A1A08:lI103|H3A1AAC
-3A1AAC:lI116|H3A1B60
-3A1B60:lI97|H3A1C24
-3A1C24:lI114|N
-3A1968:lH3A1A18|H3A1A24
-3A1A18:t2:H3A1ABC,H3A1AC4
-3A1AC4:lI97|H3A1B78
-3A1B78:lI112|H3A1C3C
-3A1C3C:lI112|H3A1CF0
-3A1CF0:lI108|H3A1DAC
-3A1DAC:lI105|H3A1E68
-3A1E68:lI99|H3A1F24
-3A1F24:lI97|H3A1FE0
-3A1FE0:lI116|H3A2094
-3A2094:lI105|H3A2150
-3A2150:lI111|H3A2204
-3A2204:lI110|H3A22B8
-3A22B8:lI47|H3A2374
-3A2374:lI120|H3A2430
-3A2430:lI45|H3A24DC
-3A24DC:lI100|H3A2598
-3A2598:lI118|H3A264C
-3A264C:lI105|N
-3A1ABC:lI100|H3A1B70
-3A1B70:lI118|H3A1C34
-3A1C34:lI105|N
-3A1A24:lH3A1ACC|H3A1AD8
-3A1ACC:t2:H3A1B80,H3A1B88
-3A1B88:lI97|H3A1C4C
-3A1C4C:lI112|H3A1D00
-3A1D00:lI112|H3A1DB4
-3A1DB4:lI108|H3A1E70
-3A1E70:lI105|H3A1F2C
-3A1F2C:lI99|H3A1FE8
-3A1FE8:lI97|H3A209C
-3A209C:lI116|H3A2158
-3A2158:lI105|H3A220C
-3A220C:lI111|H3A22C0
-3A22C0:lI110|H3A237C
-3A237C:lI47|H3A2438
-3A2438:lI120|H3A24E4
-3A24E4:lI45|H3A25A0
-3A25A0:lI100|H3A2654
-3A2654:lI105|H3A2708
-3A2708:lI114|H3A27C4
-3A27C4:lI101|H3A2880
-3A2880:lI99|H3A2944
-3A2944:lI116|H3A2A10
-3A2A10:lI111|H3A2ADC
-3A2ADC:lI114|N
-3A1B80:lI100|H3A1C44
-3A1C44:lI99|H3A1CF8
-3A1CF8:lI114|N
-3A1AD8:lH3A1B90|H3A1B9C
-3A1B90:t2:H3A1C54,H3A1C5C
-3A1C5C:lI97|H3A1D10
-3A1D10:lI112|H3A1DC4
-3A1DC4:lI112|H3A1E78
-3A1E78:lI108|H3A1F34
-3A1F34:lI105|H3A1FF0
-3A1FF0:lI99|H3A20A4
-3A20A4:lI97|H3A2160
-3A2160:lI116|H3A2214
-3A2214:lI105|H3A22C8
-3A22C8:lI111|H3A2384
-3A2384:lI110|H3A2440
-3A2440:lI47|H3A24EC
-3A24EC:lI120|H3A25A8
-3A25A8:lI45|H3A265C
-3A265C:lI100|H3A2710
-3A2710:lI105|H3A27CC
-3A27CC:lI114|H3A2888
-3A2888:lI101|H3A294C
-3A294C:lI99|H3A2A18
-3A2A18:lI116|H3A2AE4
-3A2AE4:lI111|H3A2BB0
-3A2BB0:lI114|N
-3A1C54:lI100|H3A1D08
-3A1D08:lI105|H3A1DBC
-3A1DBC:lI114|N
-3A1B9C:lH3A1C64|H3A1C70
-3A1C64:t2:H3A1D18,H3A1D20
-3A1D20:lI97|H3A1DD4
-3A1DD4:lI112|H3A1E88
-3A1E88:lI112|H3A1F3C
-3A1F3C:lI108|H3A1FF8
-3A1FF8:lI105|H3A20AC
-3A20AC:lI99|H3A2168
-3A2168:lI97|H3A221C
-3A221C:lI116|H3A22D0
-3A22D0:lI105|H3A238C
-3A238C:lI111|H3A2448
-3A2448:lI110|H3A24F4
-3A24F4:lI47|H3A25B0
-3A25B0:lI120|H3A2664
-3A2664:lI45|H3A2718
-3A2718:lI100|H3A27D4
-3A27D4:lI105|H3A2890
-3A2890:lI114|H3A2954
-3A2954:lI101|H3A2A20
-3A2A20:lI99|H3A2AEC
-3A2AEC:lI116|H3A2BB8
-3A2BB8:lI111|H3A2C74
-3A2C74:lI114|N
-3A1D18:lI100|H3A1DCC
-3A1DCC:lI120|H3A1E80
-3A1E80:lI114|N
-3A1C70:lH3A1D28|H3A1D34
-3A1D28:t2:H3A1DDC,H3A1DE4
-3A1DE4:lI97|H3A1E98
-3A1E98:lI112|H3A1F4C
-3A1F4C:lI112|H3A2000
-3A2000:lI108|H3A20B4
-3A20B4:lI105|H3A2170
-3A2170:lI99|H3A2224
-3A2224:lI97|H3A22D8
-3A22D8:lI116|H3A2394
-3A2394:lI105|H3A2450
-3A2450:lI111|H3A24FC
-3A24FC:lI110|H3A25B8
-3A25B8:lI47|H3A266C
-3A266C:lI120|H3A2720
-3A2720:lI45|H3A27DC
-3A27DC:lI99|H3A2898
-3A2898:lI115|H3A295C
-3A295C:lI104|N
-3A1DDC:lI99|H3A1E90
-3A1E90:lI115|H3A1F44
-3A1F44:lI104|N
-3A1D34:lH3A1DEC|H3A1DF8
-3A1DEC:t2:H3A1EA0,H3A1EA8
-3A1EA8:lI97|H3A1F5C
-3A1F5C:lI112|H3A2010
-3A2010:lI112|H3A20C4
-3A20C4:lI108|H3A2178
-3A2178:lI105|H3A222C
-3A222C:lI99|H3A22E0
-3A22E0:lI97|H3A239C
-3A239C:lI116|H3A2458
-3A2458:lI105|H3A2504
-3A2504:lI111|H3A25C0
-3A25C0:lI110|H3A2674
-3A2674:lI47|H3A2728
-3A2728:lI120|H3A27E4
-3A27E4:lI45|H3A28A0
-3A28A0:lI99|H3A2964
-3A2964:lI112|H3A2A28
-3A2A28:lI105|H3A2AF4
-3A2AF4:lI111|N
-3A1EA0:lI99|H3A1F54
-3A1F54:lI112|H3A2008
-3A2008:lI105|H3A20BC
-3A20BC:lI111|N
-3A1DF8:lH3A1EB0|H3A1EBC
-3A1EB0:t2:H3A1F64,H3A1F6C
-3A1F6C:lI97|H3A2018
-3A2018:lI112|H3A20CC
-3A20CC:lI112|H3A2180
-3A2180:lI108|H3A2234
-3A2234:lI105|H3A22E8
-3A22E8:lI99|H3A23A4
-3A23A4:lI97|H3A2460
-3A2460:lI116|H3A250C
-3A250C:lI105|H3A25C8
-3A25C8:lI111|H3A267C
-3A267C:lI110|H3A2730
-3A2730:lI47|H3A27EC
-3A27EC:lI120|H3A28A8
-3A28A8:lI45|H3A296C
-3A296C:lI99|H3A2A30
-3A2A30:lI111|H3A2AFC
-3A2AFC:lI109|H3A2BC0
-3A2BC0:lI112|H3A2C7C
-3A2C7C:lI114|H3A2D2C
-3A2D2C:lI101|H3A2DD4
-3A2DD4:lI115|H3A2E6C
-3A2E6C:lI115|N
-3A1F64:lI90|N
-3A1EBC:lH3A1F74|H3A1F80
-3A1F74:t2:H3A2020,H3A2028
-3A2028:lI97|H3A20DC
-3A20DC:lI112|H3A2190
-3A2190:lI112|H3A223C
-3A223C:lI108|H3A22F0
-3A22F0:lI105|H3A23AC
-3A23AC:lI99|H3A2468
-3A2468:lI97|H3A2514
-3A2514:lI116|H3A25D0
-3A25D0:lI105|H3A2684
-3A2684:lI111|H3A2738
-3A2738:lI110|H3A27F4
-3A27F4:lI47|H3A28B0
-3A28B0:lI120|H3A2974
-3A2974:lI45|H3A2A38
-3A2A38:lI99|H3A2B04
-3A2B04:lI100|H3A2BC8
-3A2BC8:lI108|H3A2C84
-3A2C84:lI105|H3A2D34
-3A2D34:lI110|H3A2DDC
-3A2DDC:lI107|N
-3A2020:lI118|H3A20D4
-3A20D4:lI99|H3A2188
-3A2188:lI100|N
-3A1F80:lH3A2030|H3A203C
-3A2030:t2:H3A20E4,H3A20EC
-3A20EC:lI97|H3A21A0
-3A21A0:lI112|H3A224C
-3A224C:lI112|H3A2300
-3A2300:lI108|H3A23BC
-3A23BC:lI105|H3A2470
-3A2470:lI99|H3A251C
-3A251C:lI97|H3A25D8
-3A25D8:lI116|H3A268C
-3A268C:lI105|H3A2740
-3A2740:lI111|H3A27FC
-3A27FC:lI110|H3A28B8
-3A28B8:lI47|H3A297C
-3A297C:lI120|H3A2A40
-3A2A40:lI45|H3A2B0C
-3A2B0C:lI98|H3A2BD0
-3A2BD0:lI99|H3A2C8C
-3A2C8C:lI112|H3A2D3C
-3A2D3C:lI105|H3A2DE4
-3A2DE4:lI111|N
-3A20E4:lI98|H3A2198
-3A2198:lI99|H3A2244
-3A2244:lI112|H3A22F8
-3A22F8:lI105|H3A23B4
-3A23B4:lI111|N
-3A203C:lH3A20F4|H3A2100
-3A20F4:t2:H3A21A8,H3A21B0
-3A21B0:lI97|H3A225C
-3A225C:lI112|H3A2310
-3A2310:lI112|H3A23C4
-3A23C4:lI108|H3A2478
-3A2478:lI105|H3A2524
-3A2524:lI99|H3A25E0
-3A25E0:lI97|H3A2694
-3A2694:lI116|H3A2748
-3A2748:lI105|H3A2804
-3A2804:lI111|H3A28C0
-3A28C0:lI110|H3A2984
-3A2984:lI47|H3A2A48
-3A2A48:lI114|H3A2B14
-3A2B14:lI116|H3A2BD8
-3A2BD8:lI102|N
-3A21A8:lI114|H3A2254
-3A2254:lI116|H3A2308
-3A2308:lI102|N
-3A2100:lH3A21B8|H3A21C4
-3A21B8:t2:H3A2264,H3A226C
-3A226C:lI97|H3A2320
-3A2320:lI112|H3A23D4
-3A23D4:lI112|H3A2480
-3A2480:lI108|H3A252C
-3A252C:lI105|H3A25E8
-3A25E8:lI99|H3A269C
-3A269C:lI97|H3A2750
-3A2750:lI116|H3A280C
-3A280C:lI105|H3A28C8
-3A28C8:lI111|H3A298C
-3A298C:lI110|H3A2A50
-3A2A50:lI47|H3A2B1C
-3A2B1C:lI112|H3A2BE0
-3A2BE0:lI111|H3A2C94
-3A2C94:lI119|H3A2D44
-3A2D44:lI101|H3A2DEC
-3A2DEC:lI114|H3A2E74
-3A2E74:lI112|H3A2EEC
-3A2EEC:lI111|H3A2F64
-3A2F64:lI105|H3A2FD4
-3A2FD4:lI110|H3A303C
-3A303C:lI116|N
-3A2264:lI112|H3A2318
-3A2318:lI112|H3A23CC
-3A23CC:lI116|N
-3A21C4:lH3A2274|H3A2280
-3A2274:t2:H3A2328,H3A2330
-3A2330:lI97|H3A23E4
-3A23E4:lI112|H3A2488
-3A2488:lI112|H3A2534
-3A2534:lI108|H3A25F0
-3A25F0:lI105|H3A26A4
-3A26A4:lI99|H3A2758
-3A2758:lI97|H3A2814
-3A2814:lI116|H3A28D0
-3A28D0:lI105|H3A2994
-3A2994:lI111|H3A2A58
-3A2A58:lI110|H3A2B24
-3A2B24:lI47|H3A2BE8
-3A2BE8:lI112|H3A2C9C
-3A2C9C:lI111|H3A2D4C
-3A2D4C:lI115|H3A2DF4
-3A2DF4:lI116|H3A2E7C
-3A2E7C:lI115|H3A2EF4
-3A2EF4:lI99|H3A2F6C
-3A2F6C:lI114|H3A2FDC
-3A2FDC:lI105|H3A3044
-3A3044:lI112|H3A30A4
-3A30A4:lI116|N
-3A2328:lI97|H3A23DC
-3A23DC:lI105|N
-3A2280:lH3A2338|H3A2344
-3A2338:t2:H3A23EC,H3A23F4
-3A23F4:lI97|H3A2498
-3A2498:lI112|H3A2544
-3A2544:lI112|H3A25F8
-3A25F8:lI108|H3A26AC
-3A26AC:lI105|H3A2760
-3A2760:lI99|H3A281C
-3A281C:lI97|H3A28D8
-3A28D8:lI116|H3A299C
-3A299C:lI105|H3A2A60
-3A2A60:lI111|H3A2B2C
-3A2B2C:lI110|H3A2BF0
-3A2BF0:lI47|H3A2CA4
-3A2CA4:lI112|H3A2D54
-3A2D54:lI111|H3A2DFC
-3A2DFC:lI115|H3A2E84
-3A2E84:lI116|H3A2EFC
-3A2EFC:lI115|H3A2F74
-3A2F74:lI99|H3A2FE4
-3A2FE4:lI114|H3A304C
-3A304C:lI105|H3A30AC
-3A30AC:lI112|H3A3104
-3A3104:lI116|N
-3A23EC:lI101|H3A2490
-3A2490:lI112|H3A253C
-3A253C:lI115|N
-3A2344:lH3A23FC|H3A2408
-3A23FC:t2:H3A24A0,H3A24A8
-3A24A8:lI97|H3A2554
-3A2554:lI112|H3A2600
-3A2600:lI112|H3A26B4
-3A26B4:lI108|H3A2768
-3A2768:lI105|H3A2824
-3A2824:lI99|H3A28E0
-3A28E0:lI97|H3A29A4
-3A29A4:lI116|H3A2A68
-3A2A68:lI105|H3A2B34
-3A2B34:lI111|H3A2BF8
-3A2BF8:lI110|H3A2CAC
-3A2CAC:lI47|H3A2D5C
-3A2D5C:lI112|H3A2E04
-3A2E04:lI111|H3A2E8C
-3A2E8C:lI115|H3A2F04
-3A2F04:lI116|H3A2F7C
-3A2F7C:lI115|H3A2FEC
-3A2FEC:lI99|H3A3054
-3A3054:lI114|H3A30B4
-3A30B4:lI105|H3A310C
-3A310C:lI112|H3A315C
-3A315C:lI116|N
-3A24A0:lI112|H3A254C
-3A254C:lI115|N
-3A2408:lH3A24B0|H3A24BC
-3A24B0:t2:H3A255C,H3A2564
-3A2564:lI97|H3A2610
-3A2610:lI112|H3A26C4
-3A26C4:lI112|H3A2770
-3A2770:lI108|H3A282C
-3A282C:lI105|H3A28E8
-3A28E8:lI99|H3A29AC
-3A29AC:lI97|H3A2A70
-3A2A70:lI116|H3A2B3C
-3A2B3C:lI105|H3A2C00
-3A2C00:lI111|H3A2CB4
-3A2CB4:lI110|H3A2D64
-3A2D64:lI47|H3A2E0C
-3A2E0C:lI112|H3A2E94
-3A2E94:lI100|H3A2F0C
-3A2F0C:lI102|N
-3A255C:lI112|H3A2608
-3A2608:lI100|H3A26BC
-3A26BC:lI102|N
-3A24BC:lH3A256C|H3A2578
-3A256C:t2:H3A2618,H3A2620
-3A2620:lI97|H3A26D4
-3A26D4:lI112|H3A2780
-3A2780:lI112|H3A2834
-3A2834:lI108|H3A28F0
-3A28F0:lI105|H3A29B4
-3A29B4:lI99|H3A2A78
-3A2A78:lI97|H3A2B44
-3A2B44:lI116|H3A2C08
-3A2C08:lI105|H3A2CBC
-3A2CBC:lI111|H3A2D6C
-3A2D6C:lI110|H3A2E14
-3A2E14:lI47|H3A2E9C
-3A2E9C:lI111|H3A2F14
-3A2F14:lI100|H3A2F84
-3A2F84:lI97|N
-3A2618:lI111|H3A26CC
-3A26CC:lI100|H3A2778
-3A2778:lI97|N
-3A2578:lH3A2628|H3A2634
-3A2628:t2:H3A26DC,H3A26E4
-3A26E4:lI97|H3A2790
-3A2790:lI112|H3A2844
-3A2844:lI112|H3A28F8
-3A28F8:lI108|H3A29BC
-3A29BC:lI105|H3A2A80
-3A2A80:lI99|H3A2B4C
-3A2B4C:lI97|H3A2C10
-3A2C10:lI116|H3A2CC4
-3A2CC4:lI105|H3A2D74
-3A2D74:lI111|H3A2E1C
-3A2E1C:lI110|H3A2EA4
-3A2EA4:lI47|H3A2F1C
-3A2F1C:lI111|H3A2F8C
-3A2F8C:lI99|H3A2FF4
-3A2FF4:lI116|H3A305C
-3A305C:lI101|H3A30BC
-3A30BC:lI116|H3A3114
-3A3114:lI45|H3A3164
-3A3164:lI115|H3A31AC
-3A31AC:lI116|H3A31F4
-3A31F4:lI114|H3A323C
-3A323C:lI101|H3A3284
-3A3284:lI97|H3A32CC
-3A32CC:lI109|N
-3A26DC:lI98|H3A2788
-3A2788:lI105|H3A283C
-3A283C:lI110|N
-3A2634:lH3A26EC|H3A26F8
-3A26EC:t2:H3A2798,H3A27A0
-3A27A0:lI97|H3A2854
-3A2854:lI112|H3A2908
-3A2908:lI112|H3A29C4
-3A29C4:lI108|H3A2A88
-3A2A88:lI105|H3A2B54
-3A2B54:lI99|H3A2C18
-3A2C18:lI97|H3A2CCC
-3A2CCC:lI116|H3A2D7C
-3A2D7C:lI105|H3A2E24
-3A2E24:lI111|H3A2EAC
-3A2EAC:lI110|H3A2F24
-3A2F24:lI47|H3A2F94
-3A2F94:lI111|H3A2FFC
-3A2FFC:lI99|H3A3064
-3A3064:lI116|H3A30C4
-3A30C4:lI101|H3A311C
-3A311C:lI116|H3A316C
-3A316C:lI45|H3A31B4
-3A31B4:lI115|H3A31FC
-3A31FC:lI116|H3A3244
-3A3244:lI114|H3A328C
-3A328C:lI101|H3A32D4
-3A32D4:lI97|H3A3314
-3A3314:lI109|N
-3A2798:lI100|H3A284C
-3A284C:lI109|H3A2900
-3A2900:lI115|N
-3A26F8:lH3A27A8|H3A27B4
-3A27A8:t2:H3A285C,H3A2864
-3A2864:lI97|H3A2918
-3A2918:lI112|H3A29D4
-3A29D4:lI112|H3A2A90
-3A2A90:lI108|H3A2B5C
-3A2B5C:lI105|H3A2C20
-3A2C20:lI99|H3A2CD4
-3A2CD4:lI97|H3A2D84
-3A2D84:lI116|H3A2E2C
-3A2E2C:lI105|H3A2EB4
-3A2EB4:lI111|H3A2F2C
-3A2F2C:lI110|H3A2F9C
-3A2F9C:lI47|H3A3004
-3A3004:lI111|H3A306C
-3A306C:lI99|H3A30CC
-3A30CC:lI116|H3A3124
-3A3124:lI101|H3A3174
-3A3174:lI116|H3A31BC
-3A31BC:lI45|H3A3204
-3A3204:lI115|H3A324C
-3A324C:lI116|H3A3294
-3A3294:lI114|H3A32DC
-3A32DC:lI101|H3A331C
-3A331C:lI97|H3A334C
-3A334C:lI109|N
-3A285C:lI108|H3A2910
-3A2910:lI104|H3A29CC
-3A29CC:lI97|N
-3A27B4:lH3A286C|H3A2878
-3A286C:t2:H3A2920,H3A2928
-3A2928:lI97|H3A29E4
-3A29E4:lI112|H3A2AA0
-3A2AA0:lI112|H3A2B64
-3A2B64:lI108|H3A2C28
-3A2C28:lI105|H3A2CDC
-3A2CDC:lI99|H3A2D8C
-3A2D8C:lI97|H3A2E34
-3A2E34:lI116|H3A2EBC
-3A2EBC:lI105|H3A2F34
-3A2F34:lI111|H3A2FA4
-3A2FA4:lI110|H3A300C
-3A300C:lI47|H3A3074
-3A3074:lI111|H3A30D4
-3A30D4:lI99|H3A312C
-3A312C:lI116|H3A317C
-3A317C:lI101|H3A31C4
-3A31C4:lI116|H3A320C
-3A320C:lI45|H3A3254
-3A3254:lI115|H3A329C
-3A329C:lI116|H3A32E4
-3A32E4:lI114|H3A3324
-3A3324:lI101|H3A3354
-3A3354:lI97|H3A337C
-3A337C:lI109|N
-3A2920:lI108|H3A29DC
-3A29DC:lI122|H3A2A98
-3A2A98:lI104|N
-3A2878:lH3A2930|H3A293C
-3A2930:t2:H3A29EC,H3A29F4
-3A29F4:lI97|H3A2AB0
-3A2AB0:lI112|H3A2B74
-3A2B74:lI112|H3A2C30
-3A2C30:lI108|H3A2CE4
-3A2CE4:lI105|H3A2D94
-3A2D94:lI99|H3A2E3C
-3A2E3C:lI97|H3A2EC4
-3A2EC4:lI116|H3A2F3C
-3A2F3C:lI105|H3A2FAC
-3A2FAC:lI111|H3A3014
-3A3014:lI110|H3A307C
-3A307C:lI47|H3A30DC
-3A30DC:lI111|H3A3134
-3A3134:lI99|H3A3184
-3A3184:lI116|H3A31CC
-3A31CC:lI101|H3A3214
-3A3214:lI116|H3A325C
-3A325C:lI45|H3A32A4
-3A32A4:lI115|H3A32EC
-3A32EC:lI116|H3A332C
-3A332C:lI114|H3A335C
-3A335C:lI101|H3A3384
-3A3384:lI97|H3A33A4
-3A33A4:lI109|N
-3A29EC:lI101|H3A2AA8
-3A2AA8:lI120|H3A2B6C
-3A2B6C:lI101|N
-3A293C:lH3A29FC|H3A2A08
-3A29FC:t2:H3A2AB8,H3A2AC0
-3A2AC0:lI97|H3A2B84
-3A2B84:lI112|H3A2C40
-3A2C40:lI112|H3A2CF4
-3A2CF4:lI108|H3A2DA4
-3A2DA4:lI105|H3A2E44
-3A2E44:lI99|H3A2ECC
-3A2ECC:lI97|H3A2F44
-3A2F44:lI116|H3A2FB4
-3A2FB4:lI105|H3A301C
-3A301C:lI111|H3A3084
-3A3084:lI110|H3A30E4
-3A30E4:lI47|H3A313C
-3A313C:lI111|H3A318C
-3A318C:lI99|H3A31D4
-3A31D4:lI116|H3A321C
-3A321C:lI101|H3A3264
-3A3264:lI116|H3A32AC
-3A32AC:lI45|H3A32F4
-3A32F4:lI115|H3A3334
-3A3334:lI116|H3A3364
-3A3364:lI114|H3A338C
-3A338C:lI101|H3A33AC
-3A33AC:lI97|H3A33C4
-3A33C4:lI109|N
-3A2AB8:lI99|H3A2B7C
-3A2B7C:lI108|H3A2C38
-3A2C38:lI97|H3A2CEC
-3A2CEC:lI115|H3A2D9C
-3A2D9C:lI115|N
-3A2A08:lH3A2AC8|H3A2AD4
-3A2AC8:t2:H3A2B8C,H3A2B94
-3A2B94:lI97|H3A2C50
-3A2C50:lI112|H3A2D04
-3A2D04:lI112|H3A2DAC
-3A2DAC:lI108|H3A2E4C
-3A2E4C:lI105|H3A2ED4
-3A2ED4:lI99|H3A2F4C
-3A2F4C:lI97|H3A2FBC
-3A2FBC:lI116|H3A3024
-3A3024:lI105|H3A308C
-3A308C:lI111|H3A30EC
-3A30EC:lI110|H3A3144
-3A3144:lI47|H3A3194
-3A3194:lI109|H3A31DC
-3A31DC:lI115|H3A3224
-3A3224:lI119|H3A326C
-3A326C:lI111|H3A32B4
-3A32B4:lI114|H3A32FC
-3A32FC:lI100|N
-3A2B8C:lI100|H3A2C48
-3A2C48:lI111|H3A2CFC
-3A2CFC:lI99|N
-3A2AD4:lH3A2B9C|H3A2BA8
-3A2B9C:t2:H3A2C58,H3A2C60
-3A2C60:lI97|H3A2D14
-3A2D14:lI112|H3A2DBC
-3A2DBC:lI112|H3A2E54
-3A2E54:lI108|H3A2EDC
-3A2EDC:lI105|H3A2F54
-3A2F54:lI99|H3A2FC4
-3A2FC4:lI97|H3A302C
-3A302C:lI116|H3A3094
-3A3094:lI105|H3A30F4
-3A30F4:lI111|H3A314C
-3A314C:lI110|H3A319C
-3A319C:lI47|H3A31E4
-3A31E4:lI109|H3A322C
-3A322C:lI97|H3A3274
-3A3274:lI99|H3A32BC
-3A32BC:lI45|H3A3304
-3A3304:lI99|H3A333C
-3A333C:lI111|H3A336C
-3A336C:lI109|H3A3394
-3A3394:lI112|H3A33B4
-3A33B4:lI97|H3A33CC
-3A33CC:lI99|H3A33DC
-3A33DC:lI116|H3A33EC
-3A33EC:lI112|H3A33FC
-3A33FC:lI114|H3A340C
-3A340C:lI111|N
-3A2C58:lI99|H3A2D0C
-3A2D0C:lI112|H3A2DB4
-3A2DB4:lI116|N
-3A2BA8:lH3A2C68|N
-3A2C68:t2:H3A2D1C,H3A2D24
-3A2D24:lI97|H3A2DCC
-3A2DCC:lI112|H3A2E64
-3A2E64:lI112|H3A2EE4
-3A2EE4:lI108|H3A2F5C
-3A2F5C:lI105|H3A2FCC
-3A2FCC:lI99|H3A3034
-3A3034:lI97|H3A309C
-3A309C:lI116|H3A30FC
-3A30FC:lI105|H3A3154
-3A3154:lI111|H3A31A4
-3A31A4:lI110|H3A31EC
-3A31EC:lI47|H3A3234
-3A3234:lI109|H3A327C
-3A327C:lI97|H3A32C4
-3A32C4:lI99|H3A330C
-3A330C:lI45|H3A3344
-3A3344:lI98|H3A3374
-3A3374:lI105|H3A339C
-3A339C:lI110|H3A33BC
-3A33BC:lI104|H3A33D4
-3A33D4:lI101|H3A33E4
-3A33E4:lI120|H3A33F4
-3A33F4:lI52|H3A3404
-3A3404:lI48|N
-3A2D1C:lI104|H3A2DC4
-3A2DC4:lI113|H3A2E5C
-3A2E5C:lI120|N
-39DC28:lH39DC68|H39DC74
-39DC68:t2:A4:port,I8888
-39DC74:lH39DCA8|H39DCB4
-39DCA8:t2:AC:bind_address,H39DCF8
-39DCF8:t4:I127,I0,I0,I1
-39DCB4:lH39DD0C|H39DD18
-39DD0C:t2:AB:server_name,H39DD6C
-39DD6C:lI108|H39DDE4
-39DDE4:lI111|H39DE5C
-39DE5C:lI99|H39DEE4
-39DEE4:lI97|H39DF6C
-39DF6C:lI108|H39E00C
-39E00C:lI104|H39E0B4
-39E0B4:lI111|H39E16C
-39E16C:lI115|H39E238
-39E238:lI116|N
-39DD18:lH39DD74|H39DD80
-39DD74:t2:AE:max_header_siz,I1024
-39DD80:lH39DDEC|H39DDF8
-39DDEC:t2:A11:max_header_action,A8:reply414
-39DDF8:lH39DE64|H39DE70
-39DE64:t2:A8:com_type,A7:ip_comm
-39DE70:lH39DEEC|H39DEF8
-39DEEC:t2:A7:modules,H39DF74
-39DF74:lA9:mod_alias|H39E014
-39E014:lA8:mod_auth|H39E0BC
-39E0BC:lA7:mod_esi|H39E174
-39E174:lAB:mod_actions|H39E240
-39E240:lA7:mod_cgi|H39E324
-39E324:lAB:mod_include|H39E418
-39E418:lA7:mod_dir|H39E51C
-39E51C:lA7:mod_get|H39E634
-39E634:lA8:mod_head|H39E748
-39E748:lA7:mod_log|H39E85C
-39E85C:lAC:mod_disk_log|N
-39DEF8:lH39DF7C|H39DF88
-39DF7C:t2:AF:directory_index,H39E01C
-39E01C:lH39E0C4|N
-39E0C4:lI105|H39E17C
-39E17C:lI110|H39E248
-39E248:lI100|H39E32C
-39E32C:lI101|H39E420
-39E420:lI120|H39E524
-39E524:lI46|H39E63C
-39E63C:lI104|H39E750
-39E750:lI116|H39E864
-39E864:lI109|H39E978
-39E978:lI108|N
-39DF88:lH39E024|H39E030
-39E024:t2:AC:default_type,H39E0CC
-39E0CC:lI116|H39E184
-39E184:lI101|H39E250
-39E250:lI120|H39E334
-39E334:lI116|H39E428
-39E428:lI47|H39E52C
-39E52C:lI112|H39E644
-39E644:lI108|H39E758
-39E758:lI97|H39E86C
-39E86C:lI105|H39E980
-39E980:lI110|N
-39E030:lH39E0D4|H39E0E0
-39E0D4:t2:A10:erl_script_alias,H39E18C
-39E18C:t2:H39E258,H39E260
-39E260:lH39E344|N
-39E344:lI119|H39E438
-39E438:lI101|H39E53C
-39E53C:lI98|H39E654
-39E654:lI116|H39E768
-39E768:lI111|H39E87C
-39E87C:lI111|H39E990
-39E990:lI108|N
-39E258:lI47|H39E33C
-39E33C:lI119|H39E430
-39E430:lI101|H39E534
-39E534:lI98|H39E64C
-39E64C:lI116|H39E760
-39E760:lI111|H39E874
-39E874:lI111|H39E988
-39E988:lI108|N
-39E0E0:lH39E198|H39E1A4
-39E198:t2:A5:alias,H39E268
-39E268:t2:H39E34C,H39E354
-39E354:lI47|H39E448
-39E448:lI99|H39E54C
-39E54C:lI108|H39E664
-39E664:lI101|H39E778
-39E778:lI97|H39E88C
-39E88C:lI114|H39E9A0
-39E9A0:lI99|H39EA94
-39EA94:lI97|H39EB88
-39EB88:lI115|H39EC7C
-39EC7C:lI101|H39ED70
-39ED70:lI47|H39EE4C
-39EE4C:lI111|H39EF20
-39EF20:lI116|H39EFFC
-39EFFC:lI112|H39F0E0
-39F0E0:lI47|H39F1B4
-39F1B4:lI101|H39F288
-39F288:lI114|H39F344
-39F344:lI116|H39F408
-39F408:lI115|H39F4D4
-39F4D4:lI47|H39F5A8
-39F5A8:lI108|H39F67C
-39F67C:lI105|H39F750
-39F750:lI98|H39F824
-39F824:lI47|H39F908
-39F908:lI111|H39F9E4
-39F9E4:lI98|H39FAC0
-39FAC0:lI115|H39FB9C
-39FB9C:lI101|H39FC68
-39FC68:lI114|H39FD2C
-39FD2C:lI118|H39FDF8
-39FDF8:lI101|H39FEB4
-39FEB4:lI114|H39FF70
-39FF70:lI47|H3A0024
-3A0024:lI112|H3A00D8
-3A00D8:lI114|H3A0184
-3A0184:lI105|H3A0238
-3A0238:lI118|H3A02F4
-3A02F4:lI47|H3A03A8
-3A03A8:lI99|H3A0444
-3A0444:lI114|H3A04E8
-3A04E8:lI97|H3A058C
-3A058C:lI115|H3A0638
-3A0638:lI104|H3A06EC
-3A06EC:lI100|H3A0798
-3A0798:lI117|H3A083C
-3A083C:lI109|H3A08C8
-3A08C8:lI112|H3A095C
-3A095C:lI95|H3A09F0
-3A09F0:lI118|H3A0A8C
-3A0A8C:lI105|H3A0B38
-3A0B38:lI101|H3A0BE4
-3A0BE4:lI119|H3A0CA0
-3A0CA0:lI101|H3A0D5C
-3A0D5C:lI114|N
-39E34C:lI47|H39E440
-39E440:lI99|H39E544
-39E544:lI114|H39E65C
-39E65C:lI97|H39E770
-39E770:lI115|H39E884
-39E884:lI104|H39E998
-39E998:lI100|H39EA8C
-39EA8C:lI117|H39EB80
-39EB80:lI109|H39EC74
-39EC74:lI112|H39ED68
-39ED68:lI95|H39EE44
-39EE44:lI118|H39EF18
-39EF18:lI105|H39EFF4
-39EFF4:lI101|H39F0D8
-39F0D8:lI119|H39F1AC
-39F1AC:lI101|H39F280
-39F280:lI114|N
-39E1A4:lH39E274|H39E280
-39E274:t2:A5:alias,H39E35C
-39E35C:t2:H39E450,H39E458
-39E458:lI47|H39E55C
-39E55C:lI99|H39E674
-39E674:lI108|H39E788
-39E788:lI101|H39E89C
-39E89C:lI97|H39E9B0
-39E9B0:lI114|H39EAA4
-39EAA4:lI99|H39EB98
-39EB98:lI97|H39EC8C
-39EC8C:lI115|H39ED80
-39ED80:lI101|H39EE5C
-39EE5C:lI47|H39EF30
-39EF30:lI111|H39F00C
-39F00C:lI116|H39F0F0
-39F0F0:lI112|H39F1C4
-39F1C4:lI47|H39F298
-39F298:lI101|H39F354
-39F354:lI114|H39F418
-39F418:lI116|H39F4E4
-39F4E4:lI115|H39F5B0
-39F5B0:lI47|H39F684
-39F684:lI101|H39F758
-39F758:lI114|H39F82C
-39F82C:lI116|H39F910
-39F910:lI115|H39F9EC
-39F9EC:lI47|H39FAC8
-39FAC8:lI100|H39FBA4
-39FBA4:lI111|H39FC70
-39FC70:lI99|H39FD34
-39FD34:lI47|H39FE00
-39FE00:lI104|H39FEBC
-39FEBC:lI116|H39FF78
-39FF78:lI109|H3A002C
-3A002C:lI108|N
-39E450:lI47|H39E554
-39E554:lI99|H39E66C
-39E66C:lI114|H39E780
-39E780:lI97|H39E894
-39E894:lI115|H39E9A8
-39E9A8:lI104|H39EA9C
-39EA9C:lI100|H39EB90
-39EB90:lI117|H39EC84
-39EC84:lI109|H39ED78
-39ED78:lI112|H39EE54
-39EE54:lI95|H39EF28
-39EF28:lI101|H39F004
-39F004:lI114|H39F0E8
-39F0E8:lI116|H39F1BC
-39F1BC:lI115|H39F290
-39F290:lI95|H39F34C
-39F34C:lI100|H39F410
-39F410:lI111|H39F4DC
-39F4DC:lI99|N
-39E280:lH39E368|H39E374
-39E368:t2:A5:alias,H39E460
-39E460:t2:H39E564,H39E56C
-39E56C:lI47|H39E684
-39E684:lI99|H39E798
-39E798:lI108|H39E8AC
-39E8AC:lI101|H39E9C0
-39E9C0:lI97|H39EAB4
-39EAB4:lI114|H39EBA8
-39EBA8:lI99|H39EC9C
-39EC9C:lI97|H39ED90
-39ED90:lI115|H39EE6C
-39EE6C:lI101|H39EF40
-39EF40:lI47|H39F01C
-39F01C:lI111|H39F100
-39F100:lI116|H39F1D4
-39F1D4:lI112|H39F2A0
-39F2A0:lI47|H39F35C
-39F35C:lI101|H39F420
-39F420:lI114|H39F4EC
-39F4EC:lI116|H39F5B8
-39F5B8:lI115|H39F68C
-39F68C:lI47|H39F760
-39F760:lI108|H39F834
-39F834:lI105|H39F918
-39F918:lI98|H39F9F4
-39F9F4:lI47|H39FAD0
-39FAD0:lI111|H39FBAC
-39FBAC:lI98|H39FC78
-39FC78:lI115|H39FD3C
-39FD3C:lI101|H39FE08
-39FE08:lI114|H39FEC4
-39FEC4:lI118|H39FF80
-39FF80:lI101|H3A0034
-3A0034:lI114|H3A00E0
-3A00E0:lI47|H3A018C
-3A018C:lI100|H3A0240
-3A0240:lI111|H3A02FC
-3A02FC:lI99|H3A03B0
-3A03B0:lI47|H3A044C
-3A044C:lI104|H3A04F0
-3A04F0:lI116|H3A0594
-3A0594:lI109|H3A0640
-3A0640:lI108|N
-39E564:lI47|H39E67C
-39E67C:lI99|H39E790
-39E790:lI114|H39E8A4
-39E8A4:lI97|H39E9B8
-39E9B8:lI115|H39EAAC
-39EAAC:lI104|H39EBA0
-39EBA0:lI100|H39EC94
-39EC94:lI117|H39ED88
-39ED88:lI109|H39EE64
-39EE64:lI112|H39EF38
-39EF38:lI95|H39F014
-39F014:lI100|H39F0F8
-39F0F8:lI111|H39F1CC
-39F1CC:lI99|N
-39E374:lH39E46C|N
-39E46C:t2:A10:erl_script_alias,H39E574
-39E574:t2:H39E68C,H39E694
-39E694:lH39E7A8|N
-39E7A8:lI99|H39E8BC
-39E8BC:lI114|H39E9D0
-39E9D0:lI97|H39EAC4
-39EAC4:lI115|H39EBB8
-39EBB8:lI104|H39ECAC
-39ECAC:lI100|H39EDA0
-39EDA0:lI117|H39EE74
-39EE74:lI109|H39EF48
-39EF48:lI112|H39F024
-39F024:lI95|H39F108
-39F108:lI118|H39F1DC
-39F1DC:lI105|H39F2A8
-39F2A8:lI101|H39F364
-39F364:lI119|H39F428
-39F428:lI101|H39F4F4
-39F4F4:lI114|N
-39E68C:lI47|H39E7A0
-39E7A0:lI99|H39E8B4
-39E8B4:lI100|H39E9C8
-39E9C8:lI118|H39EABC
-39EABC:lI95|H39EBB0
-39EBB0:lI101|H39ECA4
-39ECA4:lI114|H39ED98
-39ED98:lI108|N
-39DB58:lN|H39DB9C
-39DB9C:lH39D9FC|H39DBEC
-39D9FC:t4:I127,I0,I0,I1
-39DBEC:lI8888|N
-3A3E20:lH3A3DFC|H3A3704
-3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
-39DAE8:lAD:httpd_manager|H39DB38
-39DB38:lAA:gen_server|N
-39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
-39DB30:lA9:undefined|H39DB78
-39DB78:lH39DB50|H39DBC0
-39DBC0:lN|N
-39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
-3A3704:lH3A36E0|H39D998
-3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
-39DA38:lAE:httpd_misc_sup|H39DAC0
-39DAC0:lAA:supervisor|N
-39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
-39D958:lH39D9FC|H39DA10
-39DA10:lI8888|H39DAB8
-39DAB8:lA7:silence|N
-39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
-39D998:lH39DA64|N
-39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
-39DB10:lA12:httpd_acceptor_sup|H39DB48
-39DB48:lAA:supervisor|N
-39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
-39DB40:lH39D9FC|H39DB80
-39DB80:lI8888|H39DBC8
-39DBC8:lA7:silence|N
-39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
-39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39D9CC:lAA:gen_server|H39DA90
-39DA90:lP<0.33.0>|H39DB20
-39DB20:lP<0.33.0>|H39DB60
-39DB60:lH39DBA4|H39DBB0
-39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39DBB0:lAA:supervisor|H39DBF4
-39DBF4:lH39DC30|H39DC40
-39DC30:t3:H39D960,A9:httpd_sup,H39DA88
-39DC40:lN|N
-39D940:t2:AD:$initial_call,H39D9E4
-39D9E4:t3:A3:gen,A7:init_it,H39D9CC
-39D94C:t2:AA:$ancestors,H39D9F4
-39D9F4:lA8:web_tool|H39DAB0
-39DAB0:lP<0.27.0>|N
-=proc_dictionary:<0.44.0>
-H3756A8
-H3756B4
-H3756C0
-H3756CC
-=proc_stack:<0.44.0>
-36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36C030
-y4:A1E:httpd_acc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H375710
-=proc_heap:<0.44.0>
-36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
-375730:lA7:silence|N
-36C028:lH36C004|N
-36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
-36BEA0:lAE:httpd_acceptor|N
-36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
-36BEE8:lP<0.46.0>|H36BEF0
-36BEF0:lA7:ip_comm|H36BEF8
-36BEF8:lH36BF00|H36BF14
-36BF00:t4:I127,I0,I0,I1
-36BF14:lI8888|H36BF1C
-36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
-36BF24:lA7:silence|N
-36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
-36BED4:t4:I127,I0,I0,I1
-3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-375710:lAA:gen_server|H375738
-375738:lP<0.43.0>|H375748
-375748:lP<0.43.0>|H375758
-375758:lH375760|H37576C
-375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-37576C:lAA:supervisor|H375774
-375774:lH37577C|H37578C
-37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
-37578C:lN|N
-3756A8:t2:AD:$initial_call,H375718
-375718:t3:A3:gen,A7:init_it,H375710
-3756B4:t2:A9:verbosity,A7:silence
-3756C0:t2:AA:$ancestors,H375728
-375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
-375740:lA8:web_tool|H375750
-375750:lP<0.27.0>|N
-3756CC:t2:A5:sname,A7:acc_sup
-=proc_dictionary:<0.45.0>
-H36F484
-H36F4F4
-H36F468
-H36F500
-=proc_stack:<0.45.0>
-36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F5D0
-y4:A1F:httpd_misc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36f750:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36F430
-=proc_heap:<0.45.0>
-36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
-36F408:lA7:silence|N
-36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F430:lAA:gen_server|H36F428
-36F428:lP<0.43.0>|H36F420
-36F420:lP<0.43.0>|H36F3D0
-36F3D0:lH36F3E0|H36F418
-36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F418:lAA:supervisor|H36F3D8
-36F3D8:lH36F3EC|H36F410
-36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
-36F410:lN|N
-36F484:t2:AD:$initial_call,H36F474
-36F474:t3:A3:gen,A7:init_it,H36F430
-36F4F4:t2:A9:verbosity,A7:silence
-36F468:t2:AA:$ancestors,H36F460
-36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
-36F440:lA8:web_tool|H36F438
-36F438:lP<0.27.0>|N
-36F500:t2:A5:sname,A8:misc_sup
-=proc_dictionary:<0.46.0>
-H3BDA50
-H3BDA5C
-H3BDAC8
-H3BDB28
-H3BDB9C
-H3BDC00
-H3BDADC
-H3BDB3C
-=proc_stack:<0.46.0>
-39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:httpd_manager
-y3:H39D5A4
-y4:A16:httpd__127_0_0_1__8888
-y5:P<0.43.0>
-39d910:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3BDAB0
-=proc_heap:<0.46.0>
-39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
-39D430:lH39BF40|H39D428
-39BF40:t2:A8:max_conn,I1
-39D428:lH39BC80|H39D420
-39BC80:t2:AF:last_heavy_load,A5:never
-39D420:lH39D414|N
-39D414:t2:AF:last_connection,H39D408
-39D408:t2:H39D3E8,H39D3F8
-39D3F8:t3:I11,I22,I34
-39D3E8:t3:I2004,I4,I21
-3BDAB0:lAA:gen_server|H3BDB20
-3BDB20:lP<0.43.0>|H3BDB94
-3BDB94:lP<0.43.0>|H3BDBF8
-3BDBF8:lH3BDC48|H3BDC54
-3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
-3BDC54:lAD:httpd_manager|H3BDCAC
-3BDCAC:lH3BDD14|H3BDD1C
-3BDD14:lA9:undefined|H3BDD9C
-3BDD9C:lH3BDA84|H3BDE2C
-3BDA84:lH3BDAF0|H3BDAFC
-3BDAF0:t2:AB:server_root,H3BDB48
-3BDB48:lI47|H3BDBB0
-3BDBB0:lI99|H3BDC0C
-3BDC0C:lI108|H3BDC64
-3BDC64:lI101|H3BDCBC
-3BDCBC:lI97|H3BDD2C
-3BDD2C:lI114|H3BDDA4
-3BDDA4:lI99|H3BDE34
-3BDE34:lI97|H3BDED4
-3BDED4:lI115|H3BDF90
-3BDF90:lI101|H3BE054
-3BE054:lI47|H3BE128
-3BE128:lI111|H3BE204
-3BE204:lI116|H3BE2EC
-3BE2EC:lI112|H3BE3E0
-3BE3E0:lI47|H3BE4E4
-3BE4E4:lI101|H3BE5E8
-3BE5E8:lI114|H3BE6EC
-3BE6EC:lI116|H3BE7E0
-3BE7E0:lI115|H3BE8CC
-3BE8CC:lI47|H3BE9B8
-3BE9B8:lI108|H3BEAAC
-3BEAAC:lI105|H3BEB98
-3BEB98:lI98|H3BEC84
-3BEC84:lI47|H3BED70
-3BED70:lI119|H3BEE5C
-3BEE5C:lI101|H3BEF30
-3BEF30:lI98|H3BEFFC
-3BEFFC:lI116|H3BF0C8
-3BF0C8:lI111|H3BF19C
-3BF19C:lI111|H3BF260
-3BF260:lI108|H3BF314
-3BF314:lI47|H3BF3C0
-3BF3C0:lI112|H3BF474
-3BF474:lI114|H3BF530
-3BF530:lI105|H3BF5F4
-3BF5F4:lI118|H3BF6C8
-3BF6C8:lI47|H3BF79C
-3BF79C:lI114|H3BF870
-3BF870:lI111|H3BF954
-3BF954:lI111|H3BFA30
-3BFA30:lI116|N
-3BDAFC:lH3BDB50|H3BDB5C
-3BDB50:t2:AD:document_root,H3BDBB8
-3BDBB8:lI47|H3BDC14
-3BDC14:lI99|H3BDC6C
-3BDC6C:lI108|H3BDCC4
-3BDCC4:lI101|H3BDD34
-3BDD34:lI97|H3BDDAC
-3BDDAC:lI114|H3BDE3C
-3BDE3C:lI99|H3BDEDC
-3BDEDC:lI97|H3BDF98
-3BDF98:lI115|H3BE05C
-3BE05C:lI101|H3BE130
-3BE130:lI47|H3BE20C
-3BE20C:lI111|H3BE2F4
-3BE2F4:lI116|H3BE3E8
-3BE3E8:lI112|H3BE4EC
-3BE4EC:lI47|H3BE5F0
-3BE5F0:lI101|H3BE6F4
-3BE6F4:lI114|H3BE7E8
-3BE7E8:lI116|H3BE8D4
-3BE8D4:lI115|H3BE9C0
-3BE9C0:lI47|H3BEAB4
-3BEAB4:lI108|H3BEBA0
-3BEBA0:lI105|H3BEC8C
-3BEC8C:lI98|H3BED78
-3BED78:lI47|H3BEE64
-3BEE64:lI119|H3BEF38
-3BEF38:lI101|H3BF004
-3BF004:lI98|H3BF0D0
-3BF0D0:lI116|H3BF1A4
-3BF1A4:lI111|H3BF268
-3BF268:lI111|H3BF31C
-3BF31C:lI108|H3BF3C8
-3BF3C8:lI47|H3BF47C
-3BF47C:lI112|H3BF538
-3BF538:lI114|H3BF5FC
-3BF5FC:lI105|H3BF6D0
-3BF6D0:lI118|H3BF7A4
-3BF7A4:lI47|H3BF878
-3BF878:lI114|H3BF95C
-3BF95C:lI111|H3BFA38
-3BFA38:lI111|H3BFB0C
-3BFB0C:lI116|H3BFBE8
-3BFBE8:lI47|H3BFCB4
-3BFCB4:lI100|H3BFD78
-3BFD78:lI111|H3BFE3C
-3BFE3C:lI99|N
-3BDB5C:lH3BDBC0|H3BDBCC
-3BDBC0:t2:AA:mime_types,H3BDC1C
-3BDC1C:lH3BDC74|H3BDC80
-3BDC74:t2:H3BDCCC,H3BDCD4
-3BDCD4:lI120|H3BDD44
-3BDD44:lI45|H3BDDBC
-3BDDBC:lI119|H3BDE44
-3BDE44:lI111|H3BDEE4
-3BDEE4:lI114|H3BDFA0
-3BDFA0:lI108|H3BE064
-3BE064:lI100|H3BE138
-3BE138:lI47|H3BE214
-3BE214:lI120|H3BE2FC
-3BE2FC:lI45|H3BE3F0
-3BE3F0:lI118|H3BE4F4
-3BE4F4:lI114|H3BE5F8
-3BE5F8:lI109|H3BE6FC
-3BE6FC:lI108|N
-3BDCCC:lI119|H3BDD3C
-3BDD3C:lI114|H3BDDB4
-3BDDB4:lI108|N
-3BDC80:lH3BDCDC|H3BDCE8
-3BDCDC:t2:H3BDD4C,H3BDD54
-3BDD54:lI120|H3BDDCC
-3BDDCC:lI45|H3BDE54
-3BDE54:lI119|H3BDEF4
-3BDEF4:lI111|H3BDFA8
-3BDFA8:lI114|H3BE06C
-3BE06C:lI108|H3BE140
-3BE140:lI100|H3BE21C
-3BE21C:lI47|H3BE304
-3BE304:lI120|H3BE3F8
-3BE3F8:lI45|H3BE4FC
-3BE4FC:lI118|H3BE600
-3BE600:lI114|H3BE704
-3BE704:lI109|H3BE7F0
-3BE7F0:lI108|N
-3BDD4C:lI118|H3BDDC4
-3BDDC4:lI114|H3BDE4C
-3BDE4C:lI109|H3BDEEC
-3BDEEC:lI108|N
-3BDCE8:lH3BDD5C|H3BDD68
-3BDD5C:t2:H3BDDD4,H3BDDDC
-3BDDDC:lI120|H3BDE64
-3BDE64:lI45|H3BDF04
-3BDF04:lI99|H3BDFB0
-3BDFB0:lI111|H3BE074
-3BE074:lI110|H3BE148
-3BE148:lI102|H3BE224
-3BE224:lI101|H3BE30C
-3BE30C:lI114|H3BE400
-3BE400:lI101|H3BE504
-3BE504:lI110|H3BE608
-3BE608:lI99|H3BE70C
-3BE70C:lI101|H3BE7F8
-3BE7F8:lI47|H3BE8DC
-3BE8DC:lI120|H3BE9C8
-3BE9C8:lI45|H3BEABC
-3BEABC:lI99|H3BEBA8
-3BEBA8:lI111|H3BEC94
-3BEC94:lI111|H3BED80
-3BED80:lI108|H3BEE6C
-3BEE6C:lI116|H3BEF40
-3BEF40:lI97|H3BF00C
-3BF00C:lI108|H3BF0D8
-3BF0D8:lI107|N
-3BDDD4:lI105|H3BDE5C
-3BDE5C:lI99|H3BDEFC
-3BDEFC:lI101|N
-3BDD68:lH3BDDE4|H3BDDF0
-3BDDE4:t2:H3BDE6C,H3BDE74
-3BDE74:lI118|H3BDF14
-3BDF14:lI105|H3BDFC0
-3BDFC0:lI100|H3BE084
-3BE084:lI101|H3BE158
-3BE158:lI111|H3BE22C
-3BE22C:lI47|H3BE314
-3BE314:lI120|H3BE408
-3BE408:lI45|H3BE50C
-3BE50C:lI115|H3BE610
-3BE610:lI103|H3BE714
-3BE714:lI105|H3BE800
-3BE800:lI45|H3BE8E4
-3BE8E4:lI109|H3BE9D0
-3BE9D0:lI111|H3BEAC4
-3BEAC4:lI118|H3BEBB0
-3BEBB0:lI105|H3BEC9C
-3BEC9C:lI101|N
-3BDE6C:lI109|H3BDF0C
-3BDF0C:lI111|H3BDFB8
-3BDFB8:lI118|H3BE07C
-3BE07C:lI105|H3BE150
-3BE150:lI101|N
-3BDDF0:lH3BDE7C|H3BDE88
-3BDE7C:t2:H3BDF1C,H3BDF24
-3BDF24:lI118|H3BDFD0
-3BDFD0:lI105|H3BE094
-3BE094:lI100|H3BE160
-3BE160:lI101|H3BE234
-3BE234:lI111|H3BE31C
-3BE31C:lI47|H3BE410
-3BE410:lI120|H3BE514
-3BE514:lI45|H3BE618
-3BE618:lI109|H3BE71C
-3BE71C:lI115|H3BE808
-3BE808:lI118|H3BE8EC
-3BE8EC:lI105|H3BE9D8
-3BE9D8:lI100|H3BEACC
-3BEACC:lI101|H3BEBB8
-3BEBB8:lI111|N
-3BDF1C:lI97|H3BDFC8
-3BDFC8:lI118|H3BE08C
-3BE08C:lI105|N
-3BDE88:lH3BDF2C|H3BDF38
-3BDF2C:t2:H3BDFD8,H3BDFE0
-3BDFE0:lI118|H3BE0A4
-3BE0A4:lI105|H3BE168
-3BE168:lI100|H3BE23C
-3BE23C:lI101|H3BE324
-3BE324:lI111|H3BE418
-3BE418:lI47|H3BE51C
-3BE51C:lI113|H3BE620
-3BE620:lI117|H3BE724
-3BE724:lI105|H3BE810
-3BE810:lI99|H3BE8F4
-3BE8F4:lI107|H3BE9E0
-3BE9E0:lI116|H3BEAD4
-3BEAD4:lI105|H3BEBC0
-3BEBC0:lI109|H3BECA4
-3BECA4:lI101|N
-3BDFD8:lI113|H3BE09C
-3BE09C:lI116|N
-3BDF38:lH3BDFE8|H3BDFF4
-3BDFE8:t2:H3BE0AC,H3BE0B4
-3BE0B4:lI118|H3BE178
-3BE178:lI105|H3BE24C
-3BE24C:lI100|H3BE32C
-3BE32C:lI101|H3BE420
-3BE420:lI111|H3BE524
-3BE524:lI47|H3BE628
-3BE628:lI113|H3BE72C
-3BE72C:lI117|H3BE818
-3BE818:lI105|H3BE8FC
-3BE8FC:lI99|H3BE9E8
-3BE9E8:lI107|H3BEADC
-3BEADC:lI116|H3BEBC8
-3BEBC8:lI105|H3BECAC
-3BECAC:lI109|H3BED88
-3BED88:lI101|N
-3BE0AC:lI109|H3BE170
-3BE170:lI111|H3BE244
-3BE244:lI118|N
-3BDFF4:lH3BE0BC|H3BE0C8
-3BE0BC:t2:H3BE180,H3BE188
-3BE188:lI118|H3BE25C
-3BE25C:lI105|H3BE33C
-3BE33C:lI100|H3BE430
-3BE430:lI101|H3BE52C
-3BE52C:lI111|H3BE630
-3BE630:lI47|H3BE734
-3BE734:lI109|H3BE820
-3BE820:lI112|H3BE904
-3BE904:lI101|H3BE9F0
-3BE9F0:lI103|N
-3BE180:lI109|H3BE254
-3BE254:lI112|H3BE334
-3BE334:lI101|H3BE428
-3BE428:lI103|N
-3BE0C8:lH3BE190|H3BE19C
-3BE190:t2:H3BE264,H3BE26C
-3BE26C:lI118|H3BE34C
-3BE34C:lI105|H3BE440
-3BE440:lI100|H3BE534
-3BE534:lI101|H3BE638
-3BE638:lI111|H3BE73C
-3BE73C:lI47|H3BE828
-3BE828:lI109|H3BE90C
-3BE90C:lI112|H3BE9F8
-3BE9F8:lI101|H3BEAE4
-3BEAE4:lI103|N
-3BE264:lI109|H3BE344
-3BE344:lI112|H3BE438
-3BE438:lI103|N
-3BE19C:lH3BE274|H3BE280
-3BE274:t2:H3BE354,H3BE35C
-3BE35C:lI118|H3BE450
-3BE450:lI105|H3BE544
-3BE544:lI100|H3BE640
-3BE640:lI101|H3BE744
-3BE744:lI111|H3BE830
-3BE830:lI47|H3BE914
-3BE914:lI109|H3BEA00
-3BEA00:lI112|H3BEAEC
-3BEAEC:lI101|H3BEBD0
-3BEBD0:lI103|N
-3BE354:lI109|H3BE448
-3BE448:lI112|H3BE53C
-3BE53C:lI101|N
-3BE280:lH3BE364|H3BE370
-3BE364:t2:H3BE458,H3BE460
-3BE460:lI116|H3BE554
-3BE554:lI101|H3BE650
-3BE650:lI120|H3BE754
-3BE754:lI116|H3BE838
-3BE838:lI47|H3BE91C
-3BE91C:lI120|H3BEA08
-3BEA08:lI45|H3BEAF4
-3BEAF4:lI115|H3BEBD8
-3BEBD8:lI103|H3BECB4
-3BECB4:lI109|H3BED90
-3BED90:lI108|N
-3BE458:lI115|H3BE54C
-3BE54C:lI103|H3BE648
-3BE648:lI109|H3BE74C
-3BE74C:lI108|N
-3BE370:lH3BE468|H3BE474
-3BE468:t2:H3BE55C,H3BE564
-3BE564:lI116|H3BE660
-3BE660:lI101|H3BE764
-3BE764:lI120|H3BE840
-3BE840:lI116|H3BE924
-3BE924:lI47|H3BEA10
-3BEA10:lI120|H3BEAFC
-3BEAFC:lI45|H3BEBE0
-3BEBE0:lI115|H3BECBC
-3BECBC:lI103|H3BED98
-3BED98:lI109|H3BEE74
-3BEE74:lI108|N
-3BE55C:lI115|H3BE658
-3BE658:lI103|H3BE75C
-3BE75C:lI109|N
-3BE474:lH3BE56C|H3BE578
-3BE56C:t2:H3BE668,H3BE670
-3BE670:lI116|H3BE774
-3BE774:lI101|H3BE850
-3BE850:lI120|H3BE92C
-3BE92C:lI116|H3BEA18
-3BEA18:lI47|H3BEB04
-3BEB04:lI120|H3BEBE8
-3BEBE8:lI45|H3BECC4
-3BECC4:lI115|H3BEDA0
-3BEDA0:lI101|H3BEE7C
-3BEE7C:lI116|H3BEF48
-3BEF48:lI101|H3BF014
-3BF014:lI120|H3BF0E0
-3BF0E0:lI116|N
-3BE668:lI101|H3BE76C
-3BE76C:lI116|H3BE848
-3BE848:lI120|N
-3BE578:lH3BE678|H3BE684
-3BE678:t2:H3BE77C,H3BE784
-3BE784:lI116|H3BE860
-3BE860:lI101|H3BE93C
-3BE93C:lI120|H3BEA20
-3BEA20:lI116|H3BEB0C
-3BEB0C:lI47|H3BEBF0
-3BEBF0:lI116|H3BECCC
-3BECCC:lI97|H3BEDA8
-3BEDA8:lI98|H3BEE84
-3BEE84:lI45|H3BEF50
-3BEF50:lI115|H3BF01C
-3BF01C:lI101|H3BF0E8
-3BF0E8:lI112|H3BF1AC
-3BF1AC:lI97|H3BF270
-3BF270:lI114|H3BF324
-3BF324:lI97|H3BF3D0
-3BF3D0:lI116|H3BF484
-3BF484:lI101|H3BF540
-3BF540:lI100|H3BF604
-3BF604:lI45|H3BF6D8
-3BF6D8:lI118|H3BF7AC
-3BF7AC:lI97|H3BF880
-3BF880:lI108|H3BF964
-3BF964:lI117|H3BFA40
-3BFA40:lI101|H3BFB14
-3BFB14:lI115|N
-3BE77C:lI116|H3BE858
-3BE858:lI115|H3BE934
-3BE934:lI118|N
-3BE684:lH3BE78C|H3BE798
-3BE78C:t2:H3BE868,H3BE870
-3BE870:lI116|H3BE94C
-3BE94C:lI101|H3BEA30
-3BEA30:lI120|H3BEB14
-3BEB14:lI116|H3BEBF8
-3BEBF8:lI47|H3BECD4
-3BECD4:lI114|H3BEDB0
-3BEDB0:lI105|H3BEE8C
-3BEE8C:lI99|H3BEF58
-3BEF58:lI104|H3BF024
-3BF024:lI116|H3BF0F0
-3BF0F0:lI101|H3BF1B4
-3BF1B4:lI120|H3BF278
-3BF278:lI116|N
-3BE868:lI114|H3BE944
-3BE944:lI116|H3BEA28
-3BEA28:lI120|N
-3BE798:lH3BE878|H3BE884
-3BE878:t2:H3BE954,H3BE95C
-3BE95C:lI116|H3BEA40
-3BEA40:lI101|H3BEB24
-3BEB24:lI120|H3BEC00
-3BEC00:lI116|H3BECDC
-3BECDC:lI47|H3BEDB8
-3BEDB8:lI112|H3BEE94
-3BEE94:lI108|H3BEF60
-3BEF60:lI97|H3BF02C
-3BF02C:lI105|H3BF0F8
-3BF0F8:lI110|N
-3BE954:lI116|H3BEA38
-3BEA38:lI120|H3BEB1C
-3BEB1C:lI116|N
-3BE884:lH3BE964|H3BE970
-3BE964:t2:H3BEA48,H3BEA50
-3BEA50:lI116|H3BEB34
-3BEB34:lI101|H3BEC10
-3BEC10:lI120|H3BECEC
-3BECEC:lI116|H3BEDC8
-3BEDC8:lI47|H3BEE9C
-3BEE9C:lI120|H3BEF68
-3BEF68:lI45|H3BF034
-3BF034:lI115|H3BF100
-3BF100:lI101|H3BF1BC
-3BF1BC:lI114|H3BF280
-3BF280:lI118|H3BF32C
-3BF32C:lI101|H3BF3D8
-3BF3D8:lI114|H3BF48C
-3BF48C:lI45|H3BF548
-3BF548:lI112|H3BF60C
-3BF60C:lI97|H3BF6E0
-3BF6E0:lI114|H3BF7B4
-3BF7B4:lI115|H3BF888
-3BF888:lI101|H3BF96C
-3BF96C:lI100|H3BFA48
-3BFA48:lI45|H3BFB1C
-3BFB1C:lI104|H3BFBF0
-3BFBF0:lI116|H3BFCBC
-3BFCBC:lI109|H3BFD80
-3BFD80:lI108|N
-3BEA48:lI115|H3BEB2C
-3BEB2C:lI104|H3BEC08
-3BEC08:lI116|H3BECE4
-3BECE4:lI109|H3BEDC0
-3BEDC0:lI108|N
-3BE970:lH3BEA58|H3BEA64
-3BEA58:t2:H3BEB3C,H3BEB44
-3BEB44:lI116|H3BEC20
-3BEC20:lI101|H3BECFC
-3BECFC:lI120|H3BEDD8
-3BEDD8:lI116|H3BEEA4
-3BEEA4:lI47|H3BEF70
-3BEF70:lI104|H3BF03C
-3BF03C:lI116|H3BF108
-3BF108:lI109|H3BF1C4
-3BF1C4:lI108|N
-3BEB3C:lI104|H3BEC18
-3BEC18:lI116|H3BECF4
-3BECF4:lI109|H3BEDD0
-3BEDD0:lI108|N
-3BEA64:lH3BEB4C|H3BEB58
-3BEB4C:t2:H3BEC28,H3BEC30
-3BEC30:lI116|H3BED0C
-3BED0C:lI101|H3BEDE8
-3BEDE8:lI120|H3BEEAC
-3BEEAC:lI116|H3BEF78
-3BEF78:lI47|H3BF044
-3BF044:lI104|H3BF110
-3BF110:lI116|H3BF1CC
-3BF1CC:lI109|H3BF288
-3BF288:lI108|N
-3BEC28:lI104|H3BED04
-3BED04:lI116|H3BEDE0
-3BEDE0:lI109|N
-3BEB58:lH3BEC38|H3BEC44
-3BEC38:t2:H3BED14,H3BED1C
-3BED1C:lI105|H3BEDF8
-3BEDF8:lI109|H3BEEBC
-3BEEBC:lI97|H3BEF80
-3BEF80:lI103|H3BF04C
-3BF04C:lI101|H3BF118
-3BF118:lI47|H3BF1D4
-3BF1D4:lI120|H3BF290
-3BF290:lI45|H3BF334
-3BF334:lI120|H3BF3E0
-3BF3E0:lI119|H3BF494
-3BF494:lI105|H3BF550
-3BF550:lI110|H3BF614
-3BF614:lI100|H3BF6E8
-3BF6E8:lI111|H3BF7BC
-3BF7BC:lI119|H3BF890
-3BF890:lI100|H3BF974
-3BF974:lI117|H3BFA50
-3BFA50:lI109|H3BFB24
-3BFB24:lI112|N
-3BED14:lI120|H3BEDF0
-3BEDF0:lI119|H3BEEB4
-3BEEB4:lI100|N
-3BEC44:lH3BED24|H3BED30
-3BED24:t2:H3BEE00,H3BEE08
-3BEE08:lI105|H3BEECC
-3BEECC:lI109|H3BEF90
-3BEF90:lI97|H3BF054
-3BF054:lI103|H3BF120
-3BF120:lI101|H3BF1DC
-3BF1DC:lI47|H3BF298
-3BF298:lI120|H3BF33C
-3BF33C:lI45|H3BF3E8
-3BF3E8:lI120|H3BF49C
-3BF49C:lI112|H3BF558
-3BF558:lI105|H3BF61C
-3BF61C:lI120|H3BF6F0
-3BF6F0:lI109|H3BF7C4
-3BF7C4:lI97|H3BF898
-3BF898:lI112|N
-3BEE00:lI120|H3BEEC4
-3BEEC4:lI112|H3BEF88
-3BEF88:lI109|N
-3BED30:lH3BEE10|H3BEE1C
-3BEE10:t2:H3BEED4,H3BEEDC
-3BEEDC:lI105|H3BEFA0
-3BEFA0:lI109|H3BF064
-3BF064:lI97|H3BF128
-3BF128:lI103|H3BF1E4
-3BF1E4:lI101|H3BF2A0
-3BF2A0:lI47|H3BF344
-3BF344:lI120|H3BF3F0
-3BF3F0:lI45|H3BF4A4
-3BF4A4:lI120|H3BF560
-3BF560:lI98|H3BF624
-3BF624:lI105|H3BF6F8
-3BF6F8:lI116|H3BF7CC
-3BF7CC:lI109|H3BF8A0
-3BF8A0:lI97|H3BF97C
-3BF97C:lI112|N
-3BEED4:lI120|H3BEF98
-3BEF98:lI98|H3BF05C
-3BF05C:lI109|N
-3BEE1C:lH3BEEE4|H3BEEF0
-3BEEE4:t2:H3BEFA8,H3BEFB0
-3BEFB0:lI105|H3BF074
-3BF074:lI109|H3BF138
-3BF138:lI97|H3BF1EC
-3BF1EC:lI103|H3BF2A8
-3BF2A8:lI101|H3BF34C
-3BF34C:lI47|H3BF3F8
-3BF3F8:lI120|H3BF4AC
-3BF4AC:lI45|H3BF568
-3BF568:lI114|H3BF62C
-3BF62C:lI103|H3BF700
-3BF700:lI98|N
-3BEFA8:lI114|H3BF06C
-3BF06C:lI103|H3BF130
-3BF130:lI98|N
-3BEEF0:lH3BEFB8|H3BEFC4
-3BEFB8:t2:H3BF07C,H3BF084
-3BF084:lI105|H3BF148
-3BF148:lI109|H3BF1FC
-3BF1FC:lI97|H3BF2B0
-3BF2B0:lI103|H3BF354
-3BF354:lI101|H3BF400
-3BF400:lI47|H3BF4B4
-3BF4B4:lI120|H3BF570
-3BF570:lI45|H3BF634
-3BF634:lI112|H3BF708
-3BF708:lI111|H3BF7D4
-3BF7D4:lI114|H3BF8A8
-3BF8A8:lI116|H3BF984
-3BF984:lI97|H3BFA58
-3BFA58:lI98|H3BFB2C
-3BFB2C:lI108|H3BFBF8
-3BFBF8:lI101|H3BFCC4
-3BFCC4:lI45|H3BFD88
-3BFD88:lI112|H3BFE44
-3BFE44:lI105|H3BFEF0
-3BFEF0:lI120|H3BFFA4
-3BFFA4:lI109|H3C0050
-3C0050:lI97|H3C00FC
-3C00FC:lI112|N
-3BF07C:lI112|H3BF140
-3BF140:lI112|H3BF1F4
-3BF1F4:lI109|N
-3BEFC4:lH3BF08C|H3BF098
-3BF08C:t2:H3BF150,H3BF158
-3BF158:lI105|H3BF20C
-3BF20C:lI109|H3BF2C0
-3BF2C0:lI97|H3BF35C
-3BF35C:lI103|H3BF408
-3BF408:lI101|H3BF4BC
-3BF4BC:lI47|H3BF578
-3BF578:lI120|H3BF63C
-3BF63C:lI45|H3BF710
-3BF710:lI112|H3BF7DC
-3BF7DC:lI111|H3BF8B0
-3BF8B0:lI114|H3BF98C
-3BF98C:lI116|H3BFA60
-3BFA60:lI97|H3BFB34
-3BFB34:lI98|H3BFC00
-3BFC00:lI108|H3BFCCC
-3BFCCC:lI101|H3BFD90
-3BFD90:lI45|H3BFE4C
-3BFE4C:lI103|H3BFEF8
-3BFEF8:lI114|H3BFFAC
-3BFFAC:lI97|H3C0058
-3C0058:lI121|H3C0104
-3C0104:lI109|H3C01A8
-3C01A8:lI97|H3C025C
-3C025C:lI112|N
-3BF150:lI112|H3BF204
-3BF204:lI103|H3BF2B8
-3BF2B8:lI109|N
-3BF098:lH3BF160|H3BF16C
-3BF160:t2:H3BF214,H3BF21C
-3BF21C:lI105|H3BF2D0
-3BF2D0:lI109|H3BF36C
-3BF36C:lI97|H3BF410
-3BF410:lI103|H3BF4C4
-3BF4C4:lI101|H3BF580
-3BF580:lI47|H3BF644
-3BF644:lI120|H3BF718
-3BF718:lI45|H3BF7E4
-3BF7E4:lI112|H3BF8B8
-3BF8B8:lI111|H3BF994
-3BF994:lI114|H3BFA68
-3BFA68:lI116|H3BFB3C
-3BFB3C:lI97|H3BFC08
-3BFC08:lI98|H3BFCD4
-3BFCD4:lI108|H3BFD98
-3BFD98:lI101|H3BFE54
-3BFE54:lI45|H3BFF00
-3BFF00:lI98|H3BFFB4
-3BFFB4:lI105|H3C0060
-3C0060:lI116|H3C010C
-3C010C:lI109|H3C01B0
-3C01B0:lI97|H3C0264
-3C0264:lI112|N
-3BF214:lI112|H3BF2C8
-3BF2C8:lI98|H3BF364
-3BF364:lI109|N
-3BF16C:lH3BF224|H3BF230
-3BF224:t2:H3BF2D8,H3BF2E0
-3BF2E0:lI105|H3BF37C
-3BF37C:lI109|H3BF420
-3BF420:lI97|H3BF4CC
-3BF4CC:lI103|H3BF588
-3BF588:lI101|H3BF64C
-3BF64C:lI47|H3BF720
-3BF720:lI120|H3BF7EC
-3BF7EC:lI45|H3BF8C0
-3BF8C0:lI112|H3BF99C
-3BF99C:lI111|H3BFA70
-3BFA70:lI114|H3BFB44
-3BFB44:lI116|H3BFC10
-3BFC10:lI97|H3BFCDC
-3BFCDC:lI98|H3BFDA0
-3BFDA0:lI108|H3BFE5C
-3BFE5C:lI101|H3BFF08
-3BFF08:lI45|H3BFFBC
-3BFFBC:lI97|H3C0068
-3C0068:lI110|H3C0114
-3C0114:lI121|H3C01B8
-3C01B8:lI109|H3C026C
-3C026C:lI97|H3C0318
-3C0318:lI112|N
-3BF2D8:lI112|H3BF374
-3BF374:lI110|H3BF418
-3BF418:lI109|N
-3BF230:lH3BF2E8|H3BF2F4
-3BF2E8:t2:H3BF384,H3BF38C
-3BF38C:lI105|H3BF430
-3BF430:lI109|H3BF4DC
-3BF4DC:lI97|H3BF590
-3BF590:lI103|H3BF654
-3BF654:lI101|H3BF728
-3BF728:lI47|H3BF7F4
-3BF7F4:lI120|H3BF8C8
-3BF8C8:lI45|H3BF9A4
-3BF9A4:lI99|H3BFA78
-3BFA78:lI109|H3BFB4C
-3BFB4C:lI117|H3BFC18
-3BFC18:lI45|H3BFCE4
-3BFCE4:lI114|H3BFDA8
-3BFDA8:lI97|H3BFE64
-3BFE64:lI115|H3BFF10
-3BFF10:lI116|H3BFFC4
-3BFFC4:lI101|H3C0070
-3C0070:lI114|N
-3BF384:lI114|H3BF428
-3BF428:lI97|H3BF4D4
-3BF4D4:lI115|N
-3BF2F4:lH3BF394|H3BF3A0
-3BF394:t2:H3BF438,H3BF440
-3BF440:lI105|H3BF4EC
-3BF4EC:lI109|H3BF5A0
-3BF5A0:lI97|H3BF664
-3BF664:lI103|H3BF730
-3BF730:lI101|H3BF7FC
-3BF7FC:lI47|H3BF8D0
-3BF8D0:lI116|H3BF9AC
-3BF9AC:lI105|H3BFA80
-3BFA80:lI102|H3BFB54
-3BFB54:lI102|N
-3BF438:lI116|H3BF4E4
-3BF4E4:lI105|H3BF598
-3BF598:lI102|H3BF65C
-3BF65C:lI102|N
-3BF3A0:lH3BF448|H3BF454
-3BF448:t2:H3BF4F4,H3BF4FC
-3BF4FC:lI105|H3BF5B0
-3BF5B0:lI109|H3BF674
-3BF674:lI97|H3BF738
-3BF738:lI103|H3BF804
-3BF804:lI101|H3BF8D8
-3BF8D8:lI47|H3BF9B4
-3BF9B4:lI116|H3BFA88
-3BFA88:lI105|H3BFB5C
-3BFB5C:lI102|H3BFC20
-3BFC20:lI102|N
-3BF4F4:lI116|H3BF5A8
-3BF5A8:lI105|H3BF66C
-3BF66C:lI102|N
-3BF454:lH3BF504|H3BF510
-3BF504:t2:H3BF5B8,H3BF5C0
-3BF5C0:lI105|H3BF684
-3BF684:lI109|H3BF748
-3BF748:lI97|H3BF80C
-3BF80C:lI103|H3BF8E0
-3BF8E0:lI101|H3BF9BC
-3BF9BC:lI47|H3BFA90
-3BFA90:lI112|H3BFB64
-3BFB64:lI110|H3BFC28
-3BFC28:lI103|N
-3BF5B8:lI112|H3BF67C
-3BF67C:lI110|H3BF740
-3BF740:lI103|N
-3BF510:lH3BF5C8|H3BF5D4
-3BF5C8:t2:H3BF68C,H3BF694
-3BF694:lI105|H3BF758
-3BF758:lI109|H3BF81C
-3BF81C:lI97|H3BF8F0
-3BF8F0:lI103|H3BF9C4
-3BF9C4:lI101|H3BFA98
-3BFA98:lI47|H3BFB6C
-3BFB6C:lI106|H3BFC30
-3BFC30:lI112|H3BFCEC
-3BFCEC:lI101|H3BFDB0
-3BFDB0:lI103|N
-3BF68C:lI106|H3BF750
-3BF750:lI112|H3BF814
-3BF814:lI101|H3BF8E8
-3BF8E8:lI103|N
-3BF5D4:lH3BF69C|H3BF6A8
-3BF69C:t2:H3BF760,H3BF768
-3BF768:lI105|H3BF82C
-3BF82C:lI109|H3BF900
-3BF900:lI97|H3BF9CC
-3BF9CC:lI103|H3BFAA0
-3BFAA0:lI101|H3BFB74
-3BFB74:lI47|H3BFC38
-3BFC38:lI106|H3BFCF4
-3BFCF4:lI112|H3BFDB8
-3BFDB8:lI101|H3BFE6C
-3BFE6C:lI103|N
-3BF760:lI106|H3BF824
-3BF824:lI112|H3BF8F8
-3BF8F8:lI103|N
-3BF6A8:lH3BF770|H3BF77C
-3BF770:t2:H3BF834,H3BF83C
-3BF83C:lI105|H3BF910
-3BF910:lI109|H3BF9DC
-3BF9DC:lI97|H3BFAA8
-3BFAA8:lI103|H3BFB7C
-3BFB7C:lI101|H3BFC40
-3BFC40:lI47|H3BFCFC
-3BFCFC:lI106|H3BFDC0
-3BFDC0:lI112|H3BFE74
-3BFE74:lI101|H3BFF18
-3BFF18:lI103|N
-3BF834:lI106|H3BF908
-3BF908:lI112|H3BF9D4
-3BF9D4:lI101|N
-3BF77C:lH3BF844|H3BF850
-3BF844:t2:H3BF918,H3BF920
-3BF920:lI105|H3BF9EC
-3BF9EC:lI109|H3BFAB8
-3BFAB8:lI97|H3BFB84
-3BFB84:lI103|H3BFC48
-3BFC48:lI101|H3BFD04
-3BFD04:lI47|H3BFDC8
-3BFDC8:lI105|H3BFE7C
-3BFE7C:lI101|H3BFF20
-3BFF20:lI102|N
-3BF918:lI105|H3BF9E4
-3BF9E4:lI101|H3BFAB0
-3BFAB0:lI102|N
-3BF850:lH3BF928|H3BF934
-3BF928:t2:H3BF9F4,H3BF9FC
-3BF9FC:lI105|H3BFAC8
-3BFAC8:lI109|H3BFB94
-3BFB94:lI97|H3BFC50
-3BFC50:lI103|H3BFD0C
-3BFD0C:lI101|H3BFDD0
-3BFDD0:lI47|H3BFE84
-3BFE84:lI103|H3BFF28
-3BFF28:lI105|H3BFFCC
-3BFFCC:lI102|N
-3BF9F4:lI103|H3BFAC0
-3BFAC0:lI105|H3BFB8C
-3BFB8C:lI102|N
-3BF934:lH3BFA04|H3BFA10
-3BFA04:t2:H3BFAD0,H3BFAD8
-3BFAD8:lI99|H3BFBA4
-3BFBA4:lI104|H3BFC60
-3BFC60:lI101|H3BFD14
-3BFD14:lI109|H3BFDD8
-3BFDD8:lI105|H3BFE8C
-3BFE8C:lI99|H3BFF30
-3BFF30:lI97|H3BFFD4
-3BFFD4:lI108|H3C0078
-3C0078:lI47|H3C011C
-3C011C:lI120|H3C01C0
-3C01C0:lI45|H3C0274
-3C0274:lI112|H3C0320
-3C0320:lI100|H3C03CC
-3C03CC:lI98|N
-3BFAD0:lI112|H3BFB9C
-3BFB9C:lI100|H3BFC58
-3BFC58:lI98|N
-3BFA10:lH3BFAE0|H3BFAEC
-3BFAE0:t2:H3BFBAC,H3BFBB4
-3BFBB4:lI99|H3BFC70
-3BFC70:lI104|H3BFD24
-3BFD24:lI101|H3BFDE0
-3BFDE0:lI109|H3BFE94
-3BFE94:lI105|H3BFF38
-3BFF38:lI99|H3BFFDC
-3BFFDC:lI97|H3C0080
-3C0080:lI108|H3C0124
-3C0124:lI47|H3C01C8
-3C01C8:lI120|H3C027C
-3C027C:lI45|H3C0328
-3C0328:lI112|H3C03D4
-3C03D4:lI100|H3C0460
-3C0460:lI98|N
-3BFBAC:lI120|H3BFC68
-3BFC68:lI121|H3BFD1C
-3BFD1C:lI122|N
-3BFAEC:lH3BFBBC|H3BFBC8
-3BFBBC:t2:H3BFC78,H3BFC80
-3BFC80:lI97|H3BFD34
-3BFD34:lI117|H3BFDF0
-3BFDF0:lI100|H3BFE9C
-3BFE9C:lI105|H3BFF40
-3BFF40:lI111|H3BFFE4
-3BFFE4:lI47|H3C0088
-3C0088:lI120|H3C012C
-3C012C:lI45|H3C01D0
-3C01D0:lI119|H3C0284
-3C0284:lI97|H3C0330
-3C0330:lI118|N
-3BFC78:lI119|H3BFD2C
-3BFD2C:lI97|H3BFDE8
-3BFDE8:lI118|N
-3BFBC8:lH3BFC88|H3BFC94
-3BFC88:t2:H3BFD3C,H3BFD44
-3BFD44:lI97|H3BFE00
-3BFE00:lI117|H3BFEA4
-3BFEA4:lI100|H3BFF48
-3BFF48:lI105|H3BFFEC
-3BFFEC:lI111|H3C0090
-3C0090:lI47|H3C0134
-3C0134:lI120|H3C01D8
-3C01D8:lI45|H3C028C
-3C028C:lI114|H3C0338
-3C0338:lI101|H3C03DC
-3C03DC:lI97|H3C0468
-3C0468:lI108|H3C04FC
-3C04FC:lI97|H3C0598
-3C0598:lI117|H3C063C
-3C063C:lI100|H3C06E8
-3C06E8:lI105|H3C0794
-3C0794:lI111|N
-3BFD3C:lI114|H3BFDF8
-3BFDF8:lI97|N
-3BFC94:lH3BFD4C|H3BFD58
-3BFD4C:t2:H3BFE08,H3BFE10
-3BFE10:lI97|H3BFEB4
-3BFEB4:lI117|H3BFF58
-3BFF58:lI100|H3BFFF4
-3BFFF4:lI105|H3C0098
-3C0098:lI111|H3C013C
-3C013C:lI47|H3C01E0
-3C01E0:lI120|H3C0294
-3C0294:lI45|H3C0340
-3C0340:lI112|H3C03E4
-3C03E4:lI110|H3C0470
-3C0470:lI45|H3C0504
-3C0504:lI114|H3C05A0
-3C05A0:lI101|H3C0644
-3C0644:lI97|H3C06F0
-3C06F0:lI108|H3C079C
-3C079C:lI97|H3C0838
-3C0838:lI117|H3C08C4
-3C08C4:lI100|H3C0958
-3C0958:lI105|H3C09EC
-3C09EC:lI111|H3C0A88
-3C0A88:lI45|H3C0B2C
-3C0B2C:lI112|H3C0BD0
-3C0BD0:lI108|H3C0C84
-3C0C84:lI117|H3C0D38
-3C0D38:lI103|H3C0DEC
-3C0DEC:lI105|H3C0EA0
-3C0EA0:lI110|N
-3BFE08:lI114|H3BFEAC
-3BFEAC:lI112|H3BFF50
-3BFF50:lI109|N
-3BFD58:lH3BFE18|H3BFE24
-3BFE18:t2:H3BFEBC,H3BFEC4
-3BFEC4:lI97|H3BFF68
-3BFF68:lI117|H3C0004
-3C0004:lI100|H3C00A0
-3C00A0:lI105|H3C0144
-3C0144:lI111|H3C01E8
-3C01E8:lI47|H3C029C
-3C029C:lI120|H3C0348
-3C0348:lI45|H3C03EC
-3C03EC:lI112|H3C0478
-3C0478:lI110|H3C050C
-3C050C:lI45|H3C05A8
-3C05A8:lI114|H3C064C
-3C064C:lI101|H3C06F8
-3C06F8:lI97|H3C07A4
-3C07A4:lI108|H3C0840
-3C0840:lI97|H3C08CC
-3C08CC:lI117|H3C0960
-3C0960:lI100|H3C09F4
-3C09F4:lI105|H3C0A90
-3C0A90:lI111|N
-3BFEBC:lI114|H3BFF60
-3BFF60:lI97|H3BFFFC
-3BFFFC:lI109|N
-3BFE24:lH3BFECC|H3BFED8
-3BFECC:t2:H3BFF70,H3BFF78
-3BFF78:lI97|H3C0014
-3C0014:lI117|H3C00B0
-3C00B0:lI100|H3C014C
-3C014C:lI105|H3C01F0
-3C01F0:lI111|H3C02A4
-3C02A4:lI47|H3C0350
-3C0350:lI120|H3C03F4
-3C03F4:lI45|H3C0480
-3C0480:lI97|H3C0514
-3C0514:lI105|H3C05B0
-3C05B0:lI102|H3C0654
-3C0654:lI102|N
-3BFF70:lI97|H3C000C
-3C000C:lI105|H3C00A8
-3C00A8:lI102|N
-3BFED8:lH3BFF80|H3BFF8C
-3BFF80:t2:H3C001C,H3C0024
-3C0024:lI97|H3C00C0
-3C00C0:lI117|H3C015C
-3C015C:lI100|H3C0200
-3C0200:lI105|H3C02AC
-3C02AC:lI111|H3C0358
-3C0358:lI47|H3C03FC
-3C03FC:lI120|H3C0488
-3C0488:lI45|H3C051C
-3C051C:lI97|H3C05B8
-3C05B8:lI105|H3C065C
-3C065C:lI102|H3C0700
-3C0700:lI102|N
-3C001C:lI97|H3C00B8
-3C00B8:lI105|H3C0154
-3C0154:lI102|H3C01F8
-3C01F8:lI102|N
-3BFF8C:lH3C002C|H3C0038
-3C002C:t2:H3C00C8,H3C00D0
-3C00D0:lI97|H3C016C
-3C016C:lI117|H3C0210
-3C0210:lI100|H3C02BC
-3C02BC:lI105|H3C0360
-3C0360:lI111|H3C0404
-3C0404:lI47|H3C0490
-3C0490:lI120|H3C0524
-3C0524:lI45|H3C05C0
-3C05C0:lI97|H3C0664
-3C0664:lI105|H3C0708
-3C0708:lI102|H3C07AC
-3C07AC:lI102|N
-3C00C8:lI97|H3C0164
-3C0164:lI105|H3C0208
-3C0208:lI102|H3C02B4
-3C02B4:lI99|N
-3C0038:lH3C00D8|H3C00E4
-3C00D8:t2:H3C0174,H3C017C
-3C017C:lI97|H3C0220
-3C0220:lI117|H3C02CC
-3C02CC:lI100|H3C0370
-3C0370:lI105|H3C040C
-3C040C:lI111|H3C0498
-3C0498:lI47|H3C052C
-3C052C:lI109|H3C05C8
-3C05C8:lI112|H3C066C
-3C066C:lI101|H3C0710
-3C0710:lI103|N
-3C0174:lI109|H3C0218
-3C0218:lI112|H3C02C4
-3C02C4:lI103|H3C0368
-3C0368:lI97|N
-3C00E4:lH3C0184|H3C0190
-3C0184:t2:H3C0228,H3C0230
-3C0230:lI97|H3C02DC
-3C02DC:lI117|H3C0380
-3C0380:lI100|H3C0414
-3C0414:lI105|H3C04A0
-3C04A0:lI111|H3C0534
-3C0534:lI47|H3C05D0
-3C05D0:lI109|H3C0674
-3C0674:lI112|H3C0718
-3C0718:lI101|H3C07B4
-3C07B4:lI103|N
-3C0228:lI109|H3C02D4
-3C02D4:lI112|H3C0378
-3C0378:lI50|N
-3C0190:lH3C0238|H3C0244
-3C0238:t2:H3C02E4,H3C02EC
-3C02EC:lI97|H3C0390
-3C0390:lI117|H3C041C
-3C041C:lI100|H3C04A8
-3C04A8:lI105|H3C053C
-3C053C:lI111|H3C05D8
-3C05D8:lI47|H3C067C
-3C067C:lI98|H3C0720
-3C0720:lI97|H3C07BC
-3C07BC:lI115|H3C0848
-3C0848:lI105|H3C08D4
-3C08D4:lI99|N
-3C02E4:lI97|H3C0388
-3C0388:lI117|N
-3C0244:lH3C02F4|H3C0300
-3C02F4:t2:H3C0398,H3C03A0
-3C03A0:lI97|H3C042C
-3C042C:lI117|H3C04B8
-3C04B8:lI100|H3C0544
-3C0544:lI105|H3C05E0
-3C05E0:lI111|H3C0684
-3C0684:lI47|H3C0728
-3C0728:lI98|H3C07C4
-3C07C4:lI97|H3C0850
-3C0850:lI115|H3C08DC
-3C08DC:lI105|H3C0968
-3C0968:lI99|N
-3C0398:lI115|H3C0424
-3C0424:lI110|H3C04B0
-3C04B0:lI100|N
-3C0300:lH3C03A8|H3C03B4
-3C03A8:t2:H3C0434,H3C043C
-3C043C:lI97|H3C04C8
-3C04C8:lI112|H3C0554
-3C0554:lI112|H3C05E8
-3C05E8:lI108|H3C068C
-3C068C:lI105|H3C0730
-3C0730:lI99|H3C07CC
-3C07CC:lI97|H3C0858
-3C0858:lI116|H3C08E4
-3C08E4:lI105|H3C0970
-3C0970:lI111|H3C09FC
-3C09FC:lI110|H3C0A98
-3C0A98:lI47|H3C0B34
-3C0B34:lI122|H3C0BD8
-3C0BD8:lI105|H3C0C8C
-3C0C8C:lI112|N
-3C0434:lI122|H3C04C0
-3C04C0:lI105|H3C054C
-3C054C:lI112|N
-3C03B4:lH3C0444|H3C0450
-3C0444:t2:H3C04D0,H3C04D8
-3C04D8:lI97|H3C0564
-3C0564:lI112|H3C05F8
-3C05F8:lI112|H3C0694
-3C0694:lI108|H3C0738
-3C0738:lI105|H3C07D4
-3C07D4:lI99|H3C0860
-3C0860:lI97|H3C08EC
-3C08EC:lI116|H3C0978
-3C0978:lI105|H3C0A04
-3C0A04:lI111|H3C0AA0
-3C0AA0:lI110|H3C0B3C
-3C0B3C:lI47|H3C0BE0
-3C0BE0:lI120|H3C0C94
-3C0C94:lI45|H3C0D40
-3C0D40:lI119|H3C0DF4
-3C0DF4:lI97|H3C0EA8
-3C0EA8:lI105|H3C0F64
-3C0F64:lI115|H3C1030
-3C1030:lI45|H3C1104
-3C1104:lI115|H3C11D8
-3C11D8:lI111|H3C12A4
-3C12A4:lI117|H3C1378
-3C1378:lI114|H3C1454
-3C1454:lI99|H3C1538
-3C1538:lI101|N
-3C04D0:lI115|H3C055C
-3C055C:lI114|H3C05F0
-3C05F0:lI99|N
-3C0450:lH3C04E0|H3C04EC
-3C04E0:t2:H3C056C,H3C0574
-3C0574:lI97|H3C0608
-3C0608:lI112|H3C06A4
-3C06A4:lI112|H3C0748
-3C0748:lI108|H3C07E4
-3C07E4:lI105|H3C0868
-3C0868:lI99|H3C08F4
-3C08F4:lI97|H3C0980
-3C0980:lI116|H3C0A0C
-3C0A0C:lI105|H3C0AA8
-3C0AA8:lI111|H3C0B44
-3C0B44:lI110|H3C0BE8
-3C0BE8:lI47|H3C0C9C
-3C0C9C:lI120|H3C0D48
-3C0D48:lI45|H3C0DFC
-3C0DFC:lI117|H3C0EB0
-3C0EB0:lI115|H3C0F6C
-3C0F6C:lI116|H3C1038
-3C1038:lI97|H3C110C
-3C110C:lI114|N
-3C056C:lI117|H3C0600
-3C0600:lI115|H3C069C
-3C069C:lI116|H3C0740
-3C0740:lI97|H3C07DC
-3C07DC:lI114|N
-3C04EC:lH3C057C|H3C0588
-3C057C:t2:H3C0610,H3C0618
-3C0618:lI97|H3C06B4
-3C06B4:lI112|H3C0750
-3C0750:lI112|H3C07EC
-3C07EC:lI108|H3C0870
-3C0870:lI105|H3C08FC
-3C08FC:lI99|H3C0988
-3C0988:lI97|H3C0A14
-3C0A14:lI116|H3C0AB0
-3C0AB0:lI105|H3C0B4C
-3C0B4C:lI111|H3C0BF0
-3C0BF0:lI110|H3C0CA4
-3C0CA4:lI47|H3C0D50
-3C0D50:lI120|H3C0E04
-3C0E04:lI45|H3C0EB8
-3C0EB8:lI116|H3C0F74
-3C0F74:lI114|H3C1040
-3C1040:lI111|H3C1114
-3C1114:lI102|H3C11E0
-3C11E0:lI102|H3C12AC
-3C12AC:lI45|H3C1380
-3C1380:lI109|H3C145C
-3C145C:lI115|N
-3C0610:lI109|H3C06AC
-3C06AC:lI115|N
-3C0588:lH3C0620|H3C062C
-3C0620:t2:H3C06BC,H3C06C4
-3C06C4:lI97|H3C0760
-3C0760:lI112|H3C07F4
-3C07F4:lI112|H3C0878
-3C0878:lI108|H3C0904
-3C0904:lI105|H3C0990
-3C0990:lI99|H3C0A1C
-3C0A1C:lI97|H3C0AB8
-3C0AB8:lI116|H3C0B54
-3C0B54:lI105|H3C0BF8
-3C0BF8:lI111|H3C0CAC
-3C0CAC:lI110|H3C0D58
-3C0D58:lI47|H3C0E0C
-3C0E0C:lI120|H3C0EC0
-3C0EC0:lI45|H3C0F7C
-3C0F7C:lI116|H3C1048
-3C1048:lI114|H3C111C
-3C111C:lI111|H3C11E8
-3C11E8:lI102|H3C12B4
-3C12B4:lI102|H3C1388
-3C1388:lI45|H3C1464
-3C1464:lI109|H3C1540
-3C1540:lI101|N
-3C06BC:lI109|H3C0758
-3C0758:lI101|N
-3C062C:lH3C06CC|H3C06D8
-3C06CC:t2:H3C0768,H3C0770
-3C0770:lI97|H3C0804
-3C0804:lI112|H3C0888
-3C0888:lI112|H3C090C
-3C090C:lI108|H3C0998
-3C0998:lI105|H3C0A24
-3C0A24:lI99|H3C0AC0
-3C0AC0:lI97|H3C0B5C
-3C0B5C:lI116|H3C0C00
-3C0C00:lI105|H3C0CB4
-3C0CB4:lI111|H3C0D60
-3C0D60:lI110|H3C0E14
-3C0E14:lI47|H3C0EC8
-3C0EC8:lI120|H3C0F84
-3C0F84:lI45|H3C1050
-3C1050:lI116|H3C1124
-3C1124:lI114|H3C11F0
-3C11F0:lI111|H3C12BC
-3C12BC:lI102|H3C1390
-3C1390:lI102|H3C146C
-3C146C:lI45|H3C1548
-3C1548:lI109|H3C161C
-3C161C:lI97|H3C16F0
-3C16F0:lI110|N
-3C0768:lI109|H3C07FC
-3C07FC:lI97|H3C0880
-3C0880:lI110|N
-3C06D8:lH3C0778|H3C0784
-3C0778:t2:H3C080C,H3C0814
-3C0814:lI97|H3C0890
-3C0890:lI112|H3C0914
-3C0914:lI112|H3C09A0
-3C09A0:lI108|H3C0A2C
-3C0A2C:lI105|H3C0AC8
-3C0AC8:lI99|H3C0B64
-3C0B64:lI97|H3C0C08
-3C0C08:lI116|H3C0CBC
-3C0CBC:lI105|H3C0D68
-3C0D68:lI111|H3C0E1C
-3C0E1C:lI110|H3C0ED0
-3C0ED0:lI47|H3C0F8C
-3C0F8C:lI120|H3C1058
-3C1058:lI45|H3C112C
-3C112C:lI116|H3C11F8
-3C11F8:lI114|H3C12C4
-3C12C4:lI111|H3C1398
-3C1398:lI102|H3C1474
-3C1474:lI102|N
-3C080C:lI116|N
-3C0784:lH3C081C|H3C0828
-3C081C:t2:H3C0898,H3C08A0
-3C08A0:lI97|H3C0924
-3C0924:lI112|H3C09A8
-3C09A8:lI112|H3C0A34
-3C0A34:lI108|H3C0AD0
-3C0AD0:lI105|H3C0B6C
-3C0B6C:lI99|H3C0C10
-3C0C10:lI97|H3C0CC4
-3C0CC4:lI116|H3C0D70
-3C0D70:lI105|H3C0E24
-3C0E24:lI111|H3C0ED8
-3C0ED8:lI110|H3C0F94
-3C0F94:lI47|H3C1060
-3C1060:lI120|H3C1134
-3C1134:lI45|H3C1200
-3C1200:lI116|H3C12CC
-3C12CC:lI114|H3C13A0
-3C13A0:lI111|H3C147C
-3C147C:lI102|H3C1550
-3C1550:lI102|N
-3C0898:lI116|H3C091C
-3C091C:lI114|N
-3C0828:lH3C08A8|H3C08B4
-3C08A8:t2:H3C092C,H3C0934
-3C0934:lI97|H3C09B8
-3C09B8:lI112|H3C0A44
-3C0A44:lI112|H3C0AE0
-3C0AE0:lI108|H3C0B74
-3C0B74:lI105|H3C0C18
-3C0C18:lI99|H3C0CCC
-3C0CCC:lI97|H3C0D78
-3C0D78:lI116|H3C0E2C
-3C0E2C:lI105|H3C0EE0
-3C0EE0:lI111|H3C0F9C
-3C0F9C:lI110|H3C1068
-3C1068:lI47|H3C113C
-3C113C:lI120|H3C1208
-3C1208:lI45|H3C12D4
-3C12D4:lI116|H3C13A8
-3C13A8:lI114|H3C1484
-3C1484:lI111|H3C1558
-3C1558:lI102|H3C1624
-3C1624:lI102|N
-3C092C:lI114|H3C09B0
-3C09B0:lI111|H3C0A3C
-3C0A3C:lI102|H3C0AD8
-3C0AD8:lI102|N
-3C08B4:lH3C093C|H3C0948
-3C093C:t2:H3C09C0,H3C09C8
-3C09C8:lI97|H3C0A54
-3C0A54:lI112|H3C0AF0
-3C0AF0:lI112|H3C0B84
-3C0B84:lI108|H3C0C28
-3C0C28:lI105|H3C0CDC
-3C0CDC:lI99|H3C0D88
-3C0D88:lI97|H3C0E34
-3C0E34:lI116|H3C0EE8
-3C0EE8:lI105|H3C0FA4
-3C0FA4:lI111|H3C1070
-3C1070:lI110|H3C1144
-3C1144:lI47|H3C1210
-3C1210:lI120|H3C12DC
-3C12DC:lI45|H3C13B0
-3C13B0:lI116|H3C148C
-3C148C:lI101|H3C1560
-3C1560:lI120|H3C162C
-3C162C:lI105|H3C16F8
-3C16F8:lI110|H3C17BC
-3C17BC:lI102|H3C1880
-3C1880:lI111|N
-3C09C0:lI116|H3C0A4C
-3C0A4C:lI101|H3C0AE8
-3C0AE8:lI120|H3C0B7C
-3C0B7C:lI105|H3C0C20
-3C0C20:lI110|H3C0CD4
-3C0CD4:lI102|H3C0D80
-3C0D80:lI111|N
-3C0948:lH3C09D0|H3C09DC
-3C09D0:t2:H3C0A5C,H3C0A64
-3C0A64:lI97|H3C0B00
-3C0B00:lI112|H3C0B94
-3C0B94:lI112|H3C0C38
-3C0C38:lI108|H3C0CE4
-3C0CE4:lI105|H3C0D90
-3C0D90:lI99|H3C0E3C
-3C0E3C:lI97|H3C0EF0
-3C0EF0:lI116|H3C0FAC
-3C0FAC:lI105|H3C1078
-3C1078:lI111|H3C114C
-3C114C:lI110|H3C1218
-3C1218:lI47|H3C12E4
-3C12E4:lI120|H3C13B8
-3C13B8:lI45|H3C1494
-3C1494:lI116|H3C1568
-3C1568:lI101|H3C1634
-3C1634:lI120|H3C1700
-3C1700:lI105|H3C17C4
-3C17C4:lI110|H3C1888
-3C1888:lI102|H3C1944
-3C1944:lI111|N
-3C0A5C:lI116|H3C0AF8
-3C0AF8:lI101|H3C0B8C
-3C0B8C:lI120|H3C0C30
-3C0C30:lI105|N
-3C09DC:lH3C0A6C|H3C0A78
-3C0A6C:t2:H3C0B08,H3C0B10
-3C0B10:lI97|H3C0BA4
-3C0BA4:lI112|H3C0C48
-3C0C48:lI112|H3C0CEC
-3C0CEC:lI108|H3C0D98
-3C0D98:lI105|H3C0E44
-3C0E44:lI99|H3C0EF8
-3C0EF8:lI97|H3C0FB4
-3C0FB4:lI116|H3C1080
-3C1080:lI105|H3C1154
-3C1154:lI111|H3C1220
-3C1220:lI110|H3C12EC
-3C12EC:lI47|H3C13C0
-3C13C0:lI120|H3C149C
-3C149C:lI45|H3C1570
-3C1570:lI116|H3C163C
-3C163C:lI101|H3C1708
-3C1708:lI120|N
-3C0B08:lI116|H3C0B9C
-3C0B9C:lI101|H3C0C40
-3C0C40:lI120|N
-3C0A78:lH3C0B18|H3C0B24
-3C0B18:t2:H3C0BAC,H3C0BB4
-3C0BB4:lI97|H3C0C58
-3C0C58:lI112|H3C0CFC
-3C0CFC:lI112|H3C0DA0
-3C0DA0:lI108|H3C0E4C
-3C0E4C:lI105|H3C0F00
-3C0F00:lI99|H3C0FBC
-3C0FBC:lI97|H3C1088
-3C1088:lI116|H3C115C
-3C115C:lI105|H3C1228
-3C1228:lI111|H3C12F4
-3C12F4:lI110|H3C13C8
-3C13C8:lI47|H3C14A4
-3C14A4:lI120|H3C1578
-3C1578:lI45|H3C1644
-3C1644:lI116|H3C1710
-3C1710:lI99|H3C17CC
-3C17CC:lI108|N
-3C0BAC:lI116|H3C0C50
-3C0C50:lI99|H3C0CF4
-3C0CF4:lI108|N
-3C0B24:lH3C0BBC|H3C0BC8
-3C0BBC:t2:H3C0C60,H3C0C68
-3C0C68:lI97|H3C0D0C
-3C0D0C:lI112|H3C0DB0
-3C0DB0:lI112|H3C0E54
-3C0E54:lI108|H3C0F08
-3C0F08:lI105|H3C0FC4
-3C0FC4:lI99|H3C1090
-3C1090:lI97|H3C1164
-3C1164:lI116|H3C1230
-3C1230:lI105|H3C12FC
-3C12FC:lI111|H3C13D0
-3C13D0:lI110|H3C14AC
-3C14AC:lI47|H3C1580
-3C1580:lI120|H3C164C
-3C164C:lI45|H3C1718
-3C1718:lI116|H3C17D4
-3C17D4:lI97|H3C1890
-3C1890:lI114|N
-3C0C60:lI116|H3C0D04
-3C0D04:lI97|H3C0DA8
-3C0DA8:lI114|N
-3C0BC8:lH3C0C70|H3C0C7C
-3C0C70:t2:H3C0D14,H3C0D1C
-3C0D1C:lI97|H3C0DC0
-3C0DC0:lI112|H3C0E64
-3C0E64:lI112|H3C0F18
-3C0F18:lI108|H3C0FD4
-3C0FD4:lI105|H3C10A0
-3C10A0:lI99|H3C116C
-3C116C:lI97|H3C1238
-3C1238:lI116|H3C1304
-3C1304:lI105|H3C13D8
-3C13D8:lI111|H3C14B4
-3C14B4:lI110|H3C1588
-3C1588:lI47|H3C1654
-3C1654:lI120|H3C1720
-3C1720:lI45|H3C17DC
-3C17DC:lI115|H3C1898
-3C1898:lI118|H3C194C
-3C194C:lI52|H3C1A00
-3C1A00:lI99|H3C1AB4
-3C1AB4:lI114|H3C1B78
-3C1B78:lI99|N
-3C0D14:lI115|H3C0DB8
-3C0DB8:lI118|H3C0E5C
-3C0E5C:lI52|H3C0F10
-3C0F10:lI99|H3C0FCC
-3C0FCC:lI114|H3C1098
-3C1098:lI99|N
-3C0C7C:lH3C0D24|H3C0D30
-3C0D24:t2:H3C0DC8,H3C0DD0
-3C0DD0:lI97|H3C0E74
-3C0E74:lI112|H3C0F28
-3C0F28:lI112|H3C0FE4
-3C0FE4:lI108|H3C10B0
-3C10B0:lI105|H3C117C
-3C117C:lI99|H3C1248
-3C1248:lI97|H3C130C
-3C130C:lI116|H3C13E0
-3C13E0:lI105|H3C14BC
-3C14BC:lI111|H3C1590
-3C1590:lI110|H3C165C
-3C165C:lI47|H3C1728
-3C1728:lI120|H3C17E4
-3C17E4:lI45|H3C18A0
-3C18A0:lI115|H3C1954
-3C1954:lI118|H3C1A08
-3C1A08:lI52|H3C1ABC
-3C1ABC:lI99|H3C1B80
-3C1B80:lI112|H3C1C4C
-3C1C4C:lI105|H3C1D10
-3C1D10:lI111|N
-3C0DC8:lI115|H3C0E6C
-3C0E6C:lI118|H3C0F20
-3C0F20:lI52|H3C0FDC
-3C0FDC:lI99|H3C10A8
-3C10A8:lI112|H3C1174
-3C1174:lI105|H3C1240
-3C1240:lI111|N
-3C0D30:lH3C0DD8|H3C0DE4
-3C0DD8:t2:H3C0E7C,H3C0E84
-3C0E84:lI97|H3C0F38
-3C0F38:lI112|H3C0FF4
-3C0FF4:lI112|H3C10B8
-3C10B8:lI108|H3C1184
-3C1184:lI105|H3C1250
-3C1250:lI99|H3C1314
-3C1314:lI97|H3C13E8
-3C13E8:lI116|H3C14C4
-3C14C4:lI105|H3C1598
-3C1598:lI111|H3C1664
-3C1664:lI110|H3C1730
-3C1730:lI47|H3C17EC
-3C17EC:lI120|H3C18A8
-3C18A8:lI45|H3C195C
-3C195C:lI115|H3C1A10
-3C1A10:lI116|H3C1AC4
-3C1AC4:lI117|H3C1B88
-3C1B88:lI102|H3C1C54
-3C1C54:lI102|H3C1D18
-3C1D18:lI105|H3C1DD4
-3C1DD4:lI116|N
-3C0E7C:lI115|H3C0F30
-3C0F30:lI105|H3C0FEC
-3C0FEC:lI116|N
-3C0DE4:lH3C0E8C|H3C0E98
-3C0E8C:t2:H3C0F40,H3C0F48
-3C0F48:lI97|H3C1004
-3C1004:lI112|H3C10C8
-3C10C8:lI112|H3C1194
-3C1194:lI108|H3C1258
-3C1258:lI105|H3C131C
-3C131C:lI99|H3C13F0
-3C13F0:lI97|H3C14CC
-3C14CC:lI116|H3C15A0
-3C15A0:lI105|H3C166C
-3C166C:lI111|H3C1738
-3C1738:lI110|H3C17F4
-3C17F4:lI47|H3C18B0
-3C18B0:lI120|H3C1964
-3C1964:lI45|H3C1A18
-3C1A18:lI115|H3C1ACC
-3C1ACC:lI104|H3C1B90
-3C1B90:lI97|H3C1C5C
-3C1C5C:lI114|N
-3C0F40:lI115|H3C0FFC
-3C0FFC:lI104|H3C10C0
-3C10C0:lI97|H3C118C
-3C118C:lI114|N
-3C0E98:lH3C0F50|H3C0F5C
-3C0F50:t2:H3C100C,H3C1014
-3C1014:lI97|H3C10D8
-3C10D8:lI112|H3C119C
-3C119C:lI112|H3C1260
-3C1260:lI108|H3C1324
-3C1324:lI105|H3C13F8
-3C13F8:lI99|H3C14D4
-3C14D4:lI97|H3C15A8
-3C15A8:lI116|H3C1674
-3C1674:lI105|H3C1740
-3C1740:lI111|H3C17FC
-3C17FC:lI110|H3C18B8
-3C18B8:lI47|H3C196C
-3C196C:lI120|H3C1A20
-3C1A20:lI45|H3C1AD4
-3C1AD4:lI115|H3C1B98
-3C1B98:lI104|N
-3C100C:lI115|H3C10D0
-3C10D0:lI104|N
-3C0F5C:lH3C101C|H3C1028
-3C101C:t2:H3C10E0,H3C10E8
-3C10E8:lI97|H3C11AC
-3C11AC:lI112|H3C1268
-3C1268:lI112|H3C132C
-3C132C:lI108|H3C1400
-3C1400:lI105|H3C14DC
-3C14DC:lI99|H3C15B0
-3C15B0:lI97|H3C167C
-3C167C:lI116|H3C1748
-3C1748:lI105|H3C1804
-3C1804:lI111|H3C18C0
-3C18C0:lI110|H3C1974
-3C1974:lI47|H3C1A28
-3C1A28:lI120|H3C1ADC
-3C1ADC:lI45|H3C1BA0
-3C1BA0:lI110|H3C1C64
-3C1C64:lI101|H3C1D20
-3C1D20:lI116|H3C1DDC
-3C1DDC:lI99|H3C1E98
-3C1E98:lI100|H3C1F5C
-3C1F5C:lI102|N
-3C10E0:lI110|H3C11A4
-3C11A4:lI99|N
-3C1028:lH3C10F0|H3C10FC
-3C10F0:t2:H3C11B4,H3C11BC
-3C11BC:lI97|H3C1278
-3C1278:lI112|H3C133C
-3C133C:lI112|H3C1408
-3C1408:lI108|H3C14E4
-3C14E4:lI105|H3C15B8
-3C15B8:lI99|H3C1684
-3C1684:lI97|H3C1750
-3C1750:lI116|H3C180C
-3C180C:lI105|H3C18C8
-3C18C8:lI111|H3C197C
-3C197C:lI110|H3C1A30
-3C1A30:lI47|H3C1AE4
-3C1AE4:lI120|H3C1BA8
-3C1BA8:lI45|H3C1C6C
-3C1C6C:lI110|H3C1D28
-3C1D28:lI101|H3C1DE4
-3C1DE4:lI116|H3C1EA0
-3C1EA0:lI99|H3C1F64
-3C1F64:lI100|H3C2018
-3C2018:lI102|N
-3C11B4:lI99|H3C1270
-3C1270:lI100|H3C1334
-3C1334:lI102|N
-3C10FC:lH3C11C4|H3C11D0
-3C11C4:t2:H3C1280,H3C1288
-3C1288:lI97|H3C134C
-3C134C:lI112|H3C1418
-3C1418:lI112|H3C14EC
-3C14EC:lI108|H3C15C0
-3C15C0:lI105|H3C168C
-3C168C:lI99|H3C1758
-3C1758:lI97|H3C1814
-3C1814:lI116|H3C18D0
-3C18D0:lI105|H3C1984
-3C1984:lI111|H3C1A38
-3C1A38:lI110|H3C1AEC
-3C1AEC:lI47|H3C1BB0
-3C1BB0:lI120|H3C1C74
-3C1C74:lI45|H3C1D30
-3C1D30:lI109|H3C1DEC
-3C1DEC:lI105|H3C1EA8
-3C1EA8:lI102|N
-3C1280:lI109|H3C1344
-3C1344:lI105|H3C1410
-3C1410:lI102|N
-3C11D0:lH3C1290|H3C129C
-3C1290:t2:H3C1354,H3C135C
-3C135C:lI97|H3C1428
-3C1428:lI112|H3C14FC
-3C14FC:lI112|H3C15D0
-3C15D0:lI108|H3C169C
-3C169C:lI105|H3C1760
-3C1760:lI99|H3C181C
-3C181C:lI97|H3C18D8
-3C18D8:lI116|H3C198C
-3C198C:lI105|H3C1A40
-3C1A40:lI111|H3C1AF4
-3C1AF4:lI110|H3C1BB8
-3C1BB8:lI47|H3C1C7C
-3C1C7C:lI120|H3C1D38
-3C1D38:lI45|H3C1DF4
-3C1DF4:lI108|H3C1EB0
-3C1EB0:lI97|H3C1F6C
-3C1F6C:lI116|H3C2020
-3C2020:lI101|H3C20DC
-3C20DC:lI120|N
-3C1354:lI108|H3C1420
-3C1420:lI97|H3C14F4
-3C14F4:lI116|H3C15C8
-3C15C8:lI101|H3C1694
-3C1694:lI120|N
-3C129C:lH3C1364|H3C1370
-3C1364:t2:H3C1430,H3C1438
-3C1438:lI97|H3C150C
-3C150C:lI112|H3C15E0
-3C15E0:lI112|H3C16A4
-3C16A4:lI108|H3C1768
-3C1768:lI105|H3C1824
-3C1824:lI99|H3C18E0
-3C18E0:lI97|H3C1994
-3C1994:lI116|H3C1A48
-3C1A48:lI105|H3C1AFC
-3C1AFC:lI111|H3C1BC0
-3C1BC0:lI110|H3C1C84
-3C1C84:lI47|H3C1D40
-3C1D40:lI120|H3C1DFC
-3C1DFC:lI45|H3C1EB8
-3C1EB8:lI107|H3C1F74
-3C1F74:lI111|H3C2028
-3C2028:lI97|H3C20E4
-3C20E4:lI110|N
-3C1430:lI115|H3C1504
-3C1504:lI107|H3C15D8
-3C15D8:lI112|N
-3C1370:lH3C1440|H3C144C
-3C1440:t2:H3C1514,H3C151C
-3C151C:lI97|H3C15F0
-3C15F0:lI112|H3C16B4
-3C16B4:lI112|H3C1770
-3C1770:lI108|H3C182C
-3C182C:lI105|H3C18E8
-3C18E8:lI99|H3C199C
-3C199C:lI97|H3C1A50
-3C1A50:lI116|H3C1B04
-3C1B04:lI105|H3C1BC8
-3C1BC8:lI111|H3C1C8C
-3C1C8C:lI110|H3C1D48
-3C1D48:lI47|H3C1E04
-3C1E04:lI120|H3C1EC0
-3C1EC0:lI45|H3C1F7C
-3C1F7C:lI107|H3C2030
-3C2030:lI111|H3C20EC
-3C20EC:lI97|H3C21A0
-3C21A0:lI110|N
-3C1514:lI115|H3C15E8
-3C15E8:lI107|H3C16AC
-3C16AC:lI100|N
-3C144C:lH3C1524|H3C1530
-3C1524:t2:H3C15F8,H3C1600
-3C1600:lI97|H3C16C4
-3C16C4:lI112|H3C1780
-3C1780:lI112|H3C1834
-3C1834:lI108|H3C18F0
-3C18F0:lI105|H3C19A4
-3C19A4:lI99|H3C1A58
-3C1A58:lI97|H3C1B0C
-3C1B0C:lI116|H3C1BD0
-3C1BD0:lI105|H3C1C94
-3C1C94:lI111|H3C1D50
-3C1D50:lI110|H3C1E0C
-3C1E0C:lI47|H3C1EC8
-3C1EC8:lI120|H3C1F84
-3C1F84:lI45|H3C2038
-3C2038:lI107|H3C20F4
-3C20F4:lI111|H3C21A8
-3C21A8:lI97|H3C225C
-3C225C:lI110|N
-3C15F8:lI115|H3C16BC
-3C16BC:lI107|H3C1778
-3C1778:lI116|N
-3C1530:lH3C1608|H3C1614
-3C1608:t2:H3C16CC,H3C16D4
-3C16D4:lI97|H3C1790
-3C1790:lI112|H3C1844
-3C1844:lI112|H3C18F8
-3C18F8:lI108|H3C19AC
-3C19AC:lI105|H3C1A60
-3C1A60:lI99|H3C1B14
-3C1B14:lI97|H3C1BD8
-3C1BD8:lI116|H3C1C9C
-3C1C9C:lI105|H3C1D58
-3C1D58:lI111|H3C1E14
-3C1E14:lI110|H3C1ED0
-3C1ED0:lI47|H3C1F8C
-3C1F8C:lI120|H3C2040
-3C2040:lI45|H3C20FC
-3C20FC:lI107|H3C21B0
-3C21B0:lI111|H3C2264
-3C2264:lI97|H3C2320
-3C2320:lI110|N
-3C16CC:lI115|H3C1788
-3C1788:lI107|H3C183C
-3C183C:lI109|N
-3C1614:lH3C16DC|H3C16E8
-3C16DC:t2:H3C1798,H3C17A0
-3C17A0:lI97|H3C1854
-3C1854:lI112|H3C1908
-3C1908:lI112|H3C19B4
-3C19B4:lI108|H3C1A68
-3C1A68:lI105|H3C1B1C
-3C1B1C:lI99|H3C1BE0
-3C1BE0:lI97|H3C1CA4
-3C1CA4:lI116|H3C1D60
-3C1D60:lI105|H3C1E1C
-3C1E1C:lI111|H3C1ED8
-3C1ED8:lI110|H3C1F94
-3C1F94:lI47|H3C2048
-3C2048:lI120|H3C2104
-3C2104:lI45|H3C21B8
-3C21B8:lI104|H3C226C
-3C226C:lI116|H3C2328
-3C2328:lI116|H3C23E4
-3C23E4:lI112|H3C2498
-3C2498:lI100|H3C2554
-3C2554:lI45|H3C2610
-3C2610:lI99|H3C26D4
-3C26D4:lI103|H3C2790
-3C2790:lI105|N
-3C1798:lI99|H3C184C
-3C184C:lI103|H3C1900
-3C1900:lI105|N
-3C16E8:lH3C17A8|H3C17B4
-3C17A8:t2:H3C185C,H3C1864
-3C1864:lI97|H3C1918
-3C1918:lI112|H3C19C4
-3C19C4:lI112|H3C1A70
-3C1A70:lI108|H3C1B24
-3C1B24:lI105|H3C1BE8
-3C1BE8:lI99|H3C1CAC
-3C1CAC:lI97|H3C1D68
-3C1D68:lI116|H3C1E24
-3C1E24:lI105|H3C1EE0
-3C1EE0:lI111|H3C1F9C
-3C1F9C:lI110|H3C2050
-3C2050:lI47|H3C210C
-3C210C:lI120|H3C21C0
-3C21C0:lI45|H3C2274
-3C2274:lI104|H3C2330
-3C2330:lI100|H3C23EC
-3C23EC:lI102|N
-3C185C:lI104|H3C1910
-3C1910:lI100|H3C19BC
-3C19BC:lI102|N
-3C17B4:lH3C186C|H3C1878
-3C186C:t2:H3C1920,H3C1928
-3C1928:lI97|H3C19D4
-3C19D4:lI112|H3C1A78
-3C1A78:lI112|H3C1B2C
-3C1B2C:lI108|H3C1BF0
-3C1BF0:lI105|H3C1CB4
-3C1CB4:lI99|H3C1D70
-3C1D70:lI97|H3C1E2C
-3C1E2C:lI116|H3C1EE8
-3C1EE8:lI105|H3C1FA4
-3C1FA4:lI111|H3C2058
-3C2058:lI110|H3C2114
-3C2114:lI47|H3C21C8
-3C21C8:lI120|H3C227C
-3C227C:lI45|H3C2338
-3C2338:lI103|H3C23F4
-3C23F4:lI122|H3C24A0
-3C24A0:lI105|H3C255C
-3C255C:lI112|N
-3C1920:lI103|H3C19CC
-3C19CC:lI122|N
-3C1878:lH3C1930|H3C193C
-3C1930:t2:H3C19DC,H3C19E4
-3C19E4:lI97|H3C1A88
-3C1A88:lI112|H3C1B3C
-3C1B3C:lI112|H3C1C00
-3C1C00:lI108|H3C1CBC
-3C1CBC:lI105|H3C1D78
-3C1D78:lI99|H3C1E34
-3C1E34:lI97|H3C1EF0
-3C1EF0:lI116|H3C1FAC
-3C1FAC:lI105|H3C2060
-3C2060:lI111|H3C211C
-3C211C:lI110|H3C21D0
-3C21D0:lI47|H3C2284
-3C2284:lI120|H3C2340
-3C2340:lI45|H3C23FC
-3C23FC:lI103|H3C24A8
-3C24A8:lI116|H3C2564
-3C2564:lI97|H3C2618
-3C2618:lI114|N
-3C19DC:lI103|H3C1A80
-3C1A80:lI116|H3C1B34
-3C1B34:lI97|H3C1BF8
-3C1BF8:lI114|N
-3C193C:lH3C19EC|H3C19F8
-3C19EC:t2:H3C1A90,H3C1A98
-3C1A98:lI97|H3C1B4C
-3C1B4C:lI112|H3C1C10
-3C1C10:lI112|H3C1CC4
-3C1CC4:lI108|H3C1D80
-3C1D80:lI105|H3C1E3C
-3C1E3C:lI99|H3C1EF8
-3C1EF8:lI97|H3C1FB4
-3C1FB4:lI116|H3C2068
-3C2068:lI105|H3C2124
-3C2124:lI111|H3C21D8
-3C21D8:lI110|H3C228C
-3C228C:lI47|H3C2348
-3C2348:lI120|H3C2404
-3C2404:lI45|H3C24B0
-3C24B0:lI100|H3C256C
-3C256C:lI118|H3C2620
-3C2620:lI105|N
-3C1A90:lI100|H3C1B44
-3C1B44:lI118|H3C1C08
-3C1C08:lI105|N
-3C19F8:lH3C1AA0|H3C1AAC
-3C1AA0:t2:H3C1B54,H3C1B5C
-3C1B5C:lI97|H3C1C20
-3C1C20:lI112|H3C1CD4
-3C1CD4:lI112|H3C1D88
-3C1D88:lI108|H3C1E44
-3C1E44:lI105|H3C1F00
-3C1F00:lI99|H3C1FBC
-3C1FBC:lI97|H3C2070
-3C2070:lI116|H3C212C
-3C212C:lI105|H3C21E0
-3C21E0:lI111|H3C2294
-3C2294:lI110|H3C2350
-3C2350:lI47|H3C240C
-3C240C:lI120|H3C24B8
-3C24B8:lI45|H3C2574
-3C2574:lI100|H3C2628
-3C2628:lI105|H3C26DC
-3C26DC:lI114|H3C2798
-3C2798:lI101|H3C2854
-3C2854:lI99|H3C2918
-3C2918:lI116|H3C29E4
-3C29E4:lI111|H3C2AB0
-3C2AB0:lI114|N
-3C1B54:lI100|H3C1C18
-3C1C18:lI99|H3C1CCC
-3C1CCC:lI114|N
-3C1AAC:lH3C1B64|H3C1B70
-3C1B64:t2:H3C1C28,H3C1C30
-3C1C30:lI97|H3C1CE4
-3C1CE4:lI112|H3C1D98
-3C1D98:lI112|H3C1E4C
-3C1E4C:lI108|H3C1F08
-3C1F08:lI105|H3C1FC4
-3C1FC4:lI99|H3C2078
-3C2078:lI97|H3C2134
-3C2134:lI116|H3C21E8
-3C21E8:lI105|H3C229C
-3C229C:lI111|H3C2358
-3C2358:lI110|H3C2414
-3C2414:lI47|H3C24C0
-3C24C0:lI120|H3C257C
-3C257C:lI45|H3C2630
-3C2630:lI100|H3C26E4
-3C26E4:lI105|H3C27A0
-3C27A0:lI114|H3C285C
-3C285C:lI101|H3C2920
-3C2920:lI99|H3C29EC
-3C29EC:lI116|H3C2AB8
-3C2AB8:lI111|H3C2B84
-3C2B84:lI114|N
-3C1C28:lI100|H3C1CDC
-3C1CDC:lI105|H3C1D90
-3C1D90:lI114|N
-3C1B70:lH3C1C38|H3C1C44
-3C1C38:t2:H3C1CEC,H3C1CF4
-3C1CF4:lI97|H3C1DA8
-3C1DA8:lI112|H3C1E5C
-3C1E5C:lI112|H3C1F10
-3C1F10:lI108|H3C1FCC
-3C1FCC:lI105|H3C2080
-3C2080:lI99|H3C213C
-3C213C:lI97|H3C21F0
-3C21F0:lI116|H3C22A4
-3C22A4:lI105|H3C2360
-3C2360:lI111|H3C241C
-3C241C:lI110|H3C24C8
-3C24C8:lI47|H3C2584
-3C2584:lI120|H3C2638
-3C2638:lI45|H3C26EC
-3C26EC:lI100|H3C27A8
-3C27A8:lI105|H3C2864
-3C2864:lI114|H3C2928
-3C2928:lI101|H3C29F4
-3C29F4:lI99|H3C2AC0
-3C2AC0:lI116|H3C2B8C
-3C2B8C:lI111|H3C2C48
-3C2C48:lI114|N
-3C1CEC:lI100|H3C1DA0
-3C1DA0:lI120|H3C1E54
-3C1E54:lI114|N
-3C1C44:lH3C1CFC|H3C1D08
-3C1CFC:t2:H3C1DB0,H3C1DB8
-3C1DB8:lI97|H3C1E6C
-3C1E6C:lI112|H3C1F20
-3C1F20:lI112|H3C1FD4
-3C1FD4:lI108|H3C2088
-3C2088:lI105|H3C2144
-3C2144:lI99|H3C21F8
-3C21F8:lI97|H3C22AC
-3C22AC:lI116|H3C2368
-3C2368:lI105|H3C2424
-3C2424:lI111|H3C24D0
-3C24D0:lI110|H3C258C
-3C258C:lI47|H3C2640
-3C2640:lI120|H3C26F4
-3C26F4:lI45|H3C27B0
-3C27B0:lI99|H3C286C
-3C286C:lI115|H3C2930
-3C2930:lI104|N
-3C1DB0:lI99|H3C1E64
-3C1E64:lI115|H3C1F18
-3C1F18:lI104|N
-3C1D08:lH3C1DC0|H3C1DCC
-3C1DC0:t2:H3C1E74,H3C1E7C
-3C1E7C:lI97|H3C1F30
-3C1F30:lI112|H3C1FE4
-3C1FE4:lI112|H3C2098
-3C2098:lI108|H3C214C
-3C214C:lI105|H3C2200
-3C2200:lI99|H3C22B4
-3C22B4:lI97|H3C2370
-3C2370:lI116|H3C242C
-3C242C:lI105|H3C24D8
-3C24D8:lI111|H3C2594
-3C2594:lI110|H3C2648
-3C2648:lI47|H3C26FC
-3C26FC:lI120|H3C27B8
-3C27B8:lI45|H3C2874
-3C2874:lI99|H3C2938
-3C2938:lI112|H3C29FC
-3C29FC:lI105|H3C2AC8
-3C2AC8:lI111|N
-3C1E74:lI99|H3C1F28
-3C1F28:lI112|H3C1FDC
-3C1FDC:lI105|H3C2090
-3C2090:lI111|N
-3C1DCC:lH3C1E84|H3C1E90
-3C1E84:t2:H3C1F38,H3C1F40
-3C1F40:lI97|H3C1FEC
-3C1FEC:lI112|H3C20A0
-3C20A0:lI112|H3C2154
-3C2154:lI108|H3C2208
-3C2208:lI105|H3C22BC
-3C22BC:lI99|H3C2378
-3C2378:lI97|H3C2434
-3C2434:lI116|H3C24E0
-3C24E0:lI105|H3C259C
-3C259C:lI111|H3C2650
-3C2650:lI110|H3C2704
-3C2704:lI47|H3C27C0
-3C27C0:lI120|H3C287C
-3C287C:lI45|H3C2940
-3C2940:lI99|H3C2A04
-3C2A04:lI111|H3C2AD0
-3C2AD0:lI109|H3C2B94
-3C2B94:lI112|H3C2C50
-3C2C50:lI114|H3C2D00
-3C2D00:lI101|H3C2DA8
-3C2DA8:lI115|H3C2E40
-3C2E40:lI115|N
-3C1F38:lI90|N
-3C1E90:lH3C1F48|H3C1F54
-3C1F48:t2:H3C1FF4,H3C1FFC
-3C1FFC:lI97|H3C20B0
-3C20B0:lI112|H3C2164
-3C2164:lI112|H3C2210
-3C2210:lI108|H3C22C4
-3C22C4:lI105|H3C2380
-3C2380:lI99|H3C243C
-3C243C:lI97|H3C24E8
-3C24E8:lI116|H3C25A4
-3C25A4:lI105|H3C2658
-3C2658:lI111|H3C270C
-3C270C:lI110|H3C27C8
-3C27C8:lI47|H3C2884
-3C2884:lI120|H3C2948
-3C2948:lI45|H3C2A0C
-3C2A0C:lI99|H3C2AD8
-3C2AD8:lI100|H3C2B9C
-3C2B9C:lI108|H3C2C58
-3C2C58:lI105|H3C2D08
-3C2D08:lI110|H3C2DB0
-3C2DB0:lI107|N
-3C1FF4:lI118|H3C20A8
-3C20A8:lI99|H3C215C
-3C215C:lI100|N
-3C1F54:lH3C2004|H3C2010
-3C2004:t2:H3C20B8,H3C20C0
-3C20C0:lI97|H3C2174
-3C2174:lI112|H3C2220
-3C2220:lI112|H3C22D4
-3C22D4:lI108|H3C2390
-3C2390:lI105|H3C2444
-3C2444:lI99|H3C24F0
-3C24F0:lI97|H3C25AC
-3C25AC:lI116|H3C2660
-3C2660:lI105|H3C2714
-3C2714:lI111|H3C27D0
-3C27D0:lI110|H3C288C
-3C288C:lI47|H3C2950
-3C2950:lI120|H3C2A14
-3C2A14:lI45|H3C2AE0
-3C2AE0:lI98|H3C2BA4
-3C2BA4:lI99|H3C2C60
-3C2C60:lI112|H3C2D10
-3C2D10:lI105|H3C2DB8
-3C2DB8:lI111|N
-3C20B8:lI98|H3C216C
-3C216C:lI99|H3C2218
-3C2218:lI112|H3C22CC
-3C22CC:lI105|H3C2388
-3C2388:lI111|N
-3C2010:lH3C20C8|H3C20D4
-3C20C8:t2:H3C217C,H3C2184
-3C2184:lI97|H3C2230
-3C2230:lI112|H3C22E4
-3C22E4:lI112|H3C2398
-3C2398:lI108|H3C244C
-3C244C:lI105|H3C24F8
-3C24F8:lI99|H3C25B4
-3C25B4:lI97|H3C2668
-3C2668:lI116|H3C271C
-3C271C:lI105|H3C27D8
-3C27D8:lI111|H3C2894
-3C2894:lI110|H3C2958
-3C2958:lI47|H3C2A1C
-3C2A1C:lI114|H3C2AE8
-3C2AE8:lI116|H3C2BAC
-3C2BAC:lI102|N
-3C217C:lI114|H3C2228
-3C2228:lI116|H3C22DC
-3C22DC:lI102|N
-3C20D4:lH3C218C|H3C2198
-3C218C:t2:H3C2238,H3C2240
-3C2240:lI97|H3C22F4
-3C22F4:lI112|H3C23A8
-3C23A8:lI112|H3C2454
-3C2454:lI108|H3C2500
-3C2500:lI105|H3C25BC
-3C25BC:lI99|H3C2670
-3C2670:lI97|H3C2724
-3C2724:lI116|H3C27E0
-3C27E0:lI105|H3C289C
-3C289C:lI111|H3C2960
-3C2960:lI110|H3C2A24
-3C2A24:lI47|H3C2AF0
-3C2AF0:lI112|H3C2BB4
-3C2BB4:lI111|H3C2C68
-3C2C68:lI119|H3C2D18
-3C2D18:lI101|H3C2DC0
-3C2DC0:lI114|H3C2E48
-3C2E48:lI112|H3C2EC0
-3C2EC0:lI111|H3C2F38
-3C2F38:lI105|H3C2FA8
-3C2FA8:lI110|H3C3010
-3C3010:lI116|N
-3C2238:lI112|H3C22EC
-3C22EC:lI112|H3C23A0
-3C23A0:lI116|N
-3C2198:lH3C2248|H3C2254
-3C2248:t2:H3C22FC,H3C2304
-3C2304:lI97|H3C23B8
-3C23B8:lI112|H3C245C
-3C245C:lI112|H3C2508
-3C2508:lI108|H3C25C4
-3C25C4:lI105|H3C2678
-3C2678:lI99|H3C272C
-3C272C:lI97|H3C27E8
-3C27E8:lI116|H3C28A4
-3C28A4:lI105|H3C2968
-3C2968:lI111|H3C2A2C
-3C2A2C:lI110|H3C2AF8
-3C2AF8:lI47|H3C2BBC
-3C2BBC:lI112|H3C2C70
-3C2C70:lI111|H3C2D20
-3C2D20:lI115|H3C2DC8
-3C2DC8:lI116|H3C2E50
-3C2E50:lI115|H3C2EC8
-3C2EC8:lI99|H3C2F40
-3C2F40:lI114|H3C2FB0
-3C2FB0:lI105|H3C3018
-3C3018:lI112|H3C3078
-3C3078:lI116|N
-3C22FC:lI97|H3C23B0
-3C23B0:lI105|N
-3C2254:lH3C230C|H3C2318
-3C230C:t2:H3C23C0,H3C23C8
-3C23C8:lI97|H3C246C
-3C246C:lI112|H3C2518
-3C2518:lI112|H3C25CC
-3C25CC:lI108|H3C2680
-3C2680:lI105|H3C2734
-3C2734:lI99|H3C27F0
-3C27F0:lI97|H3C28AC
-3C28AC:lI116|H3C2970
-3C2970:lI105|H3C2A34
-3C2A34:lI111|H3C2B00
-3C2B00:lI110|H3C2BC4
-3C2BC4:lI47|H3C2C78
-3C2C78:lI112|H3C2D28
-3C2D28:lI111|H3C2DD0
-3C2DD0:lI115|H3C2E58
-3C2E58:lI116|H3C2ED0
-3C2ED0:lI115|H3C2F48
-3C2F48:lI99|H3C2FB8
-3C2FB8:lI114|H3C3020
-3C3020:lI105|H3C3080
-3C3080:lI112|H3C30D8
-3C30D8:lI116|N
-3C23C0:lI101|H3C2464
-3C2464:lI112|H3C2510
-3C2510:lI115|N
-3C2318:lH3C23D0|H3C23DC
-3C23D0:t2:H3C2474,H3C247C
-3C247C:lI97|H3C2528
-3C2528:lI112|H3C25D4
-3C25D4:lI112|H3C2688
-3C2688:lI108|H3C273C
-3C273C:lI105|H3C27F8
-3C27F8:lI99|H3C28B4
-3C28B4:lI97|H3C2978
-3C2978:lI116|H3C2A3C
-3C2A3C:lI105|H3C2B08
-3C2B08:lI111|H3C2BCC
-3C2BCC:lI110|H3C2C80
-3C2C80:lI47|H3C2D30
-3C2D30:lI112|H3C2DD8
-3C2DD8:lI111|H3C2E60
-3C2E60:lI115|H3C2ED8
-3C2ED8:lI116|H3C2F50
-3C2F50:lI115|H3C2FC0
-3C2FC0:lI99|H3C3028
-3C3028:lI114|H3C3088
-3C3088:lI105|H3C30E0
-3C30E0:lI112|H3C3130
-3C3130:lI116|N
-3C2474:lI112|H3C2520
-3C2520:lI115|N
-3C23DC:lH3C2484|H3C2490
-3C2484:t2:H3C2530,H3C2538
-3C2538:lI97|H3C25E4
-3C25E4:lI112|H3C2698
-3C2698:lI112|H3C2744
-3C2744:lI108|H3C2800
-3C2800:lI105|H3C28BC
-3C28BC:lI99|H3C2980
-3C2980:lI97|H3C2A44
-3C2A44:lI116|H3C2B10
-3C2B10:lI105|H3C2BD4
-3C2BD4:lI111|H3C2C88
-3C2C88:lI110|H3C2D38
-3C2D38:lI47|H3C2DE0
-3C2DE0:lI112|H3C2E68
-3C2E68:lI100|H3C2EE0
-3C2EE0:lI102|N
-3C2530:lI112|H3C25DC
-3C25DC:lI100|H3C2690
-3C2690:lI102|N
-3C2490:lH3C2540|H3C254C
-3C2540:t2:H3C25EC,H3C25F4
-3C25F4:lI97|H3C26A8
-3C26A8:lI112|H3C2754
-3C2754:lI112|H3C2808
-3C2808:lI108|H3C28C4
-3C28C4:lI105|H3C2988
-3C2988:lI99|H3C2A4C
-3C2A4C:lI97|H3C2B18
-3C2B18:lI116|H3C2BDC
-3C2BDC:lI105|H3C2C90
-3C2C90:lI111|H3C2D40
-3C2D40:lI110|H3C2DE8
-3C2DE8:lI47|H3C2E70
-3C2E70:lI111|H3C2EE8
-3C2EE8:lI100|H3C2F58
-3C2F58:lI97|N
-3C25EC:lI111|H3C26A0
-3C26A0:lI100|H3C274C
-3C274C:lI97|N
-3C254C:lH3C25FC|H3C2608
-3C25FC:t2:H3C26B0,H3C26B8
-3C26B8:lI97|H3C2764
-3C2764:lI112|H3C2818
-3C2818:lI112|H3C28CC
-3C28CC:lI108|H3C2990
-3C2990:lI105|H3C2A54
-3C2A54:lI99|H3C2B20
-3C2B20:lI97|H3C2BE4
-3C2BE4:lI116|H3C2C98
-3C2C98:lI105|H3C2D48
-3C2D48:lI111|H3C2DF0
-3C2DF0:lI110|H3C2E78
-3C2E78:lI47|H3C2EF0
-3C2EF0:lI111|H3C2F60
-3C2F60:lI99|H3C2FC8
-3C2FC8:lI116|H3C3030
-3C3030:lI101|H3C3090
-3C3090:lI116|H3C30E8
-3C30E8:lI45|H3C3138
-3C3138:lI115|H3C3180
-3C3180:lI116|H3C31C8
-3C31C8:lI114|H3C3210
-3C3210:lI101|H3C3258
-3C3258:lI97|H3C32A0
-3C32A0:lI109|N
-3C26B0:lI98|H3C275C
-3C275C:lI105|H3C2810
-3C2810:lI110|N
-3C2608:lH3C26C0|H3C26CC
-3C26C0:t2:H3C276C,H3C2774
-3C2774:lI97|H3C2828
-3C2828:lI112|H3C28DC
-3C28DC:lI112|H3C2998
-3C2998:lI108|H3C2A5C
-3C2A5C:lI105|H3C2B28
-3C2B28:lI99|H3C2BEC
-3C2BEC:lI97|H3C2CA0
-3C2CA0:lI116|H3C2D50
-3C2D50:lI105|H3C2DF8
-3C2DF8:lI111|H3C2E80
-3C2E80:lI110|H3C2EF8
-3C2EF8:lI47|H3C2F68
-3C2F68:lI111|H3C2FD0
-3C2FD0:lI99|H3C3038
-3C3038:lI116|H3C3098
-3C3098:lI101|H3C30F0
-3C30F0:lI116|H3C3140
-3C3140:lI45|H3C3188
-3C3188:lI115|H3C31D0
-3C31D0:lI116|H3C3218
-3C3218:lI114|H3C3260
-3C3260:lI101|H3C32A8
-3C32A8:lI97|H3C32E8
-3C32E8:lI109|N
-3C276C:lI100|H3C2820
-3C2820:lI109|H3C28D4
-3C28D4:lI115|N
-3C26CC:lH3C277C|H3C2788
-3C277C:t2:H3C2830,H3C2838
-3C2838:lI97|H3C28EC
-3C28EC:lI112|H3C29A8
-3C29A8:lI112|H3C2A64
-3C2A64:lI108|H3C2B30
-3C2B30:lI105|H3C2BF4
-3C2BF4:lI99|H3C2CA8
-3C2CA8:lI97|H3C2D58
-3C2D58:lI116|H3C2E00
-3C2E00:lI105|H3C2E88
-3C2E88:lI111|H3C2F00
-3C2F00:lI110|H3C2F70
-3C2F70:lI47|H3C2FD8
-3C2FD8:lI111|H3C3040
-3C3040:lI99|H3C30A0
-3C30A0:lI116|H3C30F8
-3C30F8:lI101|H3C3148
-3C3148:lI116|H3C3190
-3C3190:lI45|H3C31D8
-3C31D8:lI115|H3C3220
-3C3220:lI116|H3C3268
-3C3268:lI114|H3C32B0
-3C32B0:lI101|H3C32F0
-3C32F0:lI97|H3C3320
-3C3320:lI109|N
-3C2830:lI108|H3C28E4
-3C28E4:lI104|H3C29A0
-3C29A0:lI97|N
-3C2788:lH3C2840|H3C284C
-3C2840:t2:H3C28F4,H3C28FC
-3C28FC:lI97|H3C29B8
-3C29B8:lI112|H3C2A74
-3C2A74:lI112|H3C2B38
-3C2B38:lI108|H3C2BFC
-3C2BFC:lI105|H3C2CB0
-3C2CB0:lI99|H3C2D60
-3C2D60:lI97|H3C2E08
-3C2E08:lI116|H3C2E90
-3C2E90:lI105|H3C2F08
-3C2F08:lI111|H3C2F78
-3C2F78:lI110|H3C2FE0
-3C2FE0:lI47|H3C3048
-3C3048:lI111|H3C30A8
-3C30A8:lI99|H3C3100
-3C3100:lI116|H3C3150
-3C3150:lI101|H3C3198
-3C3198:lI116|H3C31E0
-3C31E0:lI45|H3C3228
-3C3228:lI115|H3C3270
-3C3270:lI116|H3C32B8
-3C32B8:lI114|H3C32F8
-3C32F8:lI101|H3C3328
-3C3328:lI97|H3C3350
-3C3350:lI109|N
-3C28F4:lI108|H3C29B0
-3C29B0:lI122|H3C2A6C
-3C2A6C:lI104|N
-3C284C:lH3C2904|H3C2910
-3C2904:t2:H3C29C0,H3C29C8
-3C29C8:lI97|H3C2A84
-3C2A84:lI112|H3C2B48
-3C2B48:lI112|H3C2C04
-3C2C04:lI108|H3C2CB8
-3C2CB8:lI105|H3C2D68
-3C2D68:lI99|H3C2E10
-3C2E10:lI97|H3C2E98
-3C2E98:lI116|H3C2F10
-3C2F10:lI105|H3C2F80
-3C2F80:lI111|H3C2FE8
-3C2FE8:lI110|H3C3050
-3C3050:lI47|H3C30B0
-3C30B0:lI111|H3C3108
-3C3108:lI99|H3C3158
-3C3158:lI116|H3C31A0
-3C31A0:lI101|H3C31E8
-3C31E8:lI116|H3C3230
-3C3230:lI45|H3C3278
-3C3278:lI115|H3C32C0
-3C32C0:lI116|H3C3300
-3C3300:lI114|H3C3330
-3C3330:lI101|H3C3358
-3C3358:lI97|H3C3378
-3C3378:lI109|N
-3C29C0:lI101|H3C2A7C
-3C2A7C:lI120|H3C2B40
-3C2B40:lI101|N
-3C2910:lH3C29D0|H3C29DC
-3C29D0:t2:H3C2A8C,H3C2A94
-3C2A94:lI97|H3C2B58
-3C2B58:lI112|H3C2C14
-3C2C14:lI112|H3C2CC8
-3C2CC8:lI108|H3C2D78
-3C2D78:lI105|H3C2E18
-3C2E18:lI99|H3C2EA0
-3C2EA0:lI97|H3C2F18
-3C2F18:lI116|H3C2F88
-3C2F88:lI105|H3C2FF0
-3C2FF0:lI111|H3C3058
-3C3058:lI110|H3C30B8
-3C30B8:lI47|H3C3110
-3C3110:lI111|H3C3160
-3C3160:lI99|H3C31A8
-3C31A8:lI116|H3C31F0
-3C31F0:lI101|H3C3238
-3C3238:lI116|H3C3280
-3C3280:lI45|H3C32C8
-3C32C8:lI115|H3C3308
-3C3308:lI116|H3C3338
-3C3338:lI114|H3C3360
-3C3360:lI101|H3C3380
-3C3380:lI97|H3C3398
-3C3398:lI109|N
-3C2A8C:lI99|H3C2B50
-3C2B50:lI108|H3C2C0C
-3C2C0C:lI97|H3C2CC0
-3C2CC0:lI115|H3C2D70
-3C2D70:lI115|N
-3C29DC:lH3C2A9C|H3C2AA8
-3C2A9C:t2:H3C2B60,H3C2B68
-3C2B68:lI97|H3C2C24
-3C2C24:lI112|H3C2CD8
-3C2CD8:lI112|H3C2D80
-3C2D80:lI108|H3C2E20
-3C2E20:lI105|H3C2EA8
-3C2EA8:lI99|H3C2F20
-3C2F20:lI97|H3C2F90
-3C2F90:lI116|H3C2FF8
-3C2FF8:lI105|H3C3060
-3C3060:lI111|H3C30C0
-3C30C0:lI110|H3C3118
-3C3118:lI47|H3C3168
-3C3168:lI109|H3C31B0
-3C31B0:lI115|H3C31F8
-3C31F8:lI119|H3C3240
-3C3240:lI111|H3C3288
-3C3288:lI114|H3C32D0
-3C32D0:lI100|N
-3C2B60:lI100|H3C2C1C
-3C2C1C:lI111|H3C2CD0
-3C2CD0:lI99|N
-3C2AA8:lH3C2B70|H3C2B7C
-3C2B70:t2:H3C2C2C,H3C2C34
-3C2C34:lI97|H3C2CE8
-3C2CE8:lI112|H3C2D90
-3C2D90:lI112|H3C2E28
-3C2E28:lI108|H3C2EB0
-3C2EB0:lI105|H3C2F28
-3C2F28:lI99|H3C2F98
-3C2F98:lI97|H3C3000
-3C3000:lI116|H3C3068
-3C3068:lI105|H3C30C8
-3C30C8:lI111|H3C3120
-3C3120:lI110|H3C3170
-3C3170:lI47|H3C31B8
-3C31B8:lI109|H3C3200
-3C3200:lI97|H3C3248
-3C3248:lI99|H3C3290
-3C3290:lI45|H3C32D8
-3C32D8:lI99|H3C3310
-3C3310:lI111|H3C3340
-3C3340:lI109|H3C3368
-3C3368:lI112|H3C3388
-3C3388:lI97|H3C33A0
-3C33A0:lI99|H3C33B0
-3C33B0:lI116|H3C33C0
-3C33C0:lI112|H3C33D0
-3C33D0:lI114|H3C33E0
-3C33E0:lI111|N
-3C2C2C:lI99|H3C2CE0
-3C2CE0:lI112|H3C2D88
-3C2D88:lI116|N
-3C2B7C:lH3C2C3C|N
-3C2C3C:t2:H3C2CF0,H3C2CF8
-3C2CF8:lI97|H3C2DA0
-3C2DA0:lI112|H3C2E38
-3C2E38:lI112|H3C2EB8
-3C2EB8:lI108|H3C2F30
-3C2F30:lI105|H3C2FA0
-3C2FA0:lI99|H3C3008
-3C3008:lI97|H3C3070
-3C3070:lI116|H3C30D0
-3C30D0:lI105|H3C3128
-3C3128:lI111|H3C3178
-3C3178:lI110|H3C31C0
-3C31C0:lI47|H3C3208
-3C3208:lI109|H3C3250
-3C3250:lI97|H3C3298
-3C3298:lI99|H3C32E0
-3C32E0:lI45|H3C3318
-3C3318:lI98|H3C3348
-3C3348:lI105|H3C3370
-3C3370:lI110|H3C3390
-3C3390:lI104|H3C33A8
-3C33A8:lI101|H3C33B8
-3C33B8:lI120|H3C33C8
-3C33C8:lI52|H3C33D8
-3C33D8:lI48|N
-3C2CF0:lI104|H3C2D98
-3C2D98:lI113|H3C2E30
-3C2E30:lI120|N
-3BDBCC:lH3BDA78|H3BDA8C
-3BDA78:t2:A4:port,I8888
-3BDA8C:lH3BDB04|H3BDB10
-3BDB04:t2:AC:bind_address,H3BDB64
-3BDB64:t4:I127,I0,I0,I1
-3BDB10:lH3BDB78|H3BDB84
-3BDB78:t2:AB:server_name,H3BDBD4
-3BDBD4:lI108|H3BDC24
-3BDC24:lI111|H3BDC88
-3BDC88:lI99|H3BDCF0
-3BDCF0:lI97|H3BDD70
-3BDD70:lI108|H3BDDF8
-3BDDF8:lI104|H3BDE90
-3BDE90:lI111|H3BDF40
-3BDF40:lI115|H3BDFFC
-3BDFFC:lI116|N
-3BDB84:lH3BDBDC|H3BDBE8
-3BDBDC:t2:AE:max_header_siz,I1024
-3BDBE8:lH3BDC2C|H3BDC38
-3BDC2C:t2:A11:max_header_action,A8:reply414
-3BDC38:lH3BDC90|H3BDC9C
-3BDC90:t2:A8:com_type,A7:ip_comm
-3BDC9C:lH3BDCF8|H3BDD04
-3BDCF8:t2:A7:modules,H3BDD78
-3BDD78:lA9:mod_alias|H3BDE00
-3BDE00:lA8:mod_auth|H3BDE98
-3BDE98:lA7:mod_esi|H3BDF48
-3BDF48:lAB:mod_actions|H3BE004
-3BE004:lA7:mod_cgi|H3BE0D0
-3BE0D0:lAB:mod_include|H3BE1A4
-3BE1A4:lA7:mod_dir|H3BE288
-3BE288:lA7:mod_get|H3BE378
-3BE378:lA8:mod_head|H3BE47C
-3BE47C:lA7:mod_log|H3BE580
-3BE580:lAC:mod_disk_log|N
-3BDD04:lH3BDD80|H3BDD8C
-3BDD80:t2:AF:directory_index,H3BDE08
-3BDE08:lH3BDEA0|N
-3BDEA0:lI105|H3BDF50
-3BDF50:lI110|H3BE00C
-3BE00C:lI100|H3BE0D8
-3BE0D8:lI101|H3BE1AC
-3BE1AC:lI120|H3BE290
-3BE290:lI46|H3BE380
-3BE380:lI104|H3BE484
-3BE484:lI116|H3BE588
-3BE588:lI109|H3BE68C
-3BE68C:lI108|N
-3BDD8C:lH3BDE10|H3BDE1C
-3BDE10:t2:AC:default_type,H3BDEA8
-3BDEA8:lI116|H3BDF58
-3BDF58:lI101|H3BE014
-3BE014:lI120|H3BE0E0
-3BE0E0:lI116|H3BE1B4
-3BE1B4:lI47|H3BE298
-3BE298:lI112|H3BE388
-3BE388:lI108|H3BE48C
-3BE48C:lI97|H3BE590
-3BE590:lI105|H3BE694
-3BE694:lI110|N
-3BDE1C:lH3BDEB0|H3BDEBC
-3BDEB0:t2:A10:erl_script_alias,H3BDF60
-3BDF60:t2:H3BE01C,H3BE024
-3BE024:lH3BE0F0|N
-3BE0F0:lI119|H3BE1C4
-3BE1C4:lI101|H3BE2A8
-3BE2A8:lI98|H3BE398
-3BE398:lI116|H3BE49C
-3BE49C:lI111|H3BE5A0
-3BE5A0:lI111|H3BE6A4
-3BE6A4:lI108|N
-3BE01C:lI47|H3BE0E8
-3BE0E8:lI119|H3BE1BC
-3BE1BC:lI101|H3BE2A0
-3BE2A0:lI98|H3BE390
-3BE390:lI116|H3BE494
-3BE494:lI111|H3BE598
-3BE598:lI111|H3BE69C
-3BE69C:lI108|N
-3BDEBC:lH3BDF6C|H3BDF78
-3BDF6C:t2:A5:alias,H3BE02C
-3BE02C:t2:H3BE0F8,H3BE100
-3BE100:lI47|H3BE1D4
-3BE1D4:lI99|H3BE2B8
-3BE2B8:lI108|H3BE3A8
-3BE3A8:lI101|H3BE4AC
-3BE4AC:lI97|H3BE5B0
-3BE5B0:lI114|H3BE6B4
-3BE6B4:lI99|H3BE7A8
-3BE7A8:lI97|H3BE894
-3BE894:lI115|H3BE980
-3BE980:lI101|H3BEA74
-3BEA74:lI47|H3BEB68
-3BEB68:lI111|H3BEC54
-3BEC54:lI116|H3BED40
-3BED40:lI112|H3BEE2C
-3BEE2C:lI47|H3BEF00
-3BEF00:lI101|H3BEFD4
-3BEFD4:lI114|H3BF0A0
-3BF0A0:lI116|H3BF174
-3BF174:lI115|H3BF238
-3BF238:lI47|H3BF2FC
-3BF2FC:lI108|H3BF3A8
-3BF3A8:lI105|H3BF45C
-3BF45C:lI98|H3BF518
-3BF518:lI47|H3BF5DC
-3BF5DC:lI111|H3BF6B0
-3BF6B0:lI98|H3BF784
-3BF784:lI115|H3BF858
-3BF858:lI101|H3BF93C
-3BF93C:lI114|H3BFA18
-3BFA18:lI118|H3BFAF4
-3BFAF4:lI101|H3BFBD0
-3BFBD0:lI114|H3BFC9C
-3BFC9C:lI47|H3BFD60
-3BFD60:lI112|H3BFE2C
-3BFE2C:lI114|H3BFEE0
-3BFEE0:lI105|H3BFF94
-3BFF94:lI118|H3C0040
-3C0040:lI47|H3C00EC
-3C00EC:lI99|H3C0198
-3C0198:lI114|H3C024C
-3C024C:lI97|H3C0308
-3C0308:lI115|H3C03BC
-3C03BC:lI104|H3C0458
-3C0458:lI100|H3C04F4
-3C04F4:lI117|H3C0590
-3C0590:lI109|H3C0634
-3C0634:lI112|H3C06E0
-3C06E0:lI95|H3C078C
-3C078C:lI118|H3C0830
-3C0830:lI105|H3C08BC
-3C08BC:lI101|H3C0950
-3C0950:lI119|H3C09E4
-3C09E4:lI101|H3C0A80
-3C0A80:lI114|N
-3BE0F8:lI47|H3BE1CC
-3BE1CC:lI99|H3BE2B0
-3BE2B0:lI114|H3BE3A0
-3BE3A0:lI97|H3BE4A4
-3BE4A4:lI115|H3BE5A8
-3BE5A8:lI104|H3BE6AC
-3BE6AC:lI100|H3BE7A0
-3BE7A0:lI117|H3BE88C
-3BE88C:lI109|H3BE978
-3BE978:lI112|H3BEA6C
-3BEA6C:lI95|H3BEB60
-3BEB60:lI118|H3BEC4C
-3BEC4C:lI105|H3BED38
-3BED38:lI101|H3BEE24
-3BEE24:lI119|H3BEEF8
-3BEEF8:lI101|H3BEFCC
-3BEFCC:lI114|N
-3BDF78:lH3BE038|H3BE044
-3BE038:t2:A5:alias,H3BE108
-3BE108:t2:H3BE1DC,H3BE1E4
-3BE1E4:lI47|H3BE2C8
-3BE2C8:lI99|H3BE3B8
-3BE3B8:lI108|H3BE4BC
-3BE4BC:lI101|H3BE5C0
-3BE5C0:lI97|H3BE6C4
-3BE6C4:lI114|H3BE7B8
-3BE7B8:lI99|H3BE8A4
-3BE8A4:lI97|H3BE990
-3BE990:lI115|H3BEA84
-3BEA84:lI101|H3BEB78
-3BEB78:lI47|H3BEC64
-3BEC64:lI111|H3BED50
-3BED50:lI116|H3BEE3C
-3BEE3C:lI112|H3BEF10
-3BEF10:lI47|H3BEFE4
-3BEFE4:lI101|H3BF0B0
-3BF0B0:lI114|H3BF184
-3BF184:lI116|H3BF248
-3BF248:lI115|H3BF304
-3BF304:lI47|H3BF3B0
-3BF3B0:lI101|H3BF464
-3BF464:lI114|H3BF520
-3BF520:lI116|H3BF5E4
-3BF5E4:lI115|H3BF6B8
-3BF6B8:lI47|H3BF78C
-3BF78C:lI100|H3BF860
-3BF860:lI111|H3BF944
-3BF944:lI99|H3BFA20
-3BFA20:lI47|H3BFAFC
-3BFAFC:lI104|H3BFBD8
-3BFBD8:lI116|H3BFCA4
-3BFCA4:lI109|H3BFD68
-3BFD68:lI108|N
-3BE1DC:lI47|H3BE2C0
-3BE2C0:lI99|H3BE3B0
-3BE3B0:lI114|H3BE4B4
-3BE4B4:lI97|H3BE5B8
-3BE5B8:lI115|H3BE6BC
-3BE6BC:lI104|H3BE7B0
-3BE7B0:lI100|H3BE89C
-3BE89C:lI117|H3BE988
-3BE988:lI109|H3BEA7C
-3BEA7C:lI112|H3BEB70
-3BEB70:lI95|H3BEC5C
-3BEC5C:lI101|H3BED48
-3BED48:lI114|H3BEE34
-3BEE34:lI116|H3BEF08
-3BEF08:lI115|H3BEFDC
-3BEFDC:lI95|H3BF0A8
-3BF0A8:lI100|H3BF17C
-3BF17C:lI111|H3BF240
-3BF240:lI99|N
-3BE044:lH3BE114|H3BE120
-3BE114:t2:A5:alias,H3BE1EC
-3BE1EC:t2:H3BE2D0,H3BE2D8
-3BE2D8:lI47|H3BE3C8
-3BE3C8:lI99|H3BE4CC
-3BE4CC:lI108|H3BE5D0
-3BE5D0:lI101|H3BE6D4
-3BE6D4:lI97|H3BE7C8
-3BE7C8:lI114|H3BE8B4
-3BE8B4:lI99|H3BE9A0
-3BE9A0:lI97|H3BEA94
-3BEA94:lI115|H3BEB88
-3BEB88:lI101|H3BEC74
-3BEC74:lI47|H3BED60
-3BED60:lI111|H3BEE4C
-3BEE4C:lI116|H3BEF20
-3BEF20:lI112|H3BEFEC
-3BEFEC:lI47|H3BF0B8
-3BF0B8:lI101|H3BF18C
-3BF18C:lI114|H3BF250
-3BF250:lI116|H3BF30C
-3BF30C:lI115|H3BF3B8
-3BF3B8:lI47|H3BF46C
-3BF46C:lI108|H3BF528
-3BF528:lI105|H3BF5EC
-3BF5EC:lI98|H3BF6C0
-3BF6C0:lI47|H3BF794
-3BF794:lI111|H3BF868
-3BF868:lI98|H3BF94C
-3BF94C:lI115|H3BFA28
-3BFA28:lI101|H3BFB04
-3BFB04:lI114|H3BFBE0
-3BFBE0:lI118|H3BFCAC
-3BFCAC:lI101|H3BFD70
-3BFD70:lI114|H3BFE34
-3BFE34:lI47|H3BFEE8
-3BFEE8:lI100|H3BFF9C
-3BFF9C:lI111|H3C0048
-3C0048:lI99|H3C00F4
-3C00F4:lI47|H3C01A0
-3C01A0:lI104|H3C0254
-3C0254:lI116|H3C0310
-3C0310:lI109|H3C03C4
-3C03C4:lI108|N
-3BE2D0:lI47|H3BE3C0
-3BE3C0:lI99|H3BE4C4
-3BE4C4:lI114|H3BE5C8
-3BE5C8:lI97|H3BE6CC
-3BE6CC:lI115|H3BE7C0
-3BE7C0:lI104|H3BE8AC
-3BE8AC:lI100|H3BE998
-3BE998:lI117|H3BEA8C
-3BEA8C:lI109|H3BEB80
-3BEB80:lI112|H3BEC6C
-3BEC6C:lI95|H3BED58
-3BED58:lI100|H3BEE44
-3BEE44:lI111|H3BEF18
-3BEF18:lI99|N
-3BE120:lH3BE1F8|N
-3BE1F8:t2:A10:erl_script_alias,H3BE2E0
-3BE2E0:t2:H3BE3D0,H3BE3D8
-3BE3D8:lH3BE4DC|N
-3BE4DC:lI99|H3BE5E0
-3BE5E0:lI114|H3BE6E4
-3BE6E4:lI97|H3BE7D8
-3BE7D8:lI115|H3BE8C4
-3BE8C4:lI104|H3BE9B0
-3BE9B0:lI100|H3BEAA4
-3BEAA4:lI117|H3BEB90
-3BEB90:lI109|H3BEC7C
-3BEC7C:lI112|H3BED68
-3BED68:lI95|H3BEE54
-3BEE54:lI118|H3BEF28
-3BEF28:lI105|H3BEFF4
-3BEFF4:lI101|H3BF0C0
-3BF0C0:lI119|H3BF194
-3BF194:lI101|H3BF258
-3BF258:lI114|N
-3BE3D0:lI47|H3BE4D4
-3BE4D4:lI99|H3BE5D8
-3BE5D8:lI100|H3BE6DC
-3BE6DC:lI118|H3BE7D0
-3BE7D0:lI95|H3BE8BC
-3BE8BC:lI101|H3BE9A8
-3BE9A8:lI114|H3BEA9C
-3BEA9C:lI108|N
-3BDE2C:lH3BDA9C|H3BDECC
-3BDA9C:t4:I127,I0,I0,I1
-3BDECC:lI8888|H3BDF88
-3BDF88:lN|N
-3BDD1C:lN|N
-3BDA50:t2:AD:$initial_call,H3BDAB8
-3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
-3BDA5C:t2:A9:verbosity,A7:silence
-3BDAC8:t2:AE:auth_verbosity,A7:silence
-3BDB28:t2:A12:security_verbosity,A7:silence
-3BDB9C:t2:A12:acceptor_verbosity,A7:silence
-3BDC00:t2:AA:$ancestors,H3BDC5C
-3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
-3BDCB4:lA8:web_tool|H3BDD24
-3BDD24:lP<0.27.0>|N
-3BDADC:t2:A19:request_handler_verbosity,A7:silence
-3BDB3C:t2:A5:sname,A3:man
-=proc_dictionary:<0.47.0>
-H36E688
-H36E694
-H36E6A0
-H36E6AC
-=proc_stack:<0.47.0>
-36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
-y0:I5
-y1:p<0.161>
-y2:p<0.141>
-36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
-y0:N
-36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y0:N
-36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y1:P<0.46.0>
-y2:A7:ip_comm
-y3:p<0.141>
-y4:A1B:httpd_conf__127_0_0_1__8888
-36c558:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:AE:httpd_acceptor
-y2:A8:acceptor
-y3:H36E6C8
-=proc_heap:<0.47.0>
-36E6C8:lP<0.44.0>|H36E724
-36E724:lP<0.46.0>|H36E748
-36E748:lA7:ip_comm|H36E760
-36E760:lH36E6D0|H36E778
-36E6D0:t4:I127,I0,I0,I1
-36E778:lI8888|H36E788
-36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
-36E798:lA7:silence|N
-36E688:t2:AD:$initial_call,H36E6F0
-36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
-36E694:t2:A9:verbosity,A7:silence
-36E6A0:t2:AA:$ancestors,H36E700
-36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
-36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
-36E750:lA8:web_tool|H36E768
-36E768:lP<0.27.0>|N
-36E6AC:t2:A5:sname,A3:acc
-=proc_dictionary:<0.48.0>
-H385E48
-H385E54
-=proc_stack:<0.48.0>
-3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A10:crashdump_viewer
-y3:H3AB280
-y4:A17:crashdump_viewer_server
-y5:P<0.41.0>
-3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H385E90
-=proc_heap:<0.48.0>
-3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
-385E90:lAA:gen_server|H385ED8
-385ED8:lP<0.41.0>|H385F10
-385F10:lP<0.41.0>|H385F58
-385F58:lH385FA8|H385FB4
-385FA8:t2:A5:local,A17:crashdump_viewer_server
-385FB4:lA10:crashdump_viewer|H386014
-386014:lN|H38606C
-38606C:lN|N
-385E48:t2:AD:$initial_call,H385EB0
-385EB0:t3:A3:gen,A7:init_it,H385E90
-385E54:t2:AA:$ancestors,H385EC0
-385EC0:lA6:websup|H385F08
-385F08:lA8:web_tool|H385F50
-385F50:lP<0.27.0>|N
-=proc_stack:<0.49.0>
-36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
-y0:H369E10
-y1:P<0.22.0>
-36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
-y0:N
-36a128:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.49.0>
-369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
-=atoms
-http_cache_control
-copy_word
-drop_line
-copy_line
-write_rest_of_line
-drop_to_empty_line
-read_to_empty_line_reverse
-set_pos
-read_line_backwards
-jumped
-jump_to_empty_line_or_eof
-get_pos
-translate_atoms
-translate_fun
-translate_funs
-translate_loaded_modules2
-translate_loaded_modules_totals
-translate_loaded_modules
-translate_links
-get_all_creations
-translate_node_info2
-translate_node_info
-translate_dist_info2
-translate_dist_info
-get_msg
-translate_timers
-translate_ets
-translate_ets_tables
-do_translate_sl_alloc_r7_r8
-translate_sl_alloc_r7_r8
-translate_sl_alloc_line
-do_translate_sl_alloc
-translate_sl_alloc
-translate_memory_and_allocated_area_r9b
-translate_allocated_areas
-translate_internal_table_line
-translate_index_table
-translate_hash_table
-translate_internal_tables
-translate_ports
-write_last_calls
-write_msg_q_stuff
-translate_process
-translate_processes
-erts_vsn
-translate_summary
-'Send'
-erl_crash_dump
-internal_tables
-mods
-zombies
-http_content_length
-http_content_type
-'-procs_summary_body/5-fun-0-'
-'-expanded_memory_body/2-fun-0-'
-'-expanded_memory_body/2-fun-1-'
-'-expanded_memory_body/2-fun-2-'
-'-ports_body/3-fun-0-'
-'-ets_tables_body/4-fun-0-'
-'-internal_ets_tables_table/1-fun-0-'
-'-timers_body/3-fun-0-'
-'-make_nodes_table/2-fun-0-'
-'-loaded_mods_body/5-fun-0-'
-'-funs_body/3-fun-0-'
-'-memory_body/3-fun-0-'
-'-allocated_areas_body/3-fun-0-'
-'-allocator_info_body/3-fun-0-'
-'-allocator_info_body/3-fun-1-'
-'-allocator_info_body/3-fun-2-'
-'-hash_tables_body/3-fun-0-'
-'-index_tables_body/3-fun-0-'
-enter_write_file
-replace_insrt
-'$insrt'
-special
-initial
-pretty_format
-heading
-to_gt_noreverse
-to_gt
-href_proc_port
-br
-font
-h2
-h1
-img
-href
-pre
-em
-td
-th
-tr
-frame
-frameset
-html_header
-index_tables_table
-index_tables_body
-hash_tables_table
-hash_tables_body
-allocator_info_body \ No newline at end of file
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms
deleted file mode 100644
index ce3e5d8228..0000000000
--- a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms
+++ /dev/null
@@ -1,13285 +0,0 @@
-=erl_crash_dump:0.1
-Wed Apr 21 13:22:44 2004
-Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
-System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
-Compiled: Thu Dec 18 14:07:45 2003
-Atoms: 5614
-=memory
-total: 653336887
-processes: 1768396
-processes_used: 1765460
-system: 651568491
-atom: 244837
-atom_used: 237116
-binary: 648618369
-code: 2158413
-ets: 225620
-=hash_table:atom_tab
-size: 4813
-used: 3304
-objs: 5614
-depth: 7
-=index_table:atom_tab
-size: 5700
-limit: 1048576
-used: 5614
-rate: 100
-=hash_table:module_code
-size: 97
-used: 69
-objs: 107
-depth: 5
-=index_table:module_code
-size: 110
-limit: 65536
-used: 107
-rate: 10
-=hash_table:export_list
-size: 2411
-used: 1674
-objs: 2843
-depth: 6
-=index_table:export_list
-size: 2900
-limit: 65536
-used: 2843
-rate: 100
-=hash_table:process_reg
-size: 47
-used: 16
-objs: 23
-depth: 3
-=hash_table:fun_table
-size: 397
-used: 261
-objs: 400
-depth: 4
-=hash_table:node_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=hash_table:dist_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=allocated_areas
-processes: 1765460 1768396
-ets: 225620
-sys_misc: 24634
-static: 295033
-atom_space: 65544 57967
-binary: 648618369
-atom_table: 42141
-module_table: 920
-export_table: 21336
-register_table: 252
-fun_table: 1650
-module_refs: 1024
-loaded_code: 1968915
-dist_table: 159
-node_table: 131
-bits_bufs_size: 19
-bif_timer: 13392
-link_lh: 0
-dist_buf: 0
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:sys_alloc
-option e: true
-option m: libc
-=allocator:temp_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 90
-option rsbcmt: 80
-option mmbcs: 65536
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: af
-mbcs blocks: 0 9 9
-mbcs blocks size: 0 35376 35376
-mbcs carriers: 1 1 1
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 65568 65568 65568
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 65568
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-temp_alloc calls: 6155
-temp_free calls: 6155
-temp_realloc calls: 29
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 1
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:sl_alloc
-option e: false
-=allocator:std_alloc
-option e: false
-=allocator:ll_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 4294967295
-option asbcst: 0
-option rsbcst: 0
-option rsbcmt: 0
-option mmbcs: 2097152
-option mmsbc: 0
-option mmmbc: 0
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: aobf
-mbcs blocks: 592 592 592
-mbcs blocks size: 2838520 2863304 2863304
-mbcs carriers: 2 2 2
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 2
-mbcs carriers size: 3145760 3145760 3145760
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 3145760
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-ll_alloc calls: 592
-ll_free calls: 0
-ll_realloc calls: 235
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 2
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:eheap_alloc
-versions: 2.1 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 50
-option rsbcmt: 80
-option mmbcs: 524288
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option mbsd: 3
-option as: gf
-mbcs blocks: 56 102 102
-mbcs blocks size: 833280 1638920 1638920
-mbcs carriers: 2 3 3
-mbcs mseg carriers: 1
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 1998880 3047456 3047456
-mbcs mseg carriers size: 1474560
-mbcs sys_alloc carriers size: 524320
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-eheap_alloc calls: 6971
-eheap_free calls: 6914
-eheap_realloc calls: 461
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-sys_alloc calls: 3
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:binary_alloc
-option e: false
-=allocator:ets_alloc
-option e: false
-=allocator:fix_alloc
-option e: true
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:mseg_alloc
-version: 0.9
-option amcbf: 4194304
-option rmcbf: 20
-option mcs: 5
-option cci: 1000
-cached_segments: 0
-cache_hits: 13
-segments: 2
-segments_watermark: 2
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-mseg_create calls: 4
-mseg_destroy calls: 1
-mseg_clear_cache calls: 6
-mseg_check_cache calls: 2
-=allocator:alloc_util
-option mmc: 1024
-option ycs: 1048576
-=allocator:instr
-option m: false
-option s: false
-option t: false
-=proc:<0.0.0>
-State: Waiting
-Name: init
-Spawned as: otp_ring0:start/2
-Spawned by: []
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
-Reductions: 3851
-Stack+heap: 377
-OldHeap: 610
-Heap unused: 53
-OldHeap unused: 610
-Program counter: 0x1f496c (init:loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.2.0>
-State: Waiting
-Name: erl_prim_loader
-Spawned as: erlang:apply/2
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.0.0>,#Port<0.2>]
-Reductions: 201036
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 923
-OldHeap unused: 987
-Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.4.0>
-State: Waiting
-Name: error_logger
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.0.0>]
-Reductions: 296
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 851
-OldHeap unused: 0
-Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.5.0>
-State: Waiting
-Name: application_controller
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.7.0>,<0.0.0>]
-Reductions: 1508
-Stack+heap: 1597
-OldHeap: 0
-Heap unused: 835
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.7.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.6.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.8.0>,<0.5.0>]
-Reductions: 23
-Stack+heap: 377
-OldHeap: 0
-Heap unused: 79
-OldHeap unused: 0
-Program counter: 0x248d04 (application_master:main_loop/2 + 28)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.8.0>
-State: Waiting
-Spawned as: application_master:start_it/4
-Spawned by: <0.7.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>,<0.7.0>]
-Reductions: 91
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 177
-OldHeap unused: 0
-Program counter: 0x24a26c (application_master:loop_it/4 + 40)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.9.0>
-State: Waiting
-Name: kernel_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.8.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
-Reductions: 7402
-Stack+heap: 610
-OldHeap: 987
-Heap unused: 311
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.10.0>
-State: Waiting
-Name: rex
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 44
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 144
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.11.0>
-State: Waiting
-Name: global_name_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
-Reductions: 47
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 98
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.12.0>
-State: Waiting
-Spawned as: global:init_the_locker/1
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 3
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 227
-OldHeap unused: 0
-Program counter: 0x261340 (global:loop_the_locker/2 + 92)
-CP: 0x261184 (global:init_the_locker/1 + 112)
-arity = 0
-=proc:<0.13.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 4
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 221
-OldHeap unused: 0
-Program counter: 0x265288 (global:collect_deletions/2 + 76)
-CP: 0x2651ac (global:loop_the_deleter/1 + 36)
-arity = 0
-=proc:<0.14.0>
-State: Waiting
-Name: inet_db
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 376
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 30
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.15.0>
-State: Waiting
-Name: global_group
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 71
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 92
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.16.0>
-State: Waiting
-Name: file_server_2
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 119
-Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
-Reductions: 83605
-Stack+heap: 4181
-OldHeap: 4181
-Heap unused: 1720
-OldHeap unused: 4181
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.17.0>
-State: Waiting
-Name: file_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
-Reductions: 12
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 207
-OldHeap unused: 0
-Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.18.0>
-State: Waiting
-Name: code_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 108900
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 4389
-OldHeap unused: 6765
-Program counter: 0x2a6e64 (code_server:loop/1 + 64)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.19.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.9.0>]
-Reductions: 74
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 180
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.20.0>
-State: Waiting
-Spawned as: user_drv:server/2
-Spawned by: <0.19.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
-Reductions: 596
-Stack+heap: 233
-OldHeap: 377
-Heap unused: 214
-OldHeap unused: 377
-Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.21.0>
-State: Waiting
-Name: user
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
-Reductions: 26
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 202
-OldHeap unused: 0
-Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.22.0>
-State: Waiting
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
-Reductions: 1244
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 40
-OldHeap unused: 233
-Program counter: 0x2cf238 (group:get_line1/3 + 1652)
-CP: 0x2cf230 (group:get_line1/3 + 1644)
-arity = 0
-=proc:<0.23.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 45
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 63
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.24.0>
-State: Waiting
-Name: kernel_safe_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.31.0>,<0.9.0>]
-Reductions: 133
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 198
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.25.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.22.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
-Reductions: 161
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 169
-OldHeap unused: 0
-Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
-CP: 0x2e06fc (shell:server_loop/6 + 140)
-arity = 0
-=proc:<0.27.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.25.0>]
-Reductions: 506
-Stack+heap: 4181
-OldHeap: 0
-Heap unused: 1131
-OldHeap unused: 0
-Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.31.0>
-State: Waiting
-Name: inet_gethost_native_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.24.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.32.0>,<0.24.0>]
-Reductions: 49
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 87
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.32.0>
-State: Waiting
-Name: inet_gethost_native
-Spawned as: inet_gethost_native:server_init/2
-Spawned by: <0.31.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 118
-Link list: [#Port<0.105>,<0.31.0>]
-Reductions: 65
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 13
-OldHeap unused: 0
-Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.33.0>
-State: Waiting
-Name: web_tool
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.27.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.41.0>]
-Reductions: 131773
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 2941
-OldHeap unused: 6765
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.41.0>
-State: Waiting
-Name: websup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.48.0>,<0.33.0>]
-Reductions: 118
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 205
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.43.0>
-State: Waiting
-Name: httpd_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
-Reductions: 1220
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 277
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.44.0>
-State: Waiting
-Name: httpd_acc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.47.0>,<0.43.0>]
-Reductions: 147
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 77
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.45.0>
-State: Waiting
-Name: httpd_misc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 52
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 80
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.46.0>
-State: Waiting
-Name: httpd__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 2905
-Stack+heap: 6765
-OldHeap: 10946
-Heap unused: 138
-OldHeap unused: 10946
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.47.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.44.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
-Reductions: 874
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 190
-OldHeap unused: 233
-Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
-CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
-arity = 0
-=proc:<0.48.0>
-State: Waiting
-Name: crashdump_viewer_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.41.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.56.0>,<0.41.0>]
-Reductions: 1913
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 524
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.49.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
-Reductions: 15
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 190
-OldHeap unused: 0
-Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
-CP: 0x30174c (io:parse_erl_exprs/3 + 92)
-arity = 0
-=proc:<0.56.0>
-State: Garbing
-Spawned as: erlang:apply/2
-Last scheduled in for: erlang:garbage_collect/0
-Spawned by: <0.48.0>
-Started: Wed Apr 21 13:22:27 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 121
-Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
-Reductions: 2420470
-Stack+heap: 121393
-OldHeap: 0
-Heap unused: 22172
-OldHeap unused: 0
-New heap start: FE5768E0
-New heap top: FE5D7734
-Stack top: FE5ED130
-Stack end: FE5ED1A4
-Old heap start: 0
-Old heap top: 0
-Old heap end: 0
-Program counter: 0x1a4980 (unknown function)
-CP: 0x20710c (prim_file:read/2 + 436)
-=port:#Port<0.1>
-Slot: 1
-Connected: #Port<0.0>
-Port controls linked-in driver: async
-=port:#Port<0.2>
-Slot: 2
-Connected: <0.2.0>
-Links: <0.2.0>
-Port controls linked-in driver: efile
-=port:#Port<0.4>
-Slot: 4
-Connected: <0.16.0>
-Links: <0.16.0>
-Port controls linked-in driver: efile
-=port:#Port<0.72>
-Slot: 72
-Connected: <0.20.0>
-Links: <0.20.0>
-Port controls linked-in driver: tty_sl -c -e
-=port:#Port<0.105>
-Slot: 105
-Connected: <0.32.0>
-Links: <0.32.0>
-Port controls external process: inet_gethost 4
-=port:#Port<0.141>
-Slot: 141
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=port:#Port<0.157>
-Slot: 157
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.158>
-Slot: 158
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.161>
-Slot: 161
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=ets:<0.18.0>
-Slot: 9
-Table: 9
-Name: code
-Buckets: 256
-Objects: 289
-Words: 14108
-=ets:<0.18.0>
-Slot: 10
-Table: 10
-Name: code_names
-Buckets: 256
-Objects: 47
-Words: 4334
-=ets:<0.32.0>
-Slot: 11
-Table: 11
-Name: ign_requests
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.32.0>
-Slot: 12
-Table: 12
-Name: ign_req_index
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.33.0>
-Slot: 13
-Table: 13
-Name: app_data
-Buckets: 256
-Objects: 7
-Words: 952
-=ets:<0.46.0>
-Slot: 15
-Table: 15
-Name: httpd_mime__127_0_0_1__8888
-Buckets: 256
-Objects: 105
-Words: 5742
-=ets:<0.11.0>
-Slot: 84
-Table: global_names
-Name: global_names
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 95
-Table: global_locks
-Name: global_locks
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 96
-Table: global_names_ext
-Name: global_names_ext
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.14.0>
-Slot: 316
-Table: inet_cache
-Name: inet_cache
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 340
-Table: cdv_menu_table
-Name: cdv_menu_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 341
-Table: cdv_dump_index_table
-Name: cdv_dump_index_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 342
-Table: cdv_decode_heap_table
-Name: cdv_decode_heap_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.16.0>
-Slot: 780
-Table: file_io_servers
-Name: file_io_servers
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.46.0>
-Slot: 984
-Table: httpd_conf__127_0_0_1__8888
-Name: httpd_conf__127_0_0_1__8888
-Buckets: 256
-Objects: 17
-Words: 1176
-=ets:<0.14.0>
-Slot: 1342
-Table: inet_hosts
-Name: inet_hosts
-Buckets: 256
-Objects: 4
-Words: 421
-=ets:<0.14.0>
-Slot: 1362
-Table: inet_db
-Name: inet_db
-Buckets: 256
-Objects: 20
-Words: 671
-=ets:<0.5.0>
-Slot: 1655
-Table: ac_tab
-Name: ac_tab
-Buckets: 256
-Objects: 6
-Words: 843
-=timer:<0.14.0>
-Message: refresh_timeout
-Time left: 3565692 ms
-=node:'nonode@nohost'
-=no_distribution
-=loaded_modules
-Current code: 1968915
-Old code: 0
-=mod:otp_ring0
-Current size: 489
-=mod:init
-Current size: 30110
-=mod:prim_inet
-Current size: 35532
-=mod:prim_file
-Current size: 24965
-=mod:erl_prim_loader
-Current size: 19607
-=mod:erlang
-Current size: 11137
-=mod:error_handler
-Current size: 2389
-Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
-=mod:heart
-Current size: 6687
-Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
-=mod:error_logger
-Current size: 7051
-Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
-=mod:gen_event
-Current size: 18288
-Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
-=mod:gen
-Current size: 7129
-Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
-=mod:proc_lib
-Current size: 11658
-Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
-=mod:application_controller
-Current size: 55249
-Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
-=mod:gen_server
-Current size: 18728
-Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
-=mod:sys
-Current size: 11589
-Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
-=mod:lists
-Current size: 18638
-Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
-=mod:application
-Current size: 2666
-Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
-=mod:application_master
-Current size: 10912
-Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
-=mod:kernel
-Current size: 7639
-Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
-=mod:supervisor
-Current size: 24469
-Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
-=mod:rpc
-Current size: 14539
-Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
-=mod:gb_trees
-Current size: 8274
-Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
-=mod:global
-Current size: 40753
-Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
-=mod:inet_db
-Current size: 34555
-Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
-=mod:inet_config
-Current size: 13575
-Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
-=mod:os
-Current size: 5997
-Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
-=mod:inet_udp
-Current size: 2451
-Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
-=mod:inet
-Current size: 28288
-Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
-=mod:inet_parse
-Current size: 21928
-Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
-=mod:filename
-Current size: 17411
-Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
-=mod:inet_hosts
-Current size: 3745
-Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
-=mod:erl_distribution
-Current size: 2512
-Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
-=mod:global_group
-Current size: 30960
-Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
-=mod:net_kernel
-Current size: 37648
-Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
-=mod:file_server
-Current size: 8372
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
-=mod:old_file_server
-Current size: 3074
-Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
-=mod:code
-Current size: 7419
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
-=mod:code_server
-Current size: 30811
-Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
-=mod:code_aux
-Current size: 1736
-Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
-=mod:packages
-Current size: 3119
-Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
-=mod:hipe_unified_loader
-Current size: 37330
-Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
-=mod:hipe_sparc_loader
-Current size: 1821
-Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
-=mod:ets
-Current size: 16577
-Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
-=mod:lists_sort
-Current size: 38692
-Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
-=mod:user_sup
-Current size: 2355
-Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
-=mod:supervisor_bridge
-Current size: 2944
-Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
-=mod:user_drv
-Current size: 14630
-Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
-=mod:group
-Current size: 10165
-Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
-=mod:io_lib
-Current size: 12601
-Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
-=mod:edlin
-Current size: 18178
-Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
-=mod:io_lib_format
-Current size: 16189
-Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
-=mod:kernel_config
-Current size: 3295
-Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
-=mod:shell
-Current size: 22571
-Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
-=mod:error_logger_tty_h
-Current size: 7773
-Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
-=mod:erl_eval
-Current size: 33481
-Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
-=mod:orddict
-Current size: 4872
-Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
-=mod:c
-Current size: 19555
-Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
-=mod:io
-Current size: 7417
-Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
-=mod:file
-Current size: 20795
-Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
-=mod:file_io_server
-Current size: 12071
-Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
-=mod:erl_scan
-Current size: 21891
-Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
-=mod:erl_parse
-Current size: 161233
-Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
-=mod:erl_lint
-Current size: 73159
-Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
-=mod:ordsets
-Current size: 3257
-Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
-=mod:dict
-Current size: 15637
-Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
-=mod:otp_internal
-Current size: 7133
-Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
-=mod:user_default
-Current size: 1261
-Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
-=mod:tt
-Current size: 2959
-Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
-=mod:distel
-Current size: 18214
-Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
-Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
-=mod:crashdump_viewer
-Current size: 125756
-Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
-=mod:webtool
-Current size: 29229
-Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
-=mod:gen_tcp
-Current size: 3574
-Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
-=mod:inet_tcp
-Current size: 2743
-Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
-=mod:inet_gethost_native
-Current size: 15611
-Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
-=mod:filelib
-Current size: 7202
-Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
-=mod:httpd_util
-Current size: 24068
-Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
-=mod:webtool_sup
-Current size: 695
-Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
-=mod:httpd_conf
-Current size: 33659
-Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
-=mod:regexp
-Current size: 13698
-Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
-=mod:string
-Current size: 7740
-Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
-=mod:httpd
-Current size: 7563
-Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
-=mod:httpd_sup
-Current size: 4068
-Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
-=mod:httpd_acceptor_sup
-Current size: 2161
-Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
-=mod:httpd_verbosity
-Current size: 2672
-Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
-=mod:timer
-Current size: 8223
-Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
-=mod:httpd_misc_sup
-Current size: 2066
-Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
-=mod:httpd_manager
-Current size: 28916
-Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
-=mod:mod_alias
-Current size: 6720
-Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
-=mod:mod_auth
-Current size: 25168
-Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
-=mod:mod_esi
-Current size: 22534
-Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
-=mod:mod_actions
-Current size: 3625
-Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
-=mod:mod_cgi
-Current size: 25891
-Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
-=mod:mod_include
-Current size: 34923
-Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
-=mod:mod_dir
-Current size: 13488
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
-=mod:mod_get
-Current size: 4672
-Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
-=mod:mod_head
-Current size: 3074
-Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
-=mod:mod_log
-Current size: 8546
-Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
-=mod:mod_disk_log
-Current size: 15160
-Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
-=mod:httpd_socket
-Current size: 7426
-Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
-=mod:httpd_acceptor
-Current size: 4472
-Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
-=mod:io_lib_pretty
-Current size: 8171
-Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
-=mod:httpd_request_handler
-Current size: 26393
-Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
-=mod:calendar
-Current size: 7158
-Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
-=mod:httpd_parse
-Current size: 9977
-Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
-=mod:httpd_response
-Current size: 13535
-Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
-=mod:crashdump_viewer_html
-Current size: 68343
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
-=mod:crashdump_translate
-Current size: 89840
-Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
-=fun
-Module: crashdump_viewer_html
-Uniq: 9122590
-Index: 0
-Address: 526308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 77168418
-Index: 14
-Address: 26541c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 88083515
-Index: 9
-Address: 284c30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 36747896
-Index: 4
-Address: 26df84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 80395734
-Index: 8
-Address: 265838
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 103184573
-Index: 5
-Address: 2fa59c
-Native_address: bce80
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 88265811
-Index: 24
-Address: 34f6a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 9644262
-Index: 2
-Address: 292cec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 100885585
-Index: 0
-Address: 29eb2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 128335479
-Index: 6
-Address: 26de84
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 42988083
-Index: 1
-Address: 210c14
-Native_address: bcf04
-Refc: 1
-=fun
-Module: dict
-Uniq: 7105125
-Index: 7
-Address: 354f84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 29030584
-Index: 8
-Address: 234978
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 29214351
-Index: 2
-Address: 285660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 5158633
-Index: 4
-Address: 274034
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 74624950
-Index: 25
-Address: 34f63c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 6477018
-Index: 3
-Address: 2adb6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 117885138
-Index: 7
-Address: 2ffff8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 47566924
-Index: 6
-Address: 354fb8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 114637756
-Index: 12
-Address: 313c60
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121316204
-Index: 31
-Address: 313a68
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61363639
-Index: 12
-Address: 2ad6a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 116208699
-Index: 3
-Address: 274094
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 113750737
-Index: 0
-Address: 292d54
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 12853672
-Index: 0
-Address: 222e74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108046357
-Index: 12
-Address: 4ab0b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 111569299
-Index: 47
-Address: 34e80c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 20108653
-Index: 15
-Address: 2f9f94
-Native_address: bcea4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 45252965
-Index: 15
-Address: 313c0c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 12437425
-Index: 9
-Address: 4ab3e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 30942993
-Index: 22
-Address: 34f6ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 93430337
-Index: 3
-Address: 33b100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 6604883
-Index: 2
-Address: 33b16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 36867745
-Index: 5
-Address: 255e28
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 90563105
-Index: 1
-Address: 285708
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 18519297
-Index: 7
-Address: 26ddfc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8058975
-Index: 16
-Address: 4a36b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 30694569
-Index: 7
-Address: 27d018
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 76933943
-Index: 0
-Address: 2741b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 9033258
-Index: 6
-Address: 4a4690
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 74851752
-Index: 5
-Address: 4a4798
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 50855382
-Index: 4
-Address: 2659a8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39211582
-Index: 52
-Address: 34e504
-Native_address: bceec
-Refc: 1
-=fun
-Module: file_server
-Uniq: 77665472
-Index: 0
-Address: 2a0dec
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 57487277
-Index: 8
-Address: 2fa3c4
-Native_address: bce94
-Refc: 1
-=fun
-Module: webtool
-Uniq: 87386575
-Index: 11
-Address: 4ab1c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 58991950
-Index: 8
-Address: 4a4338
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 118859163
-Index: 17
-Address: 4a34d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 38265609
-Index: 12
-Address: 354dec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 56903339
-Index: 1
-Address: 2527c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 129504763
-Index: 0
-Address: 28aae8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 44817307
-Index: 10
-Address: 354e3c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 52856894
-Index: 41
-Address: 34eb70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22623360
-Index: 23
-Address: 34f5d4
-Native_address: bceec
-Refc: 1
-=fun
-Module: orddict
-Uniq: 34963136
-Index: 0
-Address: 2fbbbc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erlang
-Uniq: 24496633
-Index: 0
-Address: 213744
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 99313855
-Index: 27
-Address: 2f9914
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 99137703
-Index: 3
-Address: 4b5dfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 124043500
-Index: 3
-Address: 222b84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 102650878
-Index: 22
-Address: 313b48
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 13333720
-Index: 12
-Address: 34fb2c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 133457
-Index: 5
-Address: 292a80
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 64640983
-Index: 4
-Address: 29e944
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 7580218
-Index: 2
-Address: 255f08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 131850870
-Index: 59
-Address: 34e6b8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 56617403
-Index: 10
-Address: 284b40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108680306
-Index: 4
-Address: 4ab5e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 90880071
-Index: 2
-Address: 26e150
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_io_server
-Uniq: 23980778
-Index: 0
-Address: 30ac30
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 12006418
-Index: 19
-Address: 2f9d54
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 81701030
-Index: 8
-Address: 526228
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 71013875
-Index: 1
-Address: 4a4ddc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: distel
-Uniq: 87740845
-Index: 2
-Address: 35c0e0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 90782401
-Index: 17
-Address: 2f9e8c
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 133882676
-Index: 6
-Address: 2e52ac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 105698088
-Index: 3
-Address: 2855b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 58370899
-Index: 0
-Address: 27d370
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 15274536
-Index: 25
-Address: 2f9a94
-Native_address: bcef4
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 94349557
-Index: 0
-Address: 252844
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 33328185
-Index: 1
-Address: 33b1d8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86971387
-Index: 16
-Address: 313db0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 53364473
-Index: 38
-Address: 34ee84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 128145687
-Index: 0
-Address: 4ab944
-Native_address: bcee4
-Refc: 1
-=fun
-Module: c
-Uniq: 98651404
-Index: 10
-Address: 2fff20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 78224618
-Index: 0
-Address: 313dcc
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 40779085
-Index: 11
-Address: 2e50c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 93517350
-Index: 4
-Address: 300090
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 58551291
-Index: 0
-Address: 234f14
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 10055518
-Index: 17
-Address: 526170
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 15795706
-Index: 19
-Address: 313bd4
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 31129467
-Index: 13
-Address: 313c44
-Native_address: bced4
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 115635393
-Index: 0
-Address: 2a1a4c
-Native_address: bcf04
-Refc: 2
-=fun
-Module: erl_eval
-Uniq: 65839696
-Index: 22
-Address: 2f9c00
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 69275064
-Index: 28
-Address: 313aa0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 55938066
-Index: 11
-Address: 354d6c
-Native_address: bceec
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 22323433
-Index: 3
-Address: 252688
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 129726129
-Index: 29
-Address: 313abc
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 84346832
-Index: 0
-Address: 3550fc
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 102096820
-Index: 7
-Address: 2e5290
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 70385762
-Index: 11
-Address: 27cf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_cgi
-Uniq: 1483038
-Index: 0
-Address: 4ec2e8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 3664813
-Index: 1
-Address: 3550b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 131143671
-Index: 6
-Address: 27d08c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 46286977
-Index: 2
-Address: 2740b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_esi
-Uniq: 49099432
-Index: 0
-Address: 4e522c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 95764905
-Index: 2
-Address: 24aaa8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: packages
-Uniq: 62890926
-Index: 0
-Address: 2ae814
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 41564771
-Index: 35
-Address: 3139f8
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 95490768
-Index: 0
-Address: 4a4dc0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121559432
-Index: 3
-Address: 313d78
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_conf
-Uniq: 21152662
-Index: 0
-Address: 4be5a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 41630916
-Index: 5
-Address: 29e914
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 19747201
-Index: 5
-Address: 313d24
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 100584837
-Index: 36
-Address: 34f0f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 64635712
-Index: 15
-Address: 34f94c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 46398361
-Index: 3
-Address: 29e9a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86699817
-Index: 27
-Address: 313b2c
-Native_address: bced4
-Refc: 1
-=fun
-Module: distel
-Uniq: 40869731
-Index: 0
-Address: 35c12c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 83701641
-Index: 1
-Address: 27d33c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_auth
-Uniq: 85845790
-Index: 0
-Address: 4dfd84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 101292714
-Index: 9
-Address: 2e519c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 134173702
-Index: 1
-Address: 265b68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 92433687
-Index: 6
-Address: 2ad9f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 62315241
-Index: 8
-Address: 354f38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 11615541
-Index: 12
-Address: 265530
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 11160090
-Index: 2
-Address: 2b6bb4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 12116524
-Index: 15
-Address: 2342c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 61620901
-Index: 2
-Address: 4fc670
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 23665189
-Index: 12
-Address: 4a3b94
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 43844413
-Index: 0
-Address: 300100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 100514258
-Index: 6
-Address: 313d08
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 54271286
-Index: 17
-Address: 34f8a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 47017252
-Index: 3
-Address: 26dfa0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 1228304
-Index: 7
-Address: 4a45a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 127131470
-Index: 10
-Address: 2655a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_server
-Uniq: 22638227
-Index: 1
-Address: 2a0e20
-Native_address: bcf04
-Refc: 1
-=fun
-Module: code_server
-Uniq: 112704920
-Index: 15
-Address: 2ad488
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88302875
-Index: 2
-Address: 2fa76c
-Native_address: bceb4
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 85808984
-Index: 1
-Address: 28ab18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 106391799
-Index: 0
-Address: 33b22c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25830519
-Index: 5
-Address: 27d0c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 110491036
-Index: 1
-Address: 2e5398
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 13128736
-Index: 5
-Address: 52627c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 84644982
-Index: 21
-Address: 313b9c
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 120577486
-Index: 3
-Address: 34fffc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 4504456
-Index: 44
-Address: 34e938
-Native_address: bceec
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 28754183
-Index: 0
-Address: 500140
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 88043334
-Index: 14
-Address: 313c28
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61592373
-Index: 0
-Address: 2adc28
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74468346
-Index: 26
-Address: 313ad8
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69896253
-Index: 21
-Address: 2f9c40
-Native_address: bce80
-Refc: 1
-=fun
-Module: global_group
-Uniq: 59656873
-Index: 4
-Address: 292ac0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 103891261
-Index: 2
-Address: 4a4d70
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 89619733
-Index: 0
-Address: 4b5e64
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 133201466
-Index: 10
-Address: 2e5180
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 32159369
-Index: 2
-Address: 4ab820
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 76861396
-Index: 2
-Address: 2adbb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 48206487
-Index: 0
-Address: 4fc6f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 118996551
-Index: 28
-Address: 34f384
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 12593774
-Index: 50
-Address: 34e60c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 48542841
-Index: 1
-Address: 50e88c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56178490
-Index: 9
-Address: 4a420c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 88212576
-Index: 4
-Address: 35bf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 79562132
-Index: 29
-Address: 34f368
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 129524917
-Index: 32
-Address: 34f2c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54029891
-Index: 23
-Address: 2f9af0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 108872092
-Index: 4
-Address: 27d0f0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 40905124
-Index: 6
-Address: 234ac0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 50124876
-Index: 10
-Address: 2ad760
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 791358
-Index: 48
-Address: 34e7b0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 18404828
-Index: 24
-Address: 313af4
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 13278653
-Index: 1
-Address: 4b5e48
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 110307423
-Index: 13
-Address: 284a7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 99592247
-Index: 0
-Address: 256118
-Native_address: bcf04
-Refc: 1
-=fun
-Module: global
-Uniq: 99918211
-Index: 2
-Address: 265af4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 71442319
-Index: 27
-Address: 34f510
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 7612785
-Index: 13
-Address: 2fa0fc
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56095795
-Index: 15
-Address: 4a38a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 23626796
-Index: 25
-Address: 313b10
-Native_address: bced4
-Refc: 1
-=fun
-Module: file_server
-Uniq: 126074974
-Index: 2
-Address: 2a0cac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 104278122
-Index: 1
-Address: 274154
-Native_address: bcefc
-Refc: 1
-=fun
-Module: sys
-Uniq: 90854051
-Index: 0
-Address: 240344
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 113334594
-Index: 2
-Address: 313d5c
-Native_address: bced4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 8832142
-Index: 7
-Address: 284e30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9159706
-Index: 42
-Address: 34eb54
-Native_address: bceec
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 123946665
-Index: 8
-Address: 26e494
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3149789
-Index: 1
-Address: 5262d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 48288621
-Index: 11
-Address: 2ffed8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8953292
-Index: 20
-Address: 4a4d54
-Native_address: bcee4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9632158
-Index: 4
-Address: 34ff88
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 31111567
-Index: 7
-Address: 29e8c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 85307443
-Index: 10
-Address: 2fa29c
-Native_address: bcec4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 104417191
-Index: 7
-Address: 313cd0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 43625777
-Index: 5
-Address: 354fec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 92698798
-Index: 3
-Address: 4ab780
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 39074546
-Index: 6
-Address: 2fa54c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 71451126
-Index: 5
-Address: 234b98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 122084387
-Index: 6
-Address: 300038
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 9625924
-Index: 14
-Address: 284a60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 128777368
-Index: 11
-Address: 313c7c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 10203723
-Index: 7
-Address: 4ab4f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 35032400
-Index: 10
-Address: 313c98
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 17252586
-Index: 34
-Address: 313a14
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 7177165
-Index: 11
-Address: 2ad734
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 115778175
-Index: 3
-Address: 4a4930
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 96440880
-Index: 51
-Address: 34e590
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 68275407
-Index: 0
-Address: 2b7340
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88854488
-Index: 16
-Address: 2f9f04
-Native_address: bcebc
-Refc: 1
-=fun
-Module: global
-Uniq: 26353848
-Index: 13
-Address: 2654e8
-Native_address: bcf04
-Refc: 3
-=fun
-Module: global
-Uniq: 93414722
-Index: 11
-Address: 265568
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 11194189
-Index: 60
-Address: 34fe0c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 125189992
-Index: 8
-Address: 2fffdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 112472016
-Index: 2
-Address: 355088
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 104426442
-Index: 5
-Address: 2e52e0
-Native_address: bceec
-Refc: 1
-=fun
-Module: global
-Uniq: 17426458
-Index: 0
-Address: 265bc4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 81191039
-Index: 5
-Address: 2ada48
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 71765042
-Index: 5
-Address: 284f74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 85855821
-Index: 2
-Address: 1fa298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 70586122
-Index: 10
-Address: 4a3fe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 87067911
-Index: 49
-Address: 34e708
-Native_address: bcef4
-Refc: 1
-=fun
-Module: distel
-Uniq: 63126735
-Index: 1
-Address: 35c0fc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: c
-Uniq: 58270309
-Index: 1
-Address: 3000e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: ets
-Uniq: 80538457
-Index: 1
-Address: 2bc1a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 69827241
-Index: 9
-Address: 34fd70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 103968752
-Index: 3
-Address: 355054
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 117175573
-Index: 21
-Address: 34f728
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 57865450
-Index: 2
-Address: 2e537c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 14705965
-Index: 20
-Address: 313b80
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 85360931
-Index: 6
-Address: 4ab56c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: kernel_config
-Uniq: 41755598
-Index: 0
-Address: 2d9e20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 7110547
-Index: 37
-Address: 34ef14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 28091577
-Index: 16
-Address: 234244
-Native_address: bcef4
-Refc: 2
-=fun
-Module: code_server
-Uniq: 96448152
-Index: 14
-Address: 2ad4e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 40177568
-Index: 13
-Address: 4a39a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 31948320
-Index: 58
-Address: 34dfdc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 54153760
-Index: 7
-Address: 265854
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 60156260
-Index: 3
-Address: 5262b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 1010616
-Index: 2
-Address: 350064
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 96784459
-Index: 1
-Address: 1fa2b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 48691771
-Index: 18
-Address: 313bb8
-Native_address: bced4
-Refc: 1
-=fun
-Module: global
-Uniq: 26895060
-Index: 9
-Address: 265710
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 109625093
-Index: 7
-Address: 2ad8fc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 59436171
-Index: 1
-Address: 3500dc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 92768306
-Index: 9
-Address: 354f04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 106430008
-Index: 3
-Address: 292b38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 79749196
-Index: 6
-Address: 1fa01c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 6014929
-Index: 9
-Address: 2fa324
-Native_address: bceac
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 57051922
-Index: 7
-Address: 234a28
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 77043468
-Index: 6
-Address: 29e8e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 36176045
-Index: 9
-Address: 52620c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 35862809
-Index: 3
-Address: 255edc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113649451
-Index: 4
-Address: 2850a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 67943969
-Index: 5
-Address: 2658f4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 109003032
-Index: 16
-Address: 5260d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 104711447
-Index: 13
-Address: 525f5c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 107666872
-Index: 9
-Address: 27cfb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 89410000
-Index: 10
-Address: 5261f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 47356870
-Index: 11
-Address: 284ab4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17873449
-Index: 56
-Address: 34e1e8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 8839441
-Index: 33
-Address: 34f25c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 82513204
-Index: 2
-Address: 222c18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 5973059
-Index: 0
-Address: 24ab7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 127832132
-Index: 0
-Address: 4b065c
-Native_address: bcefc
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 39322658
-Index: 14
-Address: 525f40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_server
-Uniq: 100284021
-Index: 0
-Address: 23d288
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 17430070
-Index: 12
-Address: 284a98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 97509773
-Index: 3
-Address: 1fa27c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 32364818
-Index: 3
-Address: 35c050
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 58576084
-Index: 32
-Address: 313a4c
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 38384851
-Index: 14
-Address: 4a3988
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 14139883
-Index: 4
-Address: 234d78
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 122590256
-Index: 0
-Address: 2fa8b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 14705629
-Index: 11
-Address: 2fa22c
-Native_address: bcedc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 9273769
-Index: 4
-Address: 2fa684
-Native_address: bcee4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 87950142
-Index: 11
-Address: 5261d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 54913678
-Index: 1
-Address: 4fc6b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 28370334
-Index: 0
-Address: 26e4b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 24927227
-Index: 40
-Address: 34ed4c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 105437500
-Index: 33
-Address: 313a30
-Native_address: bced4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 10921695
-Index: 1
-Address: 234eac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 112431564
-Index: 55
-Address: 34e22c
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 129460863
-Index: 5
-Address: 4ab5c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 89001648
-Index: 3
-Address: 27d2ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 36199507
-Index: 8
-Address: 27cfe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 35620771
-Index: 2
-Address: 5262ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 83214871
-Index: 18
-Address: 2f9e34
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 122455383
-Index: 1
-Address: 2adc0c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22389488
-Index: 31
-Address: 34f1b8
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 41869059
-Index: 12
-Address: 2fa1d4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 18130505
-Index: 45
-Address: 34e904
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 107414126
-Index: 1
-Address: 2b706c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 116638945
-Index: 28
-Address: 2f98f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 48465762
-Index: 9
-Address: 2348c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 87633852
-Index: 0
-Address: 50e97c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 28213098
-Index: 8
-Address: 4ab42c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 123630574
-Index: 4
-Address: 222b58
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 127425508
-Index: 13
-Address: 354eb4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 95048118
-Index: 16
-Address: 2ad46c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 108661978
-Index: 19
-Address: 34f75c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 21272619
-Index: 13
-Address: 34fad8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29943747
-Index: 17
-Address: 313bf0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 120240397
-Index: 4
-Address: 313d94
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 124060676
-Index: 0
-Address: 350124
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 100975346
-Index: 6
-Address: 526260
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61421476
-Index: 4
-Address: 2ada9c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45197232
-Index: 7
-Address: 34fe5c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3151900
-Index: 15
-Address: 525f24
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 77509245
-Index: 2
-Address: 4b5e2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 94110229
-Index: 8
-Address: 2ad7e4
-Native_address: bcef4
-Refc: 3
-=fun
-Module: rpc
-Uniq: 101217130
-Index: 1
-Address: 2560c4
-Native_address: bcf04
-Refc: 1
-=fun
-Module: lists
-Uniq: 103647452
-Index: 0
-Address: 244b7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 37841211
-Index: 9
-Address: 2ad77c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 40109251
-Index: 54
-Address: 34e2b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 98012300
-Index: 0
-Address: 1fa2d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 73604759
-Index: 10
-Address: 4ab270
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 12042434
-Index: 1
-Address: 313d40
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 127137775
-Index: 4
-Address: 2e531c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 45498037
-Index: 12
-Address: 27cec0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 122441107
-Index: 34
-Address: 34f1d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70933889
-Index: 46
-Address: 34e8d0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 69850797
-Index: 2
-Address: 27d308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 103965539
-Index: 13
-Address: 234684
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29979659
-Index: 30
-Address: 313a84
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17148721
-Index: 20
-Address: 34f778
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_response
-Uniq: 100673049
-Index: 0
-Address: 5165dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 10508176
-Index: 1
-Address: 4b04dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32476064
-Index: 57
-Address: 34e1c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74835078
-Index: 9
-Address: 313cec
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 60689814
-Index: 19
-Address: 4a3b78
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39269715
-Index: 5
-Address: 34ff14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 112923172
-Index: 0
-Address: 2e5404
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43010824
-Index: 14
-Address: 2fa03c
-Native_address: bce8c
-Refc: 1
-=fun
-Module: global
-Uniq: 82495254
-Index: 3
-Address: 265ac8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 48568081
-Index: 8
-Address: 2e5220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 77236637
-Index: 7
-Address: 1fa000
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 109386574
-Index: 1
-Address: 2fa804
-Native_address: bce9c
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 42613220
-Index: 14
-Address: 34f980
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 67093144
-Index: 23
-Address: 313b64
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 86833790
-Index: 11
-Address: 34fbe8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 6344855
-Index: 1
-Address: 29eabc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 5149749
-Index: 35
-Address: 34f220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 93451769
-Index: 5
-Address: 1fa120
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 117428568
-Index: 11
-Address: 234758
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 15225890
-Index: 4
-Address: 526298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 120760477
-Index: 2
-Address: 234cdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 88561919
-Index: 3
-Address: 3000ac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 108931174
-Index: 8
-Address: 313cb4
-Native_address: bced4
-Refc: 1
-=fun
-Module: rpc
-Uniq: 122901192
-Index: 4
-Address: 255e44
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32985930
-Index: 10
-Address: 34fc40
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 97968498
-Index: 1
-Address: 292b7c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 45671671
-Index: 18
-Address: 4a32d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 117968056
-Index: 3
-Address: 2fa6ec
-Native_address: bcecc
-Refc: 1
-=fun
-Module: init
-Uniq: 108717591
-Index: 4
-Address: 1fa194
-Native_address: bcf04
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 15091954
-Index: 2
-Address: 2526dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 65707495
-Index: 6
-Address: 2658a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 34473969
-Index: 17
-Address: 2ad450
-Native_address: bcef4
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 124296602
-Index: 7
-Address: 526244
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 23074707
-Index: 15
-Address: 265460
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25972856
-Index: 10
-Address: 27cf74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43110452
-Index: 24
-Address: 2f9ad4
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 106445918
-Index: 13
-Address: 2ad660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 116071286
-Index: 12
-Address: 5261b8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 130814477
-Index: 8
-Address: 284cfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 121017037
-Index: 39
-Address: 34ed80
-Native_address: bcef4
-Refc: 1
-=fun
-Module: ets
-Uniq: 104895267
-Index: 0
-Address: 2bc1bc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 104682437
-Index: 11
-Address: 4a3de0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70248777
-Index: 30
-Address: 34f30c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 13274975
-Index: 5
-Address: 300074
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 98442771
-Index: 53
-Address: 34e2d0
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69829006
-Index: 7
-Address: 2fa47c
-Native_address: bce80
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 36444943
-Index: 1
-Address: 2a1a80
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 58719455
-Index: 26
-Address: 34f5f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: timer
-Uniq: 42505885
-Index: 0
-Address: 4cd62c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54682479
-Index: 20
-Address: 2f9d08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 86070332
-Index: 1
-Address: 222d7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 54728136
-Index: 9
-Address: 2fff68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 16474219
-Index: 3
-Address: 234c60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 108831556
-Index: 10
-Address: 234810
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 72053761
-Index: 16
-Address: 34f8ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 65127616
-Index: 2
-Address: 29ea04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 126167637
-Index: 14
-Address: 234640
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113704917
-Index: 0
-Address: 285788
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 75279647
-Index: 1
-Address: 500100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 119218247
-Index: 5
-Address: 26df68
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 85690044
-Index: 4
-Address: 4b5d6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 53075592
-Index: 1
-Address: 26e16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 39490182
-Index: 2
-Address: 3000c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 75189006
-Index: 12
-Address: 234714
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 14980808
-Index: 43
-Address: 34eb38
-Native_address: bceec
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 16463468
-Index: 4
-Address: 4a4914
-Native_address: bcee4
-Refc: 1
-=fun
-Module: dict
-Uniq: 99965326
-Index: 4
-Address: 355020
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 36900786
-Index: 6
-Address: 284f3c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45447147
-Index: 18
-Address: 34f794
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32353825
-Index: 6
-Address: 34fe78
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 134052338
-Index: 8
-Address: 34fdc0
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_master
-Uniq: 23840924
-Index: 1
-Address: 24aae0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108282500
-Index: 1
-Address: 4ab918
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 31081110
-Index: 0
-Address: 210c68
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54275742
-Index: 26
-Address: 2f9a4c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 45083091
-Index: 3
-Address: 2e5350
-Native_address: bcf04
-Refc: 3
-=proc_stack:<0.0.0>
-3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H371264
-=proc_heap:<0.0.0>
-371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
-3710FC:t2:H371138,H371140
-371140:lI80|H371194
-371194:lI49|H3711E0
-3711E0:lI48|H371204
-371204:lI66|N
-371138:lI79|H37118C
-37118C:lI84|H3711D8
-3711D8:lI80|H3711FC
-3711FC:lI32|H37120C
-37120C:lI32|H371214
-371214:lI65|H37121C
-37121C:lI80|H371224
-371224:lI78|H37122C
-37122C:lI32|H371234
-371234:lI49|H37123C
-37123C:lI56|H371244
-371244:lI49|H37124C
-37124C:lI32|H371254
-371254:lI48|H37125C
-37125C:lI49|N
-37128C:t2:A7:started,A7:started
-3710F4:lH371124|H371130
-371124:t2:A16:application_controller,P<0.5.0>
-371130:lH371178|H371184
-371178:t2:AC:error_logger,P<0.4.0>
-371184:lH3711CC|N
-3711CC:t2:AF:erl_prim_loader,P<0.2.0>
-3710D8:lH3710E0|H3710EC
-3710E0:t2:A5:-root,H371108
-371108:lH371148|N
-371148:Yh13:2F636C656172636173652F6F74702F65727473
-3710EC:lH371110|H37111C
-371110:t2:A9:-progname,H371164
-371164:lH37119C|N
-37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
-37111C:lH37116C|N
-37116C:t2:A5:-home,H3711C4
-3711C4:lH3711E8|N
-3711E8:YhA:2F686F6D652F73697269
-=proc_stack:<0.2.0>
-38eca8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H367D20
-y1:P<0.1.0>
-y2:H367D28
-y3:A8:infinity
-=proc_heap:<0.2.0>
-367D20:lH367D48|H367D50
-367D48:lI47|H367D58
-367D58:lI99|H367D68
-367D68:lI108|H367D78
-367D78:lI101|H367D88
-367D88:lI97|H367D98
-367D98:lI114|H367DA8
-367DA8:lI99|H367DB8
-367DB8:lI97|H367DC8
-367DC8:lI115|H367DD8
-367DD8:lI101|H367DE8
-367DE8:lI47|H367DF8
-367DF8:lI111|H367E08
-367E08:lI116|H367E18
-367E18:lI112|H367E28
-367E28:lI47|H367E38
-367E38:lI101|H367E48
-367E48:lI114|H367E58
-367E58:lI116|H367E68
-367E68:lI115|H367E78
-367E78:lI47|H367E88
-367E88:lI108|H367E98
-367E98:lI105|H367EA8
-367EA8:lI98|H367EB8
-367EB8:lI47|H367EC8
-367EC8:lI107|H367ED8
-367ED8:lI101|H367EE8
-367EE8:lI114|H367EF8
-367EF8:lI110|H367F08
-367F08:lI101|H367F18
-367F18:lI108|H367F28
-367F28:lI47|H367F38
-367F38:lI101|H367F48
-367F48:lI98|H367F58
-367F58:lI105|H367F68
-367F68:lI110|N
-367D50:lH367D60|N
-367D60:lI47|H367D70
-367D70:lI99|H367D80
-367D80:lI108|H367D90
-367D90:lI101|H367DA0
-367DA0:lI97|H367DB0
-367DB0:lI114|H367DC0
-367DC0:lI99|H367DD0
-367DD0:lI97|H367DE0
-367DE0:lI115|H367DF0
-367DF0:lI101|H367E00
-367E00:lI47|H367E10
-367E10:lI111|H367E20
-367E20:lI116|H367E30
-367E30:lI112|H367E40
-367E40:lI47|H367E50
-367E50:lI101|H367E60
-367E60:lI114|H367E70
-367E70:lI116|H367E80
-367E80:lI115|H367E90
-367E90:lI47|H367EA0
-367EA0:lI108|H367EB0
-367EB0:lI105|H367EC0
-367EC0:lI98|H367ED0
-367ED0:lI47|H367EE0
-367EE0:lI115|H367EF0
-367EF0:lI116|H367F00
-367F00:lI100|H367F10
-367F10:lI108|H367F20
-367F20:lI105|H367F30
-367F30:lI98|H367F40
-367F40:lI47|H367F50
-367F50:lI101|H367F60
-367F60:lI98|H367F70
-367F70:lI105|H367F78
-367F78:lI110|N
-367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
-=proc_dictionary:<0.4.0>
-H3AC588
-H3AC594
-=proc_stack:<0.4.0>
-3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:H3B21E8
-y2:AC:error_logger
-y3:P<0.1.0>
-3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3AC5A8
-=proc_heap:<0.4.0>
-3B21E8:lH3B2144|H3B21E0
-3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
-3B21E0:lH3B21BC|N
-3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
-3AC610:t2:P<0.21.0>,AC:error_logger
-3AC5A8:lA9:gen_event|H3AC5E8
-3AC5E8:lP<0.1.0>|H3AC608
-3AC608:lP<0.1.0>|H3AC61C
-3AC61C:lH3AC624|H3AC630
-3AC624:t2:A5:local,AC:error_logger
-3AC630:lN|H3AC638
-3AC638:lN|H3AC640
-3AC640:lN|N
-3AC588:t2:AD:$initial_call,H3AC5B0
-3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
-3AC594:t2:AA:$ancestors,H3AC5C0
-3AC5C0:lP<0.1.0>|N
-=proc_dictionary:<0.5.0>
-H372E4C
-H372E58
-=proc_stack:<0.5.0>
-374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A16:application_controller
-y3:H3739F4
-y4:A16:application_controller
-y5:P<0.1.0>
-374720:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H372ED0
-=proc_heap:<0.5.0>
-3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
-373928:lH37391C|H372F54
-37391C:t2:A6:stdlib,A9:permanent
-372F54:lH372F90|N
-372F90:t2:A6:kernel,A9:permanent
-373914:lH373908|H372F4C
-373908:t2:A6:stdlib,A9:undefined
-372F4C:lH372F84|N
-372F84:t2:A6:kernel,P<0.7.0>
-372ED0:lAA:gen_server|H372F5C
-372F5C:lP<0.1.0>|H372F9C
-372F9C:lP<0.1.0>|H372FC4
-372FC4:lH372FEC|H372FF8
-372FEC:t2:A5:local,A16:application_controller
-372FF8:lA16:application_controller|H373018
-373018:lH373038|H373048
-373038:t3:AB:application,A6:kernel,H373060
-373060:lH373078|H373084
-373078:t2:AB:description,H37309C
-37309C:lI69|H3730C8
-3730C8:lI82|H3730FC
-3730FC:lI84|H373130
-373130:lI83|H37316C
-37316C:lI32|H3731A8
-3731A8:lI32|H3731E4
-3731E4:lI67|H373220
-373220:lI88|H37325C
-37325C:lI67|H37329C
-37329C:lI32|H3732D0
-3732D0:lI49|H3732FC
-3732FC:lI51|H373328
-373328:lI56|H373348
-373348:lI32|H373368
-373368:lI49|H373388
-373388:lI48|N
-373084:lH3730A4|H3730B0
-3730A4:t2:A3:vsn,H3730D0
-3730D0:lI50|H373104
-373104:lI46|H373138
-373138:lI57|N
-3730B0:lH3730D8|H3730E4
-3730D8:t2:A2:id,N
-3730E4:lH37310C|H373118
-37310C:t2:A7:modules,H373140
-373140:lAB:application|H373174
-373174:lA16:application_controller|H3731B0
-3731B0:lA12:application_master|H3731EC
-3731EC:lA13:application_starter|H373228
-373228:lA4:auth|H373264
-373264:lA4:code|H3732A4
-3732A4:lA8:code_aux|H3732D8
-3732D8:lA8:packages|H373304
-373304:lAB:code_server|H373330
-373330:lA9:dist_util|H373350
-373350:lAF:erl_boot_server|H373370
-373370:lA10:erl_distribution|H373390
-373390:lAF:erl_prim_loader|H3733A8
-3733A8:lA9:erl_reply|H3733C0
-3733C0:lA6:erlang|H3733D8
-3733D8:lAD:error_handler|H3733F0
-3733F0:lAC:error_logger|H373408
-373408:lA4:file|H373420
-373420:lAB:file_server|H373438
-373438:lAF:old_file_server|H373450
-373450:lAE:file_io_server|H373468
-373468:lA9:prim_file|H373480
-373480:lA6:global|H373498
-373498:lAC:global_group|H3734B0
-3734B0:lAD:global_search|H3734C8
-3734C8:lA5:group|H3734E0
-3734E0:lA5:heart|H3734F8
-3734F8:lA13:hipe_unified_loader|H373510
-373510:lA11:hipe_sparc_loader|H373520
-373520:lAF:hipe_x86_loader|H373530
-373530:lA9:inet6_tcp|H373540
-373540:lAE:inet6_tcp_dist|H373550
-373550:lA9:inet6_udp|H373560
-373560:lAB:inet_config|H373570
-373570:lAA:inet_hosts|H373580
-373580:lA13:inet_gethost_native|H373590
-373590:lAD:inet_tcp_dist|H3735A0
-3735A0:lA4:init|H3735B0
-3735B0:lA6:kernel|H3735C0
-3735C0:lAD:kernel_config|H3735D0
-3735D0:lA3:net|H3735E0
-3735E0:lA7:net_adm|H3735F0
-3735F0:lAA:net_kernel|H373600
-373600:lA2:os|H373610
-373610:lA8:ram_file|H373620
-373620:lA3:rpc|H373630
-373630:lA4:user|H373640
-373640:lA8:user_drv|H373650
-373650:lA8:user_sup|H373660
-373660:lA8:disk_log|H373670
-373670:lAA:disk_log_1|H373680
-373680:lAF:disk_log_server|H373690
-373690:lAC:disk_log_sup|H3736A0
-3736A0:lA7:dist_ac|H3736B0
-3736B0:lA8:erl_ddll|H3736C0
-3736C0:lA8:erl_epmd|H3736D0
-3736D0:lAA:erts_debug|H3736E0
-3736E0:lA7:gen_tcp|H3736F0
-3736F0:lA7:gen_udp|H373700
-373700:lA9:prim_inet|H373708
-373708:lA4:inet|H373710
-373710:lA7:inet_db|H373718
-373718:lA8:inet_dns|H373720
-373720:lAA:inet_parse|H373728
-373728:lA8:inet_res|H373730
-373730:lA8:inet_tcp|H373738
-373738:lA8:inet_udp|H373740
-373740:lA3:pg2|H373748
-373748:lA9:seq_trace|H373750
-373750:lA6:socks5|H373758
-373758:lAB:socks5_auth|H373760
-373760:lAA:socks5_tcp|H373768
-373768:lAA:socks5_udp|H373770
-373770:lAF:wrap_log_reader|H373778
-373778:lA4:zlib|H373780
-373780:lA9:otp_ring0|N
-373118:lH373148|H373154
-373148:t2:AA:registered,H37317C
-37317C:lA16:application_controller|H3731B8
-3731B8:lA9:erl_reply|H3731F4
-3731F4:lA4:auth|H373230
-373230:lAB:boot_server|H37326C
-37326C:lAB:code_server|H3732AC
-3732AC:lAF:disk_log_server|H3732E0
-3732E0:lAC:disk_log_sup|H37330C
-37330C:lAF:erl_prim_loader|H373338
-373338:lAC:error_logger|H373358
-373358:lAB:file_server|H373378
-373378:lAD:file_server_2|H373398
-373398:lAF:fixtable_server|H3733B0
-3733B0:lAC:global_group|H3733C8
-3733C8:lA12:global_name_server|H3733E0
-3733E0:lA5:heart|H3733F8
-3733F8:lA4:init|H373410
-373410:lAD:kernel_config|H373428
-373428:lAA:kernel_sup|H373440
-373440:lAA:net_kernel|H373458
-373458:lA7:net_sup|H373470
-373470:lA3:rex|H373488
-373488:lA4:user|H3734A0
-3734A0:lA9:os_server|H3734B8
-3734B8:lAB:ddll_server|H3734D0
-3734D0:lA8:erl_epmd|H3734E8
-3734E8:lA7:inet_db|H373500
-373500:lA3:pg2|N
-373154:lH373184|H373190
-373184:t2:AC:applications,N
-373190:lH3731C0|H3731CC
-3731C0:t2:A15:included_applications,N
-3731CC:lH3731FC|H373208
-3731FC:t2:A3:env,H373238
-373238:lH373274|N
-373274:t2:AC:error_logger,A3:tty
-373208:lH373240|H37324C
-373240:t2:AC:start_phases,A9:undefined
-37324C:lH373280|H37328C
-373280:t2:A4:maxT,A8:infinity
-37328C:lH3732B4|H3732C0
-3732B4:t2:A4:maxP,A8:infinity
-3732C0:lH3732E8|N
-3732E8:t2:A3:mod,H373314
-373314:t2:A6:kernel,N
-373048:lN|N
-372E4C:t2:AD:$initial_call,H372EE4
-372EE4:t3:A3:gen,A7:init_it,H372ED0
-372E58:t2:AA:$ancestors,H372EF4
-372EF4:lP<0.1.0>|N
-=proc_dictionary:<0.7.0>
-H369B78
-H369B5C
-=proc_stack:<0.7.0>
-369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:H369C2C
-y1:P<0.5.0>
-369d70:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A12:application_master
-y2:A4:init
-y3:H369B2C
-=proc_heap:<0.7.0>
-369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
-3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
-369A3C:lAB:application|H369A34
-369A34:lA16:application_controller|H369A2C
-369A2C:lA12:application_master|H369A24
-369A24:lA13:application_starter|H369A1C
-369A1C:lA4:auth|H369A14
-369A14:lA4:code|H369A0C
-369A0C:lA8:code_aux|H369A04
-369A04:lA8:packages|H3699FC
-3699FC:lAB:code_server|H3699F4
-3699F4:lA9:dist_util|H3699EC
-3699EC:lAF:erl_boot_server|H3699E4
-3699E4:lA10:erl_distribution|H3699DC
-3699DC:lAF:erl_prim_loader|H3699D4
-3699D4:lA9:erl_reply|H3699CC
-3699CC:lA6:erlang|H3699C4
-3699C4:lAD:error_handler|H3699BC
-3699BC:lAC:error_logger|H3699B4
-3699B4:lA4:file|H3699AC
-3699AC:lAB:file_server|H3699A4
-3699A4:lAF:old_file_server|H36999C
-36999C:lAE:file_io_server|H369994
-369994:lA9:prim_file|H36998C
-36998C:lA6:global|H369984
-369984:lAC:global_group|H36997C
-36997C:lAD:global_search|H369974
-369974:lA5:group|H36996C
-36996C:lA5:heart|H369964
-369964:lA13:hipe_unified_loader|H36995C
-36995C:lA11:hipe_sparc_loader|H369954
-369954:lAF:hipe_x86_loader|H36994C
-36994C:lA9:inet6_tcp|H369944
-369944:lAE:inet6_tcp_dist|H36993C
-36993C:lA9:inet6_udp|H369934
-369934:lAB:inet_config|H36992C
-36992C:lAA:inet_hosts|H369924
-369924:lA13:inet_gethost_native|H36991C
-36991C:lAD:inet_tcp_dist|H369914
-369914:lA4:init|H36990C
-36990C:lA6:kernel|H369904
-369904:lAD:kernel_config|H3698FC
-3698FC:lA3:net|H3698F4
-3698F4:lA7:net_adm|H3698EC
-3698EC:lAA:net_kernel|H3698E4
-3698E4:lA2:os|H3698DC
-3698DC:lA8:ram_file|H3698D4
-3698D4:lA3:rpc|H3698CC
-3698CC:lA4:user|H3698C4
-3698C4:lA8:user_drv|H3698BC
-3698BC:lA8:user_sup|H3698B4
-3698B4:lA8:disk_log|H3698AC
-3698AC:lAA:disk_log_1|H3698A4
-3698A4:lAF:disk_log_server|H36989C
-36989C:lAC:disk_log_sup|H369894
-369894:lA7:dist_ac|H36988C
-36988C:lA8:erl_ddll|H369884
-369884:lA8:erl_epmd|H36987C
-36987C:lAA:erts_debug|H369874
-369874:lA7:gen_tcp|H36986C
-36986C:lA7:gen_udp|H369864
-369864:lA9:prim_inet|H36985C
-36985C:lA4:inet|H369854
-369854:lA7:inet_db|H36984C
-36984C:lA8:inet_dns|H369844
-369844:lAA:inet_parse|H36983C
-36983C:lA8:inet_res|H369834
-369834:lA8:inet_tcp|H36982C
-36982C:lA8:inet_udp|H369824
-369824:lA3:pg2|H36981C
-36981C:lA9:seq_trace|H369814
-369814:lA6:socks5|H36980C
-36980C:lAB:socks5_auth|H369804
-369804:lAA:socks5_tcp|H3697FC
-3697FC:lAA:socks5_udp|H3697F4
-3697F4:lAF:wrap_log_reader|H3697EC
-3697EC:lA4:zlib|H3697E4
-3697E4:lA9:otp_ring0|N
-3697D8:t2:A6:kernel,N
-369B14:lA16:application_controller|H369B0C
-369B0C:lA9:erl_reply|H369B04
-369B04:lA4:auth|H369AFC
-369AFC:lAB:boot_server|H369AF4
-369AF4:lAB:code_server|H369AEC
-369AEC:lAF:disk_log_server|H369AE4
-369AE4:lAC:disk_log_sup|H369ADC
-369ADC:lAF:erl_prim_loader|H369AD4
-369AD4:lAC:error_logger|H369ACC
-369ACC:lAB:file_server|H369AC4
-369AC4:lAD:file_server_2|H369ABC
-369ABC:lAF:fixtable_server|H369AB4
-369AB4:lAC:global_group|H369AAC
-369AAC:lA12:global_name_server|H369AA4
-369AA4:lA5:heart|H369A9C
-369A9C:lA4:init|H369A94
-369A94:lAD:kernel_config|H369A8C
-369A8C:lAA:kernel_sup|H369A84
-369A84:lAA:net_kernel|H369A7C
-369A7C:lA7:net_sup|H369A74
-369A74:lA3:rex|H369A6C
-369A6C:lA4:user|H369A64
-369A64:lA9:os_server|H369A5C
-369A5C:lAB:ddll_server|H369A54
-369A54:lA8:erl_epmd|H369A4C
-369A4C:lA7:inet_db|H369A44
-369A44:lA3:pg2|N
-369B2C:lP<0.5.0>|H369B24
-369B24:lP<0.6.0>|H3697A8
-3697A8:lH3697B0|H369B1C
-369B1C:lA6:normal|N
-369B78:t2:AD:$initial_call,H369B68
-369B68:t3:A12:application_master,A4:init,H369B2C
-369B5C:t2:AA:$ancestors,H369B54
-369B54:lP<0.6.0>|N
-=proc_stack:<0.8.0>
-384ec0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H384BDC
-y1:A6:kernel
-y2:P<0.9.0>
-y3:P<0.7.0>
-=proc_heap:<0.8.0>
-384BDC:t2:A5:state,A3:tty
-=proc_dictionary:<0.9.0>
-H376850
-H37685C
-=proc_stack:<0.9.0>
-36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36B8E8
-y4:AA:kernel_sup
-y5:P<0.8.0>
-36be04:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3768D4
-=proc_heap:<0.9.0>
-36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
-36B8D4:lH36B8B0|H36B6E8
-36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
-376C00:lA6:kernel|N
-376BF0:t3:AA:supervisor,AA:start_link,H376C08
-376C08:lH376C10|H376C1C
-376C10:t2:A5:local,AF:kernel_safe_sup
-376C1C:lA6:kernel|H376C24
-376C24:lA4:safe|N
-36B6E8:lH36B6C4|H36B490
-36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
-376BC4:lAD:kernel_config|N
-376BB4:t3:AD:kernel_config,AA:start_link,N
-36B490:lH36B498|H36B4BC
-36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
-376B80:lA8:user_sup|N
-376B70:t3:A8:user_sup,A5:start,N
-36B4BC:lH36B4C4|H376CB0
-36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
-376B1C:lA4:code|N
-376B0C:t3:A4:code,AA:start_link,N
-376CB0:lH376CB8|H376CDC
-376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
-376AC8:lAF:old_file_server|N
-376AB8:t3:AF:old_file_server,AA:start_link,N
-376CDC:lH376CE4|H376C2C
-376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
-376A68:lA4:file|H376AB0
-376AB0:lAB:file_server|H376B04
-376B04:lAE:file_io_server|H376B68
-376B68:lA9:prim_file|N
-376A58:t3:AB:file_server,AA:start_link,N
-376C2C:lH376C34|H376C58
-376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
-376A04:lAC:global_group|N
-3769F4:t3:AC:global_group,AA:start_link,N
-376C58:lH376C60|H376C84
-376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
-37697C:lA10:erl_distribution|N
-37696C:t3:A10:erl_distribution,AA:start_link,N
-376C84:lH376C8C|H3768A0
-376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
-376904:lA7:inet_db|N
-3768F4:t3:A7:inet_db,AA:start_link,N
-3768A0:lH376938|H37695C
-376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
-3769C0:lA6:global|N
-3769B0:t3:A6:global,AA:start_link,N
-37695C:lH3769C8|N
-3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
-376A48:lA3:rpc|N
-376A38:t3:A3:rpc,AA:start_link,N
-376868:t2:A5:local,AA:kernel_sup
-3768D4:lAA:gen_server|H376964
-376964:lP<0.8.0>|H3769EC
-3769EC:lP<0.8.0>|H376A50
-376A50:lH376A9C|H376AA8
-376A9C:t2:A5:local,AA:kernel_sup
-376AA8:lAA:supervisor|H376AFC
-376AFC:lH376B50|H376B60
-376B50:t3:H376868,A6:kernel,N
-376B60:lN|N
-376850:t2:AD:$initial_call,H3768DC
-3768DC:t3:A3:gen,A7:init_it,H3768D4
-37685C:t2:AA:$ancestors,H3768EC
-3768EC:lP<0.8.0>|N
-=proc_dictionary:<0.10.0>
-H367A10
-H3679F4
-=proc_stack:<0.10.0>
-367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A3:rpc
-y3:H367AA8
-y4:A3:rex
-y5:P<0.9.0>
-367d08:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3679C4
-=proc_heap:<0.10.0>
-367AA8:t2:I0,A3:nil
-3679C4:lAA:gen_server|H3679BC
-3679BC:lP<0.9.0>|H3679B4
-3679B4:lP<0.9.0>|H367988
-367988:lH367990|H3679AC
-367990:t2:A5:local,A3:rex
-3679AC:lA3:rpc|H3679A4
-3679A4:lN|H36799C
-36799C:lN|N
-367A10:t2:AD:$initial_call,H367A00
-367A00:t3:A3:gen,A7:init_it,H3679C4
-3679F4:t2:AA:$ancestors,H3679EC
-3679EC:lAA:kernel_sup|H3679CC
-3679CC:lP<0.8.0>|N
-=proc_dictionary:<0.11.0>
-H36ADD8
-H36ADBC
-=proc_stack:<0.11.0>
-36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A6:global
-y3:H36AF0C
-y4:A12:global_name_server
-y5:P<0.9.0>
-36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36AD8C
-=proc_heap:<0.11.0>
-36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
-36AD8C:lAA:gen_server|H36AD84
-36AD84:lP<0.9.0>|H36AD7C
-36AD7C:lP<0.9.0>|H36AD50
-36AD50:lH36AD58|H36AD74
-36AD58:t2:A5:local,A12:global_name_server
-36AD74:lA6:global|H36AD6C
-36AD6C:lN|H36AD64
-36AD64:lN|N
-36ADD8:t2:AD:$initial_call,H36ADC8
-36ADC8:t3:A3:gen,A7:init_it,H36AD8C
-36ADBC:t2:AA:$ancestors,H36ADB4
-36ADB4:lAA:kernel_sup|H36AD94
-36AD94:lP<0.8.0>|N
-=proc_stack:<0.12.0>
-36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
-y0:N
-y1:N
-y2:N
-y3:N
-y4:N
-y5:N
-y6:A8:infinity
-y7:H368EB0
-y8:P<0.11.0>
-369244:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-=proc_heap:<0.12.0>
-368EB0:t3:A5:multi,A9:undefined,N
-=proc_stack:<0.13.0>
-3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
-y0:A8:infinity
-y1:N
-y2:P<0.11.0>
-3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
-y0:N
-y1:N
-y2:P<0.11.0>
-3695f0:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.13.0>
-=proc_dictionary:<0.14.0>
-H36A998
-H36A9A4
-=proc_stack:<0.14.0>
-372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:inet_db
-y3:H36A9B0
-y4:A7:inet_db
-y5:P<0.9.0>
-372e28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36A9C8
-=proc_heap:<0.14.0>
-36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
-36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
-36A9C8:lAA:gen_server|H36A9F8
-36A9F8:lP<0.9.0>|H36AA08
-36AA08:lP<0.9.0>|H36AA10
-36AA10:lH36AA18|H36AA24
-36AA18:t2:A5:local,A7:inet_db
-36AA24:lA7:inet_db|H36AA2C
-36AA2C:lN|H36AA34
-36AA34:lN|N
-36A998:t2:AD:$initial_call,H36A9D0
-36A9D0:t3:A3:gen,A7:init_it,H36A9C8
-36A9A4:t2:AA:$ancestors,H36A9E0
-36A9E0:lAA:kernel_sup|H36AA00
-36AA00:lP<0.8.0>|N
-=proc_dictionary:<0.15.0>
-H372788
-H3727F8
-H37276C
-H37280C
-H372820
-=proc_stack:<0.15.0>
-372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AC:global_group
-y3:H3728C8
-y4:AC:global_group
-y5:P<0.9.0>
-372a80:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37273C
-=proc_heap:<0.15.0>
-3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
-37273C:lAA:gen_server|H372734
-372734:lP<0.9.0>|H37272C
-37272C:lP<0.9.0>|H372700
-372700:lH372708|H372724
-372708:t2:A5:local,AC:global_group
-372724:lAC:global_group|H37271C
-37271C:lN|H372714
-372714:lN|N
-372788:t2:AD:$initial_call,H372778
-372778:t3:A3:gen,A7:init_it,H37273C
-3727F8:t2:A10:registered_names,H3727F0
-3727F0:lA9:undefined|N
-37276C:t2:AA:$ancestors,H372764
-372764:lAA:kernel_sup|H372744
-372744:lP<0.8.0>|N
-37280C:t2:A4:send,H372804
-372804:lA9:undefined|N
-372820:t2:AC:whereis_name,H372818
-372818:lA9:undefined|N
-=proc_dictionary:<0.16.0>
-H37B918
-H37B924
-=proc_stack:<0.16.0>
-3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AB:file_server
-y3:p<0.4>
-y4:AD:file_server_2
-y5:P<0.9.0>
-3d3058:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37B930
-=proc_heap:<0.16.0>
-37B930:lAA:gen_server|H37B950
-37B950:lP<0.9.0>|H37B960
-37B960:lP<0.9.0>|H37B968
-37B968:lH37B970|H37B97C
-37B970:t2:A5:local,AD:file_server_2
-37B97C:lAB:file_server|H37B984
-37B984:lN|H37B98C
-37B98C:lN|N
-37B918:t2:AD:$initial_call,H37B938
-37B938:t3:A3:gen,A7:init_it,H37B930
-37B924:t2:AA:$ancestors,H37B948
-37B948:lAA:kernel_sup|H37B958
-37B958:lP<0.8.0>|N
-=proc_stack:<0.17.0>
-3763cc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H376084
-y1:P<0.16.0>
-y2:P<0.9.0>
-=proc_heap:<0.17.0>
-376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
-=proc_stack:<0.18.0>
-3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H38AE84
-y1:P<0.9.0>
-=proc_heap:<0.18.0>
-38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
-38AEB8:lH3873D4|H38AEE0
-3873D4:lI46|N
-38AEE0:lH3873EC|H38AF10
-3873EC:lI47|H387404
-387404:lI99|H387424
-387424:lI108|H38744C
-38744C:lI101|H38747C
-38747C:lI97|H3874B4
-3874B4:lI114|H3874F4
-3874F4:lI99|H38753C
-38753C:lI97|H38758C
-38758C:lI115|H3875E4
-3875E4:lI101|H387644
-387644:lI47|H3876AC
-3876AC:lI111|H38771C
-38771C:lI116|H387794
-387794:lI112|H387814
-387814:lI47|H38789C
-38789C:lI101|H38792C
-38792C:lI114|H3879BC
-3879BC:lI116|H387A54
-387A54:lI115|H387AF4
-387AF4:lI47|H387B9C
-387B9C:lI108|H387C4C
-387C4C:lI105|H387D04
-387D04:lI98|H387DC4
-387DC4:lI47|H387E8C
-387E8C:lI107|H387F5C
-387F5C:lI101|H388034
-388034:lI114|H388114
-388114:lI110|H3881FC
-3881FC:lI101|H3882EC
-3882EC:lI108|H3883E4
-3883E4:lI47|H3884E4
-3884E4:lI101|H3885EC
-3885EC:lI98|H3886FC
-3886FC:lI105|H388814
-388814:lI110|N
-38AF10:lH38740C|H38AF48
-38740C:lI47|H38742C
-38742C:lI99|H387454
-387454:lI108|H387484
-387484:lI101|H3874BC
-3874BC:lI97|H3874FC
-3874FC:lI114|H387544
-387544:lI99|H387594
-387594:lI97|H3875EC
-3875EC:lI115|H38764C
-38764C:lI101|H3876B4
-3876B4:lI47|H387724
-387724:lI111|H38779C
-38779C:lI116|H38781C
-38781C:lI112|H3878A4
-3878A4:lI47|H387934
-387934:lI101|H3879C4
-3879C4:lI114|H387A5C
-387A5C:lI116|H387AFC
-387AFC:lI115|H387BA4
-387BA4:lI47|H387C54
-387C54:lI108|H387D0C
-387D0C:lI105|H387DCC
-387DCC:lI98|H387E94
-387E94:lI47|H387F64
-387F64:lI115|H38803C
-38803C:lI116|H38811C
-38811C:lI100|H388204
-388204:lI108|H3882F4
-3882F4:lI105|H3883EC
-3883EC:lI98|H3884EC
-3884EC:lI47|H3885F4
-3885F4:lI101|H388704
-388704:lI98|H38881C
-38881C:lI105|H38892C
-38892C:lI110|N
-38AF48:lH387434|H38AF70
-387434:lI47|H38745C
-38745C:lI99|H38748C
-38748C:lI108|H3874C4
-3874C4:lI101|H387504
-387504:lI97|H38754C
-38754C:lI114|H38759C
-38759C:lI99|H3875F4
-3875F4:lI97|H387654
-387654:lI115|H3876BC
-3876BC:lI101|H38772C
-38772C:lI47|H3877A4
-3877A4:lI111|H387824
-387824:lI116|H3878AC
-3878AC:lI112|H38793C
-38793C:lI47|H3879CC
-3879CC:lI101|H387A64
-387A64:lI114|H387B04
-387B04:lI116|H387BAC
-387BAC:lI115|H387C5C
-387C5C:lI47|H387D14
-387D14:lI108|H387DD4
-387DD4:lI105|H387E9C
-387E9C:lI98|H387F6C
-387F6C:lI47|H388044
-388044:lI119|H388124
-388124:lI101|H38820C
-38820C:lI98|H3882FC
-3882FC:lI116|H3883F4
-3883F4:lI111|H3884F4
-3884F4:lI111|H3885FC
-3885FC:lI108|H38870C
-38870C:lI47|H388824
-388824:lI101|H388934
-388934:lI98|H388A44
-388A44:lI105|H388B54
-388B54:lI110|N
-38AF70:lH387464|H38AF98
-387464:lI47|H387494
-387494:lI99|H3874CC
-3874CC:lI108|H38750C
-38750C:lI101|H387554
-387554:lI97|H3875A4
-3875A4:lI114|H3875FC
-3875FC:lI99|H38765C
-38765C:lI97|H3876C4
-3876C4:lI115|H387734
-387734:lI101|H3877AC
-3877AC:lI47|H38782C
-38782C:lI111|H3878B4
-3878B4:lI116|H387944
-387944:lI112|H3879D4
-3879D4:lI47|H387A6C
-387A6C:lI101|H387B0C
-387B0C:lI114|H387BB4
-387BB4:lI116|H387C64
-387C64:lI115|H387D1C
-387D1C:lI47|H387DDC
-387DDC:lI108|H387EA4
-387EA4:lI105|H387F74
-387F74:lI98|H38804C
-38804C:lI47|H38812C
-38812C:lI116|H388214
-388214:lI118|H388304
-388304:lI47|H3883FC
-3883FC:lI101|H3884FC
-3884FC:lI98|H388604
-388604:lI105|H388714
-388714:lI110|N
-38AF98:lH38749C|H38AFC0
-38749C:lI47|H3874D4
-3874D4:lI99|H387514
-387514:lI108|H38755C
-38755C:lI101|H3875AC
-3875AC:lI97|H387604
-387604:lI114|H387664
-387664:lI99|H3876CC
-3876CC:lI97|H38773C
-38773C:lI115|H3877B4
-3877B4:lI101|H387834
-387834:lI47|H3878BC
-3878BC:lI111|H38794C
-38794C:lI116|H3879DC
-3879DC:lI112|H387A74
-387A74:lI47|H387B14
-387B14:lI101|H387BBC
-387BBC:lI114|H387C6C
-387C6C:lI116|H387D24
-387D24:lI115|H387DE4
-387DE4:lI47|H387EAC
-387EAC:lI108|H387F7C
-387F7C:lI105|H388054
-388054:lI98|H388134
-388134:lI47|H38821C
-38821C:lI116|H38830C
-38830C:lI115|H388404
-388404:lI112|H388504
-388504:lI47|H38860C
-38860C:lI101|H38871C
-38871C:lI98|H38882C
-38882C:lI105|H38893C
-38893C:lI110|N
-38AFC0:lH3874DC|H38AFE8
-3874DC:lI47|H38751C
-38751C:lI99|H387564
-387564:lI108|H3875B4
-3875B4:lI101|H38760C
-38760C:lI97|H38766C
-38766C:lI114|H3876D4
-3876D4:lI99|H387744
-387744:lI97|H3877BC
-3877BC:lI115|H38783C
-38783C:lI101|H3878C4
-3878C4:lI47|H387954
-387954:lI111|H3879E4
-3879E4:lI116|H387A7C
-387A7C:lI112|H387B1C
-387B1C:lI47|H387BC4
-387BC4:lI101|H387C74
-387C74:lI114|H387D2C
-387D2C:lI116|H387DEC
-387DEC:lI115|H387EB4
-387EB4:lI47|H387F84
-387F84:lI108|H38805C
-38805C:lI105|H38813C
-38813C:lI98|H388224
-388224:lI47|H388314
-388314:lI116|H38840C
-38840C:lI111|H38850C
-38850C:lI111|H388614
-388614:lI108|H388724
-388724:lI115|H388834
-388834:lI47|H388944
-388944:lI101|H388A4C
-388A4C:lI98|H388B5C
-388B5C:lI105|H388C6C
-388C6C:lI110|N
-38AFE8:lH387524|H38B008
-387524:lI47|H38756C
-38756C:lI99|H3875BC
-3875BC:lI108|H387614
-387614:lI101|H387674
-387674:lI97|H3876DC
-3876DC:lI114|H38774C
-38774C:lI99|H3877C4
-3877C4:lI97|H387844
-387844:lI115|H3878CC
-3878CC:lI101|H38795C
-38795C:lI47|H3879EC
-3879EC:lI111|H387A84
-387A84:lI116|H387B24
-387B24:lI112|H387BCC
-387BCC:lI47|H387C7C
-387C7C:lI101|H387D34
-387D34:lI114|H387DF4
-387DF4:lI116|H387EBC
-387EBC:lI115|H387F8C
-387F8C:lI47|H388064
-388064:lI108|H388144
-388144:lI105|H38822C
-38822C:lI98|H38831C
-38831C:lI47|H388414
-388414:lI116|H388514
-388514:lI111|H38861C
-38861C:lI111|H38872C
-38872C:lI108|H38883C
-38883C:lI98|H38894C
-38894C:lI97|H388A54
-388A54:lI114|H388B64
-388B64:lI47|H388C74
-388C74:lI101|H388D84
-388D84:lI98|H388E9C
-388E9C:lI105|H388FB4
-388FB4:lI110|N
-38B008:lH387574|H38B018
-387574:lI47|H3875C4
-3875C4:lI99|H38761C
-38761C:lI108|H38767C
-38767C:lI101|H3876E4
-3876E4:lI97|H387754
-387754:lI114|H3877CC
-3877CC:lI99|H38784C
-38784C:lI97|H3878D4
-3878D4:lI115|H387964
-387964:lI101|H3879F4
-3879F4:lI47|H387A8C
-387A8C:lI111|H387B2C
-387B2C:lI116|H387BD4
-387BD4:lI112|H387C84
-387C84:lI47|H387D3C
-387D3C:lI101|H387DFC
-387DFC:lI114|H387EC4
-387EC4:lI116|H387F94
-387F94:lI115|H38806C
-38806C:lI47|H38814C
-38814C:lI108|H388234
-388234:lI105|H388324
-388324:lI98|H38841C
-38841C:lI47|H38851C
-38851C:lI116|H388624
-388624:lI101|H388734
-388734:lI115|H388844
-388844:lI116|H388954
-388954:lI95|H388A5C
-388A5C:lI115|H388B6C
-388B6C:lI101|H388C7C
-388C7C:lI114|H388D8C
-388D8C:lI118|H388EA4
-388EA4:lI101|H388FBC
-388FBC:lI114|H3890D4
-3890D4:lI47|H3891EC
-3891EC:lI101|H3892FC
-3892FC:lI98|H38940C
-38940C:lI105|H38951C
-38951C:lI110|N
-38B018:lH3875CC|H38AE7C
-3875CC:lI47|H387624
-387624:lI99|H387684
-387684:lI108|H3876EC
-3876EC:lI101|H38775C
-38775C:lI97|H3877D4
-3877D4:lI114|H387854
-387854:lI99|H3878DC
-3878DC:lI97|H38796C
-38796C:lI115|H3879FC
-3879FC:lI101|H387A94
-387A94:lI47|H387B34
-387B34:lI111|H387BDC
-387BDC:lI116|H387C8C
-387C8C:lI112|H387D44
-387D44:lI47|H387E04
-387E04:lI101|H387ECC
-387ECC:lI114|H387F9C
-387F9C:lI116|H388074
-388074:lI115|H388154
-388154:lI47|H38823C
-38823C:lI108|H38832C
-38832C:lI105|H388424
-388424:lI98|H388524
-388524:lI47|H38862C
-38862C:lI115|H38873C
-38873C:lI115|H38884C
-38884C:lI108|H38895C
-38895C:lI47|H388A64
-388A64:lI101|H388B74
-388B74:lI98|H388C84
-388C84:lI105|H388D94
-388D94:lI110|N
-38AE7C:lH38762C|H38AEB0
-38762C:lI47|H38768C
-38768C:lI99|H3876F4
-3876F4:lI108|H387764
-387764:lI101|H3877DC
-3877DC:lI97|H38785C
-38785C:lI114|H3878E4
-3878E4:lI99|H387974
-387974:lI97|H387A04
-387A04:lI115|H387A9C
-387A9C:lI101|H387B3C
-387B3C:lI47|H387BE4
-387BE4:lI111|H387C94
-387C94:lI116|H387D4C
-387D4C:lI112|H387E0C
-387E0C:lI47|H387ED4
-387ED4:lI101|H387FA4
-387FA4:lI114|H38807C
-38807C:lI116|H38815C
-38815C:lI115|H388244
-388244:lI47|H388334
-388334:lI108|H38842C
-38842C:lI105|H38852C
-38852C:lI98|H388634
-388634:lI47|H388744
-388744:lI115|H388854
-388854:lI110|H388964
-388964:lI109|H388A6C
-388A6C:lI112|H388B7C
-388B7C:lI47|H388C8C
-388C8C:lI101|H388D9C
-388D9C:lI98|H388EAC
-388EAC:lI105|H388FC4
-388FC4:lI110|N
-38AEB0:lH387694|H38AED8
-387694:lI47|H3876FC
-3876FC:lI99|H38776C
-38776C:lI108|H3877E4
-3877E4:lI101|H387864
-387864:lI97|H3878EC
-3878EC:lI114|H38797C
-38797C:lI99|H387A0C
-387A0C:lI97|H387AA4
-387AA4:lI115|H387B44
-387B44:lI101|H387BEC
-387BEC:lI47|H387C9C
-387C9C:lI111|H387D54
-387D54:lI116|H387E14
-387E14:lI112|H387EDC
-387EDC:lI47|H387FAC
-387FAC:lI101|H388084
-388084:lI114|H388164
-388164:lI116|H38824C
-38824C:lI115|H38833C
-38833C:lI47|H388434
-388434:lI108|H388534
-388534:lI105|H38863C
-38863C:lI98|H38874C
-38874C:lI47|H38885C
-38885C:lI115|H38896C
-38896C:lI97|H388A74
-388A74:lI115|H388B84
-388B84:lI108|H388C94
-388C94:lI47|H388DA4
-388DA4:lI101|H388EB4
-388EB4:lI98|H388FCC
-388FCC:lI105|H3890DC
-3890DC:lI110|N
-38AED8:lH387704|H38AF08
-387704:lI47|H387774
-387774:lI99|H3877EC
-3877EC:lI108|H38786C
-38786C:lI101|H3878F4
-3878F4:lI97|H387984
-387984:lI114|H387A14
-387A14:lI99|H387AAC
-387AAC:lI97|H387B4C
-387B4C:lI115|H387BF4
-387BF4:lI101|H387CA4
-387CA4:lI47|H387D5C
-387D5C:lI111|H387E1C
-387E1C:lI116|H387EE4
-387EE4:lI112|H387FB4
-387FB4:lI47|H38808C
-38808C:lI101|H38816C
-38816C:lI114|H388254
-388254:lI116|H388344
-388344:lI115|H38843C
-38843C:lI47|H38853C
-38853C:lI108|H388644
-388644:lI105|H388754
-388754:lI98|H388864
-388864:lI47|H388974
-388974:lI114|H388A7C
-388A7C:lI117|H388B8C
-388B8C:lI110|H388C9C
-388C9C:lI116|H388DAC
-388DAC:lI105|H388EBC
-388EBC:lI109|H388FD4
-388FD4:lI101|H3890E4
-3890E4:lI95|H3891F4
-3891F4:lI116|H389304
-389304:lI111|H389414
-389414:lI111|H389524
-389524:lI108|H389624
-389624:lI115|H38971C
-38971C:lI47|H389814
-389814:lI101|H38990C
-38990C:lI98|H389A04
-389A04:lI105|H389AE4
-389AE4:lI110|N
-38AF08:lH38777C|H38AF40
-38777C:lI47|H3877F4
-3877F4:lI99|H387874
-387874:lI108|H3878FC
-3878FC:lI101|H38798C
-38798C:lI97|H387A1C
-387A1C:lI114|H387AB4
-387AB4:lI99|H387B54
-387B54:lI97|H387BFC
-387BFC:lI115|H387CAC
-387CAC:lI101|H387D64
-387D64:lI47|H387E24
-387E24:lI111|H387EEC
-387EEC:lI116|H387FBC
-387FBC:lI112|H388094
-388094:lI47|H388174
-388174:lI101|H38825C
-38825C:lI114|H38834C
-38834C:lI116|H388444
-388444:lI115|H388544
-388544:lI47|H38864C
-38864C:lI108|H38875C
-38875C:lI105|H38886C
-38886C:lI98|H38897C
-38897C:lI47|H388A84
-388A84:lI114|H388B94
-388B94:lI115|H388CA4
-388CA4:lI104|H388DB4
-388DB4:lI101|H388EC4
-388EC4:lI108|H388FDC
-388FDC:lI108|H3890EC
-3890EC:lI47|H3891FC
-3891FC:lI101|H38930C
-38930C:lI98|H38941C
-38941C:lI105|H38952C
-38952C:lI110|N
-38AF40:lH3877FC|H38AF68
-3877FC:lI47|H38787C
-38787C:lI99|H387904
-387904:lI108|H387994
-387994:lI101|H387A24
-387A24:lI97|H387ABC
-387ABC:lI114|H387B5C
-387B5C:lI99|H387C04
-387C04:lI97|H387CB4
-387CB4:lI115|H387D6C
-387D6C:lI101|H387E2C
-387E2C:lI47|H387EF4
-387EF4:lI111|H387FC4
-387FC4:lI116|H38809C
-38809C:lI112|H38817C
-38817C:lI47|H388264
-388264:lI101|H388354
-388354:lI114|H38844C
-38844C:lI116|H38854C
-38854C:lI115|H388654
-388654:lI47|H388764
-388764:lI108|H388874
-388874:lI105|H388984
-388984:lI98|H388A8C
-388A8C:lI47|H388B9C
-388B9C:lI112|H388CAC
-388CAC:lI109|H388DBC
-388DBC:lI97|H388ECC
-388ECC:lI110|H388FE4
-388FE4:lI47|H3890F4
-3890F4:lI101|H389204
-389204:lI98|H389314
-389314:lI105|H389424
-389424:lI110|N
-38AF68:lH387884|H38AF90
-387884:lI47|H38790C
-38790C:lI99|H38799C
-38799C:lI108|H387A2C
-387A2C:lI101|H387AC4
-387AC4:lI97|H387B64
-387B64:lI114|H387C0C
-387C0C:lI99|H387CBC
-387CBC:lI97|H387D74
-387D74:lI115|H387E34
-387E34:lI101|H387EFC
-387EFC:lI47|H387FCC
-387FCC:lI111|H3880A4
-3880A4:lI116|H388184
-388184:lI112|H38826C
-38826C:lI47|H38835C
-38835C:lI101|H388454
-388454:lI114|H388554
-388554:lI116|H38865C
-38865C:lI115|H38876C
-38876C:lI47|H38887C
-38887C:lI108|H38898C
-38898C:lI105|H388A94
-388A94:lI98|H388BA4
-388BA4:lI47|H388CB4
-388CB4:lI112|H388DC4
-388DC4:lI97|H388ED4
-388ED4:lI114|H388FEC
-388FEC:lI115|H3890FC
-3890FC:lI101|H38920C
-38920C:lI116|H38931C
-38931C:lI111|H38942C
-38942C:lI111|H389534
-389534:lI108|H38962C
-38962C:lI115|H389724
-389724:lI47|H38981C
-38981C:lI101|H389914
-389914:lI98|H389A0C
-389A0C:lI105|H389AEC
-389AEC:lI110|N
-38AF90:lH387914|H38AFB8
-387914:lI47|H3879A4
-3879A4:lI99|H387A34
-387A34:lI108|H387ACC
-387ACC:lI101|H387B6C
-387B6C:lI97|H387C14
-387C14:lI114|H387CC4
-387CC4:lI99|H387D7C
-387D7C:lI97|H387E3C
-387E3C:lI115|H387F04
-387F04:lI101|H387FD4
-387FD4:lI47|H3880AC
-3880AC:lI111|H38818C
-38818C:lI116|H388274
-388274:lI112|H388364
-388364:lI47|H38845C
-38845C:lI101|H38855C
-38855C:lI114|H388664
-388664:lI116|H388774
-388774:lI115|H388884
-388884:lI47|H388994
-388994:lI108|H388A9C
-388A9C:lI105|H388BAC
-388BAC:lI98|H388CBC
-388CBC:lI47|H388DCC
-388DCC:lI111|H388EDC
-388EDC:lI116|H388FF4
-388FF4:lI112|H389104
-389104:lI95|H389214
-389214:lI109|H389324
-389324:lI105|H389434
-389434:lI98|H38953C
-38953C:lI115|H389634
-389634:lI47|H38972C
-38972C:lI101|H389824
-389824:lI98|H38991C
-38991C:lI105|H389A14
-389A14:lI110|N
-38AFB8:lH3879AC|H38AFE0
-3879AC:lI47|H387A3C
-387A3C:lI99|H387AD4
-387AD4:lI108|H387B74
-387B74:lI101|H387C1C
-387C1C:lI97|H387CCC
-387CCC:lI114|H387D84
-387D84:lI99|H387E44
-387E44:lI97|H387F0C
-387F0C:lI115|H387FDC
-387FDC:lI101|H3880B4
-3880B4:lI47|H388194
-388194:lI111|H38827C
-38827C:lI116|H38836C
-38836C:lI112|H388464
-388464:lI47|H388564
-388564:lI101|H38866C
-38866C:lI114|H38877C
-38877C:lI116|H38888C
-38888C:lI115|H38899C
-38899C:lI47|H388AA4
-388AA4:lI108|H388BB4
-388BB4:lI105|H388CC4
-388CC4:lI98|H388DD4
-388DD4:lI47|H388EE4
-388EE4:lI111|H388FFC
-388FFC:lI115|H38910C
-38910C:lI95|H38921C
-38921C:lI109|H38932C
-38932C:lI111|H38943C
-38943C:lI110|H389544
-389544:lI47|H38963C
-38963C:lI101|H389734
-389734:lI98|H38982C
-38982C:lI105|H389924
-389924:lI110|N
-38AFE0:lH387A44|H38B000
-387A44:lI47|H387ADC
-387ADC:lI99|H387B7C
-387B7C:lI108|H387C24
-387C24:lI101|H387CD4
-387CD4:lI97|H387D8C
-387D8C:lI114|H387E4C
-387E4C:lI99|H387F14
-387F14:lI97|H387FE4
-387FE4:lI115|H3880BC
-3880BC:lI101|H38819C
-38819C:lI47|H388284
-388284:lI111|H388374
-388374:lI116|H38846C
-38846C:lI112|H38856C
-38856C:lI47|H388674
-388674:lI101|H388784
-388784:lI114|H388894
-388894:lI116|H3889A4
-3889A4:lI115|H388AAC
-388AAC:lI47|H388BBC
-388BBC:lI108|H388CCC
-388CCC:lI105|H388DDC
-388DDC:lI98|H388EEC
-388EEC:lI47|H389004
-389004:lI111|H389114
-389114:lI114|H389224
-389224:lI98|H389334
-389334:lI101|H389444
-389444:lI114|H38954C
-38954C:lI47|H389644
-389644:lI101|H38973C
-38973C:lI98|H389834
-389834:lI105|H38992C
-38992C:lI110|N
-38B000:lH387AE4|H38B010
-387AE4:lI47|H387B84
-387B84:lI99|H387C2C
-387C2C:lI108|H387CDC
-387CDC:lI101|H387D94
-387D94:lI97|H387E54
-387E54:lI114|H387F1C
-387F1C:lI99|H387FEC
-387FEC:lI97|H3880C4
-3880C4:lI115|H3881A4
-3881A4:lI101|H38828C
-38828C:lI47|H38837C
-38837C:lI111|H388474
-388474:lI116|H388574
-388574:lI112|H38867C
-38867C:lI47|H38878C
-38878C:lI101|H38889C
-38889C:lI114|H3889AC
-3889AC:lI116|H388AB4
-388AB4:lI115|H388BC4
-388BC4:lI47|H388CD4
-388CD4:lI108|H388DE4
-388DE4:lI105|H388EF4
-388EF4:lI98|H38900C
-38900C:lI47|H38911C
-38911C:lI111|H38922C
-38922C:lI100|H38933C
-38933C:lI98|H38944C
-38944C:lI99|H389554
-389554:lI47|H38964C
-38964C:lI101|H389744
-389744:lI98|H38983C
-38983C:lI105|H389934
-389934:lI110|N
-38B010:lH387B8C|H38B020
-387B8C:lI47|H387C34
-387C34:lI99|H387CE4
-387CE4:lI108|H387D9C
-387D9C:lI101|H387E5C
-387E5C:lI97|H387F24
-387F24:lI114|H387FF4
-387FF4:lI99|H3880CC
-3880CC:lI97|H3881AC
-3881AC:lI115|H388294
-388294:lI101|H388384
-388384:lI47|H38847C
-38847C:lI111|H38857C
-38857C:lI116|H388684
-388684:lI112|H388794
-388794:lI47|H3888A4
-3888A4:lI101|H3889B4
-3889B4:lI114|H388ABC
-388ABC:lI116|H388BCC
-388BCC:lI115|H388CDC
-388CDC:lI47|H388DEC
-388DEC:lI108|H388EFC
-388EFC:lI105|H389014
-389014:lI98|H389124
-389124:lI47|H389234
-389234:lI111|H389344
-389344:lI98|H389454
-389454:lI115|H38955C
-38955C:lI101|H389654
-389654:lI114|H38974C
-38974C:lI118|H389844
-389844:lI101|H38993C
-38993C:lI114|H389A1C
-389A1C:lI47|H389AF4
-389AF4:lI101|H389BBC
-389BBC:lI98|H389C84
-389C84:lI105|H389D4C
-389D4C:lI110|N
-38B020:lH387C3C|H38B028
-387C3C:lI47|H387CEC
-387CEC:lI99|H387DA4
-387DA4:lI108|H387E64
-387E64:lI101|H387F2C
-387F2C:lI97|H387FFC
-387FFC:lI114|H3880D4
-3880D4:lI99|H3881B4
-3881B4:lI97|H38829C
-38829C:lI115|H38838C
-38838C:lI101|H388484
-388484:lI47|H388584
-388584:lI111|H38868C
-38868C:lI116|H38879C
-38879C:lI112|H3888AC
-3888AC:lI47|H3889BC
-3889BC:lI101|H388AC4
-388AC4:lI114|H388BD4
-388BD4:lI116|H388CE4
-388CE4:lI115|H388DF4
-388DF4:lI47|H388F04
-388F04:lI108|H38901C
-38901C:lI105|H38912C
-38912C:lI98|H38923C
-38923C:lI47|H38934C
-38934C:lI109|H38945C
-38945C:lI110|H389564
-389564:lI101|H38965C
-38965C:lI115|H389754
-389754:lI105|H38984C
-38984C:lI97|H389944
-389944:lI95|H389A24
-389A24:lI115|H389AFC
-389AFC:lI101|H389BC4
-389BC4:lI115|H389C8C
-389C8C:lI115|H389D54
-389D54:lI105|H389E14
-389E14:lI111|H389ECC
-389ECC:lI110|H389F7C
-389F7C:lI47|H38A01C
-38A01C:lI101|H38A0AC
-38A0AC:lI98|H38A12C
-38A12C:lI105|H38A19C
-38A19C:lI110|N
-38B028:lH387CF4|H38B030
-387CF4:lI47|H387DAC
-387DAC:lI99|H387E6C
-387E6C:lI108|H387F34
-387F34:lI101|H388004
-388004:lI97|H3880DC
-3880DC:lI114|H3881BC
-3881BC:lI99|H3882A4
-3882A4:lI97|H388394
-388394:lI115|H38848C
-38848C:lI101|H38858C
-38858C:lI47|H388694
-388694:lI111|H3887A4
-3887A4:lI116|H3888B4
-3888B4:lI112|H3889C4
-3889C4:lI47|H388ACC
-388ACC:lI101|H388BDC
-388BDC:lI114|H388CEC
-388CEC:lI116|H388DFC
-388DFC:lI115|H388F0C
-388F0C:lI47|H389024
-389024:lI108|H389134
-389134:lI105|H389244
-389244:lI98|H389354
-389354:lI47|H389464
-389464:lI109|H38956C
-38956C:lI110|H389664
-389664:lI101|H38975C
-38975C:lI115|H389854
-389854:lI105|H38994C
-38994C:lI97|H389A2C
-389A2C:lI47|H389B04
-389B04:lI101|H389BCC
-389BCC:lI98|H389C94
-389C94:lI105|H389D5C
-389D5C:lI110|N
-38B030:lH387DB4|H38B038
-387DB4:lI47|H387E74
-387E74:lI99|H387F3C
-387F3C:lI108|H38800C
-38800C:lI101|H3880E4
-3880E4:lI97|H3881C4
-3881C4:lI114|H3882AC
-3882AC:lI99|H38839C
-38839C:lI97|H388494
-388494:lI115|H388594
-388594:lI101|H38869C
-38869C:lI47|H3887AC
-3887AC:lI111|H3888BC
-3888BC:lI116|H3889CC
-3889CC:lI112|H388AD4
-388AD4:lI47|H388BE4
-388BE4:lI101|H388CF4
-388CF4:lI114|H388E04
-388E04:lI116|H388F14
-388F14:lI115|H38902C
-38902C:lI47|H38913C
-38913C:lI108|H38924C
-38924C:lI105|H38935C
-38935C:lI98|H38946C
-38946C:lI47|H389574
-389574:lI109|H38966C
-38966C:lI110|H389764
-389764:lI101|H38985C
-38985C:lI109|H389954
-389954:lI111|H389A34
-389A34:lI115|H389B0C
-389B0C:lI121|H389BD4
-389BD4:lI110|H389C9C
-389C9C:lI101|H389D64
-389D64:lI47|H389E1C
-389E1C:lI101|H389ED4
-389ED4:lI98|H389F84
-389F84:lI105|H38A024
-38A024:lI110|N
-38B038:lH387E7C|H38B040
-387E7C:lI47|H387F44
-387F44:lI99|H388014
-388014:lI108|H3880EC
-3880EC:lI101|H3881CC
-3881CC:lI97|H3882B4
-3882B4:lI114|H3883A4
-3883A4:lI99|H38849C
-38849C:lI97|H38859C
-38859C:lI115|H3886A4
-3886A4:lI101|H3887B4
-3887B4:lI47|H3888C4
-3888C4:lI111|H3889D4
-3889D4:lI116|H388ADC
-388ADC:lI112|H388BEC
-388BEC:lI47|H388CFC
-388CFC:lI101|H388E0C
-388E0C:lI114|H388F1C
-388F1C:lI116|H389034
-389034:lI115|H389144
-389144:lI47|H389254
-389254:lI108|H389364
-389364:lI105|H389474
-389474:lI98|H38957C
-38957C:lI47|H389674
-389674:lI109|H38976C
-38976C:lI101|H389864
-389864:lI103|H38995C
-38995C:lI97|H389A3C
-389A3C:lI99|H389B14
-389B14:lI111|H389BDC
-389BDC:lI47|H389CA4
-389CA4:lI101|H389D6C
-389D6C:lI98|H389E24
-389E24:lI105|H389EDC
-389EDC:lI110|N
-38B040:lH387F4C|H38B048
-387F4C:lI47|H38801C
-38801C:lI99|H3880F4
-3880F4:lI108|H3881D4
-3881D4:lI101|H3882BC
-3882BC:lI97|H3883AC
-3883AC:lI114|H3884A4
-3884A4:lI99|H3885A4
-3885A4:lI97|H3886AC
-3886AC:lI115|H3887BC
-3887BC:lI101|H3888CC
-3888CC:lI47|H3889DC
-3889DC:lI111|H388AE4
-388AE4:lI116|H388BF4
-388BF4:lI112|H388D04
-388D04:lI47|H388E14
-388E14:lI101|H388F24
-388F24:lI114|H38903C
-38903C:lI116|H38914C
-38914C:lI115|H38925C
-38925C:lI47|H38936C
-38936C:lI108|H38947C
-38947C:lI105|H389584
-389584:lI98|H38967C
-38967C:lI47|H389774
-389774:lI106|H38986C
-38986C:lI105|H389964
-389964:lI110|H389A44
-389A44:lI116|H389B1C
-389B1C:lI101|H389BE4
-389BE4:lI114|H389CAC
-389CAC:lI102|H389D74
-389D74:lI97|H389E2C
-389E2C:lI99|H389EE4
-389EE4:lI101|N
-38B048:lH388024|H38B050
-388024:lI47|H3880FC
-3880FC:lI99|H3881DC
-3881DC:lI108|H3882C4
-3882C4:lI101|H3883B4
-3883B4:lI97|H3884AC
-3884AC:lI114|H3885AC
-3885AC:lI99|H3886B4
-3886B4:lI97|H3887C4
-3887C4:lI115|H3888D4
-3888D4:lI101|H3889E4
-3889E4:lI47|H388AEC
-388AEC:lI111|H388BFC
-388BFC:lI116|H388D0C
-388D0C:lI112|H388E1C
-388E1C:lI47|H388F2C
-388F2C:lI101|H389044
-389044:lI114|H389154
-389154:lI116|H389264
-389264:lI115|H389374
-389374:lI47|H389484
-389484:lI108|H38958C
-38958C:lI105|H389684
-389684:lI98|H38977C
-38977C:lI47|H389874
-389874:lI105|H38996C
-38996C:lI110|H389A4C
-389A4C:lI101|H389B24
-389B24:lI116|H389BEC
-389BEC:lI115|H389CB4
-389CB4:lI47|H389D7C
-389D7C:lI101|H389E34
-389E34:lI98|H389EEC
-389EEC:lI105|H389F8C
-389F8C:lI110|N
-38B050:lH388104|H38B058
-388104:lI47|H3881E4
-3881E4:lI99|H3882CC
-3882CC:lI108|H3883BC
-3883BC:lI101|H3884B4
-3884B4:lI97|H3885B4
-3885B4:lI114|H3886BC
-3886BC:lI99|H3887CC
-3887CC:lI97|H3888DC
-3888DC:lI115|H3889EC
-3889EC:lI101|H388AF4
-388AF4:lI47|H388C04
-388C04:lI111|H388D14
-388D14:lI116|H388E24
-388E24:lI112|H388F34
-388F34:lI47|H38904C
-38904C:lI101|H38915C
-38915C:lI114|H38926C
-38926C:lI116|H38937C
-38937C:lI115|H38948C
-38948C:lI47|H389594
-389594:lI108|H38968C
-38968C:lI105|H389784
-389784:lI98|H38987C
-38987C:lI47|H389974
-389974:lI105|H389A54
-389A54:lI99|H389B2C
-389B2C:lI47|H389BF4
-389BF4:lI101|H389CBC
-389CBC:lI98|H389D84
-389D84:lI105|H389E3C
-389E3C:lI110|N
-38B058:lH3881EC|H38B060
-3881EC:lI47|H3882D4
-3882D4:lI99|H3883C4
-3883C4:lI108|H3884BC
-3884BC:lI101|H3885BC
-3885BC:lI97|H3886C4
-3886C4:lI114|H3887D4
-3887D4:lI99|H3888E4
-3888E4:lI97|H3889F4
-3889F4:lI115|H388AFC
-388AFC:lI101|H388C0C
-388C0C:lI47|H388D1C
-388D1C:lI111|H388E2C
-388E2C:lI116|H388F3C
-388F3C:lI112|H389054
-389054:lI47|H389164
-389164:lI101|H389274
-389274:lI114|H389384
-389384:lI116|H389494
-389494:lI115|H38959C
-38959C:lI47|H389694
-389694:lI108|H38978C
-38978C:lI105|H389884
-389884:lI98|H38997C
-38997C:lI47|H389A5C
-389A5C:lI104|H389B34
-389B34:lI105|H389BFC
-389BFC:lI112|H389CC4
-389CC4:lI101|H389D8C
-389D8C:lI47|H389E44
-389E44:lI101|H389EF4
-389EF4:lI98|H389F94
-389F94:lI105|H38A02C
-38A02C:lI110|N
-38B060:lH3882DC|H38B068
-3882DC:lI47|H3883CC
-3883CC:lI99|H3884C4
-3884C4:lI108|H3885C4
-3885C4:lI101|H3886CC
-3886CC:lI97|H3887DC
-3887DC:lI114|H3888EC
-3888EC:lI99|H3889FC
-3889FC:lI97|H388B04
-388B04:lI115|H388C14
-388C14:lI101|H388D24
-388D24:lI47|H388E34
-388E34:lI111|H388F44
-388F44:lI116|H38905C
-38905C:lI112|H38916C
-38916C:lI47|H38927C
-38927C:lI101|H38938C
-38938C:lI114|H38949C
-38949C:lI116|H3895A4
-3895A4:lI115|H38969C
-38969C:lI47|H389794
-389794:lI108|H38988C
-38988C:lI105|H389984
-389984:lI98|H389A64
-389A64:lI47|H389B3C
-389B3C:lI103|H389C04
-389C04:lI115|H389CCC
-389CCC:lI47|H389D94
-389D94:lI101|H389E4C
-389E4C:lI98|H389EFC
-389EFC:lI105|H389F9C
-389F9C:lI110|N
-38B068:lH3883D4|H38B070
-3883D4:lI47|H3884CC
-3884CC:lI99|H3885CC
-3885CC:lI108|H3886D4
-3886D4:lI101|H3887E4
-3887E4:lI97|H3888F4
-3888F4:lI114|H388A04
-388A04:lI99|H388B0C
-388B0C:lI97|H388C1C
-388C1C:lI115|H388D2C
-388D2C:lI101|H388E3C
-388E3C:lI47|H388F4C
-388F4C:lI111|H389064
-389064:lI116|H389174
-389174:lI112|H389284
-389284:lI47|H389394
-389394:lI101|H3894A4
-3894A4:lI114|H3895AC
-3895AC:lI116|H3896A4
-3896A4:lI115|H38979C
-38979C:lI47|H389894
-389894:lI108|H38998C
-38998C:lI105|H389A6C
-389A6C:lI98|H389B44
-389B44:lI47|H389C0C
-389C0C:lI101|H389CD4
-389CD4:lI118|H389D9C
-389D9C:lI97|H389E54
-389E54:lI47|H389F04
-389F04:lI101|H389FA4
-389FA4:lI98|H38A034
-38A034:lI105|H38A0B4
-38A0B4:lI110|N
-38B070:lH3884D4|H38B078
-3884D4:lI47|H3885D4
-3885D4:lI99|H3886DC
-3886DC:lI108|H3887EC
-3887EC:lI101|H3888FC
-3888FC:lI97|H388A0C
-388A0C:lI114|H388B14
-388B14:lI99|H388C24
-388C24:lI97|H388D34
-388D34:lI115|H388E44
-388E44:lI101|H388F54
-388F54:lI47|H38906C
-38906C:lI111|H38917C
-38917C:lI116|H38928C
-38928C:lI112|H38939C
-38939C:lI47|H3894AC
-3894AC:lI101|H3895B4
-3895B4:lI114|H3896AC
-3896AC:lI116|H3897A4
-3897A4:lI115|H38989C
-38989C:lI47|H389994
-389994:lI108|H389A74
-389A74:lI105|H389B4C
-389B4C:lI98|H389C14
-389C14:lI47|H389CDC
-389CDC:lI101|H389DA4
-389DA4:lI116|H389E5C
-389E5C:lI47|H389F0C
-389F0C:lI101|H389FAC
-389FAC:lI98|H38A03C
-38A03C:lI105|H38A0BC
-38A0BC:lI110|N
-38B078:lH3885DC|H38B080
-3885DC:lI47|H3886E4
-3886E4:lI99|H3887F4
-3887F4:lI108|H388904
-388904:lI101|H388A14
-388A14:lI97|H388B1C
-388B1C:lI114|H388C2C
-388C2C:lI99|H388D3C
-388D3C:lI97|H388E4C
-388E4C:lI115|H388F5C
-388F5C:lI101|H389074
-389074:lI47|H389184
-389184:lI111|H389294
-389294:lI116|H3893A4
-3893A4:lI112|H3894B4
-3894B4:lI47|H3895BC
-3895BC:lI101|H3896B4
-3896B4:lI114|H3897AC
-3897AC:lI116|H3898A4
-3898A4:lI115|H38999C
-38999C:lI47|H389A7C
-389A7C:lI108|H389B54
-389B54:lI105|H389C1C
-389C1C:lI98|H389CE4
-389CE4:lI47|H389DAC
-389DAC:lI101|H389E64
-389E64:lI114|H389F14
-389F14:lI108|H389FB4
-389FB4:lI95|H38A044
-38A044:lI105|H38A0C4
-38A0C4:lI110|H38A134
-38A134:lI116|H38A1A4
-38A1A4:lI101|H38A20C
-38A20C:lI114|H38A274
-38A274:lI102|H38A2DC
-38A2DC:lI97|H38A344
-38A344:lI99|H38A3AC
-38A3AC:lI101|N
-38B080:lH3886EC|H38B088
-3886EC:lI47|H3887FC
-3887FC:lI99|H38890C
-38890C:lI108|H388A1C
-388A1C:lI101|H388B24
-388B24:lI97|H388C34
-388C34:lI114|H388D44
-388D44:lI99|H388E54
-388E54:lI97|H388F64
-388F64:lI115|H38907C
-38907C:lI101|H38918C
-38918C:lI47|H38929C
-38929C:lI111|H3893AC
-3893AC:lI116|H3894BC
-3894BC:lI112|H3895C4
-3895C4:lI47|H3896BC
-3896BC:lI101|H3897B4
-3897B4:lI114|H3898AC
-3898AC:lI116|H3899A4
-3899A4:lI115|H389A84
-389A84:lI47|H389B5C
-389B5C:lI108|H389C24
-389C24:lI105|H389CEC
-389CEC:lI98|H389DB4
-389DB4:lI47|H389E6C
-389E6C:lI100|H389F1C
-389F1C:lI101|H389FBC
-389FBC:lI98|H38A04C
-38A04C:lI117|H38A0CC
-38A0CC:lI103|H38A13C
-38A13C:lI103|H38A1AC
-38A1AC:lI101|H38A214
-38A214:lI114|H38A27C
-38A27C:lI47|H38A2E4
-38A2E4:lI101|H38A34C
-38A34C:lI98|H38A3B4
-38A3B4:lI105|H38A414
-38A414:lI110|N
-38B088:lH388804|H38B090
-388804:lI47|H388914
-388914:lI99|H388A24
-388A24:lI108|H388B2C
-388B2C:lI101|H388C3C
-388C3C:lI97|H388D4C
-388D4C:lI114|H388E5C
-388E5C:lI99|H388F6C
-388F6C:lI97|H389084
-389084:lI115|H389194
-389194:lI101|H3892A4
-3892A4:lI47|H3893B4
-3893B4:lI111|H3894C4
-3894C4:lI116|H3895CC
-3895CC:lI112|H3896C4
-3896C4:lI47|H3897BC
-3897BC:lI101|H3898B4
-3898B4:lI114|H3899AC
-3899AC:lI116|H389A8C
-389A8C:lI115|H389B64
-389B64:lI47|H389C2C
-389C2C:lI108|H389CF4
-389CF4:lI105|H389DBC
-389DBC:lI98|H389E74
-389E74:lI47|H389F24
-389F24:lI99|H389FC4
-389FC4:lI114|H38A054
-38A054:lI121|H38A0D4
-38A0D4:lI112|H38A144
-38A144:lI116|H38A1B4
-38A1B4:lI111|H38A21C
-38A21C:lI47|H38A284
-38A284:lI101|H38A2EC
-38A2EC:lI98|H38A354
-38A354:lI105|H38A3BC
-38A3BC:lI110|N
-38B090:lH38891C|H38B098
-38891C:lI47|H388A2C
-388A2C:lI99|H388B34
-388B34:lI108|H388C44
-388C44:lI101|H388D54
-388D54:lI97|H388E64
-388E64:lI114|H388F74
-388F74:lI99|H38908C
-38908C:lI97|H38919C
-38919C:lI115|H3892AC
-3892AC:lI101|H3893BC
-3893BC:lI47|H3894CC
-3894CC:lI111|H3895D4
-3895D4:lI116|H3896CC
-3896CC:lI112|H3897C4
-3897C4:lI47|H3898BC
-3898BC:lI101|H3899B4
-3899B4:lI114|H389A94
-389A94:lI116|H389B6C
-389B6C:lI115|H389C34
-389C34:lI47|H389CFC
-389CFC:lI108|H389DC4
-389DC4:lI105|H389E7C
-389E7C:lI98|H389F2C
-389F2C:lI47|H389FCC
-389FCC:lI99|H38A05C
-38A05C:lI111|H38A0DC
-38A0DC:lI115|H38A14C
-38A14C:lI84|H38A1BC
-38A1BC:lI114|H38A224
-38A224:lI97|H38A28C
-38A28C:lI110|H38A2F4
-38A2F4:lI115|H38A35C
-38A35C:lI97|H38A3C4
-38A3C4:lI99|H38A41C
-38A41C:lI116|H38A46C
-38A46C:lI105|H38A4BC
-38A4BC:lI111|H38A50C
-38A50C:lI110|H38A554
-38A554:lI115|H38A59C
-38A59C:lI47|H38A5E4
-38A5E4:lI101|H38A62C
-38A62C:lI98|H38A66C
-38A66C:lI105|H38A6A4
-38A6A4:lI110|N
-38B098:lH388A34|H38B0A0
-388A34:lI47|H388B3C
-388B3C:lI99|H388C4C
-388C4C:lI108|H388D5C
-388D5C:lI101|H388E6C
-388E6C:lI97|H388F7C
-388F7C:lI114|H389094
-389094:lI99|H3891A4
-3891A4:lI97|H3892B4
-3892B4:lI115|H3893C4
-3893C4:lI101|H3894D4
-3894D4:lI47|H3895DC
-3895DC:lI111|H3896D4
-3896D4:lI116|H3897CC
-3897CC:lI112|H3898C4
-3898C4:lI47|H3899BC
-3899BC:lI101|H389A9C
-389A9C:lI114|H389B74
-389B74:lI116|H389C3C
-389C3C:lI115|H389D04
-389D04:lI47|H389DCC
-389DCC:lI108|H389E84
-389E84:lI105|H389F34
-389F34:lI98|H389FD4
-389FD4:lI47|H38A064
-38A064:lI99|H38A0E4
-38A0E4:lI111|H38A154
-38A154:lI115|H38A1C4
-38A1C4:lI84|H38A22C
-38A22C:lI105|H38A294
-38A294:lI109|H38A2FC
-38A2FC:lI101|H38A364
-38A364:lI47|H38A3CC
-38A3CC:lI101|H38A424
-38A424:lI98|H38A474
-38A474:lI105|H38A4C4
-38A4C4:lI110|N
-38B0A0:lH388B44|H38B0A8
-388B44:lI47|H388C54
-388C54:lI99|H388D64
-388D64:lI108|H388E74
-388E74:lI101|H388F84
-388F84:lI97|H38909C
-38909C:lI114|H3891AC
-3891AC:lI99|H3892BC
-3892BC:lI97|H3893CC
-3893CC:lI115|H3894DC
-3894DC:lI101|H3895E4
-3895E4:lI47|H3896DC
-3896DC:lI111|H3897D4
-3897D4:lI116|H3898CC
-3898CC:lI112|H3899C4
-3899C4:lI47|H389AA4
-389AA4:lI101|H389B7C
-389B7C:lI114|H389C44
-389C44:lI116|H389D0C
-389D0C:lI115|H389DD4
-389DD4:lI47|H389E8C
-389E8C:lI108|H389F3C
-389F3C:lI105|H389FDC
-389FDC:lI98|H38A06C
-38A06C:lI47|H38A0EC
-38A0EC:lI99|H38A15C
-38A15C:lI111|H38A1CC
-38A1CC:lI115|H38A234
-38A234:lI80|H38A29C
-38A29C:lI114|H38A304
-38A304:lI111|H38A36C
-38A36C:lI112|H38A3D4
-38A3D4:lI101|H38A42C
-38A42C:lI114|H38A47C
-38A47C:lI116|H38A4CC
-38A4CC:lI121|H38A514
-38A514:lI47|H38A55C
-38A55C:lI101|H38A5A4
-38A5A4:lI98|H38A5EC
-38A5EC:lI105|H38A634
-38A634:lI110|N
-38B0A8:lH388C5C|H38B0B0
-388C5C:lI47|H388D6C
-388D6C:lI99|H388E7C
-388E7C:lI108|H388F8C
-388F8C:lI101|H3890A4
-3890A4:lI97|H3891B4
-3891B4:lI114|H3892C4
-3892C4:lI99|H3893D4
-3893D4:lI97|H3894E4
-3894E4:lI115|H3895EC
-3895EC:lI101|H3896E4
-3896E4:lI47|H3897DC
-3897DC:lI111|H3898D4
-3898D4:lI116|H3899CC
-3899CC:lI112|H389AAC
-389AAC:lI47|H389B84
-389B84:lI101|H389C4C
-389C4C:lI114|H389D14
-389D14:lI116|H389DDC
-389DDC:lI115|H389E94
-389E94:lI47|H389F44
-389F44:lI108|H389FE4
-389FE4:lI105|H38A074
-38A074:lI98|H38A0F4
-38A0F4:lI47|H38A164
-38A164:lI99|H38A1D4
-38A1D4:lI111|H38A23C
-38A23C:lI115|H38A2A4
-38A2A4:lI78|H38A30C
-38A30C:lI111|H38A374
-38A374:lI116|H38A3DC
-38A3DC:lI105|H38A434
-38A434:lI102|H38A484
-38A484:lI105|H38A4D4
-38A4D4:lI99|H38A51C
-38A51C:lI97|H38A564
-38A564:lI116|H38A5AC
-38A5AC:lI105|H38A5F4
-38A5F4:lI111|H38A63C
-38A63C:lI110|H38A674
-38A674:lI47|H38A6AC
-38A6AC:lI101|H38A6D4
-38A6D4:lI98|H38A6EC
-38A6EC:lI105|H38A704
-38A704:lI110|N
-38B0B0:lH388D74|H38B0B8
-388D74:lI47|H388E84
-388E84:lI99|H388F94
-388F94:lI108|H3890AC
-3890AC:lI101|H3891BC
-3891BC:lI97|H3892CC
-3892CC:lI114|H3893DC
-3893DC:lI99|H3894EC
-3894EC:lI97|H3895F4
-3895F4:lI115|H3896EC
-3896EC:lI101|H3897E4
-3897E4:lI47|H3898DC
-3898DC:lI111|H3899D4
-3899D4:lI116|H389AB4
-389AB4:lI112|H389B8C
-389B8C:lI47|H389C54
-389C54:lI101|H389D1C
-389D1C:lI114|H389DE4
-389DE4:lI116|H389E9C
-389E9C:lI115|H389F4C
-389F4C:lI47|H389FEC
-389FEC:lI108|H38A07C
-38A07C:lI105|H38A0FC
-38A0FC:lI98|H38A16C
-38A16C:lI47|H38A1DC
-38A1DC:lI99|H38A244
-38A244:lI111|H38A2AC
-38A2AC:lI115|H38A314
-38A314:lI70|H38A37C
-38A37C:lI105|H38A3E4
-38A3E4:lI108|H38A43C
-38A43C:lI101|H38A48C
-38A48C:lI84|H38A4DC
-38A4DC:lI114|H38A524
-38A524:lI97|H38A56C
-38A56C:lI110|H38A5B4
-38A5B4:lI115|H38A5FC
-38A5FC:lI102|H38A644
-38A644:lI101|H38A67C
-38A67C:lI114|H38A6B4
-38A6B4:lI47|H38A6DC
-38A6DC:lI101|H38A6F4
-38A6F4:lI98|H38A70C
-38A70C:lI105|H38A71C
-38A71C:lI110|N
-38B0B8:lH388E8C|H38B0C0
-388E8C:lI47|H388F9C
-388F9C:lI99|H3890B4
-3890B4:lI108|H3891C4
-3891C4:lI101|H3892D4
-3892D4:lI97|H3893E4
-3893E4:lI114|H3894F4
-3894F4:lI99|H3895FC
-3895FC:lI97|H3896F4
-3896F4:lI115|H3897EC
-3897EC:lI101|H3898E4
-3898E4:lI47|H3899DC
-3899DC:lI111|H389ABC
-389ABC:lI116|H389B94
-389B94:lI112|H389C5C
-389C5C:lI47|H389D24
-389D24:lI101|H389DEC
-389DEC:lI114|H389EA4
-389EA4:lI116|H389F54
-389F54:lI115|H389FF4
-389FF4:lI47|H38A084
-38A084:lI108|H38A104
-38A104:lI105|H38A174
-38A174:lI98|H38A1E4
-38A1E4:lI47|H38A24C
-38A24C:lI99|H38A2B4
-38A2B4:lI111|H38A31C
-38A31C:lI115|H38A384
-38A384:lI69|H38A3EC
-38A3EC:lI118|H38A444
-38A444:lI101|H38A494
-38A494:lI110|H38A4E4
-38A4E4:lI116|H38A52C
-38A52C:lI68|H38A574
-38A574:lI111|H38A5BC
-38A5BC:lI109|H38A604
-38A604:lI97|H38A64C
-38A64C:lI105|H38A684
-38A684:lI110|H38A6BC
-38A6BC:lI47|H38A6E4
-38A6E4:lI101|H38A6FC
-38A6FC:lI98|H38A714
-38A714:lI105|H38A724
-38A724:lI110|N
-38B0C0:lH388FA4|H38B0C8
-388FA4:lI47|H3890BC
-3890BC:lI99|H3891CC
-3891CC:lI108|H3892DC
-3892DC:lI101|H3893EC
-3893EC:lI97|H3894FC
-3894FC:lI114|H389604
-389604:lI99|H3896FC
-3896FC:lI97|H3897F4
-3897F4:lI115|H3898EC
-3898EC:lI101|H3899E4
-3899E4:lI47|H389AC4
-389AC4:lI111|H389B9C
-389B9C:lI116|H389C64
-389C64:lI112|H389D2C
-389D2C:lI47|H389DF4
-389DF4:lI101|H389EAC
-389EAC:lI114|H389F5C
-389F5C:lI116|H389FFC
-389FFC:lI115|H38A08C
-38A08C:lI47|H38A10C
-38A10C:lI108|H38A17C
-38A17C:lI105|H38A1EC
-38A1EC:lI98|H38A254
-38A254:lI47|H38A2BC
-38A2BC:lI99|H38A324
-38A324:lI111|H38A38C
-38A38C:lI115|H38A3F4
-38A3F4:lI69|H38A44C
-38A44C:lI118|H38A49C
-38A49C:lI101|H38A4EC
-38A4EC:lI110|H38A534
-38A534:lI116|H38A57C
-38A57C:lI47|H38A5C4
-38A5C4:lI101|H38A60C
-38A60C:lI98|H38A654
-38A654:lI105|H38A68C
-38A68C:lI110|N
-38B0C8:lH3890C4|H38B0D0
-3890C4:lI47|H3891D4
-3891D4:lI99|H3892E4
-3892E4:lI108|H3893F4
-3893F4:lI101|H389504
-389504:lI97|H38960C
-38960C:lI114|H389704
-389704:lI99|H3897FC
-3897FC:lI97|H3898F4
-3898F4:lI115|H3899EC
-3899EC:lI101|H389ACC
-389ACC:lI47|H389BA4
-389BA4:lI111|H389C6C
-389C6C:lI116|H389D34
-389D34:lI112|H389DFC
-389DFC:lI47|H389EB4
-389EB4:lI101|H389F64
-389F64:lI114|H38A004
-38A004:lI116|H38A094
-38A094:lI115|H38A114
-38A114:lI47|H38A184
-38A184:lI108|H38A1F4
-38A1F4:lI105|H38A25C
-38A25C:lI98|H38A2C4
-38A2C4:lI47|H38A32C
-38A32C:lI99|H38A394
-38A394:lI111|H38A3FC
-38A3FC:lI109|H38A454
-38A454:lI112|H38A4A4
-38A4A4:lI105|H38A4F4
-38A4F4:lI108|H38A53C
-38A53C:lI101|H38A584
-38A584:lI114|H38A5CC
-38A5CC:lI47|H38A614
-38A614:lI101|H38A65C
-38A65C:lI98|H38A694
-38A694:lI105|H38A6C4
-38A6C4:lI110|N
-38B0D0:lH3891DC|H38B0D8
-3891DC:lI47|H3892EC
-3892EC:lI99|H3893FC
-3893FC:lI108|H38950C
-38950C:lI101|H389614
-389614:lI97|H38970C
-38970C:lI114|H389804
-389804:lI99|H3898FC
-3898FC:lI97|H3899F4
-3899F4:lI115|H389AD4
-389AD4:lI101|H389BAC
-389BAC:lI47|H389C74
-389C74:lI111|H389D3C
-389D3C:lI116|H389E04
-389E04:lI112|H389EBC
-389EBC:lI47|H389F6C
-389F6C:lI101|H38A00C
-38A00C:lI114|H38A09C
-38A09C:lI116|H38A11C
-38A11C:lI115|H38A18C
-38A18C:lI47|H38A1FC
-38A1FC:lI108|H38A264
-38A264:lI105|H38A2CC
-38A2CC:lI98|H38A334
-38A334:lI47|H38A39C
-38A39C:lI97|H38A404
-38A404:lI115|H38A45C
-38A45C:lI110|H38A4AC
-38A4AC:lI49|H38A4FC
-38A4FC:lI47|H38A544
-38A544:lI101|H38A58C
-38A58C:lI98|H38A5D4
-38A5D4:lI105|H38A61C
-38A61C:lI110|N
-38B0D8:lH3892F4|H38B0E0
-3892F4:lI47|H389404
-389404:lI99|H389514
-389514:lI108|H38961C
-38961C:lI101|H389714
-389714:lI97|H38980C
-38980C:lI114|H389904
-389904:lI99|H3899FC
-3899FC:lI97|H389ADC
-389ADC:lI115|H389BB4
-389BB4:lI101|H389C7C
-389C7C:lI47|H389D44
-389D44:lI111|H389E0C
-389E0C:lI116|H389EC4
-389EC4:lI112|H389F74
-389F74:lI47|H38A014
-38A014:lI101|H38A0A4
-38A0A4:lI114|H38A124
-38A124:lI116|H38A194
-38A194:lI115|H38A204
-38A204:lI47|H38A26C
-38A26C:lI108|H38A2D4
-38A2D4:lI105|H38A33C
-38A33C:lI98|H38A3A4
-38A3A4:lI47|H38A40C
-38A40C:lI97|H38A464
-38A464:lI112|H38A4B4
-38A4B4:lI112|H38A504
-38A504:lI109|H38A54C
-38A54C:lI111|H38A594
-38A594:lI110|H38A5DC
-38A5DC:lI47|H38A624
-38A624:lI101|H38A664
-38A664:lI98|H38A69C
-38A69C:lI105|H38A6CC
-38A6CC:lI110|N
-38B0E0:lH38AA88|H38B0E8
-38AA88:lI47|H38AA90
-38AA90:lI104|H38AA98
-38AA98:lI111|H38AAA0
-38AAA0:lI109|H38AAA8
-38AAA8:lI101|H38AAB0
-38AAB0:lI47|H38AAB8
-38AAB8:lI115|H38AAC0
-38AAC0:lI105|H38AAC8
-38AAC8:lI114|H38AAD0
-38AAD0:lI105|H38AAD8
-38AAD8:lI47|H38AAE0
-38AAE0:lI101|H38AAE8
-38AAE8:lI114|H38AAF0
-38AAF0:lI108|H38AAF8
-38AAF8:lI97|H38AB00
-38AB00:lI110|H38AB08
-38AB08:lI103|N
-38B0E8:lH38AB1C|H38B0F0
-38AB1C:lI47|H38AB2C
-38AB2C:lI104|H38AB4C
-38AB4C:lI111|H38AB74
-38AB74:lI109|H38ABA4
-38ABA4:lI101|H38ABC4
-38ABC4:lI47|H38ABE4
-38ABE4:lI115|H38AC04
-38AC04:lI105|H38AC24
-38AC24:lI114|H38AC3C
-38AC3C:lI105|H38AC44
-38AC44:lI47|H38AC4C
-38AC4C:lI116|H38AC54
-38AC54:lI111|H38AC5C
-38AC5C:lI111|H38AC64
-38AC64:lI108|H38AC6C
-38AC6C:lI115|H38AC74
-38AC74:lI47|H38AC7C
-38AC7C:lI100|H38AC84
-38AC84:lI105|H38AC8C
-38AC8C:lI115|H38AC94
-38AC94:lI116|H38AC9C
-38AC9C:lI101|H38ACA4
-38ACA4:lI108|H38ACAC
-38ACAC:lI47|H38ACB4
-38ACB4:lI101|H38ACBC
-38ACBC:lI98|H38ACC4
-38ACC4:lI105|H38ACCC
-38ACCC:lI110|N
-38B0F0:lH38B0F8|N
-38B0F8:lI47|H38B100
-38B100:lI104|H38B108
-38B108:lI111|H38B110
-38B110:lI109|H38B118
-38B118:lI101|H38B120
-38B120:lI47|H38B128
-38B128:lI115|H38B130
-38B130:lI105|H38B138
-38B138:lI114|H38B140
-38B140:lI105|H38B148
-38B148:lI47|H38B150
-38B150:lI79|H38B158
-38B158:lI84|H38B160
-38B160:lI80|H38B168
-38B168:lI47|H38B170
-38B170:lI103|H38B178
-38B178:lI112|H38B180
-38B180:lI114|H38B188
-38B188:lI115|H38B190
-38B190:lI95|H38B198
-38B198:lI116|H38B1A0
-38B1A0:lI114|H38B1A8
-38B1A8:lI97|H38B1B0
-38B1B0:lI99|H38B1B8
-38B1B8:lI101|H38B1C0
-38B1C0:lI47|H38B1C8
-38B1C8:lI106|H38B1D0
-38B1D0:lI97|H38B1D8
-38B1D8:lI110|N
-3873BC:lI47|H3873CC
-3873CC:lI99|H3873E4
-3873E4:lI108|H3873FC
-3873FC:lI101|H38741C
-38741C:lI97|H387444
-387444:lI114|H387474
-387474:lI99|H3874AC
-3874AC:lI97|H3874EC
-3874EC:lI115|H387534
-387534:lI101|H387584
-387584:lI47|H3875DC
-3875DC:lI111|H38763C
-38763C:lI116|H3876A4
-3876A4:lI112|H387714
-387714:lI47|H38778C
-38778C:lI101|H38780C
-38780C:lI114|H387894
-387894:lI116|H387924
-387924:lI115|N
-=proc_dictionary:<0.19.0>
-H370244
-H370250
-=proc_stack:<0.19.0>
-36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36B17C
-y4:P<0.19.0>
-y5:P<0.9.0>
-36b478:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37025C
-=proc_heap:<0.19.0>
-36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
-370238:t2:P<0.19.0>,A8:user_sup
-37025C:lAA:gen_server|H37027C
-37027C:lP<0.9.0>|H37028C
-37028C:lP<0.9.0>|H370294
-370294:lA11:supervisor_bridge|H37029C
-37029C:lH3702A4|H3702AC
-3702A4:lA8:user_sup|H3702B4
-3702B4:lN|H3702BC
-3702BC:lA4:self|N
-3702AC:lN|N
-370244:t2:AD:$initial_call,H370264
-370264:t3:A3:gen,A7:init_it,H37025C
-370250:t2:AA:$ancestors,H370274
-370274:lAA:kernel_sup|H370284
-370284:lP<0.8.0>|N
-=proc_dictionary:<0.20.0>
-H36F8A8
-=proc_stack:<0.20.0>
-36a714:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:H36F8C4
-y3:P<0.21.0>
-y4:P<0.22.0>
-y5:p<0.72>
-y6:p<0.72>
-=proc_heap:<0.20.0>
-36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
-36F8F0:lH36F900|H36F910
-36F900:t3:I1,P<0.21.0>,H36F920
-36F920:t0:
-36F910:lH36F924|N
-36F924:t3:I2,P<0.22.0>,H36F93C
-36F93C:t3:A5:shell,A5:start,N
-36F8A8:t2:A3:eof,A5:false
-=proc_dictionary:<0.21.0>
-H3709DC
-H3709D0
-H3709F8
-=proc_stack:<0.21.0>
-370d1c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:A9:undefined
-y2:P<0.20.0>
-=proc_heap:<0.21.0>
-3709DC:t2:AB:line_buffer,N
-3709D0:t2:AB:kill_buffer,N
-3709F8:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.22.0>
-H370D44
-H370D60
-H370D7C
-H370D38
-=proc_stack:<0.22.0>
-374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
-y0:N
-y1:N
-y2:A8:infinity
-y3:H374A00
-y4:P<0.20.0>
-y5:H374A28
-374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
-y0:H37499C
-y1:A6:io_lib
-y2:A9:get_until
-y3:H3748B8
-y4:P<0.20.0>
-y5:A5:start
-374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
-y0:P<0.49.0>
-y1:P<0.22.0>
-374acc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:P<0.25.0>
-y2:P<0.20.0>
-=proc_heap:<0.22.0>
-374A00:t4:A4:line,H37499C,H3749A4,A4:none
-3749A4:t2:N,N
-37499C:lI50|H374994
-374994:lI62|H37498C
-37498C:lI32|N
-374A28:t4:A5:stack,H370D58,H374A24,N
-374A24:t0:
-370D58:lH370D74|N
-370D74:lI99|H370D88
-370D88:lI114|H370D90
-370D90:lI97|H370D98
-370D98:lI115|H370DA0
-370DA0:lI104|H370DA8
-370DA8:lI100|H370DB0
-370DB0:lI117|H370DB8
-370DB8:lI109|H370DC0
-370DC0:lI112|H370DC8
-370DC8:lI95|H370DD0
-370DD0:lI118|H370DD8
-370DD8:lI105|H370DE0
-370DE0:lI101|H370DE8
-370DE8:lI119|H370DF0
-370DF0:lI101|H370DF8
-370DF8:lI114|H370E00
-370E00:lI58|H370E08
-370E08:lI115|H370E10
-370E10:lI116|H370E18
-370E18:lI97|H370E20
-370E20:lI114|H370E28
-370E28:lI116|H370E30
-370E30:lI40|H370E38
-370E38:lI41|H370E40
-370E40:lI46|H370E48
-370E48:lI10|N
-3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
-3748B0:lI1|N
-370D44:t2:AB:line_buffer,H370D58
-370D60:t2:A5:shell,P<0.25.0>
-370D7C:t2:AB:kill_buffer,N
-370D38:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.23.0>
-H376464
-H376448
-=proc_stack:<0.23.0>
-376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:kernel_config
-y3:N
-y4:P<0.23.0>
-y5:P<0.9.0>
-376770:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H376418
-=proc_heap:<0.23.0>
-376418:lAA:gen_server|H376410
-376410:lP<0.9.0>|H376408
-376408:lP<0.9.0>|H376400
-376400:lAD:kernel_config|H3763F8
-3763F8:lN|H3763F0
-3763F0:lN|N
-376464:t2:AD:$initial_call,H376454
-376454:t3:A3:gen,A7:init_it,H376418
-376448:t2:AA:$ancestors,H376440
-376440:lAA:kernel_sup|H376420
-376420:lP<0.8.0>|N
-=proc_dictionary:<0.24.0>
-H3705E0
-H3705EC
-=proc_stack:<0.24.0>
-36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F018
-y4:AF:kernel_safe_sup
-y5:P<0.9.0>
-36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37063C
-=proc_heap:<0.24.0>
-36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
-36F044:lH36F04C|N
-36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
-370660:lA13:inet_gethost_native|N
-370650:t3:A13:inet_gethost_native,AA:start_link,N
-370644:t2:A5:local,AF:kernel_safe_sup
-37063C:lAA:gen_server|H3706AC
-3706AC:lP<0.9.0>|H3706BC
-3706BC:lP<0.9.0>|H3706C4
-3706C4:lH3706CC|H3706D8
-3706CC:t2:A5:local,AF:kernel_safe_sup
-3706D8:lAA:supervisor|H3706E0
-3706E0:lH3706E8|H3706F8
-3706E8:t3:H370644,A6:kernel,A4:safe
-3706F8:lN|N
-3705E0:t2:AD:$initial_call,H370668
-370668:t3:A3:gen,A7:init_it,H37063C
-3705EC:t2:AA:$ancestors,H370678
-370678:lAA:kernel_sup|H3706B4
-3706B4:lP<0.8.0>|N
-=proc_dictionary:<0.25.0>
-H36E304
-H36E31C
-=proc_stack:<0.25.0>
-36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
-y0:N
-y1:N
-y2:P<0.27.0>
-y3:P<0.49.0>
-36e624:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:I2
-y3:I1
-y4:N
-y5:N
-y6:N
-y7:I20
-y8:I20
-=proc_heap:<0.25.0>
-36E304:t2:H36E2F8,H36E2A8
-36E2A8:lH36E2B0|N
-36E2B0:t4:A4:call,I1,H36E2C4,N
-36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
-36E2E8:t3:A4:atom,I1,A5:start
-36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
-36E2F8:t2:A7:command,I1
-36E31C:t2:H36E310,A2:ok
-36E310:t2:A6:result,I1
-=proc_stack:<0.27.0>
-3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:P<0.25.0>
-=proc_heap:<0.27.0>
-=proc_dictionary:<0.31.0>
-H36DA24
-H36DA08
-=proc_stack:<0.31.0>
-36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36DB68
-y4:A17:inet_gethost_native_sup
-y5:P<0.24.0>
-36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36D9D0
-=proc_heap:<0.31.0>
-36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
-36D994:t2:A5:local,A17:inet_gethost_native_sup
-36D9D0:lAA:gen_server|H36D9C8
-36D9C8:lP<0.24.0>|H36D9C0
-36D9C0:lP<0.24.0>|H36D970
-36D970:lH36D980|H36D9B8
-36D980:t2:A5:local,A17:inet_gethost_native_sup
-36D9B8:lA11:supervisor_bridge|H36D978
-36D978:lH36D9A8|H36D9B0
-36D9A8:lA13:inet_gethost_native|H36D9A0
-36D9A0:lN|H36D98C
-36D98C:lH36D994|N
-36D9B0:lN|N
-36DA24:t2:AD:$initial_call,H36DA14
-36DA14:t3:A3:gen,A7:init_it,H36D9D0
-36DA08:t2:AA:$ancestors,H36DA00
-36DA00:lAF:kernel_safe_sup|H36D9E0
-36D9E0:lAA:kernel_sup|H36D9D8
-36D9D8:lP<0.8.0>|N
-=proc_dictionary:<0.32.0>
-H36CFD4
-H36D0BC
-=proc_stack:<0.32.0>
-36d12c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H36CF18
-=proc_heap:<0.32.0>
-36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
-36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
-36CFD4:t2:A3:rid,I1
-36D0BC:t2:AC:num_requests,I0
-=proc_dictionary:<0.33.0>
-H3905C4
-H3905D0
-=proc_stack:<0.33.0>
-3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:webtool
-y3:H3C8570
-y4:A8:web_tool
-y5:P<0.33.0>
-3cef00:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3905FC
-=proc_heap:<0.33.0>
-3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
-3C85D4:lA10:crashdump_viewer|N
-3905F4:lH390650|H39065C
-390650:t2:A4:port,I8888
-39065C:lH3906C8|H3906D4
-3906C8:t2:AC:bind_address,H390760
-390760:t4:I127,I0,I0,I1
-3906D4:lH390774|H390780
-390774:t2:AB:server_name,H39082C
-39082C:lI108|H390908
-390908:lI111|H3909DC
-3909DC:lI99|H390AC0
-390AC0:lI97|H390B98
-390B98:lI108|H390C78
-390C78:lI104|H390D58
-390D58:lI111|H390E2C
-390E2C:lI115|H390F10
-390F10:lI116|N
-390780:lH390834|H390840
-390834:t2:AE:max_header_siz,I1024
-390840:lH390910|H39091C
-390910:t2:A11:max_header_action,A8:reply414
-39091C:lH3909E4|H3909F0
-3909E4:t2:A8:com_type,A7:ip_comm
-3909F0:lH390AC8|H390AD4
-390AC8:t2:A7:modules,H390BA0
-390BA0:lA9:mod_alias|H390C80
-390C80:lA8:mod_auth|H390D60
-390D60:lA7:mod_esi|H390E34
-390E34:lAB:mod_actions|H390F18
-390F18:lA7:mod_cgi|H390FF4
-390FF4:lAB:mod_include|H3910D8
-3910D8:lA7:mod_dir|H3911B4
-3911B4:lA7:mod_get|H3912A0
-3912A0:lA8:mod_head|H39139C
-39139C:lA7:mod_log|H3914A0
-3914A0:lAC:mod_disk_log|N
-390AD4:lH390BA8|H390BB4
-390BA8:t2:AF:directory_index,H390C88
-390C88:lH390D68|N
-390D68:lI105|H390E3C
-390E3C:lI110|H390F20
-390F20:lI100|H390FFC
-390FFC:lI101|H3910E0
-3910E0:lI120|H3911BC
-3911BC:lI46|H3912A8
-3912A8:lI104|H3913A4
-3913A4:lI116|H3914A8
-3914A8:lI109|H39159C
-39159C:lI108|N
-390BB4:lH390C90|N
-390C90:t2:AC:default_type,H390D70
-390D70:lI116|H390E44
-390E44:lI101|H390F28
-390F28:lI120|H391004
-391004:lI116|H3910E8
-3910E8:lI47|H3911C4
-3911C4:lI112|H3912B0
-3912B0:lI108|H3913AC
-3913AC:lI97|H3914B0
-3914B0:lI105|H3915A4
-3915A4:lI110|N
-3905EC:lI47|H390648
-390648:lI99|H3906C0
-3906C0:lI108|H390758
-390758:lI101|H390824
-390824:lI97|H390900
-390900:lI114|H3909D4
-3909D4:lI99|H390AB8
-390AB8:lI97|H390B90
-390B90:lI115|H390C70
-390C70:lI101|H390D50
-390D50:lI47|H390E24
-390E24:lI111|H390F08
-390F08:lI116|H390FEC
-390FEC:lI112|H3910D0
-3910D0:lI47|H3911AC
-3911AC:lI101|H391298
-391298:lI114|H391394
-391394:lI116|H391498
-391498:lI115|H391594
-391594:lI47|H391680
-391680:lI108|H39175C
-39175C:lI105|H391840
-391840:lI98|H391924
-391924:lI47|H3919F8
-3919F8:lI119|H391AC4
-391AC4:lI101|H391B90
-391B90:lI98|H391C54
-391C54:lI116|H391D18
-391D18:lI111|H391DD4
-391DD4:lI111|H391E90
-391E90:lI108|H391F5C
-391F5C:lI47|H392030
-392030:lI112|H3920EC
-3920EC:lI114|H3921A8
-3921A8:lI105|H392264
-392264:lI118|N
-3905FC:lAA:gen_server|H390664
-390664:lP<0.27.0>|H3906DC
-3906DC:lA4:self|H390788
-390788:lH390848|H390854
-390848:t2:A5:local,A8:web_tool
-390854:lA7:webtool|H390924
-390924:lH3909F8|H390A04
-3909F8:t2:H3905EC,H3905F4
-390A04:lN|N
-3905C4:t2:AD:$initial_call,H390614
-390614:t3:A3:gen,A7:init_it,H3905FC
-3905D0:t2:AA:$ancestors,H390624
-390624:lP<0.27.0>|N
-=proc_dictionary:<0.41.0>
-H36DF0C
-H36DF18
-=proc_stack:<0.41.0>
-36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36EA3C
-y4:A6:websup
-y5:P<0.33.0>
-36edc0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36DF24
-=proc_heap:<0.41.0>
-36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
-36EA68:lH36EA70|N
-36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
-36DF54:lA10:crashdump_viewer|N
-36DF44:t3:A10:crashdump_viewer,AA:start_link,N
-36DF38:t2:A5:local,A17:crashdump_viewer_server
-36DF2C:t2:A5:local,A6:websup
-36DF24:lAA:gen_server|H36DF84
-36DF84:lP<0.33.0>|H36DF94
-36DF94:lP<0.33.0>|H36DF9C
-36DF9C:lH36DFA4|H36DFB0
-36DFA4:t2:A5:local,A6:websup
-36DFB0:lAA:supervisor|H36DFB8
-36DFB8:lH36DFC0|H36DFD0
-36DFC0:t3:H36DF2C,AB:webtool_sup,N
-36DFD0:lN|N
-36DF0C:t2:AD:$initial_call,H36DF6C
-36DF6C:t3:A3:gen,A7:init_it,H36DF24
-36DF18:t2:AA:$ancestors,H36DF7C
-36DF7C:lA8:web_tool|H36DF8C
-36DF8C:lP<0.27.0>|N
-=proc_dictionary:<0.43.0>
-H39D940
-H39D94C
-=proc_stack:<0.43.0>
-3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H3A3E34
-y4:A1A:httpd_sup__127_0_0_1__8888
-y5:P<0.33.0>
-3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H39D9CC
-=proc_heap:<0.43.0>
-3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
-39DA88:lA9:undefined|H39DB18
-39DB18:lH39DB50|H39DB58
-39DB50:lH39DB88|H39DB94
-39DB88:t2:AB:server_root,H39DBD0
-39DBD0:lI47|H39DC0C
-39DC0C:lI99|H39DC50
-39DC50:lI108|H39DC84
-39DC84:lI101|H39DCC4
-39DCC4:lI97|H39DD28
-39DD28:lI114|H39DD90
-39DD90:lI99|H39DE00
-39DE00:lI97|H39DE78
-39DE78:lI115|H39DF00
-39DF00:lI101|H39DF90
-39DF90:lI47|H39E038
-39E038:lI111|H39E0E8
-39E0E8:lI116|H39E1AC
-39E1AC:lI112|H39E288
-39E288:lI47|H39E37C
-39E37C:lI101|H39E478
-39E478:lI114|H39E580
-39E580:lI116|H39E69C
-39E69C:lI115|H39E7B0
-39E7B0:lI47|H39E8C4
-39E8C4:lI108|H39E9D8
-39E9D8:lI105|H39EACC
-39EACC:lI98|H39EBC0
-39EBC0:lI47|H39ECB4
-39ECB4:lI119|H39EDA8
-39EDA8:lI101|H39EE7C
-39EE7C:lI98|H39EF50
-39EF50:lI116|H39F02C
-39F02C:lI111|H39F110
-39F110:lI111|H39F1E4
-39F1E4:lI108|H39F2B0
-39F2B0:lI47|H39F36C
-39F36C:lI112|H39F430
-39F430:lI114|H39F4FC
-39F4FC:lI105|H39F5C0
-39F5C0:lI118|H39F694
-39F694:lI47|H39F768
-39F768:lI114|H39F83C
-39F83C:lI111|H39F920
-39F920:lI111|H39F9FC
-39F9FC:lI116|N
-39DB94:lH39DBD8|H39DBE4
-39DBD8:t2:AD:document_root,H39DC14
-39DC14:lI47|H39DC58
-39DC58:lI99|H39DC8C
-39DC8C:lI108|H39DCCC
-39DCCC:lI101|H39DD30
-39DD30:lI97|H39DD98
-39DD98:lI114|H39DE08
-39DE08:lI99|H39DE80
-39DE80:lI97|H39DF08
-39DF08:lI115|H39DF98
-39DF98:lI101|H39E040
-39E040:lI47|H39E0F0
-39E0F0:lI111|H39E1B4
-39E1B4:lI116|H39E290
-39E290:lI112|H39E384
-39E384:lI47|H39E480
-39E480:lI101|H39E588
-39E588:lI114|H39E6A4
-39E6A4:lI116|H39E7B8
-39E7B8:lI115|H39E8CC
-39E8CC:lI47|H39E9E0
-39E9E0:lI108|H39EAD4
-39EAD4:lI105|H39EBC8
-39EBC8:lI98|H39ECBC
-39ECBC:lI47|H39EDB0
-39EDB0:lI119|H39EE84
-39EE84:lI101|H39EF58
-39EF58:lI98|H39F034
-39F034:lI116|H39F118
-39F118:lI111|H39F1EC
-39F1EC:lI111|H39F2B8
-39F2B8:lI108|H39F374
-39F374:lI47|H39F438
-39F438:lI112|H39F504
-39F504:lI114|H39F5C8
-39F5C8:lI105|H39F69C
-39F69C:lI118|H39F770
-39F770:lI47|H39F844
-39F844:lI114|H39F928
-39F928:lI111|H39FA04
-39FA04:lI111|H39FAD8
-39FAD8:lI116|H39FBB4
-39FBB4:lI47|H39FC80
-39FC80:lI100|H39FD44
-39FD44:lI111|H39FE10
-39FE10:lI99|N
-39DBE4:lH39DC1C|H39DC28
-39DC1C:t2:AA:mime_types,H39DC60
-39DC60:lH39DC94|H39DCA0
-39DC94:t2:H39DCD4,H39DCDC
-39DCDC:lI120|H39DD40
-39DD40:lI45|H39DDA8
-39DDA8:lI119|H39DE10
-39DE10:lI111|H39DE88
-39DE88:lI114|H39DF10
-39DF10:lI108|H39DFA0
-39DFA0:lI100|H39E048
-39E048:lI47|H39E0F8
-39E0F8:lI120|H39E1BC
-39E1BC:lI45|H39E298
-39E298:lI118|H39E38C
-39E38C:lI114|H39E488
-39E488:lI109|H39E590
-39E590:lI108|N
-39DCD4:lI119|H39DD38
-39DD38:lI114|H39DDA0
-39DDA0:lI108|N
-39DCA0:lH39DCE4|H39DCF0
-39DCE4:t2:H39DD48,H39DD50
-39DD50:lI120|H39DDB8
-39DDB8:lI45|H39DE20
-39DE20:lI119|H39DE98
-39DE98:lI111|H39DF18
-39DF18:lI114|H39DFA8
-39DFA8:lI108|H39E050
-39E050:lI100|H39E100
-39E100:lI47|H39E1C4
-39E1C4:lI120|H39E2A0
-39E2A0:lI45|H39E394
-39E394:lI118|H39E490
-39E490:lI114|H39E598
-39E598:lI109|H39E6AC
-39E6AC:lI108|N
-39DD48:lI118|H39DDB0
-39DDB0:lI114|H39DE18
-39DE18:lI109|H39DE90
-39DE90:lI108|N
-39DCF0:lH39DD58|H39DD64
-39DD58:t2:H39DDC0,H39DDC8
-39DDC8:lI120|H39DE30
-39DE30:lI45|H39DEA8
-39DEA8:lI99|H39DF20
-39DF20:lI111|H39DFB0
-39DFB0:lI110|H39E058
-39E058:lI102|H39E108
-39E108:lI101|H39E1CC
-39E1CC:lI114|H39E2A8
-39E2A8:lI101|H39E39C
-39E39C:lI110|H39E498
-39E498:lI99|H39E5A0
-39E5A0:lI101|H39E6B4
-39E6B4:lI47|H39E7C0
-39E7C0:lI120|H39E8D4
-39E8D4:lI45|H39E9E8
-39E9E8:lI99|H39EADC
-39EADC:lI111|H39EBD0
-39EBD0:lI111|H39ECC4
-39ECC4:lI108|H39EDB8
-39EDB8:lI116|H39EE8C
-39EE8C:lI97|H39EF60
-39EF60:lI108|H39F03C
-39F03C:lI107|N
-39DDC0:lI105|H39DE28
-39DE28:lI99|H39DEA0
-39DEA0:lI101|N
-39DD64:lH39DDD0|H39DDDC
-39DDD0:t2:H39DE38,H39DE40
-39DE40:lI118|H39DEB8
-39DEB8:lI105|H39DF30
-39DF30:lI100|H39DFC0
-39DFC0:lI101|H39E068
-39E068:lI111|H39E110
-39E110:lI47|H39E1D4
-39E1D4:lI120|H39E2B0
-39E2B0:lI45|H39E3A4
-39E3A4:lI115|H39E4A0
-39E4A0:lI103|H39E5A8
-39E5A8:lI105|H39E6BC
-39E6BC:lI45|H39E7C8
-39E7C8:lI109|H39E8DC
-39E8DC:lI111|H39E9F0
-39E9F0:lI118|H39EAE4
-39EAE4:lI105|H39EBD8
-39EBD8:lI101|N
-39DE38:lI109|H39DEB0
-39DEB0:lI111|H39DF28
-39DF28:lI118|H39DFB8
-39DFB8:lI105|H39E060
-39E060:lI101|N
-39DDDC:lH39DE48|H39DE54
-39DE48:t2:H39DEC0,H39DEC8
-39DEC8:lI118|H39DF40
-39DF40:lI105|H39DFD0
-39DFD0:lI100|H39E070
-39E070:lI101|H39E118
-39E118:lI111|H39E1DC
-39E1DC:lI47|H39E2B8
-39E2B8:lI120|H39E3AC
-39E3AC:lI45|H39E4A8
-39E4A8:lI109|H39E5B0
-39E5B0:lI115|H39E6C4
-39E6C4:lI118|H39E7D0
-39E7D0:lI105|H39E8E4
-39E8E4:lI100|H39E9F8
-39E9F8:lI101|H39EAEC
-39EAEC:lI111|N
-39DEC0:lI97|H39DF38
-39DF38:lI118|H39DFC8
-39DFC8:lI105|N
-39DE54:lH39DED0|H39DEDC
-39DED0:t2:H39DF48,H39DF50
-39DF50:lI118|H39DFE0
-39DFE0:lI105|H39E078
-39E078:lI100|H39E120
-39E120:lI101|H39E1E4
-39E1E4:lI111|H39E2C0
-39E2C0:lI47|H39E3B4
-39E3B4:lI113|H39E4B0
-39E4B0:lI117|H39E5B8
-39E5B8:lI105|H39E6CC
-39E6CC:lI99|H39E7D8
-39E7D8:lI107|H39E8EC
-39E8EC:lI116|H39EA00
-39EA00:lI105|H39EAF4
-39EAF4:lI109|H39EBE0
-39EBE0:lI101|N
-39DF48:lI113|H39DFD8
-39DFD8:lI116|N
-39DEDC:lH39DF58|H39DF64
-39DF58:t2:H39DFE8,H39DFF0
-39DFF0:lI118|H39E088
-39E088:lI105|H39E130
-39E130:lI100|H39E1EC
-39E1EC:lI101|H39E2C8
-39E2C8:lI111|H39E3BC
-39E3BC:lI47|H39E4B8
-39E4B8:lI113|H39E5C0
-39E5C0:lI117|H39E6D4
-39E6D4:lI105|H39E7E0
-39E7E0:lI99|H39E8F4
-39E8F4:lI107|H39EA08
-39EA08:lI116|H39EAFC
-39EAFC:lI105|H39EBE8
-39EBE8:lI109|H39ECCC
-39ECCC:lI101|N
-39DFE8:lI109|H39E080
-39E080:lI111|H39E128
-39E128:lI118|N
-39DF64:lH39DFF8|H39E004
-39DFF8:t2:H39E090,H39E098
-39E098:lI118|H39E140
-39E140:lI105|H39E1FC
-39E1FC:lI100|H39E2D8
-39E2D8:lI101|H39E3C4
-39E3C4:lI111|H39E4C0
-39E4C0:lI47|H39E5C8
-39E5C8:lI109|H39E6DC
-39E6DC:lI112|H39E7E8
-39E7E8:lI101|H39E8FC
-39E8FC:lI103|N
-39E090:lI109|H39E138
-39E138:lI112|H39E1F4
-39E1F4:lI101|H39E2D0
-39E2D0:lI103|N
-39E004:lH39E0A0|H39E0AC
-39E0A0:t2:H39E148,H39E150
-39E150:lI118|H39E20C
-39E20C:lI105|H39E2E8
-39E2E8:lI100|H39E3CC
-39E3CC:lI101|H39E4C8
-39E4C8:lI111|H39E5D0
-39E5D0:lI47|H39E6E4
-39E6E4:lI109|H39E7F0
-39E7F0:lI112|H39E904
-39E904:lI101|H39EA10
-39EA10:lI103|N
-39E148:lI109|H39E204
-39E204:lI112|H39E2E0
-39E2E0:lI103|N
-39E0AC:lH39E158|H39E164
-39E158:t2:H39E214,H39E21C
-39E21C:lI118|H39E2F8
-39E2F8:lI105|H39E3DC
-39E3DC:lI100|H39E4D0
-39E4D0:lI101|H39E5D8
-39E5D8:lI111|H39E6EC
-39E6EC:lI47|H39E7F8
-39E7F8:lI109|H39E90C
-39E90C:lI112|H39EA18
-39EA18:lI101|H39EB04
-39EB04:lI103|N
-39E214:lI109|H39E2F0
-39E2F0:lI112|H39E3D4
-39E3D4:lI101|N
-39E164:lH39E224|H39E230
-39E224:t2:H39E300,H39E308
-39E308:lI116|H39E3EC
-39E3EC:lI101|H39E4E0
-39E4E0:lI120|H39E5E8
-39E5E8:lI116|H39E6F4
-39E6F4:lI47|H39E800
-39E800:lI120|H39E914
-39E914:lI45|H39EA20
-39EA20:lI115|H39EB0C
-39EB0C:lI103|H39EBF0
-39EBF0:lI109|H39ECD4
-39ECD4:lI108|N
-39E300:lI115|H39E3E4
-39E3E4:lI103|H39E4D8
-39E4D8:lI109|H39E5E0
-39E5E0:lI108|N
-39E230:lH39E310|H39E31C
-39E310:t2:H39E3F4,H39E3FC
-39E3FC:lI116|H39E4F0
-39E4F0:lI101|H39E5F8
-39E5F8:lI120|H39E6FC
-39E6FC:lI116|H39E808
-39E808:lI47|H39E91C
-39E91C:lI120|H39EA28
-39EA28:lI45|H39EB14
-39EB14:lI115|H39EBF8
-39EBF8:lI103|H39ECDC
-39ECDC:lI109|H39EDC0
-39EDC0:lI108|N
-39E3F4:lI115|H39E4E8
-39E4E8:lI103|H39E5F0
-39E5F0:lI109|N
-39E31C:lH39E404|H39E410
-39E404:t2:H39E4F8,H39E500
-39E500:lI116|H39E608
-39E608:lI101|H39E70C
-39E70C:lI120|H39E810
-39E810:lI116|H39E924
-39E924:lI47|H39EA30
-39EA30:lI120|H39EB1C
-39EB1C:lI45|H39EC00
-39EC00:lI115|H39ECE4
-39ECE4:lI101|H39EDC8
-39EDC8:lI116|H39EE94
-39EE94:lI101|H39EF68
-39EF68:lI120|H39F044
-39F044:lI116|N
-39E4F8:lI101|H39E600
-39E600:lI116|H39E704
-39E704:lI120|N
-39E410:lH39E508|H39E514
-39E508:t2:H39E610,H39E618
-39E618:lI116|H39E71C
-39E71C:lI101|H39E820
-39E820:lI120|H39E92C
-39E92C:lI116|H39EA38
-39EA38:lI47|H39EB24
-39EB24:lI116|H39EC08
-39EC08:lI97|H39ECEC
-39ECEC:lI98|H39EDD0
-39EDD0:lI45|H39EE9C
-39EE9C:lI115|H39EF70
-39EF70:lI101|H39F04C
-39F04C:lI112|H39F120
-39F120:lI97|H39F1F4
-39F1F4:lI114|H39F2C0
-39F2C0:lI97|H39F37C
-39F37C:lI116|H39F440
-39F440:lI101|H39F50C
-39F50C:lI100|H39F5D0
-39F5D0:lI45|H39F6A4
-39F6A4:lI118|H39F778
-39F778:lI97|H39F84C
-39F84C:lI108|H39F930
-39F930:lI117|H39FA0C
-39FA0C:lI101|H39FAE0
-39FAE0:lI115|N
-39E610:lI116|H39E714
-39E714:lI115|H39E818
-39E818:lI118|N
-39E514:lH39E620|H39E62C
-39E620:t2:H39E724,H39E72C
-39E72C:lI116|H39E830
-39E830:lI101|H39E93C
-39E93C:lI120|H39EA40
-39EA40:lI116|H39EB2C
-39EB2C:lI47|H39EC10
-39EC10:lI114|H39ECF4
-39ECF4:lI105|H39EDD8
-39EDD8:lI99|H39EEA4
-39EEA4:lI104|H39EF78
-39EF78:lI116|H39F054
-39F054:lI101|H39F128
-39F128:lI120|H39F1FC
-39F1FC:lI116|N
-39E724:lI114|H39E828
-39E828:lI116|H39E934
-39E934:lI120|N
-39E62C:lH39E734|H39E740
-39E734:t2:H39E838,H39E840
-39E840:lI116|H39E94C
-39E94C:lI101|H39EA50
-39EA50:lI120|H39EB34
-39EB34:lI116|H39EC18
-39EC18:lI47|H39ECFC
-39ECFC:lI112|H39EDE0
-39EDE0:lI108|H39EEAC
-39EEAC:lI97|H39EF80
-39EF80:lI105|H39F05C
-39F05C:lI110|N
-39E838:lI116|H39E944
-39E944:lI120|H39EA48
-39EA48:lI116|N
-39E740:lH39E848|H39E854
-39E848:t2:H39E954,H39E95C
-39E95C:lI116|H39EA60
-39EA60:lI101|H39EB44
-39EB44:lI120|H39EC28
-39EC28:lI116|H39ED0C
-39ED0C:lI47|H39EDE8
-39EDE8:lI120|H39EEB4
-39EEB4:lI45|H39EF88
-39EF88:lI115|H39F064
-39F064:lI101|H39F130
-39F130:lI114|H39F204
-39F204:lI118|H39F2C8
-39F2C8:lI101|H39F384
-39F384:lI114|H39F448
-39F448:lI45|H39F514
-39F514:lI112|H39F5D8
-39F5D8:lI97|H39F6AC
-39F6AC:lI114|H39F780
-39F780:lI115|H39F854
-39F854:lI101|H39F938
-39F938:lI100|H39FA14
-39FA14:lI45|H39FAE8
-39FAE8:lI104|H39FBBC
-39FBBC:lI116|H39FC88
-39FC88:lI109|H39FD4C
-39FD4C:lI108|N
-39E954:lI115|H39EA58
-39EA58:lI104|H39EB3C
-39EB3C:lI116|H39EC20
-39EC20:lI109|H39ED04
-39ED04:lI108|N
-39E854:lH39E964|H39E970
-39E964:t2:H39EA68,H39EA70
-39EA70:lI116|H39EB54
-39EB54:lI101|H39EC38
-39EC38:lI120|H39ED1C
-39ED1C:lI116|H39EDF0
-39EDF0:lI47|H39EEBC
-39EEBC:lI104|H39EF90
-39EF90:lI116|H39F06C
-39F06C:lI109|H39F138
-39F138:lI108|N
-39EA68:lI104|H39EB4C
-39EB4C:lI116|H39EC30
-39EC30:lI109|H39ED14
-39ED14:lI108|N
-39E970:lH39EA78|H39EA84
-39EA78:t2:H39EB5C,H39EB64
-39EB64:lI116|H39EC48
-39EC48:lI101|H39ED2C
-39ED2C:lI120|H39EDF8
-39EDF8:lI116|H39EEC4
-39EEC4:lI47|H39EF98
-39EF98:lI104|H39F074
-39F074:lI116|H39F140
-39F140:lI109|H39F20C
-39F20C:lI108|N
-39EB5C:lI104|H39EC40
-39EC40:lI116|H39ED24
-39ED24:lI109|N
-39EA84:lH39EB6C|H39EB78
-39EB6C:t2:H39EC50,H39EC58
-39EC58:lI105|H39ED3C
-39ED3C:lI109|H39EE08
-39EE08:lI97|H39EECC
-39EECC:lI103|H39EFA0
-39EFA0:lI101|H39F07C
-39F07C:lI47|H39F148
-39F148:lI120|H39F214
-39F214:lI45|H39F2D0
-39F2D0:lI120|H39F38C
-39F38C:lI119|H39F450
-39F450:lI105|H39F51C
-39F51C:lI110|H39F5E0
-39F5E0:lI100|H39F6B4
-39F6B4:lI111|H39F788
-39F788:lI119|H39F85C
-39F85C:lI100|H39F940
-39F940:lI117|H39FA1C
-39FA1C:lI109|H39FAF0
-39FAF0:lI112|N
-39EC50:lI120|H39ED34
-39ED34:lI119|H39EE00
-39EE00:lI100|N
-39EB78:lH39EC60|H39EC6C
-39EC60:t2:H39ED44,H39ED4C
-39ED4C:lI105|H39EE18
-39EE18:lI109|H39EEDC
-39EEDC:lI97|H39EFA8
-39EFA8:lI103|H39F084
-39F084:lI101|H39F150
-39F150:lI47|H39F21C
-39F21C:lI120|H39F2D8
-39F2D8:lI45|H39F394
-39F394:lI120|H39F458
-39F458:lI112|H39F524
-39F524:lI105|H39F5E8
-39F5E8:lI120|H39F6BC
-39F6BC:lI109|H39F790
-39F790:lI97|H39F864
-39F864:lI112|N
-39ED44:lI120|H39EE10
-39EE10:lI112|H39EED4
-39EED4:lI109|N
-39EC6C:lH39ED54|H39ED60
-39ED54:t2:H39EE20,H39EE28
-39EE28:lI105|H39EEEC
-39EEEC:lI109|H39EFB8
-39EFB8:lI97|H39F08C
-39F08C:lI103|H39F158
-39F158:lI101|H39F224
-39F224:lI47|H39F2E0
-39F2E0:lI120|H39F39C
-39F39C:lI45|H39F460
-39F460:lI120|H39F52C
-39F52C:lI98|H39F5F0
-39F5F0:lI105|H39F6C4
-39F6C4:lI116|H39F798
-39F798:lI109|H39F86C
-39F86C:lI97|H39F948
-39F948:lI112|N
-39EE20:lI120|H39EEE4
-39EEE4:lI98|H39EFB0
-39EFB0:lI109|N
-39ED60:lH39EE30|H39EE3C
-39EE30:t2:H39EEF4,H39EEFC
-39EEFC:lI105|H39EFC8
-39EFC8:lI109|H39F09C
-39F09C:lI97|H39F160
-39F160:lI103|H39F22C
-39F22C:lI101|H39F2E8
-39F2E8:lI47|H39F3A4
-39F3A4:lI120|H39F468
-39F468:lI45|H39F534
-39F534:lI114|H39F5F8
-39F5F8:lI103|H39F6CC
-39F6CC:lI98|N
-39EEF4:lI114|H39EFC0
-39EFC0:lI103|H39F094
-39F094:lI98|N
-39EE3C:lH39EF04|H39EF10
-39EF04:t2:H39EFD0,H39EFD8
-39EFD8:lI105|H39F0AC
-39F0AC:lI109|H39F170
-39F170:lI97|H39F234
-39F234:lI103|H39F2F0
-39F2F0:lI101|H39F3AC
-39F3AC:lI47|H39F470
-39F470:lI120|H39F53C
-39F53C:lI45|H39F600
-39F600:lI112|H39F6D4
-39F6D4:lI111|H39F7A0
-39F7A0:lI114|H39F874
-39F874:lI116|H39F950
-39F950:lI97|H39FA24
-39FA24:lI98|H39FAF8
-39FAF8:lI108|H39FBC4
-39FBC4:lI101|H39FC90
-39FC90:lI45|H39FD54
-39FD54:lI112|H39FE18
-39FE18:lI105|H39FECC
-39FECC:lI120|H39FF88
-39FF88:lI109|H3A003C
-3A003C:lI97|H3A00E8
-3A00E8:lI112|N
-39EFD0:lI112|H39F0A4
-39F0A4:lI112|H39F168
-39F168:lI109|N
-39EF10:lH39EFE0|H39EFEC
-39EFE0:t2:H39F0B4,H39F0BC
-39F0BC:lI105|H39F180
-39F180:lI109|H39F244
-39F244:lI97|H39F2F8
-39F2F8:lI103|H39F3B4
-39F3B4:lI101|H39F478
-39F478:lI47|H39F544
-39F544:lI120|H39F608
-39F608:lI45|H39F6DC
-39F6DC:lI112|H39F7A8
-39F7A8:lI111|H39F87C
-39F87C:lI114|H39F958
-39F958:lI116|H39FA2C
-39FA2C:lI97|H39FB00
-39FB00:lI98|H39FBCC
-39FBCC:lI108|H39FC98
-39FC98:lI101|H39FD5C
-39FD5C:lI45|H39FE20
-39FE20:lI103|H39FED4
-39FED4:lI114|H39FF90
-39FF90:lI97|H3A0044
-3A0044:lI121|H3A00F0
-3A00F0:lI109|H3A0194
-3A0194:lI97|H3A0248
-3A0248:lI112|N
-39F0B4:lI112|H39F178
-39F178:lI103|H39F23C
-39F23C:lI109|N
-39EFEC:lH39F0C4|H39F0D0
-39F0C4:t2:H39F188,H39F190
-39F190:lI105|H39F254
-39F254:lI109|H39F308
-39F308:lI97|H39F3BC
-39F3BC:lI103|H39F480
-39F480:lI101|H39F54C
-39F54C:lI47|H39F610
-39F610:lI120|H39F6E4
-39F6E4:lI45|H39F7B0
-39F7B0:lI112|H39F884
-39F884:lI111|H39F960
-39F960:lI114|H39FA34
-39FA34:lI116|H39FB08
-39FB08:lI97|H39FBD4
-39FBD4:lI98|H39FCA0
-39FCA0:lI108|H39FD64
-39FD64:lI101|H39FE28
-39FE28:lI45|H39FEDC
-39FEDC:lI98|H39FF98
-39FF98:lI105|H3A004C
-3A004C:lI116|H3A00F8
-3A00F8:lI109|H3A019C
-3A019C:lI97|H3A0250
-3A0250:lI112|N
-39F188:lI112|H39F24C
-39F24C:lI98|H39F300
-39F300:lI109|N
-39F0D0:lH39F198|H39F1A4
-39F198:t2:H39F25C,H39F264
-39F264:lI105|H39F318
-39F318:lI109|H39F3CC
-39F3CC:lI97|H39F488
-39F488:lI103|H39F554
-39F554:lI101|H39F618
-39F618:lI47|H39F6EC
-39F6EC:lI120|H39F7B8
-39F7B8:lI45|H39F88C
-39F88C:lI112|H39F968
-39F968:lI111|H39FA3C
-39FA3C:lI114|H39FB10
-39FB10:lI116|H39FBDC
-39FBDC:lI97|H39FCA8
-39FCA8:lI98|H39FD6C
-39FD6C:lI108|H39FE30
-39FE30:lI101|H39FEE4
-39FEE4:lI45|H39FFA0
-39FFA0:lI97|H3A0054
-3A0054:lI110|H3A0100
-3A0100:lI121|H3A01A4
-3A01A4:lI109|H3A0258
-3A0258:lI97|H3A0304
-3A0304:lI112|N
-39F25C:lI112|H39F310
-39F310:lI110|H39F3C4
-39F3C4:lI109|N
-39F1A4:lH39F26C|H39F278
-39F26C:t2:H39F320,H39F328
-39F328:lI105|H39F3DC
-39F3DC:lI109|H39F498
-39F498:lI97|H39F55C
-39F55C:lI103|H39F620
-39F620:lI101|H39F6F4
-39F6F4:lI47|H39F7C0
-39F7C0:lI120|H39F894
-39F894:lI45|H39F970
-39F970:lI99|H39FA44
-39FA44:lI109|H39FB18
-39FB18:lI117|H39FBE4
-39FBE4:lI45|H39FCB0
-39FCB0:lI114|H39FD74
-39FD74:lI97|H39FE38
-39FE38:lI115|H39FEEC
-39FEEC:lI116|H39FFA8
-39FFA8:lI101|H3A005C
-3A005C:lI114|N
-39F320:lI114|H39F3D4
-39F3D4:lI97|H39F490
-39F490:lI115|N
-39F278:lH39F330|H39F33C
-39F330:t2:H39F3E4,H39F3EC
-39F3EC:lI105|H39F4A8
-39F4A8:lI109|H39F56C
-39F56C:lI97|H39F630
-39F630:lI103|H39F6FC
-39F6FC:lI101|H39F7C8
-39F7C8:lI47|H39F89C
-39F89C:lI116|H39F978
-39F978:lI105|H39FA4C
-39FA4C:lI102|H39FB20
-39FB20:lI102|N
-39F3E4:lI116|H39F4A0
-39F4A0:lI105|H39F564
-39F564:lI102|H39F628
-39F628:lI102|N
-39F33C:lH39F3F4|H39F400
-39F3F4:t2:H39F4B0,H39F4B8
-39F4B8:lI105|H39F57C
-39F57C:lI109|H39F640
-39F640:lI97|H39F704
-39F704:lI103|H39F7D0
-39F7D0:lI101|H39F8A4
-39F8A4:lI47|H39F980
-39F980:lI116|H39FA54
-39FA54:lI105|H39FB28
-39FB28:lI102|H39FBEC
-39FBEC:lI102|N
-39F4B0:lI116|H39F574
-39F574:lI105|H39F638
-39F638:lI102|N
-39F400:lH39F4C0|H39F4CC
-39F4C0:t2:H39F584,H39F58C
-39F58C:lI105|H39F650
-39F650:lI109|H39F714
-39F714:lI97|H39F7D8
-39F7D8:lI103|H39F8AC
-39F8AC:lI101|H39F988
-39F988:lI47|H39FA5C
-39FA5C:lI112|H39FB30
-39FB30:lI110|H39FBF4
-39FBF4:lI103|N
-39F584:lI112|H39F648
-39F648:lI110|H39F70C
-39F70C:lI103|N
-39F4CC:lH39F594|H39F5A0
-39F594:t2:H39F658,H39F660
-39F660:lI105|H39F724
-39F724:lI109|H39F7E8
-39F7E8:lI97|H39F8BC
-39F8BC:lI103|H39F990
-39F990:lI101|H39FA64
-39FA64:lI47|H39FB38
-39FB38:lI106|H39FBFC
-39FBFC:lI112|H39FCB8
-39FCB8:lI101|H39FD7C
-39FD7C:lI103|N
-39F658:lI106|H39F71C
-39F71C:lI112|H39F7E0
-39F7E0:lI101|H39F8B4
-39F8B4:lI103|N
-39F5A0:lH39F668|H39F674
-39F668:t2:H39F72C,H39F734
-39F734:lI105|H39F7F8
-39F7F8:lI109|H39F8CC
-39F8CC:lI97|H39F998
-39F998:lI103|H39FA6C
-39FA6C:lI101|H39FB40
-39FB40:lI47|H39FC04
-39FC04:lI106|H39FCC0
-39FCC0:lI112|H39FD84
-39FD84:lI101|H39FE40
-39FE40:lI103|N
-39F72C:lI106|H39F7F0
-39F7F0:lI112|H39F8C4
-39F8C4:lI103|N
-39F674:lH39F73C|H39F748
-39F73C:t2:H39F800,H39F808
-39F808:lI105|H39F8DC
-39F8DC:lI109|H39F9A8
-39F9A8:lI97|H39FA74
-39FA74:lI103|H39FB48
-39FB48:lI101|H39FC0C
-39FC0C:lI47|H39FCC8
-39FCC8:lI106|H39FD8C
-39FD8C:lI112|H39FE48
-39FE48:lI101|H39FEF4
-39FEF4:lI103|N
-39F800:lI106|H39F8D4
-39F8D4:lI112|H39F9A0
-39F9A0:lI101|N
-39F748:lH39F810|H39F81C
-39F810:t2:H39F8E4,H39F8EC
-39F8EC:lI105|H39F9B8
-39F9B8:lI109|H39FA84
-39FA84:lI97|H39FB50
-39FB50:lI103|H39FC14
-39FC14:lI101|H39FCD0
-39FCD0:lI47|H39FD94
-39FD94:lI105|H39FE50
-39FE50:lI101|H39FEFC
-39FEFC:lI102|N
-39F8E4:lI105|H39F9B0
-39F9B0:lI101|H39FA7C
-39FA7C:lI102|N
-39F81C:lH39F8F4|H39F900
-39F8F4:t2:H39F9C0,H39F9C8
-39F9C8:lI105|H39FA94
-39FA94:lI109|H39FB60
-39FB60:lI97|H39FC1C
-39FC1C:lI103|H39FCD8
-39FCD8:lI101|H39FD9C
-39FD9C:lI47|H39FE58
-39FE58:lI103|H39FF04
-39FF04:lI105|H39FFB0
-39FFB0:lI102|N
-39F9C0:lI103|H39FA8C
-39FA8C:lI105|H39FB58
-39FB58:lI102|N
-39F900:lH39F9D0|H39F9DC
-39F9D0:t2:H39FA9C,H39FAA4
-39FAA4:lI99|H39FB70
-39FB70:lI104|H39FC2C
-39FC2C:lI101|H39FCE0
-39FCE0:lI109|H39FDA4
-39FDA4:lI105|H39FE60
-39FE60:lI99|H39FF0C
-39FF0C:lI97|H39FFB8
-39FFB8:lI108|H3A0064
-3A0064:lI47|H3A0108
-3A0108:lI120|H3A01AC
-3A01AC:lI45|H3A0260
-3A0260:lI112|H3A030C
-3A030C:lI100|H3A03B8
-3A03B8:lI98|N
-39FA9C:lI112|H39FB68
-39FB68:lI100|H39FC24
-39FC24:lI98|N
-39F9DC:lH39FAAC|H39FAB8
-39FAAC:t2:H39FB78,H39FB80
-39FB80:lI99|H39FC3C
-39FC3C:lI104|H39FCF0
-39FCF0:lI101|H39FDAC
-39FDAC:lI109|H39FE68
-39FE68:lI105|H39FF14
-39FF14:lI99|H39FFC0
-39FFC0:lI97|H3A006C
-3A006C:lI108|H3A0110
-3A0110:lI47|H3A01B4
-3A01B4:lI120|H3A0268
-3A0268:lI45|H3A0314
-3A0314:lI112|H3A03C0
-3A03C0:lI100|H3A0454
-3A0454:lI98|N
-39FB78:lI120|H39FC34
-39FC34:lI121|H39FCE8
-39FCE8:lI122|N
-39FAB8:lH39FB88|H39FB94
-39FB88:t2:H39FC44,H39FC4C
-39FC4C:lI97|H39FD00
-39FD00:lI117|H39FDBC
-39FDBC:lI100|H39FE70
-39FE70:lI105|H39FF1C
-39FF1C:lI111|H39FFC8
-39FFC8:lI47|H3A0074
-3A0074:lI120|H3A0118
-3A0118:lI45|H3A01BC
-3A01BC:lI119|H3A0270
-3A0270:lI97|H3A031C
-3A031C:lI118|N
-39FC44:lI119|H39FCF8
-39FCF8:lI97|H39FDB4
-39FDB4:lI118|N
-39FB94:lH39FC54|H39FC60
-39FC54:t2:H39FD08,H39FD10
-39FD10:lI97|H39FDCC
-39FDCC:lI117|H39FE78
-39FE78:lI100|H39FF24
-39FF24:lI105|H39FFD0
-39FFD0:lI111|H3A007C
-3A007C:lI47|H3A0120
-3A0120:lI120|H3A01C4
-3A01C4:lI45|H3A0278
-3A0278:lI114|H3A0324
-3A0324:lI101|H3A03C8
-3A03C8:lI97|H3A045C
-3A045C:lI108|H3A04F8
-3A04F8:lI97|H3A059C
-3A059C:lI117|H3A0648
-3A0648:lI100|H3A06F4
-3A06F4:lI105|H3A07A0
-3A07A0:lI111|N
-39FD08:lI114|H39FDC4
-39FDC4:lI97|N
-39FC60:lH39FD18|H39FD24
-39FD18:t2:H39FDD4,H39FDDC
-39FDDC:lI97|H39FE88
-39FE88:lI117|H39FF34
-39FF34:lI100|H39FFD8
-39FFD8:lI105|H3A0084
-3A0084:lI111|H3A0128
-3A0128:lI47|H3A01CC
-3A01CC:lI120|H3A0280
-3A0280:lI45|H3A032C
-3A032C:lI112|H3A03D0
-3A03D0:lI110|H3A0464
-3A0464:lI45|H3A0500
-3A0500:lI114|H3A05A4
-3A05A4:lI101|H3A0650
-3A0650:lI97|H3A06FC
-3A06FC:lI108|H3A07A8
-3A07A8:lI97|H3A0844
-3A0844:lI117|H3A08D0
-3A08D0:lI100|H3A0964
-3A0964:lI105|H3A09F8
-3A09F8:lI111|H3A0A94
-3A0A94:lI45|H3A0B40
-3A0B40:lI112|H3A0BEC
-3A0BEC:lI108|H3A0CA8
-3A0CA8:lI117|H3A0D64
-3A0D64:lI103|H3A0E18
-3A0E18:lI105|H3A0ECC
-3A0ECC:lI110|N
-39FDD4:lI114|H39FE80
-39FE80:lI112|H39FF2C
-39FF2C:lI109|N
-39FD24:lH39FDE4|H39FDF0
-39FDE4:t2:H39FE90,H39FE98
-39FE98:lI97|H39FF44
-39FF44:lI117|H39FFE8
-39FFE8:lI100|H3A008C
-3A008C:lI105|H3A0130
-3A0130:lI111|H3A01D4
-3A01D4:lI47|H3A0288
-3A0288:lI120|H3A0334
-3A0334:lI45|H3A03D8
-3A03D8:lI112|H3A046C
-3A046C:lI110|H3A0508
-3A0508:lI45|H3A05AC
-3A05AC:lI114|H3A0658
-3A0658:lI101|H3A0704
-3A0704:lI97|H3A07B0
-3A07B0:lI108|H3A084C
-3A084C:lI97|H3A08D8
-3A08D8:lI117|H3A096C
-3A096C:lI100|H3A0A00
-3A0A00:lI105|H3A0A9C
-3A0A9C:lI111|N
-39FE90:lI114|H39FF3C
-39FF3C:lI97|H39FFE0
-39FFE0:lI109|N
-39FDF0:lH39FEA0|H39FEAC
-39FEA0:t2:H39FF4C,H39FF54
-39FF54:lI97|H39FFF8
-39FFF8:lI117|H3A009C
-3A009C:lI100|H3A0138
-3A0138:lI105|H3A01DC
-3A01DC:lI111|H3A0290
-3A0290:lI47|H3A033C
-3A033C:lI120|H3A03E0
-3A03E0:lI45|H3A0474
-3A0474:lI97|H3A0510
-3A0510:lI105|H3A05B4
-3A05B4:lI102|H3A0660
-3A0660:lI102|N
-39FF4C:lI97|H39FFF0
-39FFF0:lI105|H3A0094
-3A0094:lI102|N
-39FEAC:lH39FF5C|H39FF68
-39FF5C:t2:H3A0000,H3A0008
-3A0008:lI97|H3A00AC
-3A00AC:lI117|H3A0148
-3A0148:lI100|H3A01EC
-3A01EC:lI105|H3A0298
-3A0298:lI111|H3A0344
-3A0344:lI47|H3A03E8
-3A03E8:lI120|H3A047C
-3A047C:lI45|H3A0518
-3A0518:lI97|H3A05BC
-3A05BC:lI105|H3A0668
-3A0668:lI102|H3A070C
-3A070C:lI102|N
-3A0000:lI97|H3A00A4
-3A00A4:lI105|H3A0140
-3A0140:lI102|H3A01E4
-3A01E4:lI102|N
-39FF68:lH3A0010|H3A001C
-3A0010:t2:H3A00B4,H3A00BC
-3A00BC:lI97|H3A0158
-3A0158:lI117|H3A01FC
-3A01FC:lI100|H3A02A8
-3A02A8:lI105|H3A034C
-3A034C:lI111|H3A03F0
-3A03F0:lI47|H3A0484
-3A0484:lI120|H3A0520
-3A0520:lI45|H3A05C4
-3A05C4:lI97|H3A0670
-3A0670:lI105|H3A0714
-3A0714:lI102|H3A07B8
-3A07B8:lI102|N
-3A00B4:lI97|H3A0150
-3A0150:lI105|H3A01F4
-3A01F4:lI102|H3A02A0
-3A02A0:lI99|N
-3A001C:lH3A00C4|H3A00D0
-3A00C4:t2:H3A0160,H3A0168
-3A0168:lI97|H3A020C
-3A020C:lI117|H3A02B8
-3A02B8:lI100|H3A035C
-3A035C:lI105|H3A03F8
-3A03F8:lI111|H3A048C
-3A048C:lI47|H3A0528
-3A0528:lI109|H3A05CC
-3A05CC:lI112|H3A0678
-3A0678:lI101|H3A071C
-3A071C:lI103|N
-3A0160:lI109|H3A0204
-3A0204:lI112|H3A02B0
-3A02B0:lI103|H3A0354
-3A0354:lI97|N
-3A00D0:lH3A0170|H3A017C
-3A0170:t2:H3A0214,H3A021C
-3A021C:lI97|H3A02C8
-3A02C8:lI117|H3A036C
-3A036C:lI100|H3A0400
-3A0400:lI105|H3A0494
-3A0494:lI111|H3A0530
-3A0530:lI47|H3A05D4
-3A05D4:lI109|H3A0680
-3A0680:lI112|H3A0724
-3A0724:lI101|H3A07C0
-3A07C0:lI103|N
-3A0214:lI109|H3A02C0
-3A02C0:lI112|H3A0364
-3A0364:lI50|N
-3A017C:lH3A0224|H3A0230
-3A0224:t2:H3A02D0,H3A02D8
-3A02D8:lI97|H3A037C
-3A037C:lI117|H3A0408
-3A0408:lI100|H3A049C
-3A049C:lI105|H3A0538
-3A0538:lI111|H3A05DC
-3A05DC:lI47|H3A0688
-3A0688:lI98|H3A072C
-3A072C:lI97|H3A07C8
-3A07C8:lI115|H3A0854
-3A0854:lI105|H3A08E0
-3A08E0:lI99|N
-3A02D0:lI97|H3A0374
-3A0374:lI117|N
-3A0230:lH3A02E0|H3A02EC
-3A02E0:t2:H3A0384,H3A038C
-3A038C:lI97|H3A0418
-3A0418:lI117|H3A04AC
-3A04AC:lI100|H3A0540
-3A0540:lI105|H3A05E4
-3A05E4:lI111|H3A0690
-3A0690:lI47|H3A0734
-3A0734:lI98|H3A07D0
-3A07D0:lI97|H3A085C
-3A085C:lI115|H3A08E8
-3A08E8:lI105|H3A0974
-3A0974:lI99|N
-3A0384:lI115|H3A0410
-3A0410:lI110|H3A04A4
-3A04A4:lI100|N
-3A02EC:lH3A0394|H3A03A0
-3A0394:t2:H3A0420,H3A0428
-3A0428:lI97|H3A04BC
-3A04BC:lI112|H3A0550
-3A0550:lI112|H3A05EC
-3A05EC:lI108|H3A0698
-3A0698:lI105|H3A073C
-3A073C:lI99|H3A07D8
-3A07D8:lI97|H3A0864
-3A0864:lI116|H3A08F0
-3A08F0:lI105|H3A097C
-3A097C:lI111|H3A0A08
-3A0A08:lI110|H3A0AA4
-3A0AA4:lI47|H3A0B48
-3A0B48:lI122|H3A0BF4
-3A0BF4:lI105|H3A0CB0
-3A0CB0:lI112|N
-3A0420:lI122|H3A04B4
-3A04B4:lI105|H3A0548
-3A0548:lI112|N
-3A03A0:lH3A0430|H3A043C
-3A0430:t2:H3A04C4,H3A04CC
-3A04CC:lI97|H3A0560
-3A0560:lI112|H3A05FC
-3A05FC:lI112|H3A06A0
-3A06A0:lI108|H3A0744
-3A0744:lI105|H3A07E0
-3A07E0:lI99|H3A086C
-3A086C:lI97|H3A08F8
-3A08F8:lI116|H3A0984
-3A0984:lI105|H3A0A10
-3A0A10:lI111|H3A0AAC
-3A0AAC:lI110|H3A0B50
-3A0B50:lI47|H3A0BFC
-3A0BFC:lI120|H3A0CB8
-3A0CB8:lI45|H3A0D6C
-3A0D6C:lI119|H3A0E20
-3A0E20:lI97|H3A0ED4
-3A0ED4:lI105|H3A0F90
-3A0F90:lI115|H3A105C
-3A105C:lI45|H3A1130
-3A1130:lI115|H3A1204
-3A1204:lI111|H3A12D0
-3A12D0:lI117|H3A13A4
-3A13A4:lI114|H3A1480
-3A1480:lI99|H3A1564
-3A1564:lI101|N
-3A04C4:lI115|H3A0558
-3A0558:lI114|H3A05F4
-3A05F4:lI99|N
-3A043C:lH3A04D4|H3A04E0
-3A04D4:t2:H3A0568,H3A0570
-3A0570:lI97|H3A060C
-3A060C:lI112|H3A06B0
-3A06B0:lI112|H3A0754
-3A0754:lI108|H3A07F0
-3A07F0:lI105|H3A0874
-3A0874:lI99|H3A0900
-3A0900:lI97|H3A098C
-3A098C:lI116|H3A0A18
-3A0A18:lI105|H3A0AB4
-3A0AB4:lI111|H3A0B58
-3A0B58:lI110|H3A0C04
-3A0C04:lI47|H3A0CC0
-3A0CC0:lI120|H3A0D74
-3A0D74:lI45|H3A0E28
-3A0E28:lI117|H3A0EDC
-3A0EDC:lI115|H3A0F98
-3A0F98:lI116|H3A1064
-3A1064:lI97|H3A1138
-3A1138:lI114|N
-3A0568:lI117|H3A0604
-3A0604:lI115|H3A06A8
-3A06A8:lI116|H3A074C
-3A074C:lI97|H3A07E8
-3A07E8:lI114|N
-3A04E0:lH3A0578|H3A0584
-3A0578:t2:H3A0614,H3A061C
-3A061C:lI97|H3A06C0
-3A06C0:lI112|H3A075C
-3A075C:lI112|H3A07F8
-3A07F8:lI108|H3A087C
-3A087C:lI105|H3A0908
-3A0908:lI99|H3A0994
-3A0994:lI97|H3A0A20
-3A0A20:lI116|H3A0ABC
-3A0ABC:lI105|H3A0B60
-3A0B60:lI111|H3A0C0C
-3A0C0C:lI110|H3A0CC8
-3A0CC8:lI47|H3A0D7C
-3A0D7C:lI120|H3A0E30
-3A0E30:lI45|H3A0EE4
-3A0EE4:lI116|H3A0FA0
-3A0FA0:lI114|H3A106C
-3A106C:lI111|H3A1140
-3A1140:lI102|H3A120C
-3A120C:lI102|H3A12D8
-3A12D8:lI45|H3A13AC
-3A13AC:lI109|H3A1488
-3A1488:lI115|N
-3A0614:lI109|H3A06B8
-3A06B8:lI115|N
-3A0584:lH3A0624|H3A0630
-3A0624:t2:H3A06C8,H3A06D0
-3A06D0:lI97|H3A076C
-3A076C:lI112|H3A0800
-3A0800:lI112|H3A0884
-3A0884:lI108|H3A0910
-3A0910:lI105|H3A099C
-3A099C:lI99|H3A0A28
-3A0A28:lI97|H3A0AC4
-3A0AC4:lI116|H3A0B68
-3A0B68:lI105|H3A0C14
-3A0C14:lI111|H3A0CD0
-3A0CD0:lI110|H3A0D84
-3A0D84:lI47|H3A0E38
-3A0E38:lI120|H3A0EEC
-3A0EEC:lI45|H3A0FA8
-3A0FA8:lI116|H3A1074
-3A1074:lI114|H3A1148
-3A1148:lI111|H3A1214
-3A1214:lI102|H3A12E0
-3A12E0:lI102|H3A13B4
-3A13B4:lI45|H3A1490
-3A1490:lI109|H3A156C
-3A156C:lI101|N
-3A06C8:lI109|H3A0764
-3A0764:lI101|N
-3A0630:lH3A06D8|H3A06E4
-3A06D8:t2:H3A0774,H3A077C
-3A077C:lI97|H3A0810
-3A0810:lI112|H3A0894
-3A0894:lI112|H3A0918
-3A0918:lI108|H3A09A4
-3A09A4:lI105|H3A0A30
-3A0A30:lI99|H3A0ACC
-3A0ACC:lI97|H3A0B70
-3A0B70:lI116|H3A0C1C
-3A0C1C:lI105|H3A0CD8
-3A0CD8:lI111|H3A0D8C
-3A0D8C:lI110|H3A0E40
-3A0E40:lI47|H3A0EF4
-3A0EF4:lI120|H3A0FB0
-3A0FB0:lI45|H3A107C
-3A107C:lI116|H3A1150
-3A1150:lI114|H3A121C
-3A121C:lI111|H3A12E8
-3A12E8:lI102|H3A13BC
-3A13BC:lI102|H3A1498
-3A1498:lI45|H3A1574
-3A1574:lI109|H3A1648
-3A1648:lI97|H3A171C
-3A171C:lI110|N
-3A0774:lI109|H3A0808
-3A0808:lI97|H3A088C
-3A088C:lI110|N
-3A06E4:lH3A0784|H3A0790
-3A0784:t2:H3A0818,H3A0820
-3A0820:lI97|H3A089C
-3A089C:lI112|H3A0920
-3A0920:lI112|H3A09AC
-3A09AC:lI108|H3A0A38
-3A0A38:lI105|H3A0AD4
-3A0AD4:lI99|H3A0B78
-3A0B78:lI97|H3A0C24
-3A0C24:lI116|H3A0CE0
-3A0CE0:lI105|H3A0D94
-3A0D94:lI111|H3A0E48
-3A0E48:lI110|H3A0EFC
-3A0EFC:lI47|H3A0FB8
-3A0FB8:lI120|H3A1084
-3A1084:lI45|H3A1158
-3A1158:lI116|H3A1224
-3A1224:lI114|H3A12F0
-3A12F0:lI111|H3A13C4
-3A13C4:lI102|H3A14A0
-3A14A0:lI102|N
-3A0818:lI116|N
-3A0790:lH3A0828|H3A0834
-3A0828:t2:H3A08A4,H3A08AC
-3A08AC:lI97|H3A0930
-3A0930:lI112|H3A09B4
-3A09B4:lI112|H3A0A40
-3A0A40:lI108|H3A0ADC
-3A0ADC:lI105|H3A0B80
-3A0B80:lI99|H3A0C2C
-3A0C2C:lI97|H3A0CE8
-3A0CE8:lI116|H3A0D9C
-3A0D9C:lI105|H3A0E50
-3A0E50:lI111|H3A0F04
-3A0F04:lI110|H3A0FC0
-3A0FC0:lI47|H3A108C
-3A108C:lI120|H3A1160
-3A1160:lI45|H3A122C
-3A122C:lI116|H3A12F8
-3A12F8:lI114|H3A13CC
-3A13CC:lI111|H3A14A8
-3A14A8:lI102|H3A157C
-3A157C:lI102|N
-3A08A4:lI116|H3A0928
-3A0928:lI114|N
-3A0834:lH3A08B4|H3A08C0
-3A08B4:t2:H3A0938,H3A0940
-3A0940:lI97|H3A09C4
-3A09C4:lI112|H3A0A50
-3A0A50:lI112|H3A0AEC
-3A0AEC:lI108|H3A0B88
-3A0B88:lI105|H3A0C34
-3A0C34:lI99|H3A0CF0
-3A0CF0:lI97|H3A0DA4
-3A0DA4:lI116|H3A0E58
-3A0E58:lI105|H3A0F0C
-3A0F0C:lI111|H3A0FC8
-3A0FC8:lI110|H3A1094
-3A1094:lI47|H3A1168
-3A1168:lI120|H3A1234
-3A1234:lI45|H3A1300
-3A1300:lI116|H3A13D4
-3A13D4:lI114|H3A14B0
-3A14B0:lI111|H3A1584
-3A1584:lI102|H3A1650
-3A1650:lI102|N
-3A0938:lI114|H3A09BC
-3A09BC:lI111|H3A0A48
-3A0A48:lI102|H3A0AE4
-3A0AE4:lI102|N
-3A08C0:lH3A0948|H3A0954
-3A0948:t2:H3A09CC,H3A09D4
-3A09D4:lI97|H3A0A60
-3A0A60:lI112|H3A0AFC
-3A0AFC:lI112|H3A0B98
-3A0B98:lI108|H3A0C44
-3A0C44:lI105|H3A0D00
-3A0D00:lI99|H3A0DB4
-3A0DB4:lI97|H3A0E60
-3A0E60:lI116|H3A0F14
-3A0F14:lI105|H3A0FD0
-3A0FD0:lI111|H3A109C
-3A109C:lI110|H3A1170
-3A1170:lI47|H3A123C
-3A123C:lI120|H3A1308
-3A1308:lI45|H3A13DC
-3A13DC:lI116|H3A14B8
-3A14B8:lI101|H3A158C
-3A158C:lI120|H3A1658
-3A1658:lI105|H3A1724
-3A1724:lI110|H3A17E8
-3A17E8:lI102|H3A18AC
-3A18AC:lI111|N
-3A09CC:lI116|H3A0A58
-3A0A58:lI101|H3A0AF4
-3A0AF4:lI120|H3A0B90
-3A0B90:lI105|H3A0C3C
-3A0C3C:lI110|H3A0CF8
-3A0CF8:lI102|H3A0DAC
-3A0DAC:lI111|N
-3A0954:lH3A09DC|H3A09E8
-3A09DC:t2:H3A0A68,H3A0A70
-3A0A70:lI97|H3A0B0C
-3A0B0C:lI112|H3A0BA8
-3A0BA8:lI112|H3A0C54
-3A0C54:lI108|H3A0D08
-3A0D08:lI105|H3A0DBC
-3A0DBC:lI99|H3A0E68
-3A0E68:lI97|H3A0F1C
-3A0F1C:lI116|H3A0FD8
-3A0FD8:lI105|H3A10A4
-3A10A4:lI111|H3A1178
-3A1178:lI110|H3A1244
-3A1244:lI47|H3A1310
-3A1310:lI120|H3A13E4
-3A13E4:lI45|H3A14C0
-3A14C0:lI116|H3A1594
-3A1594:lI101|H3A1660
-3A1660:lI120|H3A172C
-3A172C:lI105|H3A17F0
-3A17F0:lI110|H3A18B4
-3A18B4:lI102|H3A1970
-3A1970:lI111|N
-3A0A68:lI116|H3A0B04
-3A0B04:lI101|H3A0BA0
-3A0BA0:lI120|H3A0C4C
-3A0C4C:lI105|N
-3A09E8:lH3A0A78|H3A0A84
-3A0A78:t2:H3A0B14,H3A0B1C
-3A0B1C:lI97|H3A0BB8
-3A0BB8:lI112|H3A0C64
-3A0C64:lI112|H3A0D10
-3A0D10:lI108|H3A0DC4
-3A0DC4:lI105|H3A0E70
-3A0E70:lI99|H3A0F24
-3A0F24:lI97|H3A0FE0
-3A0FE0:lI116|H3A10AC
-3A10AC:lI105|H3A1180
-3A1180:lI111|H3A124C
-3A124C:lI110|H3A1318
-3A1318:lI47|H3A13EC
-3A13EC:lI120|H3A14C8
-3A14C8:lI45|H3A159C
-3A159C:lI116|H3A1668
-3A1668:lI101|H3A1734
-3A1734:lI120|N
-3A0B14:lI116|H3A0BB0
-3A0BB0:lI101|H3A0C5C
-3A0C5C:lI120|N
-3A0A84:lH3A0B24|H3A0B30
-3A0B24:t2:H3A0BC0,H3A0BC8
-3A0BC8:lI97|H3A0C74
-3A0C74:lI112|H3A0D20
-3A0D20:lI112|H3A0DCC
-3A0DCC:lI108|H3A0E78
-3A0E78:lI105|H3A0F2C
-3A0F2C:lI99|H3A0FE8
-3A0FE8:lI97|H3A10B4
-3A10B4:lI116|H3A1188
-3A1188:lI105|H3A1254
-3A1254:lI111|H3A1320
-3A1320:lI110|H3A13F4
-3A13F4:lI47|H3A14D0
-3A14D0:lI120|H3A15A4
-3A15A4:lI45|H3A1670
-3A1670:lI116|H3A173C
-3A173C:lI99|H3A17F8
-3A17F8:lI108|N
-3A0BC0:lI116|H3A0C6C
-3A0C6C:lI99|H3A0D18
-3A0D18:lI108|N
-3A0B30:lH3A0BD0|H3A0BDC
-3A0BD0:t2:H3A0C7C,H3A0C84
-3A0C84:lI97|H3A0D30
-3A0D30:lI112|H3A0DDC
-3A0DDC:lI112|H3A0E80
-3A0E80:lI108|H3A0F34
-3A0F34:lI105|H3A0FF0
-3A0FF0:lI99|H3A10BC
-3A10BC:lI97|H3A1190
-3A1190:lI116|H3A125C
-3A125C:lI105|H3A1328
-3A1328:lI111|H3A13FC
-3A13FC:lI110|H3A14D8
-3A14D8:lI47|H3A15AC
-3A15AC:lI120|H3A1678
-3A1678:lI45|H3A1744
-3A1744:lI116|H3A1800
-3A1800:lI97|H3A18BC
-3A18BC:lI114|N
-3A0C7C:lI116|H3A0D28
-3A0D28:lI97|H3A0DD4
-3A0DD4:lI114|N
-3A0BDC:lH3A0C8C|H3A0C98
-3A0C8C:t2:H3A0D38,H3A0D40
-3A0D40:lI97|H3A0DEC
-3A0DEC:lI112|H3A0E90
-3A0E90:lI112|H3A0F44
-3A0F44:lI108|H3A1000
-3A1000:lI105|H3A10CC
-3A10CC:lI99|H3A1198
-3A1198:lI97|H3A1264
-3A1264:lI116|H3A1330
-3A1330:lI105|H3A1404
-3A1404:lI111|H3A14E0
-3A14E0:lI110|H3A15B4
-3A15B4:lI47|H3A1680
-3A1680:lI120|H3A174C
-3A174C:lI45|H3A1808
-3A1808:lI115|H3A18C4
-3A18C4:lI118|H3A1978
-3A1978:lI52|H3A1A2C
-3A1A2C:lI99|H3A1AE0
-3A1AE0:lI114|H3A1BA4
-3A1BA4:lI99|N
-3A0D38:lI115|H3A0DE4
-3A0DE4:lI118|H3A0E88
-3A0E88:lI52|H3A0F3C
-3A0F3C:lI99|H3A0FF8
-3A0FF8:lI114|H3A10C4
-3A10C4:lI99|N
-3A0C98:lH3A0D48|H3A0D54
-3A0D48:t2:H3A0DF4,H3A0DFC
-3A0DFC:lI97|H3A0EA0
-3A0EA0:lI112|H3A0F54
-3A0F54:lI112|H3A1010
-3A1010:lI108|H3A10DC
-3A10DC:lI105|H3A11A8
-3A11A8:lI99|H3A1274
-3A1274:lI97|H3A1338
-3A1338:lI116|H3A140C
-3A140C:lI105|H3A14E8
-3A14E8:lI111|H3A15BC
-3A15BC:lI110|H3A1688
-3A1688:lI47|H3A1754
-3A1754:lI120|H3A1810
-3A1810:lI45|H3A18CC
-3A18CC:lI115|H3A1980
-3A1980:lI118|H3A1A34
-3A1A34:lI52|H3A1AE8
-3A1AE8:lI99|H3A1BAC
-3A1BAC:lI112|H3A1C78
-3A1C78:lI105|H3A1D3C
-3A1D3C:lI111|N
-3A0DF4:lI115|H3A0E98
-3A0E98:lI118|H3A0F4C
-3A0F4C:lI52|H3A1008
-3A1008:lI99|H3A10D4
-3A10D4:lI112|H3A11A0
-3A11A0:lI105|H3A126C
-3A126C:lI111|N
-3A0D54:lH3A0E04|H3A0E10
-3A0E04:t2:H3A0EA8,H3A0EB0
-3A0EB0:lI97|H3A0F64
-3A0F64:lI112|H3A1020
-3A1020:lI112|H3A10E4
-3A10E4:lI108|H3A11B0
-3A11B0:lI105|H3A127C
-3A127C:lI99|H3A1340
-3A1340:lI97|H3A1414
-3A1414:lI116|H3A14F0
-3A14F0:lI105|H3A15C4
-3A15C4:lI111|H3A1690
-3A1690:lI110|H3A175C
-3A175C:lI47|H3A1818
-3A1818:lI120|H3A18D4
-3A18D4:lI45|H3A1988
-3A1988:lI115|H3A1A3C
-3A1A3C:lI116|H3A1AF0
-3A1AF0:lI117|H3A1BB4
-3A1BB4:lI102|H3A1C80
-3A1C80:lI102|H3A1D44
-3A1D44:lI105|H3A1E00
-3A1E00:lI116|N
-3A0EA8:lI115|H3A0F5C
-3A0F5C:lI105|H3A1018
-3A1018:lI116|N
-3A0E10:lH3A0EB8|H3A0EC4
-3A0EB8:t2:H3A0F6C,H3A0F74
-3A0F74:lI97|H3A1030
-3A1030:lI112|H3A10F4
-3A10F4:lI112|H3A11C0
-3A11C0:lI108|H3A1284
-3A1284:lI105|H3A1348
-3A1348:lI99|H3A141C
-3A141C:lI97|H3A14F8
-3A14F8:lI116|H3A15CC
-3A15CC:lI105|H3A1698
-3A1698:lI111|H3A1764
-3A1764:lI110|H3A1820
-3A1820:lI47|H3A18DC
-3A18DC:lI120|H3A1990
-3A1990:lI45|H3A1A44
-3A1A44:lI115|H3A1AF8
-3A1AF8:lI104|H3A1BBC
-3A1BBC:lI97|H3A1C88
-3A1C88:lI114|N
-3A0F6C:lI115|H3A1028
-3A1028:lI104|H3A10EC
-3A10EC:lI97|H3A11B8
-3A11B8:lI114|N
-3A0EC4:lH3A0F7C|H3A0F88
-3A0F7C:t2:H3A1038,H3A1040
-3A1040:lI97|H3A1104
-3A1104:lI112|H3A11C8
-3A11C8:lI112|H3A128C
-3A128C:lI108|H3A1350
-3A1350:lI105|H3A1424
-3A1424:lI99|H3A1500
-3A1500:lI97|H3A15D4
-3A15D4:lI116|H3A16A0
-3A16A0:lI105|H3A176C
-3A176C:lI111|H3A1828
-3A1828:lI110|H3A18E4
-3A18E4:lI47|H3A1998
-3A1998:lI120|H3A1A4C
-3A1A4C:lI45|H3A1B00
-3A1B00:lI115|H3A1BC4
-3A1BC4:lI104|N
-3A1038:lI115|H3A10FC
-3A10FC:lI104|N
-3A0F88:lH3A1048|H3A1054
-3A1048:t2:H3A110C,H3A1114
-3A1114:lI97|H3A11D8
-3A11D8:lI112|H3A1294
-3A1294:lI112|H3A1358
-3A1358:lI108|H3A142C
-3A142C:lI105|H3A1508
-3A1508:lI99|H3A15DC
-3A15DC:lI97|H3A16A8
-3A16A8:lI116|H3A1774
-3A1774:lI105|H3A1830
-3A1830:lI111|H3A18EC
-3A18EC:lI110|H3A19A0
-3A19A0:lI47|H3A1A54
-3A1A54:lI120|H3A1B08
-3A1B08:lI45|H3A1BCC
-3A1BCC:lI110|H3A1C90
-3A1C90:lI101|H3A1D4C
-3A1D4C:lI116|H3A1E08
-3A1E08:lI99|H3A1EC4
-3A1EC4:lI100|H3A1F88
-3A1F88:lI102|N
-3A110C:lI110|H3A11D0
-3A11D0:lI99|N
-3A1054:lH3A111C|H3A1128
-3A111C:t2:H3A11E0,H3A11E8
-3A11E8:lI97|H3A12A4
-3A12A4:lI112|H3A1368
-3A1368:lI112|H3A1434
-3A1434:lI108|H3A1510
-3A1510:lI105|H3A15E4
-3A15E4:lI99|H3A16B0
-3A16B0:lI97|H3A177C
-3A177C:lI116|H3A1838
-3A1838:lI105|H3A18F4
-3A18F4:lI111|H3A19A8
-3A19A8:lI110|H3A1A5C
-3A1A5C:lI47|H3A1B10
-3A1B10:lI120|H3A1BD4
-3A1BD4:lI45|H3A1C98
-3A1C98:lI110|H3A1D54
-3A1D54:lI101|H3A1E10
-3A1E10:lI116|H3A1ECC
-3A1ECC:lI99|H3A1F90
-3A1F90:lI100|H3A2044
-3A2044:lI102|N
-3A11E0:lI99|H3A129C
-3A129C:lI100|H3A1360
-3A1360:lI102|N
-3A1128:lH3A11F0|H3A11FC
-3A11F0:t2:H3A12AC,H3A12B4
-3A12B4:lI97|H3A1378
-3A1378:lI112|H3A1444
-3A1444:lI112|H3A1518
-3A1518:lI108|H3A15EC
-3A15EC:lI105|H3A16B8
-3A16B8:lI99|H3A1784
-3A1784:lI97|H3A1840
-3A1840:lI116|H3A18FC
-3A18FC:lI105|H3A19B0
-3A19B0:lI111|H3A1A64
-3A1A64:lI110|H3A1B18
-3A1B18:lI47|H3A1BDC
-3A1BDC:lI120|H3A1CA0
-3A1CA0:lI45|H3A1D5C
-3A1D5C:lI109|H3A1E18
-3A1E18:lI105|H3A1ED4
-3A1ED4:lI102|N
-3A12AC:lI109|H3A1370
-3A1370:lI105|H3A143C
-3A143C:lI102|N
-3A11FC:lH3A12BC|H3A12C8
-3A12BC:t2:H3A1380,H3A1388
-3A1388:lI97|H3A1454
-3A1454:lI112|H3A1528
-3A1528:lI112|H3A15FC
-3A15FC:lI108|H3A16C8
-3A16C8:lI105|H3A178C
-3A178C:lI99|H3A1848
-3A1848:lI97|H3A1904
-3A1904:lI116|H3A19B8
-3A19B8:lI105|H3A1A6C
-3A1A6C:lI111|H3A1B20
-3A1B20:lI110|H3A1BE4
-3A1BE4:lI47|H3A1CA8
-3A1CA8:lI120|H3A1D64
-3A1D64:lI45|H3A1E20
-3A1E20:lI108|H3A1EDC
-3A1EDC:lI97|H3A1F98
-3A1F98:lI116|H3A204C
-3A204C:lI101|H3A2108
-3A2108:lI120|N
-3A1380:lI108|H3A144C
-3A144C:lI97|H3A1520
-3A1520:lI116|H3A15F4
-3A15F4:lI101|H3A16C0
-3A16C0:lI120|N
-3A12C8:lH3A1390|H3A139C
-3A1390:t2:H3A145C,H3A1464
-3A1464:lI97|H3A1538
-3A1538:lI112|H3A160C
-3A160C:lI112|H3A16D0
-3A16D0:lI108|H3A1794
-3A1794:lI105|H3A1850
-3A1850:lI99|H3A190C
-3A190C:lI97|H3A19C0
-3A19C0:lI116|H3A1A74
-3A1A74:lI105|H3A1B28
-3A1B28:lI111|H3A1BEC
-3A1BEC:lI110|H3A1CB0
-3A1CB0:lI47|H3A1D6C
-3A1D6C:lI120|H3A1E28
-3A1E28:lI45|H3A1EE4
-3A1EE4:lI107|H3A1FA0
-3A1FA0:lI111|H3A2054
-3A2054:lI97|H3A2110
-3A2110:lI110|N
-3A145C:lI115|H3A1530
-3A1530:lI107|H3A1604
-3A1604:lI112|N
-3A139C:lH3A146C|H3A1478
-3A146C:t2:H3A1540,H3A1548
-3A1548:lI97|H3A161C
-3A161C:lI112|H3A16E0
-3A16E0:lI112|H3A179C
-3A179C:lI108|H3A1858
-3A1858:lI105|H3A1914
-3A1914:lI99|H3A19C8
-3A19C8:lI97|H3A1A7C
-3A1A7C:lI116|H3A1B30
-3A1B30:lI105|H3A1BF4
-3A1BF4:lI111|H3A1CB8
-3A1CB8:lI110|H3A1D74
-3A1D74:lI47|H3A1E30
-3A1E30:lI120|H3A1EEC
-3A1EEC:lI45|H3A1FA8
-3A1FA8:lI107|H3A205C
-3A205C:lI111|H3A2118
-3A2118:lI97|H3A21CC
-3A21CC:lI110|N
-3A1540:lI115|H3A1614
-3A1614:lI107|H3A16D8
-3A16D8:lI100|N
-3A1478:lH3A1550|H3A155C
-3A1550:t2:H3A1624,H3A162C
-3A162C:lI97|H3A16F0
-3A16F0:lI112|H3A17AC
-3A17AC:lI112|H3A1860
-3A1860:lI108|H3A191C
-3A191C:lI105|H3A19D0
-3A19D0:lI99|H3A1A84
-3A1A84:lI97|H3A1B38
-3A1B38:lI116|H3A1BFC
-3A1BFC:lI105|H3A1CC0
-3A1CC0:lI111|H3A1D7C
-3A1D7C:lI110|H3A1E38
-3A1E38:lI47|H3A1EF4
-3A1EF4:lI120|H3A1FB0
-3A1FB0:lI45|H3A2064
-3A2064:lI107|H3A2120
-3A2120:lI111|H3A21D4
-3A21D4:lI97|H3A2288
-3A2288:lI110|N
-3A1624:lI115|H3A16E8
-3A16E8:lI107|H3A17A4
-3A17A4:lI116|N
-3A155C:lH3A1634|H3A1640
-3A1634:t2:H3A16F8,H3A1700
-3A1700:lI97|H3A17BC
-3A17BC:lI112|H3A1870
-3A1870:lI112|H3A1924
-3A1924:lI108|H3A19D8
-3A19D8:lI105|H3A1A8C
-3A1A8C:lI99|H3A1B40
-3A1B40:lI97|H3A1C04
-3A1C04:lI116|H3A1CC8
-3A1CC8:lI105|H3A1D84
-3A1D84:lI111|H3A1E40
-3A1E40:lI110|H3A1EFC
-3A1EFC:lI47|H3A1FB8
-3A1FB8:lI120|H3A206C
-3A206C:lI45|H3A2128
-3A2128:lI107|H3A21DC
-3A21DC:lI111|H3A2290
-3A2290:lI97|H3A234C
-3A234C:lI110|N
-3A16F8:lI115|H3A17B4
-3A17B4:lI107|H3A1868
-3A1868:lI109|N
-3A1640:lH3A1708|H3A1714
-3A1708:t2:H3A17C4,H3A17CC
-3A17CC:lI97|H3A1880
-3A1880:lI112|H3A1934
-3A1934:lI112|H3A19E0
-3A19E0:lI108|H3A1A94
-3A1A94:lI105|H3A1B48
-3A1B48:lI99|H3A1C0C
-3A1C0C:lI97|H3A1CD0
-3A1CD0:lI116|H3A1D8C
-3A1D8C:lI105|H3A1E48
-3A1E48:lI111|H3A1F04
-3A1F04:lI110|H3A1FC0
-3A1FC0:lI47|H3A2074
-3A2074:lI120|H3A2130
-3A2130:lI45|H3A21E4
-3A21E4:lI104|H3A2298
-3A2298:lI116|H3A2354
-3A2354:lI116|H3A2410
-3A2410:lI112|H3A24C4
-3A24C4:lI100|H3A2580
-3A2580:lI45|H3A263C
-3A263C:lI99|H3A2700
-3A2700:lI103|H3A27BC
-3A27BC:lI105|N
-3A17C4:lI99|H3A1878
-3A1878:lI103|H3A192C
-3A192C:lI105|N
-3A1714:lH3A17D4|H3A17E0
-3A17D4:t2:H3A1888,H3A1890
-3A1890:lI97|H3A1944
-3A1944:lI112|H3A19F0
-3A19F0:lI112|H3A1A9C
-3A1A9C:lI108|H3A1B50
-3A1B50:lI105|H3A1C14
-3A1C14:lI99|H3A1CD8
-3A1CD8:lI97|H3A1D94
-3A1D94:lI116|H3A1E50
-3A1E50:lI105|H3A1F0C
-3A1F0C:lI111|H3A1FC8
-3A1FC8:lI110|H3A207C
-3A207C:lI47|H3A2138
-3A2138:lI120|H3A21EC
-3A21EC:lI45|H3A22A0
-3A22A0:lI104|H3A235C
-3A235C:lI100|H3A2418
-3A2418:lI102|N
-3A1888:lI104|H3A193C
-3A193C:lI100|H3A19E8
-3A19E8:lI102|N
-3A17E0:lH3A1898|H3A18A4
-3A1898:t2:H3A194C,H3A1954
-3A1954:lI97|H3A1A00
-3A1A00:lI112|H3A1AA4
-3A1AA4:lI112|H3A1B58
-3A1B58:lI108|H3A1C1C
-3A1C1C:lI105|H3A1CE0
-3A1CE0:lI99|H3A1D9C
-3A1D9C:lI97|H3A1E58
-3A1E58:lI116|H3A1F14
-3A1F14:lI105|H3A1FD0
-3A1FD0:lI111|H3A2084
-3A2084:lI110|H3A2140
-3A2140:lI47|H3A21F4
-3A21F4:lI120|H3A22A8
-3A22A8:lI45|H3A2364
-3A2364:lI103|H3A2420
-3A2420:lI122|H3A24CC
-3A24CC:lI105|H3A2588
-3A2588:lI112|N
-3A194C:lI103|H3A19F8
-3A19F8:lI122|N
-3A18A4:lH3A195C|H3A1968
-3A195C:t2:H3A1A08,H3A1A10
-3A1A10:lI97|H3A1AB4
-3A1AB4:lI112|H3A1B68
-3A1B68:lI112|H3A1C2C
-3A1C2C:lI108|H3A1CE8
-3A1CE8:lI105|H3A1DA4
-3A1DA4:lI99|H3A1E60
-3A1E60:lI97|H3A1F1C
-3A1F1C:lI116|H3A1FD8
-3A1FD8:lI105|H3A208C
-3A208C:lI111|H3A2148
-3A2148:lI110|H3A21FC
-3A21FC:lI47|H3A22B0
-3A22B0:lI120|H3A236C
-3A236C:lI45|H3A2428
-3A2428:lI103|H3A24D4
-3A24D4:lI116|H3A2590
-3A2590:lI97|H3A2644
-3A2644:lI114|N
-3A1A08:lI103|H3A1AAC
-3A1AAC:lI116|H3A1B60
-3A1B60:lI97|H3A1C24
-3A1C24:lI114|N
-3A1968:lH3A1A18|H3A1A24
-3A1A18:t2:H3A1ABC,H3A1AC4
-3A1AC4:lI97|H3A1B78
-3A1B78:lI112|H3A1C3C
-3A1C3C:lI112|H3A1CF0
-3A1CF0:lI108|H3A1DAC
-3A1DAC:lI105|H3A1E68
-3A1E68:lI99|H3A1F24
-3A1F24:lI97|H3A1FE0
-3A1FE0:lI116|H3A2094
-3A2094:lI105|H3A2150
-3A2150:lI111|H3A2204
-3A2204:lI110|H3A22B8
-3A22B8:lI47|H3A2374
-3A2374:lI120|H3A2430
-3A2430:lI45|H3A24DC
-3A24DC:lI100|H3A2598
-3A2598:lI118|H3A264C
-3A264C:lI105|N
-3A1ABC:lI100|H3A1B70
-3A1B70:lI118|H3A1C34
-3A1C34:lI105|N
-3A1A24:lH3A1ACC|H3A1AD8
-3A1ACC:t2:H3A1B80,H3A1B88
-3A1B88:lI97|H3A1C4C
-3A1C4C:lI112|H3A1D00
-3A1D00:lI112|H3A1DB4
-3A1DB4:lI108|H3A1E70
-3A1E70:lI105|H3A1F2C
-3A1F2C:lI99|H3A1FE8
-3A1FE8:lI97|H3A209C
-3A209C:lI116|H3A2158
-3A2158:lI105|H3A220C
-3A220C:lI111|H3A22C0
-3A22C0:lI110|H3A237C
-3A237C:lI47|H3A2438
-3A2438:lI120|H3A24E4
-3A24E4:lI45|H3A25A0
-3A25A0:lI100|H3A2654
-3A2654:lI105|H3A2708
-3A2708:lI114|H3A27C4
-3A27C4:lI101|H3A2880
-3A2880:lI99|H3A2944
-3A2944:lI116|H3A2A10
-3A2A10:lI111|H3A2ADC
-3A2ADC:lI114|N
-3A1B80:lI100|H3A1C44
-3A1C44:lI99|H3A1CF8
-3A1CF8:lI114|N
-3A1AD8:lH3A1B90|H3A1B9C
-3A1B90:t2:H3A1C54,H3A1C5C
-3A1C5C:lI97|H3A1D10
-3A1D10:lI112|H3A1DC4
-3A1DC4:lI112|H3A1E78
-3A1E78:lI108|H3A1F34
-3A1F34:lI105|H3A1FF0
-3A1FF0:lI99|H3A20A4
-3A20A4:lI97|H3A2160
-3A2160:lI116|H3A2214
-3A2214:lI105|H3A22C8
-3A22C8:lI111|H3A2384
-3A2384:lI110|H3A2440
-3A2440:lI47|H3A24EC
-3A24EC:lI120|H3A25A8
-3A25A8:lI45|H3A265C
-3A265C:lI100|H3A2710
-3A2710:lI105|H3A27CC
-3A27CC:lI114|H3A2888
-3A2888:lI101|H3A294C
-3A294C:lI99|H3A2A18
-3A2A18:lI116|H3A2AE4
-3A2AE4:lI111|H3A2BB0
-3A2BB0:lI114|N
-3A1C54:lI100|H3A1D08
-3A1D08:lI105|H3A1DBC
-3A1DBC:lI114|N
-3A1B9C:lH3A1C64|H3A1C70
-3A1C64:t2:H3A1D18,H3A1D20
-3A1D20:lI97|H3A1DD4
-3A1DD4:lI112|H3A1E88
-3A1E88:lI112|H3A1F3C
-3A1F3C:lI108|H3A1FF8
-3A1FF8:lI105|H3A20AC
-3A20AC:lI99|H3A2168
-3A2168:lI97|H3A221C
-3A221C:lI116|H3A22D0
-3A22D0:lI105|H3A238C
-3A238C:lI111|H3A2448
-3A2448:lI110|H3A24F4
-3A24F4:lI47|H3A25B0
-3A25B0:lI120|H3A2664
-3A2664:lI45|H3A2718
-3A2718:lI100|H3A27D4
-3A27D4:lI105|H3A2890
-3A2890:lI114|H3A2954
-3A2954:lI101|H3A2A20
-3A2A20:lI99|H3A2AEC
-3A2AEC:lI116|H3A2BB8
-3A2BB8:lI111|H3A2C74
-3A2C74:lI114|N
-3A1D18:lI100|H3A1DCC
-3A1DCC:lI120|H3A1E80
-3A1E80:lI114|N
-3A1C70:lH3A1D28|H3A1D34
-3A1D28:t2:H3A1DDC,H3A1DE4
-3A1DE4:lI97|H3A1E98
-3A1E98:lI112|H3A1F4C
-3A1F4C:lI112|H3A2000
-3A2000:lI108|H3A20B4
-3A20B4:lI105|H3A2170
-3A2170:lI99|H3A2224
-3A2224:lI97|H3A22D8
-3A22D8:lI116|H3A2394
-3A2394:lI105|H3A2450
-3A2450:lI111|H3A24FC
-3A24FC:lI110|H3A25B8
-3A25B8:lI47|H3A266C
-3A266C:lI120|H3A2720
-3A2720:lI45|H3A27DC
-3A27DC:lI99|H3A2898
-3A2898:lI115|H3A295C
-3A295C:lI104|N
-3A1DDC:lI99|H3A1E90
-3A1E90:lI115|H3A1F44
-3A1F44:lI104|N
-3A1D34:lH3A1DEC|H3A1DF8
-3A1DEC:t2:H3A1EA0,H3A1EA8
-3A1EA8:lI97|H3A1F5C
-3A1F5C:lI112|H3A2010
-3A2010:lI112|H3A20C4
-3A20C4:lI108|H3A2178
-3A2178:lI105|H3A222C
-3A222C:lI99|H3A22E0
-3A22E0:lI97|H3A239C
-3A239C:lI116|H3A2458
-3A2458:lI105|H3A2504
-3A2504:lI111|H3A25C0
-3A25C0:lI110|H3A2674
-3A2674:lI47|H3A2728
-3A2728:lI120|H3A27E4
-3A27E4:lI45|H3A28A0
-3A28A0:lI99|H3A2964
-3A2964:lI112|H3A2A28
-3A2A28:lI105|H3A2AF4
-3A2AF4:lI111|N
-3A1EA0:lI99|H3A1F54
-3A1F54:lI112|H3A2008
-3A2008:lI105|H3A20BC
-3A20BC:lI111|N
-3A1DF8:lH3A1EB0|H3A1EBC
-3A1EB0:t2:H3A1F64,H3A1F6C
-3A1F6C:lI97|H3A2018
-3A2018:lI112|H3A20CC
-3A20CC:lI112|H3A2180
-3A2180:lI108|H3A2234
-3A2234:lI105|H3A22E8
-3A22E8:lI99|H3A23A4
-3A23A4:lI97|H3A2460
-3A2460:lI116|H3A250C
-3A250C:lI105|H3A25C8
-3A25C8:lI111|H3A267C
-3A267C:lI110|H3A2730
-3A2730:lI47|H3A27EC
-3A27EC:lI120|H3A28A8
-3A28A8:lI45|H3A296C
-3A296C:lI99|H3A2A30
-3A2A30:lI111|H3A2AFC
-3A2AFC:lI109|H3A2BC0
-3A2BC0:lI112|H3A2C7C
-3A2C7C:lI114|H3A2D2C
-3A2D2C:lI101|H3A2DD4
-3A2DD4:lI115|H3A2E6C
-3A2E6C:lI115|N
-3A1F64:lI90|N
-3A1EBC:lH3A1F74|H3A1F80
-3A1F74:t2:H3A2020,H3A2028
-3A2028:lI97|H3A20DC
-3A20DC:lI112|H3A2190
-3A2190:lI112|H3A223C
-3A223C:lI108|H3A22F0
-3A22F0:lI105|H3A23AC
-3A23AC:lI99|H3A2468
-3A2468:lI97|H3A2514
-3A2514:lI116|H3A25D0
-3A25D0:lI105|H3A2684
-3A2684:lI111|H3A2738
-3A2738:lI110|H3A27F4
-3A27F4:lI47|H3A28B0
-3A28B0:lI120|H3A2974
-3A2974:lI45|H3A2A38
-3A2A38:lI99|H3A2B04
-3A2B04:lI100|H3A2BC8
-3A2BC8:lI108|H3A2C84
-3A2C84:lI105|H3A2D34
-3A2D34:lI110|H3A2DDC
-3A2DDC:lI107|N
-3A2020:lI118|H3A20D4
-3A20D4:lI99|H3A2188
-3A2188:lI100|N
-3A1F80:lH3A2030|H3A203C
-3A2030:t2:H3A20E4,H3A20EC
-3A20EC:lI97|H3A21A0
-3A21A0:lI112|H3A224C
-3A224C:lI112|H3A2300
-3A2300:lI108|H3A23BC
-3A23BC:lI105|H3A2470
-3A2470:lI99|H3A251C
-3A251C:lI97|H3A25D8
-3A25D8:lI116|H3A268C
-3A268C:lI105|H3A2740
-3A2740:lI111|H3A27FC
-3A27FC:lI110|H3A28B8
-3A28B8:lI47|H3A297C
-3A297C:lI120|H3A2A40
-3A2A40:lI45|H3A2B0C
-3A2B0C:lI98|H3A2BD0
-3A2BD0:lI99|H3A2C8C
-3A2C8C:lI112|H3A2D3C
-3A2D3C:lI105|H3A2DE4
-3A2DE4:lI111|N
-3A20E4:lI98|H3A2198
-3A2198:lI99|H3A2244
-3A2244:lI112|H3A22F8
-3A22F8:lI105|H3A23B4
-3A23B4:lI111|N
-3A203C:lH3A20F4|H3A2100
-3A20F4:t2:H3A21A8,H3A21B0
-3A21B0:lI97|H3A225C
-3A225C:lI112|H3A2310
-3A2310:lI112|H3A23C4
-3A23C4:lI108|H3A2478
-3A2478:lI105|H3A2524
-3A2524:lI99|H3A25E0
-3A25E0:lI97|H3A2694
-3A2694:lI116|H3A2748
-3A2748:lI105|H3A2804
-3A2804:lI111|H3A28C0
-3A28C0:lI110|H3A2984
-3A2984:lI47|H3A2A48
-3A2A48:lI114|H3A2B14
-3A2B14:lI116|H3A2BD8
-3A2BD8:lI102|N
-3A21A8:lI114|H3A2254
-3A2254:lI116|H3A2308
-3A2308:lI102|N
-3A2100:lH3A21B8|H3A21C4
-3A21B8:t2:H3A2264,H3A226C
-3A226C:lI97|H3A2320
-3A2320:lI112|H3A23D4
-3A23D4:lI112|H3A2480
-3A2480:lI108|H3A252C
-3A252C:lI105|H3A25E8
-3A25E8:lI99|H3A269C
-3A269C:lI97|H3A2750
-3A2750:lI116|H3A280C
-3A280C:lI105|H3A28C8
-3A28C8:lI111|H3A298C
-3A298C:lI110|H3A2A50
-3A2A50:lI47|H3A2B1C
-3A2B1C:lI112|H3A2BE0
-3A2BE0:lI111|H3A2C94
-3A2C94:lI119|H3A2D44
-3A2D44:lI101|H3A2DEC
-3A2DEC:lI114|H3A2E74
-3A2E74:lI112|H3A2EEC
-3A2EEC:lI111|H3A2F64
-3A2F64:lI105|H3A2FD4
-3A2FD4:lI110|H3A303C
-3A303C:lI116|N
-3A2264:lI112|H3A2318
-3A2318:lI112|H3A23CC
-3A23CC:lI116|N
-3A21C4:lH3A2274|H3A2280
-3A2274:t2:H3A2328,H3A2330
-3A2330:lI97|H3A23E4
-3A23E4:lI112|H3A2488
-3A2488:lI112|H3A2534
-3A2534:lI108|H3A25F0
-3A25F0:lI105|H3A26A4
-3A26A4:lI99|H3A2758
-3A2758:lI97|H3A2814
-3A2814:lI116|H3A28D0
-3A28D0:lI105|H3A2994
-3A2994:lI111|H3A2A58
-3A2A58:lI110|H3A2B24
-3A2B24:lI47|H3A2BE8
-3A2BE8:lI112|H3A2C9C
-3A2C9C:lI111|H3A2D4C
-3A2D4C:lI115|H3A2DF4
-3A2DF4:lI116|H3A2E7C
-3A2E7C:lI115|H3A2EF4
-3A2EF4:lI99|H3A2F6C
-3A2F6C:lI114|H3A2FDC
-3A2FDC:lI105|H3A3044
-3A3044:lI112|H3A30A4
-3A30A4:lI116|N
-3A2328:lI97|H3A23DC
-3A23DC:lI105|N
-3A2280:lH3A2338|H3A2344
-3A2338:t2:H3A23EC,H3A23F4
-3A23F4:lI97|H3A2498
-3A2498:lI112|H3A2544
-3A2544:lI112|H3A25F8
-3A25F8:lI108|H3A26AC
-3A26AC:lI105|H3A2760
-3A2760:lI99|H3A281C
-3A281C:lI97|H3A28D8
-3A28D8:lI116|H3A299C
-3A299C:lI105|H3A2A60
-3A2A60:lI111|H3A2B2C
-3A2B2C:lI110|H3A2BF0
-3A2BF0:lI47|H3A2CA4
-3A2CA4:lI112|H3A2D54
-3A2D54:lI111|H3A2DFC
-3A2DFC:lI115|H3A2E84
-3A2E84:lI116|H3A2EFC
-3A2EFC:lI115|H3A2F74
-3A2F74:lI99|H3A2FE4
-3A2FE4:lI114|H3A304C
-3A304C:lI105|H3A30AC
-3A30AC:lI112|H3A3104
-3A3104:lI116|N
-3A23EC:lI101|H3A2490
-3A2490:lI112|H3A253C
-3A253C:lI115|N
-3A2344:lH3A23FC|H3A2408
-3A23FC:t2:H3A24A0,H3A24A8
-3A24A8:lI97|H3A2554
-3A2554:lI112|H3A2600
-3A2600:lI112|H3A26B4
-3A26B4:lI108|H3A2768
-3A2768:lI105|H3A2824
-3A2824:lI99|H3A28E0
-3A28E0:lI97|H3A29A4
-3A29A4:lI116|H3A2A68
-3A2A68:lI105|H3A2B34
-3A2B34:lI111|H3A2BF8
-3A2BF8:lI110|H3A2CAC
-3A2CAC:lI47|H3A2D5C
-3A2D5C:lI112|H3A2E04
-3A2E04:lI111|H3A2E8C
-3A2E8C:lI115|H3A2F04
-3A2F04:lI116|H3A2F7C
-3A2F7C:lI115|H3A2FEC
-3A2FEC:lI99|H3A3054
-3A3054:lI114|H3A30B4
-3A30B4:lI105|H3A310C
-3A310C:lI112|H3A315C
-3A315C:lI116|N
-3A24A0:lI112|H3A254C
-3A254C:lI115|N
-3A2408:lH3A24B0|H3A24BC
-3A24B0:t2:H3A255C,H3A2564
-3A2564:lI97|H3A2610
-3A2610:lI112|H3A26C4
-3A26C4:lI112|H3A2770
-3A2770:lI108|H3A282C
-3A282C:lI105|H3A28E8
-3A28E8:lI99|H3A29AC
-3A29AC:lI97|H3A2A70
-3A2A70:lI116|H3A2B3C
-3A2B3C:lI105|H3A2C00
-3A2C00:lI111|H3A2CB4
-3A2CB4:lI110|H3A2D64
-3A2D64:lI47|H3A2E0C
-3A2E0C:lI112|H3A2E94
-3A2E94:lI100|H3A2F0C
-3A2F0C:lI102|N
-3A255C:lI112|H3A2608
-3A2608:lI100|H3A26BC
-3A26BC:lI102|N
-3A24BC:lH3A256C|H3A2578
-3A256C:t2:H3A2618,H3A2620
-3A2620:lI97|H3A26D4
-3A26D4:lI112|H3A2780
-3A2780:lI112|H3A2834
-3A2834:lI108|H3A28F0
-3A28F0:lI105|H3A29B4
-3A29B4:lI99|H3A2A78
-3A2A78:lI97|H3A2B44
-3A2B44:lI116|H3A2C08
-3A2C08:lI105|H3A2CBC
-3A2CBC:lI111|H3A2D6C
-3A2D6C:lI110|H3A2E14
-3A2E14:lI47|H3A2E9C
-3A2E9C:lI111|H3A2F14
-3A2F14:lI100|H3A2F84
-3A2F84:lI97|N
-3A2618:lI111|H3A26CC
-3A26CC:lI100|H3A2778
-3A2778:lI97|N
-3A2578:lH3A2628|H3A2634
-3A2628:t2:H3A26DC,H3A26E4
-3A26E4:lI97|H3A2790
-3A2790:lI112|H3A2844
-3A2844:lI112|H3A28F8
-3A28F8:lI108|H3A29BC
-3A29BC:lI105|H3A2A80
-3A2A80:lI99|H3A2B4C
-3A2B4C:lI97|H3A2C10
-3A2C10:lI116|H3A2CC4
-3A2CC4:lI105|H3A2D74
-3A2D74:lI111|H3A2E1C
-3A2E1C:lI110|H3A2EA4
-3A2EA4:lI47|H3A2F1C
-3A2F1C:lI111|H3A2F8C
-3A2F8C:lI99|H3A2FF4
-3A2FF4:lI116|H3A305C
-3A305C:lI101|H3A30BC
-3A30BC:lI116|H3A3114
-3A3114:lI45|H3A3164
-3A3164:lI115|H3A31AC
-3A31AC:lI116|H3A31F4
-3A31F4:lI114|H3A323C
-3A323C:lI101|H3A3284
-3A3284:lI97|H3A32CC
-3A32CC:lI109|N
-3A26DC:lI98|H3A2788
-3A2788:lI105|H3A283C
-3A283C:lI110|N
-3A2634:lH3A26EC|H3A26F8
-3A26EC:t2:H3A2798,H3A27A0
-3A27A0:lI97|H3A2854
-3A2854:lI112|H3A2908
-3A2908:lI112|H3A29C4
-3A29C4:lI108|H3A2A88
-3A2A88:lI105|H3A2B54
-3A2B54:lI99|H3A2C18
-3A2C18:lI97|H3A2CCC
-3A2CCC:lI116|H3A2D7C
-3A2D7C:lI105|H3A2E24
-3A2E24:lI111|H3A2EAC
-3A2EAC:lI110|H3A2F24
-3A2F24:lI47|H3A2F94
-3A2F94:lI111|H3A2FFC
-3A2FFC:lI99|H3A3064
-3A3064:lI116|H3A30C4
-3A30C4:lI101|H3A311C
-3A311C:lI116|H3A316C
-3A316C:lI45|H3A31B4
-3A31B4:lI115|H3A31FC
-3A31FC:lI116|H3A3244
-3A3244:lI114|H3A328C
-3A328C:lI101|H3A32D4
-3A32D4:lI97|H3A3314
-3A3314:lI109|N
-3A2798:lI100|H3A284C
-3A284C:lI109|H3A2900
-3A2900:lI115|N
-3A26F8:lH3A27A8|H3A27B4
-3A27A8:t2:H3A285C,H3A2864
-3A2864:lI97|H3A2918
-3A2918:lI112|H3A29D4
-3A29D4:lI112|H3A2A90
-3A2A90:lI108|H3A2B5C
-3A2B5C:lI105|H3A2C20
-3A2C20:lI99|H3A2CD4
-3A2CD4:lI97|H3A2D84
-3A2D84:lI116|H3A2E2C
-3A2E2C:lI105|H3A2EB4
-3A2EB4:lI111|H3A2F2C
-3A2F2C:lI110|H3A2F9C
-3A2F9C:lI47|H3A3004
-3A3004:lI111|H3A306C
-3A306C:lI99|H3A30CC
-3A30CC:lI116|H3A3124
-3A3124:lI101|H3A3174
-3A3174:lI116|H3A31BC
-3A31BC:lI45|H3A3204
-3A3204:lI115|H3A324C
-3A324C:lI116|H3A3294
-3A3294:lI114|H3A32DC
-3A32DC:lI101|H3A331C
-3A331C:lI97|H3A334C
-3A334C:lI109|N
-3A285C:lI108|H3A2910
-3A2910:lI104|H3A29CC
-3A29CC:lI97|N
-3A27B4:lH3A286C|H3A2878
-3A286C:t2:H3A2920,H3A2928
-3A2928:lI97|H3A29E4
-3A29E4:lI112|H3A2AA0
-3A2AA0:lI112|H3A2B64
-3A2B64:lI108|H3A2C28
-3A2C28:lI105|H3A2CDC
-3A2CDC:lI99|H3A2D8C
-3A2D8C:lI97|H3A2E34
-3A2E34:lI116|H3A2EBC
-3A2EBC:lI105|H3A2F34
-3A2F34:lI111|H3A2FA4
-3A2FA4:lI110|H3A300C
-3A300C:lI47|H3A3074
-3A3074:lI111|H3A30D4
-3A30D4:lI99|H3A312C
-3A312C:lI116|H3A317C
-3A317C:lI101|H3A31C4
-3A31C4:lI116|H3A320C
-3A320C:lI45|H3A3254
-3A3254:lI115|H3A329C
-3A329C:lI116|H3A32E4
-3A32E4:lI114|H3A3324
-3A3324:lI101|H3A3354
-3A3354:lI97|H3A337C
-3A337C:lI109|N
-3A2920:lI108|H3A29DC
-3A29DC:lI122|H3A2A98
-3A2A98:lI104|N
-3A2878:lH3A2930|H3A293C
-3A2930:t2:H3A29EC,H3A29F4
-3A29F4:lI97|H3A2AB0
-3A2AB0:lI112|H3A2B74
-3A2B74:lI112|H3A2C30
-3A2C30:lI108|H3A2CE4
-3A2CE4:lI105|H3A2D94
-3A2D94:lI99|H3A2E3C
-3A2E3C:lI97|H3A2EC4
-3A2EC4:lI116|H3A2F3C
-3A2F3C:lI105|H3A2FAC
-3A2FAC:lI111|H3A3014
-3A3014:lI110|H3A307C
-3A307C:lI47|H3A30DC
-3A30DC:lI111|H3A3134
-3A3134:lI99|H3A3184
-3A3184:lI116|H3A31CC
-3A31CC:lI101|H3A3214
-3A3214:lI116|H3A325C
-3A325C:lI45|H3A32A4
-3A32A4:lI115|H3A32EC
-3A32EC:lI116|H3A332C
-3A332C:lI114|H3A335C
-3A335C:lI101|H3A3384
-3A3384:lI97|H3A33A4
-3A33A4:lI109|N
-3A29EC:lI101|H3A2AA8
-3A2AA8:lI120|H3A2B6C
-3A2B6C:lI101|N
-3A293C:lH3A29FC|H3A2A08
-3A29FC:t2:H3A2AB8,H3A2AC0
-3A2AC0:lI97|H3A2B84
-3A2B84:lI112|H3A2C40
-3A2C40:lI112|H3A2CF4
-3A2CF4:lI108|H3A2DA4
-3A2DA4:lI105|H3A2E44
-3A2E44:lI99|H3A2ECC
-3A2ECC:lI97|H3A2F44
-3A2F44:lI116|H3A2FB4
-3A2FB4:lI105|H3A301C
-3A301C:lI111|H3A3084
-3A3084:lI110|H3A30E4
-3A30E4:lI47|H3A313C
-3A313C:lI111|H3A318C
-3A318C:lI99|H3A31D4
-3A31D4:lI116|H3A321C
-3A321C:lI101|H3A3264
-3A3264:lI116|H3A32AC
-3A32AC:lI45|H3A32F4
-3A32F4:lI115|H3A3334
-3A3334:lI116|H3A3364
-3A3364:lI114|H3A338C
-3A338C:lI101|H3A33AC
-3A33AC:lI97|H3A33C4
-3A33C4:lI109|N
-3A2AB8:lI99|H3A2B7C
-3A2B7C:lI108|H3A2C38
-3A2C38:lI97|H3A2CEC
-3A2CEC:lI115|H3A2D9C
-3A2D9C:lI115|N
-3A2A08:lH3A2AC8|H3A2AD4
-3A2AC8:t2:H3A2B8C,H3A2B94
-3A2B94:lI97|H3A2C50
-3A2C50:lI112|H3A2D04
-3A2D04:lI112|H3A2DAC
-3A2DAC:lI108|H3A2E4C
-3A2E4C:lI105|H3A2ED4
-3A2ED4:lI99|H3A2F4C
-3A2F4C:lI97|H3A2FBC
-3A2FBC:lI116|H3A3024
-3A3024:lI105|H3A308C
-3A308C:lI111|H3A30EC
-3A30EC:lI110|H3A3144
-3A3144:lI47|H3A3194
-3A3194:lI109|H3A31DC
-3A31DC:lI115|H3A3224
-3A3224:lI119|H3A326C
-3A326C:lI111|H3A32B4
-3A32B4:lI114|H3A32FC
-3A32FC:lI100|N
-3A2B8C:lI100|H3A2C48
-3A2C48:lI111|H3A2CFC
-3A2CFC:lI99|N
-3A2AD4:lH3A2B9C|H3A2BA8
-3A2B9C:t2:H3A2C58,H3A2C60
-3A2C60:lI97|H3A2D14
-3A2D14:lI112|H3A2DBC
-3A2DBC:lI112|H3A2E54
-3A2E54:lI108|H3A2EDC
-3A2EDC:lI105|H3A2F54
-3A2F54:lI99|H3A2FC4
-3A2FC4:lI97|H3A302C
-3A302C:lI116|H3A3094
-3A3094:lI105|H3A30F4
-3A30F4:lI111|H3A314C
-3A314C:lI110|H3A319C
-3A319C:lI47|H3A31E4
-3A31E4:lI109|H3A322C
-3A322C:lI97|H3A3274
-3A3274:lI99|H3A32BC
-3A32BC:lI45|H3A3304
-3A3304:lI99|H3A333C
-3A333C:lI111|H3A336C
-3A336C:lI109|H3A3394
-3A3394:lI112|H3A33B4
-3A33B4:lI97|H3A33CC
-3A33CC:lI99|H3A33DC
-3A33DC:lI116|H3A33EC
-3A33EC:lI112|H3A33FC
-3A33FC:lI114|H3A340C
-3A340C:lI111|N
-3A2C58:lI99|H3A2D0C
-3A2D0C:lI112|H3A2DB4
-3A2DB4:lI116|N
-3A2BA8:lH3A2C68|N
-3A2C68:t2:H3A2D1C,H3A2D24
-3A2D24:lI97|H3A2DCC
-3A2DCC:lI112|H3A2E64
-3A2E64:lI112|H3A2EE4
-3A2EE4:lI108|H3A2F5C
-3A2F5C:lI105|H3A2FCC
-3A2FCC:lI99|H3A3034
-3A3034:lI97|H3A309C
-3A309C:lI116|H3A30FC
-3A30FC:lI105|H3A3154
-3A3154:lI111|H3A31A4
-3A31A4:lI110|H3A31EC
-3A31EC:lI47|H3A3234
-3A3234:lI109|H3A327C
-3A327C:lI97|H3A32C4
-3A32C4:lI99|H3A330C
-3A330C:lI45|H3A3344
-3A3344:lI98|H3A3374
-3A3374:lI105|H3A339C
-3A339C:lI110|H3A33BC
-3A33BC:lI104|H3A33D4
-3A33D4:lI101|H3A33E4
-3A33E4:lI120|H3A33F4
-3A33F4:lI52|H3A3404
-3A3404:lI48|N
-3A2D1C:lI104|H3A2DC4
-3A2DC4:lI113|H3A2E5C
-3A2E5C:lI120|N
-39DC28:lH39DC68|H39DC74
-39DC68:t2:A4:port,I8888
-39DC74:lH39DCA8|H39DCB4
-39DCA8:t2:AC:bind_address,H39DCF8
-39DCF8:t4:I127,I0,I0,I1
-39DCB4:lH39DD0C|H39DD18
-39DD0C:t2:AB:server_name,H39DD6C
-39DD6C:lI108|H39DDE4
-39DDE4:lI111|H39DE5C
-39DE5C:lI99|H39DEE4
-39DEE4:lI97|H39DF6C
-39DF6C:lI108|H39E00C
-39E00C:lI104|H39E0B4
-39E0B4:lI111|H39E16C
-39E16C:lI115|H39E238
-39E238:lI116|N
-39DD18:lH39DD74|H39DD80
-39DD74:t2:AE:max_header_siz,I1024
-39DD80:lH39DDEC|H39DDF8
-39DDEC:t2:A11:max_header_action,A8:reply414
-39DDF8:lH39DE64|H39DE70
-39DE64:t2:A8:com_type,A7:ip_comm
-39DE70:lH39DEEC|H39DEF8
-39DEEC:t2:A7:modules,H39DF74
-39DF74:lA9:mod_alias|H39E014
-39E014:lA8:mod_auth|H39E0BC
-39E0BC:lA7:mod_esi|H39E174
-39E174:lAB:mod_actions|H39E240
-39E240:lA7:mod_cgi|H39E324
-39E324:lAB:mod_include|H39E418
-39E418:lA7:mod_dir|H39E51C
-39E51C:lA7:mod_get|H39E634
-39E634:lA8:mod_head|H39E748
-39E748:lA7:mod_log|H39E85C
-39E85C:lAC:mod_disk_log|N
-39DEF8:lH39DF7C|H39DF88
-39DF7C:t2:AF:directory_index,H39E01C
-39E01C:lH39E0C4|N
-39E0C4:lI105|H39E17C
-39E17C:lI110|H39E248
-39E248:lI100|H39E32C
-39E32C:lI101|H39E420
-39E420:lI120|H39E524
-39E524:lI46|H39E63C
-39E63C:lI104|H39E750
-39E750:lI116|H39E864
-39E864:lI109|H39E978
-39E978:lI108|N
-39DF88:lH39E024|H39E030
-39E024:t2:AC:default_type,H39E0CC
-39E0CC:lI116|H39E184
-39E184:lI101|H39E250
-39E250:lI120|H39E334
-39E334:lI116|H39E428
-39E428:lI47|H39E52C
-39E52C:lI112|H39E644
-39E644:lI108|H39E758
-39E758:lI97|H39E86C
-39E86C:lI105|H39E980
-39E980:lI110|N
-39E030:lH39E0D4|H39E0E0
-39E0D4:t2:A10:erl_script_alias,H39E18C
-39E18C:t2:H39E258,H39E260
-39E260:lH39E344|N
-39E344:lI119|H39E438
-39E438:lI101|H39E53C
-39E53C:lI98|H39E654
-39E654:lI116|H39E768
-39E768:lI111|H39E87C
-39E87C:lI111|H39E990
-39E990:lI108|N
-39E258:lI47|H39E33C
-39E33C:lI119|H39E430
-39E430:lI101|H39E534
-39E534:lI98|H39E64C
-39E64C:lI116|H39E760
-39E760:lI111|H39E874
-39E874:lI111|H39E988
-39E988:lI108|N
-39E0E0:lH39E198|H39E1A4
-39E198:t2:A5:alias,H39E268
-39E268:t2:H39E34C,H39E354
-39E354:lI47|H39E448
-39E448:lI99|H39E54C
-39E54C:lI108|H39E664
-39E664:lI101|H39E778
-39E778:lI97|H39E88C
-39E88C:lI114|H39E9A0
-39E9A0:lI99|H39EA94
-39EA94:lI97|H39EB88
-39EB88:lI115|H39EC7C
-39EC7C:lI101|H39ED70
-39ED70:lI47|H39EE4C
-39EE4C:lI111|H39EF20
-39EF20:lI116|H39EFFC
-39EFFC:lI112|H39F0E0
-39F0E0:lI47|H39F1B4
-39F1B4:lI101|H39F288
-39F288:lI114|H39F344
-39F344:lI116|H39F408
-39F408:lI115|H39F4D4
-39F4D4:lI47|H39F5A8
-39F5A8:lI108|H39F67C
-39F67C:lI105|H39F750
-39F750:lI98|H39F824
-39F824:lI47|H39F908
-39F908:lI111|H39F9E4
-39F9E4:lI98|H39FAC0
-39FAC0:lI115|H39FB9C
-39FB9C:lI101|H39FC68
-39FC68:lI114|H39FD2C
-39FD2C:lI118|H39FDF8
-39FDF8:lI101|H39FEB4
-39FEB4:lI114|H39FF70
-39FF70:lI47|H3A0024
-3A0024:lI112|H3A00D8
-3A00D8:lI114|H3A0184
-3A0184:lI105|H3A0238
-3A0238:lI118|H3A02F4
-3A02F4:lI47|H3A03A8
-3A03A8:lI99|H3A0444
-3A0444:lI114|H3A04E8
-3A04E8:lI97|H3A058C
-3A058C:lI115|H3A0638
-3A0638:lI104|H3A06EC
-3A06EC:lI100|H3A0798
-3A0798:lI117|H3A083C
-3A083C:lI109|H3A08C8
-3A08C8:lI112|H3A095C
-3A095C:lI95|H3A09F0
-3A09F0:lI118|H3A0A8C
-3A0A8C:lI105|H3A0B38
-3A0B38:lI101|H3A0BE4
-3A0BE4:lI119|H3A0CA0
-3A0CA0:lI101|H3A0D5C
-3A0D5C:lI114|N
-39E34C:lI47|H39E440
-39E440:lI99|H39E544
-39E544:lI114|H39E65C
-39E65C:lI97|H39E770
-39E770:lI115|H39E884
-39E884:lI104|H39E998
-39E998:lI100|H39EA8C
-39EA8C:lI117|H39EB80
-39EB80:lI109|H39EC74
-39EC74:lI112|H39ED68
-39ED68:lI95|H39EE44
-39EE44:lI118|H39EF18
-39EF18:lI105|H39EFF4
-39EFF4:lI101|H39F0D8
-39F0D8:lI119|H39F1AC
-39F1AC:lI101|H39F280
-39F280:lI114|N
-39E1A4:lH39E274|H39E280
-39E274:t2:A5:alias,H39E35C
-39E35C:t2:H39E450,H39E458
-39E458:lI47|H39E55C
-39E55C:lI99|H39E674
-39E674:lI108|H39E788
-39E788:lI101|H39E89C
-39E89C:lI97|H39E9B0
-39E9B0:lI114|H39EAA4
-39EAA4:lI99|H39EB98
-39EB98:lI97|H39EC8C
-39EC8C:lI115|H39ED80
-39ED80:lI101|H39EE5C
-39EE5C:lI47|H39EF30
-39EF30:lI111|H39F00C
-39F00C:lI116|H39F0F0
-39F0F0:lI112|H39F1C4
-39F1C4:lI47|H39F298
-39F298:lI101|H39F354
-39F354:lI114|H39F418
-39F418:lI116|H39F4E4
-39F4E4:lI115|H39F5B0
-39F5B0:lI47|H39F684
-39F684:lI101|H39F758
-39F758:lI114|H39F82C
-39F82C:lI116|H39F910
-39F910:lI115|H39F9EC
-39F9EC:lI47|H39FAC8
-39FAC8:lI100|H39FBA4
-39FBA4:lI111|H39FC70
-39FC70:lI99|H39FD34
-39FD34:lI47|H39FE00
-39FE00:lI104|H39FEBC
-39FEBC:lI116|H39FF78
-39FF78:lI109|H3A002C
-3A002C:lI108|N
-39E450:lI47|H39E554
-39E554:lI99|H39E66C
-39E66C:lI114|H39E780
-39E780:lI97|H39E894
-39E894:lI115|H39E9A8
-39E9A8:lI104|H39EA9C
-39EA9C:lI100|H39EB90
-39EB90:lI117|H39EC84
-39EC84:lI109|H39ED78
-39ED78:lI112|H39EE54
-39EE54:lI95|H39EF28
-39EF28:lI101|H39F004
-39F004:lI114|H39F0E8
-39F0E8:lI116|H39F1BC
-39F1BC:lI115|H39F290
-39F290:lI95|H39F34C
-39F34C:lI100|H39F410
-39F410:lI111|H39F4DC
-39F4DC:lI99|N
-39E280:lH39E368|H39E374
-39E368:t2:A5:alias,H39E460
-39E460:t2:H39E564,H39E56C
-39E56C:lI47|H39E684
-39E684:lI99|H39E798
-39E798:lI108|H39E8AC
-39E8AC:lI101|H39E9C0
-39E9C0:lI97|H39EAB4
-39EAB4:lI114|H39EBA8
-39EBA8:lI99|H39EC9C
-39EC9C:lI97|H39ED90
-39ED90:lI115|H39EE6C
-39EE6C:lI101|H39EF40
-39EF40:lI47|H39F01C
-39F01C:lI111|H39F100
-39F100:lI116|H39F1D4
-39F1D4:lI112|H39F2A0
-39F2A0:lI47|H39F35C
-39F35C:lI101|H39F420
-39F420:lI114|H39F4EC
-39F4EC:lI116|H39F5B8
-39F5B8:lI115|H39F68C
-39F68C:lI47|H39F760
-39F760:lI108|H39F834
-39F834:lI105|H39F918
-39F918:lI98|H39F9F4
-39F9F4:lI47|H39FAD0
-39FAD0:lI111|H39FBAC
-39FBAC:lI98|H39FC78
-39FC78:lI115|H39FD3C
-39FD3C:lI101|H39FE08
-39FE08:lI114|H39FEC4
-39FEC4:lI118|H39FF80
-39FF80:lI101|H3A0034
-3A0034:lI114|H3A00E0
-3A00E0:lI47|H3A018C
-3A018C:lI100|H3A0240
-3A0240:lI111|H3A02FC
-3A02FC:lI99|H3A03B0
-3A03B0:lI47|H3A044C
-3A044C:lI104|H3A04F0
-3A04F0:lI116|H3A0594
-3A0594:lI109|H3A0640
-3A0640:lI108|N
-39E564:lI47|H39E67C
-39E67C:lI99|H39E790
-39E790:lI114|H39E8A4
-39E8A4:lI97|H39E9B8
-39E9B8:lI115|H39EAAC
-39EAAC:lI104|H39EBA0
-39EBA0:lI100|H39EC94
-39EC94:lI117|H39ED88
-39ED88:lI109|H39EE64
-39EE64:lI112|H39EF38
-39EF38:lI95|H39F014
-39F014:lI100|H39F0F8
-39F0F8:lI111|H39F1CC
-39F1CC:lI99|N
-39E374:lH39E46C|N
-39E46C:t2:A10:erl_script_alias,H39E574
-39E574:t2:H39E68C,H39E694
-39E694:lH39E7A8|N
-39E7A8:lI99|H39E8BC
-39E8BC:lI114|H39E9D0
-39E9D0:lI97|H39EAC4
-39EAC4:lI115|H39EBB8
-39EBB8:lI104|H39ECAC
-39ECAC:lI100|H39EDA0
-39EDA0:lI117|H39EE74
-39EE74:lI109|H39EF48
-39EF48:lI112|H39F024
-39F024:lI95|H39F108
-39F108:lI118|H39F1DC
-39F1DC:lI105|H39F2A8
-39F2A8:lI101|H39F364
-39F364:lI119|H39F428
-39F428:lI101|H39F4F4
-39F4F4:lI114|N
-39E68C:lI47|H39E7A0
-39E7A0:lI99|H39E8B4
-39E8B4:lI100|H39E9C8
-39E9C8:lI118|H39EABC
-39EABC:lI95|H39EBB0
-39EBB0:lI101|H39ECA4
-39ECA4:lI114|H39ED98
-39ED98:lI108|N
-39DB58:lN|H39DB9C
-39DB9C:lH39D9FC|H39DBEC
-39D9FC:t4:I127,I0,I0,I1
-39DBEC:lI8888|N
-3A3E20:lH3A3DFC|H3A3704
-3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
-39DAE8:lAD:httpd_manager|H39DB38
-39DB38:lAA:gen_server|N
-39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
-39DB30:lA9:undefined|H39DB78
-39DB78:lH39DB50|H39DBC0
-39DBC0:lN|N
-39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
-3A3704:lH3A36E0|H39D998
-3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
-39DA38:lAE:httpd_misc_sup|H39DAC0
-39DAC0:lAA:supervisor|N
-39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
-39D958:lH39D9FC|H39DA10
-39DA10:lI8888|H39DAB8
-39DAB8:lA7:silence|N
-39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
-39D998:lH39DA64|N
-39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
-39DB10:lA12:httpd_acceptor_sup|H39DB48
-39DB48:lAA:supervisor|N
-39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
-39DB40:lH39D9FC|H39DB80
-39DB80:lI8888|H39DBC8
-39DBC8:lA7:silence|N
-39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
-39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39D9CC:lAA:gen_server|H39DA90
-39DA90:lP<0.33.0>|H39DB20
-39DB20:lP<0.33.0>|H39DB60
-39DB60:lH39DBA4|H39DBB0
-39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39DBB0:lAA:supervisor|H39DBF4
-39DBF4:lH39DC30|H39DC40
-39DC30:t3:H39D960,A9:httpd_sup,H39DA88
-39DC40:lN|N
-39D940:t2:AD:$initial_call,H39D9E4
-39D9E4:t3:A3:gen,A7:init_it,H39D9CC
-39D94C:t2:AA:$ancestors,H39D9F4
-39D9F4:lA8:web_tool|H39DAB0
-39DAB0:lP<0.27.0>|N
-=proc_dictionary:<0.44.0>
-H3756A8
-H3756B4
-H3756C0
-H3756CC
-=proc_stack:<0.44.0>
-36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36C030
-y4:A1E:httpd_acc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H375710
-=proc_heap:<0.44.0>
-36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
-375730:lA7:silence|N
-36C028:lH36C004|N
-36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
-36BEA0:lAE:httpd_acceptor|N
-36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
-36BEE8:lP<0.46.0>|H36BEF0
-36BEF0:lA7:ip_comm|H36BEF8
-36BEF8:lH36BF00|H36BF14
-36BF00:t4:I127,I0,I0,I1
-36BF14:lI8888|H36BF1C
-36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
-36BF24:lA7:silence|N
-36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
-36BED4:t4:I127,I0,I0,I1
-3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-375710:lAA:gen_server|H375738
-375738:lP<0.43.0>|H375748
-375748:lP<0.43.0>|H375758
-375758:lH375760|H37576C
-375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-37576C:lAA:supervisor|H375774
-375774:lH37577C|H37578C
-37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
-37578C:lN|N
-3756A8:t2:AD:$initial_call,H375718
-375718:t3:A3:gen,A7:init_it,H375710
-3756B4:t2:A9:verbosity,A7:silence
-3756C0:t2:AA:$ancestors,H375728
-375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
-375740:lA8:web_tool|H375750
-375750:lP<0.27.0>|N
-3756CC:t2:A5:sname,A7:acc_sup
-=proc_dictionary:<0.45.0>
-H36F484
-H36F4F4
-H36F468
-H36F500
-=proc_stack:<0.45.0>
-36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F5D0
-y4:A1F:httpd_misc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36f750:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36F430
-=proc_heap:<0.45.0>
-36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
-36F408:lA7:silence|N
-36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F430:lAA:gen_server|H36F428
-36F428:lP<0.43.0>|H36F420
-36F420:lP<0.43.0>|H36F3D0
-36F3D0:lH36F3E0|H36F418
-36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F418:lAA:supervisor|H36F3D8
-36F3D8:lH36F3EC|H36F410
-36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
-36F410:lN|N
-36F484:t2:AD:$initial_call,H36F474
-36F474:t3:A3:gen,A7:init_it,H36F430
-36F4F4:t2:A9:verbosity,A7:silence
-36F468:t2:AA:$ancestors,H36F460
-36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
-36F440:lA8:web_tool|H36F438
-36F438:lP<0.27.0>|N
-36F500:t2:A5:sname,A8:misc_sup
-=proc_dictionary:<0.46.0>
-H3BDA50
-H3BDA5C
-H3BDAC8
-H3BDB28
-H3BDB9C
-H3BDC00
-H3BDADC
-H3BDB3C
-=proc_stack:<0.46.0>
-39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:httpd_manager
-y3:H39D5A4
-y4:A16:httpd__127_0_0_1__8888
-y5:P<0.43.0>
-39d910:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3BDAB0
-=proc_heap:<0.46.0>
-39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
-39D430:lH39BF40|H39D428
-39BF40:t2:A8:max_conn,I1
-39D428:lH39BC80|H39D420
-39BC80:t2:AF:last_heavy_load,A5:never
-39D420:lH39D414|N
-39D414:t2:AF:last_connection,H39D408
-39D408:t2:H39D3E8,H39D3F8
-39D3F8:t3:I11,I22,I34
-39D3E8:t3:I2004,I4,I21
-3BDAB0:lAA:gen_server|H3BDB20
-3BDB20:lP<0.43.0>|H3BDB94
-3BDB94:lP<0.43.0>|H3BDBF8
-3BDBF8:lH3BDC48|H3BDC54
-3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
-3BDC54:lAD:httpd_manager|H3BDCAC
-3BDCAC:lH3BDD14|H3BDD1C
-3BDD14:lA9:undefined|H3BDD9C
-3BDD9C:lH3BDA84|H3BDE2C
-3BDA84:lH3BDAF0|H3BDAFC
-3BDAF0:t2:AB:server_root,H3BDB48
-3BDB48:lI47|H3BDBB0
-3BDBB0:lI99|H3BDC0C
-3BDC0C:lI108|H3BDC64
-3BDC64:lI101|H3BDCBC
-3BDCBC:lI97|H3BDD2C
-3BDD2C:lI114|H3BDDA4
-3BDDA4:lI99|H3BDE34
-3BDE34:lI97|H3BDED4
-3BDED4:lI115|H3BDF90
-3BDF90:lI101|H3BE054
-3BE054:lI47|H3BE128
-3BE128:lI111|H3BE204
-3BE204:lI116|H3BE2EC
-3BE2EC:lI112|H3BE3E0
-3BE3E0:lI47|H3BE4E4
-3BE4E4:lI101|H3BE5E8
-3BE5E8:lI114|H3BE6EC
-3BE6EC:lI116|H3BE7E0
-3BE7E0:lI115|H3BE8CC
-3BE8CC:lI47|H3BE9B8
-3BE9B8:lI108|H3BEAAC
-3BEAAC:lI105|H3BEB98
-3BEB98:lI98|H3BEC84
-3BEC84:lI47|H3BED70
-3BED70:lI119|H3BEE5C
-3BEE5C:lI101|H3BEF30
-3BEF30:lI98|H3BEFFC
-3BEFFC:lI116|H3BF0C8
-3BF0C8:lI111|H3BF19C
-3BF19C:lI111|H3BF260
-3BF260:lI108|H3BF314
-3BF314:lI47|H3BF3C0
-3BF3C0:lI112|H3BF474
-3BF474:lI114|H3BF530
-3BF530:lI105|H3BF5F4
-3BF5F4:lI118|H3BF6C8
-3BF6C8:lI47|H3BF79C
-3BF79C:lI114|H3BF870
-3BF870:lI111|H3BF954
-3BF954:lI111|H3BFA30
-3BFA30:lI116|N
-3BDAFC:lH3BDB50|H3BDB5C
-3BDB50:t2:AD:document_root,H3BDBB8
-3BDBB8:lI47|H3BDC14
-3BDC14:lI99|H3BDC6C
-3BDC6C:lI108|H3BDCC4
-3BDCC4:lI101|H3BDD34
-3BDD34:lI97|H3BDDAC
-3BDDAC:lI114|H3BDE3C
-3BDE3C:lI99|H3BDEDC
-3BDEDC:lI97|H3BDF98
-3BDF98:lI115|H3BE05C
-3BE05C:lI101|H3BE130
-3BE130:lI47|H3BE20C
-3BE20C:lI111|H3BE2F4
-3BE2F4:lI116|H3BE3E8
-3BE3E8:lI112|H3BE4EC
-3BE4EC:lI47|H3BE5F0
-3BE5F0:lI101|H3BE6F4
-3BE6F4:lI114|H3BE7E8
-3BE7E8:lI116|H3BE8D4
-3BE8D4:lI115|H3BE9C0
-3BE9C0:lI47|H3BEAB4
-3BEAB4:lI108|H3BEBA0
-3BEBA0:lI105|H3BEC8C
-3BEC8C:lI98|H3BED78
-3BED78:lI47|H3BEE64
-3BEE64:lI119|H3BEF38
-3BEF38:lI101|H3BF004
-3BF004:lI98|H3BF0D0
-3BF0D0:lI116|H3BF1A4
-3BF1A4:lI111|H3BF268
-3BF268:lI111|H3BF31C
-3BF31C:lI108|H3BF3C8
-3BF3C8:lI47|H3BF47C
-3BF47C:lI112|H3BF538
-3BF538:lI114|H3BF5FC
-3BF5FC:lI105|H3BF6D0
-3BF6D0:lI118|H3BF7A4
-3BF7A4:lI47|H3BF878
-3BF878:lI114|H3BF95C
-3BF95C:lI111|H3BFA38
-3BFA38:lI111|H3BFB0C
-3BFB0C:lI116|H3BFBE8
-3BFBE8:lI47|H3BFCB4
-3BFCB4:lI100|H3BFD78
-3BFD78:lI111|H3BFE3C
-3BFE3C:lI99|N
-3BDB5C:lH3BDBC0|H3BDBCC
-3BDBC0:t2:AA:mime_types,H3BDC1C
-3BDC1C:lH3BDC74|H3BDC80
-3BDC74:t2:H3BDCCC,H3BDCD4
-3BDCD4:lI120|H3BDD44
-3BDD44:lI45|H3BDDBC
-3BDDBC:lI119|H3BDE44
-3BDE44:lI111|H3BDEE4
-3BDEE4:lI114|H3BDFA0
-3BDFA0:lI108|H3BE064
-3BE064:lI100|H3BE138
-3BE138:lI47|H3BE214
-3BE214:lI120|H3BE2FC
-3BE2FC:lI45|H3BE3F0
-3BE3F0:lI118|H3BE4F4
-3BE4F4:lI114|H3BE5F8
-3BE5F8:lI109|H3BE6FC
-3BE6FC:lI108|N
-3BDCCC:lI119|H3BDD3C
-3BDD3C:lI114|H3BDDB4
-3BDDB4:lI108|N
-3BDC80:lH3BDCDC|H3BDCE8
-3BDCDC:t2:H3BDD4C,H3BDD54
-3BDD54:lI120|H3BDDCC
-3BDDCC:lI45|H3BDE54
-3BDE54:lI119|H3BDEF4
-3BDEF4:lI111|H3BDFA8
-3BDFA8:lI114|H3BE06C
-3BE06C:lI108|H3BE140
-3BE140:lI100|H3BE21C
-3BE21C:lI47|H3BE304
-3BE304:lI120|H3BE3F8
-3BE3F8:lI45|H3BE4FC
-3BE4FC:lI118|H3BE600
-3BE600:lI114|H3BE704
-3BE704:lI109|H3BE7F0
-3BE7F0:lI108|N
-3BDD4C:lI118|H3BDDC4
-3BDDC4:lI114|H3BDE4C
-3BDE4C:lI109|H3BDEEC
-3BDEEC:lI108|N
-3BDCE8:lH3BDD5C|H3BDD68
-3BDD5C:t2:H3BDDD4,H3BDDDC
-3BDDDC:lI120|H3BDE64
-3BDE64:lI45|H3BDF04
-3BDF04:lI99|H3BDFB0
-3BDFB0:lI111|H3BE074
-3BE074:lI110|H3BE148
-3BE148:lI102|H3BE224
-3BE224:lI101|H3BE30C
-3BE30C:lI114|H3BE400
-3BE400:lI101|H3BE504
-3BE504:lI110|H3BE608
-3BE608:lI99|H3BE70C
-3BE70C:lI101|H3BE7F8
-3BE7F8:lI47|H3BE8DC
-3BE8DC:lI120|H3BE9C8
-3BE9C8:lI45|H3BEABC
-3BEABC:lI99|H3BEBA8
-3BEBA8:lI111|H3BEC94
-3BEC94:lI111|H3BED80
-3BED80:lI108|H3BEE6C
-3BEE6C:lI116|H3BEF40
-3BEF40:lI97|H3BF00C
-3BF00C:lI108|H3BF0D8
-3BF0D8:lI107|N
-3BDDD4:lI105|H3BDE5C
-3BDE5C:lI99|H3BDEFC
-3BDEFC:lI101|N
-3BDD68:lH3BDDE4|H3BDDF0
-3BDDE4:t2:H3BDE6C,H3BDE74
-3BDE74:lI118|H3BDF14
-3BDF14:lI105|H3BDFC0
-3BDFC0:lI100|H3BE084
-3BE084:lI101|H3BE158
-3BE158:lI111|H3BE22C
-3BE22C:lI47|H3BE314
-3BE314:lI120|H3BE408
-3BE408:lI45|H3BE50C
-3BE50C:lI115|H3BE610
-3BE610:lI103|H3BE714
-3BE714:lI105|H3BE800
-3BE800:lI45|H3BE8E4
-3BE8E4:lI109|H3BE9D0
-3BE9D0:lI111|H3BEAC4
-3BEAC4:lI118|H3BEBB0
-3BEBB0:lI105|H3BEC9C
-3BEC9C:lI101|N
-3BDE6C:lI109|H3BDF0C
-3BDF0C:lI111|H3BDFB8
-3BDFB8:lI118|H3BE07C
-3BE07C:lI105|H3BE150
-3BE150:lI101|N
-3BDDF0:lH3BDE7C|H3BDE88
-3BDE7C:t2:H3BDF1C,H3BDF24
-3BDF24:lI118|H3BDFD0
-3BDFD0:lI105|H3BE094
-3BE094:lI100|H3BE160
-3BE160:lI101|H3BE234
-3BE234:lI111|H3BE31C
-3BE31C:lI47|H3BE410
-3BE410:lI120|H3BE514
-3BE514:lI45|H3BE618
-3BE618:lI109|H3BE71C
-3BE71C:lI115|H3BE808
-3BE808:lI118|H3BE8EC
-3BE8EC:lI105|H3BE9D8
-3BE9D8:lI100|H3BEACC
-3BEACC:lI101|H3BEBB8
-3BEBB8:lI111|N
-3BDF1C:lI97|H3BDFC8
-3BDFC8:lI118|H3BE08C
-3BE08C:lI105|N
-3BDE88:lH3BDF2C|H3BDF38
-3BDF2C:t2:H3BDFD8,H3BDFE0
-3BDFE0:lI118|H3BE0A4
-3BE0A4:lI105|H3BE168
-3BE168:lI100|H3BE23C
-3BE23C:lI101|H3BE324
-3BE324:lI111|H3BE418
-3BE418:lI47|H3BE51C
-3BE51C:lI113|H3BE620
-3BE620:lI117|H3BE724
-3BE724:lI105|H3BE810
-3BE810:lI99|H3BE8F4
-3BE8F4:lI107|H3BE9E0
-3BE9E0:lI116|H3BEAD4
-3BEAD4:lI105|H3BEBC0
-3BEBC0:lI109|H3BECA4
-3BECA4:lI101|N
-3BDFD8:lI113|H3BE09C
-3BE09C:lI116|N
-3BDF38:lH3BDFE8|H3BDFF4
-3BDFE8:t2:H3BE0AC,H3BE0B4
-3BE0B4:lI118|H3BE178
-3BE178:lI105|H3BE24C
-3BE24C:lI100|H3BE32C
-3BE32C:lI101|H3BE420
-3BE420:lI111|H3BE524
-3BE524:lI47|H3BE628
-3BE628:lI113|H3BE72C
-3BE72C:lI117|H3BE818
-3BE818:lI105|H3BE8FC
-3BE8FC:lI99|H3BE9E8
-3BE9E8:lI107|H3BEADC
-3BEADC:lI116|H3BEBC8
-3BEBC8:lI105|H3BECAC
-3BECAC:lI109|H3BED88
-3BED88:lI101|N
-3BE0AC:lI109|H3BE170
-3BE170:lI111|H3BE244
-3BE244:lI118|N
-3BDFF4:lH3BE0BC|H3BE0C8
-3BE0BC:t2:H3BE180,H3BE188
-3BE188:lI118|H3BE25C
-3BE25C:lI105|H3BE33C
-3BE33C:lI100|H3BE430
-3BE430:lI101|H3BE52C
-3BE52C:lI111|H3BE630
-3BE630:lI47|H3BE734
-3BE734:lI109|H3BE820
-3BE820:lI112|H3BE904
-3BE904:lI101|H3BE9F0
-3BE9F0:lI103|N
-3BE180:lI109|H3BE254
-3BE254:lI112|H3BE334
-3BE334:lI101|H3BE428
-3BE428:lI103|N
-3BE0C8:lH3BE190|H3BE19C
-3BE190:t2:H3BE264,H3BE26C
-3BE26C:lI118|H3BE34C
-3BE34C:lI105|H3BE440
-3BE440:lI100|H3BE534
-3BE534:lI101|H3BE638
-3BE638:lI111|H3BE73C
-3BE73C:lI47|H3BE828
-3BE828:lI109|H3BE90C
-3BE90C:lI112|H3BE9F8
-3BE9F8:lI101|H3BEAE4
-3BEAE4:lI103|N
-3BE264:lI109|H3BE344
-3BE344:lI112|H3BE438
-3BE438:lI103|N
-3BE19C:lH3BE274|H3BE280
-3BE274:t2:H3BE354,H3BE35C
-3BE35C:lI118|H3BE450
-3BE450:lI105|H3BE544
-3BE544:lI100|H3BE640
-3BE640:lI101|H3BE744
-3BE744:lI111|H3BE830
-3BE830:lI47|H3BE914
-3BE914:lI109|H3BEA00
-3BEA00:lI112|H3BEAEC
-3BEAEC:lI101|H3BEBD0
-3BEBD0:lI103|N
-3BE354:lI109|H3BE448
-3BE448:lI112|H3BE53C
-3BE53C:lI101|N
-3BE280:lH3BE364|H3BE370
-3BE364:t2:H3BE458,H3BE460
-3BE460:lI116|H3BE554
-3BE554:lI101|H3BE650
-3BE650:lI120|H3BE754
-3BE754:lI116|H3BE838
-3BE838:lI47|H3BE91C
-3BE91C:lI120|H3BEA08
-3BEA08:lI45|H3BEAF4
-3BEAF4:lI115|H3BEBD8
-3BEBD8:lI103|H3BECB4
-3BECB4:lI109|H3BED90
-3BED90:lI108|N
-3BE458:lI115|H3BE54C
-3BE54C:lI103|H3BE648
-3BE648:lI109|H3BE74C
-3BE74C:lI108|N
-3BE370:lH3BE468|H3BE474
-3BE468:t2:H3BE55C,H3BE564
-3BE564:lI116|H3BE660
-3BE660:lI101|H3BE764
-3BE764:lI120|H3BE840
-3BE840:lI116|H3BE924
-3BE924:lI47|H3BEA10
-3BEA10:lI120|H3BEAFC
-3BEAFC:lI45|H3BEBE0
-3BEBE0:lI115|H3BECBC
-3BECBC:lI103|H3BED98
-3BED98:lI109|H3BEE74
-3BEE74:lI108|N
-3BE55C:lI115|H3BE658
-3BE658:lI103|H3BE75C
-3BE75C:lI109|N
-3BE474:lH3BE56C|H3BE578
-3BE56C:t2:H3BE668,H3BE670
-3BE670:lI116|H3BE774
-3BE774:lI101|H3BE850
-3BE850:lI120|H3BE92C
-3BE92C:lI116|H3BEA18
-3BEA18:lI47|H3BEB04
-3BEB04:lI120|H3BEBE8
-3BEBE8:lI45|H3BECC4
-3BECC4:lI115|H3BEDA0
-3BEDA0:lI101|H3BEE7C
-3BEE7C:lI116|H3BEF48
-3BEF48:lI101|H3BF014
-3BF014:lI120|H3BF0E0
-3BF0E0:lI116|N
-3BE668:lI101|H3BE76C
-3BE76C:lI116|H3BE848
-3BE848:lI120|N
-3BE578:lH3BE678|H3BE684
-3BE678:t2:H3BE77C,H3BE784
-3BE784:lI116|H3BE860
-3BE860:lI101|H3BE93C
-3BE93C:lI120|H3BEA20
-3BEA20:lI116|H3BEB0C
-3BEB0C:lI47|H3BEBF0
-3BEBF0:lI116|H3BECCC
-3BECCC:lI97|H3BEDA8
-3BEDA8:lI98|H3BEE84
-3BEE84:lI45|H3BEF50
-3BEF50:lI115|H3BF01C
-3BF01C:lI101|H3BF0E8
-3BF0E8:lI112|H3BF1AC
-3BF1AC:lI97|H3BF270
-3BF270:lI114|H3BF324
-3BF324:lI97|H3BF3D0
-3BF3D0:lI116|H3BF484
-3BF484:lI101|H3BF540
-3BF540:lI100|H3BF604
-3BF604:lI45|H3BF6D8
-3BF6D8:lI118|H3BF7AC
-3BF7AC:lI97|H3BF880
-3BF880:lI108|H3BF964
-3BF964:lI117|H3BFA40
-3BFA40:lI101|H3BFB14
-3BFB14:lI115|N
-3BE77C:lI116|H3BE858
-3BE858:lI115|H3BE934
-3BE934:lI118|N
-3BE684:lH3BE78C|H3BE798
-3BE78C:t2:H3BE868,H3BE870
-3BE870:lI116|H3BE94C
-3BE94C:lI101|H3BEA30
-3BEA30:lI120|H3BEB14
-3BEB14:lI116|H3BEBF8
-3BEBF8:lI47|H3BECD4
-3BECD4:lI114|H3BEDB0
-3BEDB0:lI105|H3BEE8C
-3BEE8C:lI99|H3BEF58
-3BEF58:lI104|H3BF024
-3BF024:lI116|H3BF0F0
-3BF0F0:lI101|H3BF1B4
-3BF1B4:lI120|H3BF278
-3BF278:lI116|N
-3BE868:lI114|H3BE944
-3BE944:lI116|H3BEA28
-3BEA28:lI120|N
-3BE798:lH3BE878|H3BE884
-3BE878:t2:H3BE954,H3BE95C
-3BE95C:lI116|H3BEA40
-3BEA40:lI101|H3BEB24
-3BEB24:lI120|H3BEC00
-3BEC00:lI116|H3BECDC
-3BECDC:lI47|H3BEDB8
-3BEDB8:lI112|H3BEE94
-3BEE94:lI108|H3BEF60
-3BEF60:lI97|H3BF02C
-3BF02C:lI105|H3BF0F8
-3BF0F8:lI110|N
-3BE954:lI116|H3BEA38
-3BEA38:lI120|H3BEB1C
-3BEB1C:lI116|N
-3BE884:lH3BE964|H3BE970
-3BE964:t2:H3BEA48,H3BEA50
-3BEA50:lI116|H3BEB34
-3BEB34:lI101|H3BEC10
-3BEC10:lI120|H3BECEC
-3BECEC:lI116|H3BEDC8
-3BEDC8:lI47|H3BEE9C
-3BEE9C:lI120|H3BEF68
-3BEF68:lI45|H3BF034
-3BF034:lI115|H3BF100
-3BF100:lI101|H3BF1BC
-3BF1BC:lI114|H3BF280
-3BF280:lI118|H3BF32C
-3BF32C:lI101|H3BF3D8
-3BF3D8:lI114|H3BF48C
-3BF48C:lI45|H3BF548
-3BF548:lI112|H3BF60C
-3BF60C:lI97|H3BF6E0
-3BF6E0:lI114|H3BF7B4
-3BF7B4:lI115|H3BF888
-3BF888:lI101|H3BF96C
-3BF96C:lI100|H3BFA48
-3BFA48:lI45|H3BFB1C
-3BFB1C:lI104|H3BFBF0
-3BFBF0:lI116|H3BFCBC
-3BFCBC:lI109|H3BFD80
-3BFD80:lI108|N
-3BEA48:lI115|H3BEB2C
-3BEB2C:lI104|H3BEC08
-3BEC08:lI116|H3BECE4
-3BECE4:lI109|H3BEDC0
-3BEDC0:lI108|N
-3BE970:lH3BEA58|H3BEA64
-3BEA58:t2:H3BEB3C,H3BEB44
-3BEB44:lI116|H3BEC20
-3BEC20:lI101|H3BECFC
-3BECFC:lI120|H3BEDD8
-3BEDD8:lI116|H3BEEA4
-3BEEA4:lI47|H3BEF70
-3BEF70:lI104|H3BF03C
-3BF03C:lI116|H3BF108
-3BF108:lI109|H3BF1C4
-3BF1C4:lI108|N
-3BEB3C:lI104|H3BEC18
-3BEC18:lI116|H3BECF4
-3BECF4:lI109|H3BEDD0
-3BEDD0:lI108|N
-3BEA64:lH3BEB4C|H3BEB58
-3BEB4C:t2:H3BEC28,H3BEC30
-3BEC30:lI116|H3BED0C
-3BED0C:lI101|H3BEDE8
-3BEDE8:lI120|H3BEEAC
-3BEEAC:lI116|H3BEF78
-3BEF78:lI47|H3BF044
-3BF044:lI104|H3BF110
-3BF110:lI116|H3BF1CC
-3BF1CC:lI109|H3BF288
-3BF288:lI108|N
-3BEC28:lI104|H3BED04
-3BED04:lI116|H3BEDE0
-3BEDE0:lI109|N
-3BEB58:lH3BEC38|H3BEC44
-3BEC38:t2:H3BED14,H3BED1C
-3BED1C:lI105|H3BEDF8
-3BEDF8:lI109|H3BEEBC
-3BEEBC:lI97|H3BEF80
-3BEF80:lI103|H3BF04C
-3BF04C:lI101|H3BF118
-3BF118:lI47|H3BF1D4
-3BF1D4:lI120|H3BF290
-3BF290:lI45|H3BF334
-3BF334:lI120|H3BF3E0
-3BF3E0:lI119|H3BF494
-3BF494:lI105|H3BF550
-3BF550:lI110|H3BF614
-3BF614:lI100|H3BF6E8
-3BF6E8:lI111|H3BF7BC
-3BF7BC:lI119|H3BF890
-3BF890:lI100|H3BF974
-3BF974:lI117|H3BFA50
-3BFA50:lI109|H3BFB24
-3BFB24:lI112|N
-3BED14:lI120|H3BEDF0
-3BEDF0:lI119|H3BEEB4
-3BEEB4:lI100|N
-3BEC44:lH3BED24|H3BED30
-3BED24:t2:H3BEE00,H3BEE08
-3BEE08:lI105|H3BEECC
-3BEECC:lI109|H3BEF90
-3BEF90:lI97|H3BF054
-3BF054:lI103|H3BF120
-3BF120:lI101|H3BF1DC
-3BF1DC:lI47|H3BF298
-3BF298:lI120|H3BF33C
-3BF33C:lI45|H3BF3E8
-3BF3E8:lI120|H3BF49C
-3BF49C:lI112|H3BF558
-3BF558:lI105|H3BF61C
-3BF61C:lI120|H3BF6F0
-3BF6F0:lI109|H3BF7C4
-3BF7C4:lI97|H3BF898
-3BF898:lI112|N
-3BEE00:lI120|H3BEEC4
-3BEEC4:lI112|H3BEF88
-3BEF88:lI109|N
-3BED30:lH3BEE10|H3BEE1C
-3BEE10:t2:H3BEED4,H3BEEDC
-3BEEDC:lI105|H3BEFA0
-3BEFA0:lI109|H3BF064
-3BF064:lI97|H3BF128
-3BF128:lI103|H3BF1E4
-3BF1E4:lI101|H3BF2A0
-3BF2A0:lI47|H3BF344
-3BF344:lI120|H3BF3F0
-3BF3F0:lI45|H3BF4A4
-3BF4A4:lI120|H3BF560
-3BF560:lI98|H3BF624
-3BF624:lI105|H3BF6F8
-3BF6F8:lI116|H3BF7CC
-3BF7CC:lI109|H3BF8A0
-3BF8A0:lI97|H3BF97C
-3BF97C:lI112|N
-3BEED4:lI120|H3BEF98
-3BEF98:lI98|H3BF05C
-3BF05C:lI109|N
-3BEE1C:lH3BEEE4|H3BEEF0
-3BEEE4:t2:H3BEFA8,H3BEFB0
-3BEFB0:lI105|H3BF074
-3BF074:lI109|H3BF138
-3BF138:lI97|H3BF1EC
-3BF1EC:lI103|H3BF2A8
-3BF2A8:lI101|H3BF34C
-3BF34C:lI47|H3BF3F8
-3BF3F8:lI120|H3BF4AC
-3BF4AC:lI45|H3BF568
-3BF568:lI114|H3BF62C
-3BF62C:lI103|H3BF700
-3BF700:lI98|N
-3BEFA8:lI114|H3BF06C
-3BF06C:lI103|H3BF130
-3BF130:lI98|N
-3BEEF0:lH3BEFB8|H3BEFC4
-3BEFB8:t2:H3BF07C,H3BF084
-3BF084:lI105|H3BF148
-3BF148:lI109|H3BF1FC
-3BF1FC:lI97|H3BF2B0
-3BF2B0:lI103|H3BF354
-3BF354:lI101|H3BF400
-3BF400:lI47|H3BF4B4
-3BF4B4:lI120|H3BF570
-3BF570:lI45|H3BF634
-3BF634:lI112|H3BF708
-3BF708:lI111|H3BF7D4
-3BF7D4:lI114|H3BF8A8
-3BF8A8:lI116|H3BF984
-3BF984:lI97|H3BFA58
-3BFA58:lI98|H3BFB2C
-3BFB2C:lI108|H3BFBF8
-3BFBF8:lI101|H3BFCC4
-3BFCC4:lI45|H3BFD88
-3BFD88:lI112|H3BFE44
-3BFE44:lI105|H3BFEF0
-3BFEF0:lI120|H3BFFA4
-3BFFA4:lI109|H3C0050
-3C0050:lI97|H3C00FC
-3C00FC:lI112|N
-3BF07C:lI112|H3BF140
-3BF140:lI112|H3BF1F4
-3BF1F4:lI109|N
-3BEFC4:lH3BF08C|H3BF098
-3BF08C:t2:H3BF150,H3BF158
-3BF158:lI105|H3BF20C
-3BF20C:lI109|H3BF2C0
-3BF2C0:lI97|H3BF35C
-3BF35C:lI103|H3BF408
-3BF408:lI101|H3BF4BC
-3BF4BC:lI47|H3BF578
-3BF578:lI120|H3BF63C
-3BF63C:lI45|H3BF710
-3BF710:lI112|H3BF7DC
-3BF7DC:lI111|H3BF8B0
-3BF8B0:lI114|H3BF98C
-3BF98C:lI116|H3BFA60
-3BFA60:lI97|H3BFB34
-3BFB34:lI98|H3BFC00
-3BFC00:lI108|H3BFCCC
-3BFCCC:lI101|H3BFD90
-3BFD90:lI45|H3BFE4C
-3BFE4C:lI103|H3BFEF8
-3BFEF8:lI114|H3BFFAC
-3BFFAC:lI97|H3C0058
-3C0058:lI121|H3C0104
-3C0104:lI109|H3C01A8
-3C01A8:lI97|H3C025C
-3C025C:lI112|N
-3BF150:lI112|H3BF204
-3BF204:lI103|H3BF2B8
-3BF2B8:lI109|N
-3BF098:lH3BF160|H3BF16C
-3BF160:t2:H3BF214,H3BF21C
-3BF21C:lI105|H3BF2D0
-3BF2D0:lI109|H3BF36C
-3BF36C:lI97|H3BF410
-3BF410:lI103|H3BF4C4
-3BF4C4:lI101|H3BF580
-3BF580:lI47|H3BF644
-3BF644:lI120|H3BF718
-3BF718:lI45|H3BF7E4
-3BF7E4:lI112|H3BF8B8
-3BF8B8:lI111|H3BF994
-3BF994:lI114|H3BFA68
-3BFA68:lI116|H3BFB3C
-3BFB3C:lI97|H3BFC08
-3BFC08:lI98|H3BFCD4
-3BFCD4:lI108|H3BFD98
-3BFD98:lI101|H3BFE54
-3BFE54:lI45|H3BFF00
-3BFF00:lI98|H3BFFB4
-3BFFB4:lI105|H3C0060
-3C0060:lI116|H3C010C
-3C010C:lI109|H3C01B0
-3C01B0:lI97|H3C0264
-3C0264:lI112|N
-3BF214:lI112|H3BF2C8
-3BF2C8:lI98|H3BF364
-3BF364:lI109|N
-3BF16C:lH3BF224|H3BF230
-3BF224:t2:H3BF2D8,H3BF2E0
-3BF2E0:lI105|H3BF37C
-3BF37C:lI109|H3BF420
-3BF420:lI97|H3BF4CC
-3BF4CC:lI103|H3BF588
-3BF588:lI101|H3BF64C
-3BF64C:lI47|H3BF720
-3BF720:lI120|H3BF7EC
-3BF7EC:lI45|H3BF8C0
-3BF8C0:lI112|H3BF99C
-3BF99C:lI111|H3BFA70
-3BFA70:lI114|H3BFB44
-3BFB44:lI116|H3BFC10
-3BFC10:lI97|H3BFCDC
-3BFCDC:lI98|H3BFDA0
-3BFDA0:lI108|H3BFE5C
-3BFE5C:lI101|H3BFF08
-3BFF08:lI45|H3BFFBC
-3BFFBC:lI97|H3C0068
-3C0068:lI110|H3C0114
-3C0114:lI121|H3C01B8
-3C01B8:lI109|H3C026C
-3C026C:lI97|H3C0318
-3C0318:lI112|N
-3BF2D8:lI112|H3BF374
-3BF374:lI110|H3BF418
-3BF418:lI109|N
-3BF230:lH3BF2E8|H3BF2F4
-3BF2E8:t2:H3BF384,H3BF38C
-3BF38C:lI105|H3BF430
-3BF430:lI109|H3BF4DC
-3BF4DC:lI97|H3BF590
-3BF590:lI103|H3BF654
-3BF654:lI101|H3BF728
-3BF728:lI47|H3BF7F4
-3BF7F4:lI120|H3BF8C8
-3BF8C8:lI45|H3BF9A4
-3BF9A4:lI99|H3BFA78
-3BFA78:lI109|H3BFB4C
-3BFB4C:lI117|H3BFC18
-3BFC18:lI45|H3BFCE4
-3BFCE4:lI114|H3BFDA8
-3BFDA8:lI97|H3BFE64
-3BFE64:lI115|H3BFF10
-3BFF10:lI116|H3BFFC4
-3BFFC4:lI101|H3C0070
-3C0070:lI114|N
-3BF384:lI114|H3BF428
-3BF428:lI97|H3BF4D4
-3BF4D4:lI115|N
-3BF2F4:lH3BF394|H3BF3A0
-3BF394:t2:H3BF438,H3BF440
-3BF440:lI105|H3BF4EC
-3BF4EC:lI109|H3BF5A0
-3BF5A0:lI97|H3BF664
-3BF664:lI103|H3BF730
-3BF730:lI101|H3BF7FC
-3BF7FC:lI47|H3BF8D0
-3BF8D0:lI116|H3BF9AC
-3BF9AC:lI105|H3BFA80
-3BFA80:lI102|H3BFB54
-3BFB54:lI102|N
-3BF438:lI116|H3BF4E4
-3BF4E4:lI105|H3BF598
-3BF598:lI102|H3BF65C
-3BF65C:lI102|N
-3BF3A0:lH3BF448|H3BF454
-3BF448:t2:H3BF4F4,H3BF4FC
-3BF4FC:lI105|H3BF5B0
-3BF5B0:lI109|H3BF674
-3BF674:lI97|H3BF738
-3BF738:lI103|H3BF804
-3BF804:lI101|H3BF8D8
-3BF8D8:lI47|H3BF9B4
-3BF9B4:lI116|H3BFA88
-3BFA88:lI105|H3BFB5C
-3BFB5C:lI102|H3BFC20
-3BFC20:lI102|N
-3BF4F4:lI116|H3BF5A8
-3BF5A8:lI105|H3BF66C
-3BF66C:lI102|N
-3BF454:lH3BF504|H3BF510
-3BF504:t2:H3BF5B8,H3BF5C0
-3BF5C0:lI105|H3BF684
-3BF684:lI109|H3BF748
-3BF748:lI97|H3BF80C
-3BF80C:lI103|H3BF8E0
-3BF8E0:lI101|H3BF9BC
-3BF9BC:lI47|H3BFA90
-3BFA90:lI112|H3BFB64
-3BFB64:lI110|H3BFC28
-3BFC28:lI103|N
-3BF5B8:lI112|H3BF67C
-3BF67C:lI110|H3BF740
-3BF740:lI103|N
-3BF510:lH3BF5C8|H3BF5D4
-3BF5C8:t2:H3BF68C,H3BF694
-3BF694:lI105|H3BF758
-3BF758:lI109|H3BF81C
-3BF81C:lI97|H3BF8F0
-3BF8F0:lI103|H3BF9C4
-3BF9C4:lI101|H3BFA98
-3BFA98:lI47|H3BFB6C
-3BFB6C:lI106|H3BFC30
-3BFC30:lI112|H3BFCEC
-3BFCEC:lI101|H3BFDB0
-3BFDB0:lI103|N
-3BF68C:lI106|H3BF750
-3BF750:lI112|H3BF814
-3BF814:lI101|H3BF8E8
-3BF8E8:lI103|N
-3BF5D4:lH3BF69C|H3BF6A8
-3BF69C:t2:H3BF760,H3BF768
-3BF768:lI105|H3BF82C
-3BF82C:lI109|H3BF900
-3BF900:lI97|H3BF9CC
-3BF9CC:lI103|H3BFAA0
-3BFAA0:lI101|H3BFB74
-3BFB74:lI47|H3BFC38
-3BFC38:lI106|H3BFCF4
-3BFCF4:lI112|H3BFDB8
-3BFDB8:lI101|H3BFE6C
-3BFE6C:lI103|N
-3BF760:lI106|H3BF824
-3BF824:lI112|H3BF8F8
-3BF8F8:lI103|N
-3BF6A8:lH3BF770|H3BF77C
-3BF770:t2:H3BF834,H3BF83C
-3BF83C:lI105|H3BF910
-3BF910:lI109|H3BF9DC
-3BF9DC:lI97|H3BFAA8
-3BFAA8:lI103|H3BFB7C
-3BFB7C:lI101|H3BFC40
-3BFC40:lI47|H3BFCFC
-3BFCFC:lI106|H3BFDC0
-3BFDC0:lI112|H3BFE74
-3BFE74:lI101|H3BFF18
-3BFF18:lI103|N
-3BF834:lI106|H3BF908
-3BF908:lI112|H3BF9D4
-3BF9D4:lI101|N
-3BF77C:lH3BF844|H3BF850
-3BF844:t2:H3BF918,H3BF920
-3BF920:lI105|H3BF9EC
-3BF9EC:lI109|H3BFAB8
-3BFAB8:lI97|H3BFB84
-3BFB84:lI103|H3BFC48
-3BFC48:lI101|H3BFD04
-3BFD04:lI47|H3BFDC8
-3BFDC8:lI105|H3BFE7C
-3BFE7C:lI101|H3BFF20
-3BFF20:lI102|N
-3BF918:lI105|H3BF9E4
-3BF9E4:lI101|H3BFAB0
-3BFAB0:lI102|N
-3BF850:lH3BF928|H3BF934
-3BF928:t2:H3BF9F4,H3BF9FC
-3BF9FC:lI105|H3BFAC8
-3BFAC8:lI109|H3BFB94
-3BFB94:lI97|H3BFC50
-3BFC50:lI103|H3BFD0C
-3BFD0C:lI101|H3BFDD0
-3BFDD0:lI47|H3BFE84
-3BFE84:lI103|H3BFF28
-3BFF28:lI105|H3BFFCC
-3BFFCC:lI102|N
-3BF9F4:lI103|H3BFAC0
-3BFAC0:lI105|H3BFB8C
-3BFB8C:lI102|N
-3BF934:lH3BFA04|H3BFA10
-3BFA04:t2:H3BFAD0,H3BFAD8
-3BFAD8:lI99|H3BFBA4
-3BFBA4:lI104|H3BFC60
-3BFC60:lI101|H3BFD14
-3BFD14:lI109|H3BFDD8
-3BFDD8:lI105|H3BFE8C
-3BFE8C:lI99|H3BFF30
-3BFF30:lI97|H3BFFD4
-3BFFD4:lI108|H3C0078
-3C0078:lI47|H3C011C
-3C011C:lI120|H3C01C0
-3C01C0:lI45|H3C0274
-3C0274:lI112|H3C0320
-3C0320:lI100|H3C03CC
-3C03CC:lI98|N
-3BFAD0:lI112|H3BFB9C
-3BFB9C:lI100|H3BFC58
-3BFC58:lI98|N
-3BFA10:lH3BFAE0|H3BFAEC
-3BFAE0:t2:H3BFBAC,H3BFBB4
-3BFBB4:lI99|H3BFC70
-3BFC70:lI104|H3BFD24
-3BFD24:lI101|H3BFDE0
-3BFDE0:lI109|H3BFE94
-3BFE94:lI105|H3BFF38
-3BFF38:lI99|H3BFFDC
-3BFFDC:lI97|H3C0080
-3C0080:lI108|H3C0124
-3C0124:lI47|H3C01C8
-3C01C8:lI120|H3C027C
-3C027C:lI45|H3C0328
-3C0328:lI112|H3C03D4
-3C03D4:lI100|H3C0460
-3C0460:lI98|N
-3BFBAC:lI120|H3BFC68
-3BFC68:lI121|H3BFD1C
-3BFD1C:lI122|N
-3BFAEC:lH3BFBBC|H3BFBC8
-3BFBBC:t2:H3BFC78,H3BFC80
-3BFC80:lI97|H3BFD34
-3BFD34:lI117|H3BFDF0
-3BFDF0:lI100|H3BFE9C
-3BFE9C:lI105|H3BFF40
-3BFF40:lI111|H3BFFE4
-3BFFE4:lI47|H3C0088
-3C0088:lI120|H3C012C
-3C012C:lI45|H3C01D0
-3C01D0:lI119|H3C0284
-3C0284:lI97|H3C0330
-3C0330:lI118|N
-3BFC78:lI119|H3BFD2C
-3BFD2C:lI97|H3BFDE8
-3BFDE8:lI118|N
-3BFBC8:lH3BFC88|H3BFC94
-3BFC88:t2:H3BFD3C,H3BFD44
-3BFD44:lI97|H3BFE00
-3BFE00:lI117|H3BFEA4
-3BFEA4:lI100|H3BFF48
-3BFF48:lI105|H3BFFEC
-3BFFEC:lI111|H3C0090
-3C0090:lI47|H3C0134
-3C0134:lI120|H3C01D8
-3C01D8:lI45|H3C028C
-3C028C:lI114|H3C0338
-3C0338:lI101|H3C03DC
-3C03DC:lI97|H3C0468
-3C0468:lI108|H3C04FC
-3C04FC:lI97|H3C0598
-3C0598:lI117|H3C063C
-3C063C:lI100|H3C06E8
-3C06E8:lI105|H3C0794
-3C0794:lI111|N
-3BFD3C:lI114|H3BFDF8
-3BFDF8:lI97|N
-3BFC94:lH3BFD4C|H3BFD58
-3BFD4C:t2:H3BFE08,H3BFE10
-3BFE10:lI97|H3BFEB4
-3BFEB4:lI117|H3BFF58
-3BFF58:lI100|H3BFFF4
-3BFFF4:lI105|H3C0098
-3C0098:lI111|H3C013C
-3C013C:lI47|H3C01E0
-3C01E0:lI120|H3C0294
-3C0294:lI45|H3C0340
-3C0340:lI112|H3C03E4
-3C03E4:lI110|H3C0470
-3C0470:lI45|H3C0504
-3C0504:lI114|H3C05A0
-3C05A0:lI101|H3C0644
-3C0644:lI97|H3C06F0
-3C06F0:lI108|H3C079C
-3C079C:lI97|H3C0838
-3C0838:lI117|H3C08C4
-3C08C4:lI100|H3C0958
-3C0958:lI105|H3C09EC
-3C09EC:lI111|H3C0A88
-3C0A88:lI45|H3C0B2C
-3C0B2C:lI112|H3C0BD0
-3C0BD0:lI108|H3C0C84
-3C0C84:lI117|H3C0D38
-3C0D38:lI103|H3C0DEC
-3C0DEC:lI105|H3C0EA0
-3C0EA0:lI110|N
-3BFE08:lI114|H3BFEAC
-3BFEAC:lI112|H3BFF50
-3BFF50:lI109|N
-3BFD58:lH3BFE18|H3BFE24
-3BFE18:t2:H3BFEBC,H3BFEC4
-3BFEC4:lI97|H3BFF68
-3BFF68:lI117|H3C0004
-3C0004:lI100|H3C00A0
-3C00A0:lI105|H3C0144
-3C0144:lI111|H3C01E8
-3C01E8:lI47|H3C029C
-3C029C:lI120|H3C0348
-3C0348:lI45|H3C03EC
-3C03EC:lI112|H3C0478
-3C0478:lI110|H3C050C
-3C050C:lI45|H3C05A8
-3C05A8:lI114|H3C064C
-3C064C:lI101|H3C06F8
-3C06F8:lI97|H3C07A4
-3C07A4:lI108|H3C0840
-3C0840:lI97|H3C08CC
-3C08CC:lI117|H3C0960
-3C0960:lI100|H3C09F4
-3C09F4:lI105|H3C0A90
-3C0A90:lI111|N
-3BFEBC:lI114|H3BFF60
-3BFF60:lI97|H3BFFFC
-3BFFFC:lI109|N
-3BFE24:lH3BFECC|H3BFED8
-3BFECC:t2:H3BFF70,H3BFF78
-3BFF78:lI97|H3C0014
-3C0014:lI117|H3C00B0
-3C00B0:lI100|H3C014C
-3C014C:lI105|H3C01F0
-3C01F0:lI111|H3C02A4
-3C02A4:lI47|H3C0350
-3C0350:lI120|H3C03F4
-3C03F4:lI45|H3C0480
-3C0480:lI97|H3C0514
-3C0514:lI105|H3C05B0
-3C05B0:lI102|H3C0654
-3C0654:lI102|N
-3BFF70:lI97|H3C000C
-3C000C:lI105|H3C00A8
-3C00A8:lI102|N
-3BFED8:lH3BFF80|H3BFF8C
-3BFF80:t2:H3C001C,H3C0024
-3C0024:lI97|H3C00C0
-3C00C0:lI117|H3C015C
-3C015C:lI100|H3C0200
-3C0200:lI105|H3C02AC
-3C02AC:lI111|H3C0358
-3C0358:lI47|H3C03FC
-3C03FC:lI120|H3C0488
-3C0488:lI45|H3C051C
-3C051C:lI97|H3C05B8
-3C05B8:lI105|H3C065C
-3C065C:lI102|H3C0700
-3C0700:lI102|N
-3C001C:lI97|H3C00B8
-3C00B8:lI105|H3C0154
-3C0154:lI102|H3C01F8
-3C01F8:lI102|N
-3BFF8C:lH3C002C|H3C0038
-3C002C:t2:H3C00C8,H3C00D0
-3C00D0:lI97|H3C016C
-3C016C:lI117|H3C0210
-3C0210:lI100|H3C02BC
-3C02BC:lI105|H3C0360
-3C0360:lI111|H3C0404
-3C0404:lI47|H3C0490
-3C0490:lI120|H3C0524
-3C0524:lI45|H3C05C0
-3C05C0:lI97|H3C0664
-3C0664:lI105|H3C0708
-3C0708:lI102|H3C07AC
-3C07AC:lI102|N
-3C00C8:lI97|H3C0164
-3C0164:lI105|H3C0208
-3C0208:lI102|H3C02B4
-3C02B4:lI99|N
-3C0038:lH3C00D8|H3C00E4
-3C00D8:t2:H3C0174,H3C017C
-3C017C:lI97|H3C0220
-3C0220:lI117|H3C02CC
-3C02CC:lI100|H3C0370
-3C0370:lI105|H3C040C
-3C040C:lI111|H3C0498
-3C0498:lI47|H3C052C
-3C052C:lI109|H3C05C8
-3C05C8:lI112|H3C066C
-3C066C:lI101|H3C0710
-3C0710:lI103|N
-3C0174:lI109|H3C0218
-3C0218:lI112|H3C02C4
-3C02C4:lI103|H3C0368
-3C0368:lI97|N
-3C00E4:lH3C0184|H3C0190
-3C0184:t2:H3C0228,H3C0230
-3C0230:lI97|H3C02DC
-3C02DC:lI117|H3C0380
-3C0380:lI100|H3C0414
-3C0414:lI105|H3C04A0
-3C04A0:lI111|H3C0534
-3C0534:lI47|H3C05D0
-3C05D0:lI109|H3C0674
-3C0674:lI112|H3C0718
-3C0718:lI101|H3C07B4
-3C07B4:lI103|N
-3C0228:lI109|H3C02D4
-3C02D4:lI112|H3C0378
-3C0378:lI50|N
-3C0190:lH3C0238|H3C0244
-3C0238:t2:H3C02E4,H3C02EC
-3C02EC:lI97|H3C0390
-3C0390:lI117|H3C041C
-3C041C:lI100|H3C04A8
-3C04A8:lI105|H3C053C
-3C053C:lI111|H3C05D8
-3C05D8:lI47|H3C067C
-3C067C:lI98|H3C0720
-3C0720:lI97|H3C07BC
-3C07BC:lI115|H3C0848
-3C0848:lI105|H3C08D4
-3C08D4:lI99|N
-3C02E4:lI97|H3C0388
-3C0388:lI117|N
-3C0244:lH3C02F4|H3C0300
-3C02F4:t2:H3C0398,H3C03A0
-3C03A0:lI97|H3C042C
-3C042C:lI117|H3C04B8
-3C04B8:lI100|H3C0544
-3C0544:lI105|H3C05E0
-3C05E0:lI111|H3C0684
-3C0684:lI47|H3C0728
-3C0728:lI98|H3C07C4
-3C07C4:lI97|H3C0850
-3C0850:lI115|H3C08DC
-3C08DC:lI105|H3C0968
-3C0968:lI99|N
-3C0398:lI115|H3C0424
-3C0424:lI110|H3C04B0
-3C04B0:lI100|N
-3C0300:lH3C03A8|H3C03B4
-3C03A8:t2:H3C0434,H3C043C
-3C043C:lI97|H3C04C8
-3C04C8:lI112|H3C0554
-3C0554:lI112|H3C05E8
-3C05E8:lI108|H3C068C
-3C068C:lI105|H3C0730
-3C0730:lI99|H3C07CC
-3C07CC:lI97|H3C0858
-3C0858:lI116|H3C08E4
-3C08E4:lI105|H3C0970
-3C0970:lI111|H3C09FC
-3C09FC:lI110|H3C0A98
-3C0A98:lI47|H3C0B34
-3C0B34:lI122|H3C0BD8
-3C0BD8:lI105|H3C0C8C
-3C0C8C:lI112|N
-3C0434:lI122|H3C04C0
-3C04C0:lI105|H3C054C
-3C054C:lI112|N
-3C03B4:lH3C0444|H3C0450
-3C0444:t2:H3C04D0,H3C04D8
-3C04D8:lI97|H3C0564
-3C0564:lI112|H3C05F8
-3C05F8:lI112|H3C0694
-3C0694:lI108|H3C0738
-3C0738:lI105|H3C07D4
-3C07D4:lI99|H3C0860
-3C0860:lI97|H3C08EC
-3C08EC:lI116|H3C0978
-3C0978:lI105|H3C0A04
-3C0A04:lI111|H3C0AA0
-3C0AA0:lI110|H3C0B3C
-3C0B3C:lI47|H3C0BE0
-3C0BE0:lI120|H3C0C94
-3C0C94:lI45|H3C0D40
-3C0D40:lI119|H3C0DF4
-3C0DF4:lI97|H3C0EA8
-3C0EA8:lI105|H3C0F64
-3C0F64:lI115|H3C1030
-3C1030:lI45|H3C1104
-3C1104:lI115|H3C11D8
-3C11D8:lI111|H3C12A4
-3C12A4:lI117|H3C1378
-3C1378:lI114|H3C1454
-3C1454:lI99|H3C1538
-3C1538:lI101|N
-3C04D0:lI115|H3C055C
-3C055C:lI114|H3C05F0
-3C05F0:lI99|N
-3C0450:lH3C04E0|H3C04EC
-3C04E0:t2:H3C056C,H3C0574
-3C0574:lI97|H3C0608
-3C0608:lI112|H3C06A4
-3C06A4:lI112|H3C0748
-3C0748:lI108|H3C07E4
-3C07E4:lI105|H3C0868
-3C0868:lI99|H3C08F4
-3C08F4:lI97|H3C0980
-3C0980:lI116|H3C0A0C
-3C0A0C:lI105|H3C0AA8
-3C0AA8:lI111|H3C0B44
-3C0B44:lI110|H3C0BE8
-3C0BE8:lI47|H3C0C9C
-3C0C9C:lI120|H3C0D48
-3C0D48:lI45|H3C0DFC
-3C0DFC:lI117|H3C0EB0
-3C0EB0:lI115|H3C0F6C
-3C0F6C:lI116|H3C1038
-3C1038:lI97|H3C110C
-3C110C:lI114|N
-3C056C:lI117|H3C0600
-3C0600:lI115|H3C069C
-3C069C:lI116|H3C0740
-3C0740:lI97|H3C07DC
-3C07DC:lI114|N
-3C04EC:lH3C057C|H3C0588
-3C057C:t2:H3C0610,H3C0618
-3C0618:lI97|H3C06B4
-3C06B4:lI112|H3C0750
-3C0750:lI112|H3C07EC
-3C07EC:lI108|H3C0870
-3C0870:lI105|H3C08FC
-3C08FC:lI99|H3C0988
-3C0988:lI97|H3C0A14
-3C0A14:lI116|H3C0AB0
-3C0AB0:lI105|H3C0B4C
-3C0B4C:lI111|H3C0BF0
-3C0BF0:lI110|H3C0CA4
-3C0CA4:lI47|H3C0D50
-3C0D50:lI120|H3C0E04
-3C0E04:lI45|H3C0EB8
-3C0EB8:lI116|H3C0F74
-3C0F74:lI114|H3C1040
-3C1040:lI111|H3C1114
-3C1114:lI102|H3C11E0
-3C11E0:lI102|H3C12AC
-3C12AC:lI45|H3C1380
-3C1380:lI109|H3C145C
-3C145C:lI115|N
-3C0610:lI109|H3C06AC
-3C06AC:lI115|N
-3C0588:lH3C0620|H3C062C
-3C0620:t2:H3C06BC,H3C06C4
-3C06C4:lI97|H3C0760
-3C0760:lI112|H3C07F4
-3C07F4:lI112|H3C0878
-3C0878:lI108|H3C0904
-3C0904:lI105|H3C0990
-3C0990:lI99|H3C0A1C
-3C0A1C:lI97|H3C0AB8
-3C0AB8:lI116|H3C0B54
-3C0B54:lI105|H3C0BF8
-3C0BF8:lI111|H3C0CAC
-3C0CAC:lI110|H3C0D58
-3C0D58:lI47|H3C0E0C
-3C0E0C:lI120|H3C0EC0
-3C0EC0:lI45|H3C0F7C
-3C0F7C:lI116|H3C1048
-3C1048:lI114|H3C111C
-3C111C:lI111|H3C11E8
-3C11E8:lI102|H3C12B4
-3C12B4:lI102|H3C1388
-3C1388:lI45|H3C1464
-3C1464:lI109|H3C1540
-3C1540:lI101|N
-3C06BC:lI109|H3C0758
-3C0758:lI101|N
-3C062C:lH3C06CC|H3C06D8
-3C06CC:t2:H3C0768,H3C0770
-3C0770:lI97|H3C0804
-3C0804:lI112|H3C0888
-3C0888:lI112|H3C090C
-3C090C:lI108|H3C0998
-3C0998:lI105|H3C0A24
-3C0A24:lI99|H3C0AC0
-3C0AC0:lI97|H3C0B5C
-3C0B5C:lI116|H3C0C00
-3C0C00:lI105|H3C0CB4
-3C0CB4:lI111|H3C0D60
-3C0D60:lI110|H3C0E14
-3C0E14:lI47|H3C0EC8
-3C0EC8:lI120|H3C0F84
-3C0F84:lI45|H3C1050
-3C1050:lI116|H3C1124
-3C1124:lI114|H3C11F0
-3C11F0:lI111|H3C12BC
-3C12BC:lI102|H3C1390
-3C1390:lI102|H3C146C
-3C146C:lI45|H3C1548
-3C1548:lI109|H3C161C
-3C161C:lI97|H3C16F0
-3C16F0:lI110|N
-3C0768:lI109|H3C07FC
-3C07FC:lI97|H3C0880
-3C0880:lI110|N
-3C06D8:lH3C0778|H3C0784
-3C0778:t2:H3C080C,H3C0814
-3C0814:lI97|H3C0890
-3C0890:lI112|H3C0914
-3C0914:lI112|H3C09A0
-3C09A0:lI108|H3C0A2C
-3C0A2C:lI105|H3C0AC8
-3C0AC8:lI99|H3C0B64
-3C0B64:lI97|H3C0C08
-3C0C08:lI116|H3C0CBC
-3C0CBC:lI105|H3C0D68
-3C0D68:lI111|H3C0E1C
-3C0E1C:lI110|H3C0ED0
-3C0ED0:lI47|H3C0F8C
-3C0F8C:lI120|H3C1058
-3C1058:lI45|H3C112C
-3C112C:lI116|H3C11F8
-3C11F8:lI114|H3C12C4
-3C12C4:lI111|H3C1398
-3C1398:lI102|H3C1474
-3C1474:lI102|N
-3C080C:lI116|N
-3C0784:lH3C081C|H3C0828
-3C081C:t2:H3C0898,H3C08A0
-3C08A0:lI97|H3C0924
-3C0924:lI112|H3C09A8
-3C09A8:lI112|H3C0A34
-3C0A34:lI108|H3C0AD0
-3C0AD0:lI105|H3C0B6C
-3C0B6C:lI99|H3C0C10
-3C0C10:lI97|H3C0CC4
-3C0CC4:lI116|H3C0D70
-3C0D70:lI105|H3C0E24
-3C0E24:lI111|H3C0ED8
-3C0ED8:lI110|H3C0F94
-3C0F94:lI47|H3C1060
-3C1060:lI120|H3C1134
-3C1134:lI45|H3C1200
-3C1200:lI116|H3C12CC
-3C12CC:lI114|H3C13A0
-3C13A0:lI111|H3C147C
-3C147C:lI102|H3C1550
-3C1550:lI102|N
-3C0898:lI116|H3C091C
-3C091C:lI114|N
-3C0828:lH3C08A8|H3C08B4
-3C08A8:t2:H3C092C,H3C0934
-3C0934:lI97|H3C09B8
-3C09B8:lI112|H3C0A44
-3C0A44:lI112|H3C0AE0
-3C0AE0:lI108|H3C0B74
-3C0B74:lI105|H3C0C18
-3C0C18:lI99|H3C0CCC
-3C0CCC:lI97|H3C0D78
-3C0D78:lI116|H3C0E2C
-3C0E2C:lI105|H3C0EE0
-3C0EE0:lI111|H3C0F9C
-3C0F9C:lI110|H3C1068
-3C1068:lI47|H3C113C
-3C113C:lI120|H3C1208
-3C1208:lI45|H3C12D4
-3C12D4:lI116|H3C13A8
-3C13A8:lI114|H3C1484
-3C1484:lI111|H3C1558
-3C1558:lI102|H3C1624
-3C1624:lI102|N
-3C092C:lI114|H3C09B0
-3C09B0:lI111|H3C0A3C
-3C0A3C:lI102|H3C0AD8
-3C0AD8:lI102|N
-3C08B4:lH3C093C|H3C0948
-3C093C:t2:H3C09C0,H3C09C8
-3C09C8:lI97|H3C0A54
-3C0A54:lI112|H3C0AF0
-3C0AF0:lI112|H3C0B84
-3C0B84:lI108|H3C0C28
-3C0C28:lI105|H3C0CDC
-3C0CDC:lI99|H3C0D88
-3C0D88:lI97|H3C0E34
-3C0E34:lI116|H3C0EE8
-3C0EE8:lI105|H3C0FA4
-3C0FA4:lI111|H3C1070
-3C1070:lI110|H3C1144
-3C1144:lI47|H3C1210
-3C1210:lI120|H3C12DC
-3C12DC:lI45|H3C13B0
-3C13B0:lI116|H3C148C
-3C148C:lI101|H3C1560
-3C1560:lI120|H3C162C
-3C162C:lI105|H3C16F8
-3C16F8:lI110|H3C17BC
-3C17BC:lI102|H3C1880
-3C1880:lI111|N
-3C09C0:lI116|H3C0A4C
-3C0A4C:lI101|H3C0AE8
-3C0AE8:lI120|H3C0B7C
-3C0B7C:lI105|H3C0C20
-3C0C20:lI110|H3C0CD4
-3C0CD4:lI102|H3C0D80
-3C0D80:lI111|N
-3C0948:lH3C09D0|H3C09DC
-3C09D0:t2:H3C0A5C,H3C0A64
-3C0A64:lI97|H3C0B00
-3C0B00:lI112|H3C0B94
-3C0B94:lI112|H3C0C38
-3C0C38:lI108|H3C0CE4
-3C0CE4:lI105|H3C0D90
-3C0D90:lI99|H3C0E3C
-3C0E3C:lI97|H3C0EF0
-3C0EF0:lI116|H3C0FAC
-3C0FAC:lI105|H3C1078
-3C1078:lI111|H3C114C
-3C114C:lI110|H3C1218
-3C1218:lI47|H3C12E4
-3C12E4:lI120|H3C13B8
-3C13B8:lI45|H3C1494
-3C1494:lI116|H3C1568
-3C1568:lI101|H3C1634
-3C1634:lI120|H3C1700
-3C1700:lI105|H3C17C4
-3C17C4:lI110|H3C1888
-3C1888:lI102|H3C1944
-3C1944:lI111|N
-3C0A5C:lI116|H3C0AF8
-3C0AF8:lI101|H3C0B8C
-3C0B8C:lI120|H3C0C30
-3C0C30:lI105|N
-3C09DC:lH3C0A6C|H3C0A78
-3C0A6C:t2:H3C0B08,H3C0B10
-3C0B10:lI97|H3C0BA4
-3C0BA4:lI112|H3C0C48
-3C0C48:lI112|H3C0CEC
-3C0CEC:lI108|H3C0D98
-3C0D98:lI105|H3C0E44
-3C0E44:lI99|H3C0EF8
-3C0EF8:lI97|H3C0FB4
-3C0FB4:lI116|H3C1080
-3C1080:lI105|H3C1154
-3C1154:lI111|H3C1220
-3C1220:lI110|H3C12EC
-3C12EC:lI47|H3C13C0
-3C13C0:lI120|H3C149C
-3C149C:lI45|H3C1570
-3C1570:lI116|H3C163C
-3C163C:lI101|H3C1708
-3C1708:lI120|N
-3C0B08:lI116|H3C0B9C
-3C0B9C:lI101|H3C0C40
-3C0C40:lI120|N
-3C0A78:lH3C0B18|H3C0B24
-3C0B18:t2:H3C0BAC,H3C0BB4
-3C0BB4:lI97|H3C0C58
-3C0C58:lI112|H3C0CFC
-3C0CFC:lI112|H3C0DA0
-3C0DA0:lI108|H3C0E4C
-3C0E4C:lI105|H3C0F00
-3C0F00:lI99|H3C0FBC
-3C0FBC:lI97|H3C1088
-3C1088:lI116|H3C115C
-3C115C:lI105|H3C1228
-3C1228:lI111|H3C12F4
-3C12F4:lI110|H3C13C8
-3C13C8:lI47|H3C14A4
-3C14A4:lI120|H3C1578
-3C1578:lI45|H3C1644
-3C1644:lI116|H3C1710
-3C1710:lI99|H3C17CC
-3C17CC:lI108|N
-3C0BAC:lI116|H3C0C50
-3C0C50:lI99|H3C0CF4
-3C0CF4:lI108|N
-3C0B24:lH3C0BBC|H3C0BC8
-3C0BBC:t2:H3C0C60,H3C0C68
-3C0C68:lI97|H3C0D0C
-3C0D0C:lI112|H3C0DB0
-3C0DB0:lI112|H3C0E54
-3C0E54:lI108|H3C0F08
-3C0F08:lI105|H3C0FC4
-3C0FC4:lI99|H3C1090
-3C1090:lI97|H3C1164
-3C1164:lI116|H3C1230
-3C1230:lI105|H3C12FC
-3C12FC:lI111|H3C13D0
-3C13D0:lI110|H3C14AC
-3C14AC:lI47|H3C1580
-3C1580:lI120|H3C164C
-3C164C:lI45|H3C1718
-3C1718:lI116|H3C17D4
-3C17D4:lI97|H3C1890
-3C1890:lI114|N
-3C0C60:lI116|H3C0D04
-3C0D04:lI97|H3C0DA8
-3C0DA8:lI114|N
-3C0BC8:lH3C0C70|H3C0C7C
-3C0C70:t2:H3C0D14,H3C0D1C
-3C0D1C:lI97|H3C0DC0
-3C0DC0:lI112|H3C0E64
-3C0E64:lI112|H3C0F18
-3C0F18:lI108|H3C0FD4
-3C0FD4:lI105|H3C10A0
-3C10A0:lI99|H3C116C
-3C116C:lI97|H3C1238
-3C1238:lI116|H3C1304
-3C1304:lI105|H3C13D8
-3C13D8:lI111|H3C14B4
-3C14B4:lI110|H3C1588
-3C1588:lI47|H3C1654
-3C1654:lI120|H3C1720
-3C1720:lI45|H3C17DC
-3C17DC:lI115|H3C1898
-3C1898:lI118|H3C194C
-3C194C:lI52|H3C1A00
-3C1A00:lI99|H3C1AB4
-3C1AB4:lI114|H3C1B78
-3C1B78:lI99|N
-3C0D14:lI115|H3C0DB8
-3C0DB8:lI118|H3C0E5C
-3C0E5C:lI52|H3C0F10
-3C0F10:lI99|H3C0FCC
-3C0FCC:lI114|H3C1098
-3C1098:lI99|N
-3C0C7C:lH3C0D24|H3C0D30
-3C0D24:t2:H3C0DC8,H3C0DD0
-3C0DD0:lI97|H3C0E74
-3C0E74:lI112|H3C0F28
-3C0F28:lI112|H3C0FE4
-3C0FE4:lI108|H3C10B0
-3C10B0:lI105|H3C117C
-3C117C:lI99|H3C1248
-3C1248:lI97|H3C130C
-3C130C:lI116|H3C13E0
-3C13E0:lI105|H3C14BC
-3C14BC:lI111|H3C1590
-3C1590:lI110|H3C165C
-3C165C:lI47|H3C1728
-3C1728:lI120|H3C17E4
-3C17E4:lI45|H3C18A0
-3C18A0:lI115|H3C1954
-3C1954:lI118|H3C1A08
-3C1A08:lI52|H3C1ABC
-3C1ABC:lI99|H3C1B80
-3C1B80:lI112|H3C1C4C
-3C1C4C:lI105|H3C1D10
-3C1D10:lI111|N
-3C0DC8:lI115|H3C0E6C
-3C0E6C:lI118|H3C0F20
-3C0F20:lI52|H3C0FDC
-3C0FDC:lI99|H3C10A8
-3C10A8:lI112|H3C1174
-3C1174:lI105|H3C1240
-3C1240:lI111|N
-3C0D30:lH3C0DD8|H3C0DE4
-3C0DD8:t2:H3C0E7C,H3C0E84
-3C0E84:lI97|H3C0F38
-3C0F38:lI112|H3C0FF4
-3C0FF4:lI112|H3C10B8
-3C10B8:lI108|H3C1184
-3C1184:lI105|H3C1250
-3C1250:lI99|H3C1314
-3C1314:lI97|H3C13E8
-3C13E8:lI116|H3C14C4
-3C14C4:lI105|H3C1598
-3C1598:lI111|H3C1664
-3C1664:lI110|H3C1730
-3C1730:lI47|H3C17EC
-3C17EC:lI120|H3C18A8
-3C18A8:lI45|H3C195C
-3C195C:lI115|H3C1A10
-3C1A10:lI116|H3C1AC4
-3C1AC4:lI117|H3C1B88
-3C1B88:lI102|H3C1C54
-3C1C54:lI102|H3C1D18
-3C1D18:lI105|H3C1DD4
-3C1DD4:lI116|N
-3C0E7C:lI115|H3C0F30
-3C0F30:lI105|H3C0FEC
-3C0FEC:lI116|N
-3C0DE4:lH3C0E8C|H3C0E98
-3C0E8C:t2:H3C0F40,H3C0F48
-3C0F48:lI97|H3C1004
-3C1004:lI112|H3C10C8
-3C10C8:lI112|H3C1194
-3C1194:lI108|H3C1258
-3C1258:lI105|H3C131C
-3C131C:lI99|H3C13F0
-3C13F0:lI97|H3C14CC
-3C14CC:lI116|H3C15A0
-3C15A0:lI105|H3C166C
-3C166C:lI111|H3C1738
-3C1738:lI110|H3C17F4
-3C17F4:lI47|H3C18B0
-3C18B0:lI120|H3C1964
-3C1964:lI45|H3C1A18
-3C1A18:lI115|H3C1ACC
-3C1ACC:lI104|H3C1B90
-3C1B90:lI97|H3C1C5C
-3C1C5C:lI114|N
-3C0F40:lI115|H3C0FFC
-3C0FFC:lI104|H3C10C0
-3C10C0:lI97|H3C118C
-3C118C:lI114|N
-3C0E98:lH3C0F50|H3C0F5C
-3C0F50:t2:H3C100C,H3C1014
-3C1014:lI97|H3C10D8
-3C10D8:lI112|H3C119C
-3C119C:lI112|H3C1260
-3C1260:lI108|H3C1324
-3C1324:lI105|H3C13F8
-3C13F8:lI99|H3C14D4
-3C14D4:lI97|H3C15A8
-3C15A8:lI116|H3C1674
-3C1674:lI105|H3C1740
-3C1740:lI111|H3C17FC
-3C17FC:lI110|H3C18B8
-3C18B8:lI47|H3C196C
-3C196C:lI120|H3C1A20
-3C1A20:lI45|H3C1AD4
-3C1AD4:lI115|H3C1B98
-3C1B98:lI104|N
-3C100C:lI115|H3C10D0
-3C10D0:lI104|N
-3C0F5C:lH3C101C|H3C1028
-3C101C:t2:H3C10E0,H3C10E8
-3C10E8:lI97|H3C11AC
-3C11AC:lI112|H3C1268
-3C1268:lI112|H3C132C
-3C132C:lI108|H3C1400
-3C1400:lI105|H3C14DC
-3C14DC:lI99|H3C15B0
-3C15B0:lI97|H3C167C
-3C167C:lI116|H3C1748
-3C1748:lI105|H3C1804
-3C1804:lI111|H3C18C0
-3C18C0:lI110|H3C1974
-3C1974:lI47|H3C1A28
-3C1A28:lI120|H3C1ADC
-3C1ADC:lI45|H3C1BA0
-3C1BA0:lI110|H3C1C64
-3C1C64:lI101|H3C1D20
-3C1D20:lI116|H3C1DDC
-3C1DDC:lI99|H3C1E98
-3C1E98:lI100|H3C1F5C
-3C1F5C:lI102|N
-3C10E0:lI110|H3C11A4
-3C11A4:lI99|N
-3C1028:lH3C10F0|H3C10FC
-3C10F0:t2:H3C11B4,H3C11BC
-3C11BC:lI97|H3C1278
-3C1278:lI112|H3C133C
-3C133C:lI112|H3C1408
-3C1408:lI108|H3C14E4
-3C14E4:lI105|H3C15B8
-3C15B8:lI99|H3C1684
-3C1684:lI97|H3C1750
-3C1750:lI116|H3C180C
-3C180C:lI105|H3C18C8
-3C18C8:lI111|H3C197C
-3C197C:lI110|H3C1A30
-3C1A30:lI47|H3C1AE4
-3C1AE4:lI120|H3C1BA8
-3C1BA8:lI45|H3C1C6C
-3C1C6C:lI110|H3C1D28
-3C1D28:lI101|H3C1DE4
-3C1DE4:lI116|H3C1EA0
-3C1EA0:lI99|H3C1F64
-3C1F64:lI100|H3C2018
-3C2018:lI102|N
-3C11B4:lI99|H3C1270
-3C1270:lI100|H3C1334
-3C1334:lI102|N
-3C10FC:lH3C11C4|H3C11D0
-3C11C4:t2:H3C1280,H3C1288
-3C1288:lI97|H3C134C
-3C134C:lI112|H3C1418
-3C1418:lI112|H3C14EC
-3C14EC:lI108|H3C15C0
-3C15C0:lI105|H3C168C
-3C168C:lI99|H3C1758
-3C1758:lI97|H3C1814
-3C1814:lI116|H3C18D0
-3C18D0:lI105|H3C1984
-3C1984:lI111|H3C1A38
-3C1A38:lI110|H3C1AEC
-3C1AEC:lI47|H3C1BB0
-3C1BB0:lI120|H3C1C74
-3C1C74:lI45|H3C1D30
-3C1D30:lI109|H3C1DEC
-3C1DEC:lI105|H3C1EA8
-3C1EA8:lI102|N
-3C1280:lI109|H3C1344
-3C1344:lI105|H3C1410
-3C1410:lI102|N
-3C11D0:lH3C1290|H3C129C
-3C1290:t2:H3C1354,H3C135C
-3C135C:lI97|H3C1428
-3C1428:lI112|H3C14FC
-3C14FC:lI112|H3C15D0
-3C15D0:lI108|H3C169C
-3C169C:lI105|H3C1760
-3C1760:lI99|H3C181C
-3C181C:lI97|H3C18D8
-3C18D8:lI116|H3C198C
-3C198C:lI105|H3C1A40
-3C1A40:lI111|H3C1AF4
-3C1AF4:lI110|H3C1BB8
-3C1BB8:lI47|H3C1C7C
-3C1C7C:lI120|H3C1D38
-3C1D38:lI45|H3C1DF4
-3C1DF4:lI108|H3C1EB0
-3C1EB0:lI97|H3C1F6C
-3C1F6C:lI116|H3C2020
-3C2020:lI101|H3C20DC
-3C20DC:lI120|N
-3C1354:lI108|H3C1420
-3C1420:lI97|H3C14F4
-3C14F4:lI116|H3C15C8
-3C15C8:lI101|H3C1694
-3C1694:lI120|N
-3C129C:lH3C1364|H3C1370
-3C1364:t2:H3C1430,H3C1438
-3C1438:lI97|H3C150C
-3C150C:lI112|H3C15E0
-3C15E0:lI112|H3C16A4
-3C16A4:lI108|H3C1768
-3C1768:lI105|H3C1824
-3C1824:lI99|H3C18E0
-3C18E0:lI97|H3C1994
-3C1994:lI116|H3C1A48
-3C1A48:lI105|H3C1AFC
-3C1AFC:lI111|H3C1BC0
-3C1BC0:lI110|H3C1C84
-3C1C84:lI47|H3C1D40
-3C1D40:lI120|H3C1DFC
-3C1DFC:lI45|H3C1EB8
-3C1EB8:lI107|H3C1F74
-3C1F74:lI111|H3C2028
-3C2028:lI97|H3C20E4
-3C20E4:lI110|N
-3C1430:lI115|H3C1504
-3C1504:lI107|H3C15D8
-3C15D8:lI112|N
-3C1370:lH3C1440|H3C144C
-3C1440:t2:H3C1514,H3C151C
-3C151C:lI97|H3C15F0
-3C15F0:lI112|H3C16B4
-3C16B4:lI112|H3C1770
-3C1770:lI108|H3C182C
-3C182C:lI105|H3C18E8
-3C18E8:lI99|H3C199C
-3C199C:lI97|H3C1A50
-3C1A50:lI116|H3C1B04
-3C1B04:lI105|H3C1BC8
-3C1BC8:lI111|H3C1C8C
-3C1C8C:lI110|H3C1D48
-3C1D48:lI47|H3C1E04
-3C1E04:lI120|H3C1EC0
-3C1EC0:lI45|H3C1F7C
-3C1F7C:lI107|H3C2030
-3C2030:lI111|H3C20EC
-3C20EC:lI97|H3C21A0
-3C21A0:lI110|N
-3C1514:lI115|H3C15E8
-3C15E8:lI107|H3C16AC
-3C16AC:lI100|N
-3C144C:lH3C1524|H3C1530
-3C1524:t2:H3C15F8,H3C1600
-3C1600:lI97|H3C16C4
-3C16C4:lI112|H3C1780
-3C1780:lI112|H3C1834
-3C1834:lI108|H3C18F0
-3C18F0:lI105|H3C19A4
-3C19A4:lI99|H3C1A58
-3C1A58:lI97|H3C1B0C
-3C1B0C:lI116|H3C1BD0
-3C1BD0:lI105|H3C1C94
-3C1C94:lI111|H3C1D50
-3C1D50:lI110|H3C1E0C
-3C1E0C:lI47|H3C1EC8
-3C1EC8:lI120|H3C1F84
-3C1F84:lI45|H3C2038
-3C2038:lI107|H3C20F4
-3C20F4:lI111|H3C21A8
-3C21A8:lI97|H3C225C
-3C225C:lI110|N
-3C15F8:lI115|H3C16BC
-3C16BC:lI107|H3C1778
-3C1778:lI116|N
-3C1530:lH3C1608|H3C1614
-3C1608:t2:H3C16CC,H3C16D4
-3C16D4:lI97|H3C1790
-3C1790:lI112|H3C1844
-3C1844:lI112|H3C18F8
-3C18F8:lI108|H3C19AC
-3C19AC:lI105|H3C1A60
-3C1A60:lI99|H3C1B14
-3C1B14:lI97|H3C1BD8
-3C1BD8:lI116|H3C1C9C
-3C1C9C:lI105|H3C1D58
-3C1D58:lI111|H3C1E14
-3C1E14:lI110|H3C1ED0
-3C1ED0:lI47|H3C1F8C
-3C1F8C:lI120|H3C2040
-3C2040:lI45|H3C20FC
-3C20FC:lI107|H3C21B0
-3C21B0:lI111|H3C2264
-3C2264:lI97|H3C2320
-3C2320:lI110|N
-3C16CC:lI115|H3C1788
-3C1788:lI107|H3C183C
-3C183C:lI109|N
-3C1614:lH3C16DC|H3C16E8
-3C16DC:t2:H3C1798,H3C17A0
-3C17A0:lI97|H3C1854
-3C1854:lI112|H3C1908
-3C1908:lI112|H3C19B4
-3C19B4:lI108|H3C1A68
-3C1A68:lI105|H3C1B1C
-3C1B1C:lI99|H3C1BE0
-3C1BE0:lI97|H3C1CA4
-3C1CA4:lI116|H3C1D60
-3C1D60:lI105|H3C1E1C
-3C1E1C:lI111|H3C1ED8
-3C1ED8:lI110|H3C1F94
-3C1F94:lI47|H3C2048
-3C2048:lI120|H3C2104
-3C2104:lI45|H3C21B8
-3C21B8:lI104|H3C226C
-3C226C:lI116|H3C2328
-3C2328:lI116|H3C23E4
-3C23E4:lI112|H3C2498
-3C2498:lI100|H3C2554
-3C2554:lI45|H3C2610
-3C2610:lI99|H3C26D4
-3C26D4:lI103|H3C2790
-3C2790:lI105|N
-3C1798:lI99|H3C184C
-3C184C:lI103|H3C1900
-3C1900:lI105|N
-3C16E8:lH3C17A8|H3C17B4
-3C17A8:t2:H3C185C,H3C1864
-3C1864:lI97|H3C1918
-3C1918:lI112|H3C19C4
-3C19C4:lI112|H3C1A70
-3C1A70:lI108|H3C1B24
-3C1B24:lI105|H3C1BE8
-3C1BE8:lI99|H3C1CAC
-3C1CAC:lI97|H3C1D68
-3C1D68:lI116|H3C1E24
-3C1E24:lI105|H3C1EE0
-3C1EE0:lI111|H3C1F9C
-3C1F9C:lI110|H3C2050
-3C2050:lI47|H3C210C
-3C210C:lI120|H3C21C0
-3C21C0:lI45|H3C2274
-3C2274:lI104|H3C2330
-3C2330:lI100|H3C23EC
-3C23EC:lI102|N
-3C185C:lI104|H3C1910
-3C1910:lI100|H3C19BC
-3C19BC:lI102|N
-3C17B4:lH3C186C|H3C1878
-3C186C:t2:H3C1920,H3C1928
-3C1928:lI97|H3C19D4
-3C19D4:lI112|H3C1A78
-3C1A78:lI112|H3C1B2C
-3C1B2C:lI108|H3C1BF0
-3C1BF0:lI105|H3C1CB4
-3C1CB4:lI99|H3C1D70
-3C1D70:lI97|H3C1E2C
-3C1E2C:lI116|H3C1EE8
-3C1EE8:lI105|H3C1FA4
-3C1FA4:lI111|H3C2058
-3C2058:lI110|H3C2114
-3C2114:lI47|H3C21C8
-3C21C8:lI120|H3C227C
-3C227C:lI45|H3C2338
-3C2338:lI103|H3C23F4
-3C23F4:lI122|H3C24A0
-3C24A0:lI105|H3C255C
-3C255C:lI112|N
-3C1920:lI103|H3C19CC
-3C19CC:lI122|N
-3C1878:lH3C1930|H3C193C
-3C1930:t2:H3C19DC,H3C19E4
-3C19E4:lI97|H3C1A88
-3C1A88:lI112|H3C1B3C
-3C1B3C:lI112|H3C1C00
-3C1C00:lI108|H3C1CBC
-3C1CBC:lI105|H3C1D78
-3C1D78:lI99|H3C1E34
-3C1E34:lI97|H3C1EF0
-3C1EF0:lI116|H3C1FAC
-3C1FAC:lI105|H3C2060
-3C2060:lI111|H3C211C
-3C211C:lI110|H3C21D0
-3C21D0:lI47|H3C2284
-3C2284:lI120|H3C2340
-3C2340:lI45|H3C23FC
-3C23FC:lI103|H3C24A8
-3C24A8:lI116|H3C2564
-3C2564:lI97|H3C2618
-3C2618:lI114|N
-3C19DC:lI103|H3C1A80
-3C1A80:lI116|H3C1B34
-3C1B34:lI97|H3C1BF8
-3C1BF8:lI114|N
-3C193C:lH3C19EC|H3C19F8
-3C19EC:t2:H3C1A90,H3C1A98
-3C1A98:lI97|H3C1B4C
-3C1B4C:lI112|H3C1C10
-3C1C10:lI112|H3C1CC4
-3C1CC4:lI108|H3C1D80
-3C1D80:lI105|H3C1E3C
-3C1E3C:lI99|H3C1EF8
-3C1EF8:lI97|H3C1FB4
-3C1FB4:lI116|H3C2068
-3C2068:lI105|H3C2124
-3C2124:lI111|H3C21D8
-3C21D8:lI110|H3C228C
-3C228C:lI47|H3C2348
-3C2348:lI120|H3C2404
-3C2404:lI45|H3C24B0
-3C24B0:lI100|H3C256C
-3C256C:lI118|H3C2620
-3C2620:lI105|N
-3C1A90:lI100|H3C1B44
-3C1B44:lI118|H3C1C08
-3C1C08:lI105|N
-3C19F8:lH3C1AA0|H3C1AAC
-3C1AA0:t2:H3C1B54,H3C1B5C
-3C1B5C:lI97|H3C1C20
-3C1C20:lI112|H3C1CD4
-3C1CD4:lI112|H3C1D88
-3C1D88:lI108|H3C1E44
-3C1E44:lI105|H3C1F00
-3C1F00:lI99|H3C1FBC
-3C1FBC:lI97|H3C2070
-3C2070:lI116|H3C212C
-3C212C:lI105|H3C21E0
-3C21E0:lI111|H3C2294
-3C2294:lI110|H3C2350
-3C2350:lI47|H3C240C
-3C240C:lI120|H3C24B8
-3C24B8:lI45|H3C2574
-3C2574:lI100|H3C2628
-3C2628:lI105|H3C26DC
-3C26DC:lI114|H3C2798
-3C2798:lI101|H3C2854
-3C2854:lI99|H3C2918
-3C2918:lI116|H3C29E4
-3C29E4:lI111|H3C2AB0
-3C2AB0:lI114|N
-3C1B54:lI100|H3C1C18
-3C1C18:lI99|H3C1CCC
-3C1CCC:lI114|N
-3C1AAC:lH3C1B64|H3C1B70
-3C1B64:t2:H3C1C28,H3C1C30
-3C1C30:lI97|H3C1CE4
-3C1CE4:lI112|H3C1D98
-3C1D98:lI112|H3C1E4C
-3C1E4C:lI108|H3C1F08
-3C1F08:lI105|H3C1FC4
-3C1FC4:lI99|H3C2078
-3C2078:lI97|H3C2134
-3C2134:lI116|H3C21E8
-3C21E8:lI105|H3C229C
-3C229C:lI111|H3C2358
-3C2358:lI110|H3C2414
-3C2414:lI47|H3C24C0
-3C24C0:lI120|H3C257C
-3C257C:lI45|H3C2630
-3C2630:lI100|H3C26E4
-3C26E4:lI105|H3C27A0
-3C27A0:lI114|H3C285C
-3C285C:lI101|H3C2920
-3C2920:lI99|H3C29EC
-3C29EC:lI116|H3C2AB8
-3C2AB8:lI111|H3C2B84
-3C2B84:lI114|N
-3C1C28:lI100|H3C1CDC
-3C1CDC:lI105|H3C1D90
-3C1D90:lI114|N
-3C1B70:lH3C1C38|H3C1C44
-3C1C38:t2:H3C1CEC,H3C1CF4
-3C1CF4:lI97|H3C1DA8
-3C1DA8:lI112|H3C1E5C
-3C1E5C:lI112|H3C1F10
-3C1F10:lI108|H3C1FCC
-3C1FCC:lI105|H3C2080
-3C2080:lI99|H3C213C
-3C213C:lI97|H3C21F0
-3C21F0:lI116|H3C22A4
-3C22A4:lI105|H3C2360
-3C2360:lI111|H3C241C
-3C241C:lI110|H3C24C8
-3C24C8:lI47|H3C2584
-3C2584:lI120|H3C2638
-3C2638:lI45|H3C26EC
-3C26EC:lI100|H3C27A8
-3C27A8:lI105|H3C2864
-3C2864:lI114|H3C2928
-3C2928:lI101|H3C29F4
-3C29F4:lI99|H3C2AC0
-3C2AC0:lI116|H3C2B8C
-3C2B8C:lI111|H3C2C48
-3C2C48:lI114|N
-3C1CEC:lI100|H3C1DA0
-3C1DA0:lI120|H3C1E54
-3C1E54:lI114|N
-3C1C44:lH3C1CFC|H3C1D08
-3C1CFC:t2:H3C1DB0,H3C1DB8
-3C1DB8:lI97|H3C1E6C
-3C1E6C:lI112|H3C1F20
-3C1F20:lI112|H3C1FD4
-3C1FD4:lI108|H3C2088
-3C2088:lI105|H3C2144
-3C2144:lI99|H3C21F8
-3C21F8:lI97|H3C22AC
-3C22AC:lI116|H3C2368
-3C2368:lI105|H3C2424
-3C2424:lI111|H3C24D0
-3C24D0:lI110|H3C258C
-3C258C:lI47|H3C2640
-3C2640:lI120|H3C26F4
-3C26F4:lI45|H3C27B0
-3C27B0:lI99|H3C286C
-3C286C:lI115|H3C2930
-3C2930:lI104|N
-3C1DB0:lI99|H3C1E64
-3C1E64:lI115|H3C1F18
-3C1F18:lI104|N
-3C1D08:lH3C1DC0|H3C1DCC
-3C1DC0:t2:H3C1E74,H3C1E7C
-3C1E7C:lI97|H3C1F30
-3C1F30:lI112|H3C1FE4
-3C1FE4:lI112|H3C2098
-3C2098:lI108|H3C214C
-3C214C:lI105|H3C2200
-3C2200:lI99|H3C22B4
-3C22B4:lI97|H3C2370
-3C2370:lI116|H3C242C
-3C242C:lI105|H3C24D8
-3C24D8:lI111|H3C2594
-3C2594:lI110|H3C2648
-3C2648:lI47|H3C26FC
-3C26FC:lI120|H3C27B8
-3C27B8:lI45|H3C2874
-3C2874:lI99|H3C2938
-3C2938:lI112|H3C29FC
-3C29FC:lI105|H3C2AC8
-3C2AC8:lI111|N
-3C1E74:lI99|H3C1F28
-3C1F28:lI112|H3C1FDC
-3C1FDC:lI105|H3C2090
-3C2090:lI111|N
-3C1DCC:lH3C1E84|H3C1E90
-3C1E84:t2:H3C1F38,H3C1F40
-3C1F40:lI97|H3C1FEC
-3C1FEC:lI112|H3C20A0
-3C20A0:lI112|H3C2154
-3C2154:lI108|H3C2208
-3C2208:lI105|H3C22BC
-3C22BC:lI99|H3C2378
-3C2378:lI97|H3C2434
-3C2434:lI116|H3C24E0
-3C24E0:lI105|H3C259C
-3C259C:lI111|H3C2650
-3C2650:lI110|H3C2704
-3C2704:lI47|H3C27C0
-3C27C0:lI120|H3C287C
-3C287C:lI45|H3C2940
-3C2940:lI99|H3C2A04
-3C2A04:lI111|H3C2AD0
-3C2AD0:lI109|H3C2B94
-3C2B94:lI112|H3C2C50
-3C2C50:lI114|H3C2D00
-3C2D00:lI101|H3C2DA8
-3C2DA8:lI115|H3C2E40
-3C2E40:lI115|N
-3C1F38:lI90|N
-3C1E90:lH3C1F48|H3C1F54
-3C1F48:t2:H3C1FF4,H3C1FFC
-3C1FFC:lI97|H3C20B0
-3C20B0:lI112|H3C2164
-3C2164:lI112|H3C2210
-3C2210:lI108|H3C22C4
-3C22C4:lI105|H3C2380
-3C2380:lI99|H3C243C
-3C243C:lI97|H3C24E8
-3C24E8:lI116|H3C25A4
-3C25A4:lI105|H3C2658
-3C2658:lI111|H3C270C
-3C270C:lI110|H3C27C8
-3C27C8:lI47|H3C2884
-3C2884:lI120|H3C2948
-3C2948:lI45|H3C2A0C
-3C2A0C:lI99|H3C2AD8
-3C2AD8:lI100|H3C2B9C
-3C2B9C:lI108|H3C2C58
-3C2C58:lI105|H3C2D08
-3C2D08:lI110|H3C2DB0
-3C2DB0:lI107|N
-3C1FF4:lI118|H3C20A8
-3C20A8:lI99|H3C215C
-3C215C:lI100|N
-3C1F54:lH3C2004|H3C2010
-3C2004:t2:H3C20B8,H3C20C0
-3C20C0:lI97|H3C2174
-3C2174:lI112|H3C2220
-3C2220:lI112|H3C22D4
-3C22D4:lI108|H3C2390
-3C2390:lI105|H3C2444
-3C2444:lI99|H3C24F0
-3C24F0:lI97|H3C25AC
-3C25AC:lI116|H3C2660
-3C2660:lI105|H3C2714
-3C2714:lI111|H3C27D0
-3C27D0:lI110|H3C288C
-3C288C:lI47|H3C2950
-3C2950:lI120|H3C2A14
-3C2A14:lI45|H3C2AE0
-3C2AE0:lI98|H3C2BA4
-3C2BA4:lI99|H3C2C60
-3C2C60:lI112|H3C2D10
-3C2D10:lI105|H3C2DB8
-3C2DB8:lI111|N
-3C20B8:lI98|H3C216C
-3C216C:lI99|H3C2218
-3C2218:lI112|H3C22CC
-3C22CC:lI105|H3C2388
-3C2388:lI111|N
-3C2010:lH3C20C8|H3C20D4
-3C20C8:t2:H3C217C,H3C2184
-3C2184:lI97|H3C2230
-3C2230:lI112|H3C22E4
-3C22E4:lI112|H3C2398
-3C2398:lI108|H3C244C
-3C244C:lI105|H3C24F8
-3C24F8:lI99|H3C25B4
-3C25B4:lI97|H3C2668
-3C2668:lI116|H3C271C
-3C271C:lI105|H3C27D8
-3C27D8:lI111|H3C2894
-3C2894:lI110|H3C2958
-3C2958:lI47|H3C2A1C
-3C2A1C:lI114|H3C2AE8
-3C2AE8:lI116|H3C2BAC
-3C2BAC:lI102|N
-3C217C:lI114|H3C2228
-3C2228:lI116|H3C22DC
-3C22DC:lI102|N
-3C20D4:lH3C218C|H3C2198
-3C218C:t2:H3C2238,H3C2240
-3C2240:lI97|H3C22F4
-3C22F4:lI112|H3C23A8
-3C23A8:lI112|H3C2454
-3C2454:lI108|H3C2500
-3C2500:lI105|H3C25BC
-3C25BC:lI99|H3C2670
-3C2670:lI97|H3C2724
-3C2724:lI116|H3C27E0
-3C27E0:lI105|H3C289C
-3C289C:lI111|H3C2960
-3C2960:lI110|H3C2A24
-3C2A24:lI47|H3C2AF0
-3C2AF0:lI112|H3C2BB4
-3C2BB4:lI111|H3C2C68
-3C2C68:lI119|H3C2D18
-3C2D18:lI101|H3C2DC0
-3C2DC0:lI114|H3C2E48
-3C2E48:lI112|H3C2EC0
-3C2EC0:lI111|H3C2F38
-3C2F38:lI105|H3C2FA8
-3C2FA8:lI110|H3C3010
-3C3010:lI116|N
-3C2238:lI112|H3C22EC
-3C22EC:lI112|H3C23A0
-3C23A0:lI116|N
-3C2198:lH3C2248|H3C2254
-3C2248:t2:H3C22FC,H3C2304
-3C2304:lI97|H3C23B8
-3C23B8:lI112|H3C245C
-3C245C:lI112|H3C2508
-3C2508:lI108|H3C25C4
-3C25C4:lI105|H3C2678
-3C2678:lI99|H3C272C
-3C272C:lI97|H3C27E8
-3C27E8:lI116|H3C28A4
-3C28A4:lI105|H3C2968
-3C2968:lI111|H3C2A2C
-3C2A2C:lI110|H3C2AF8
-3C2AF8:lI47|H3C2BBC
-3C2BBC:lI112|H3C2C70
-3C2C70:lI111|H3C2D20
-3C2D20:lI115|H3C2DC8
-3C2DC8:lI116|H3C2E50
-3C2E50:lI115|H3C2EC8
-3C2EC8:lI99|H3C2F40
-3C2F40:lI114|H3C2FB0
-3C2FB0:lI105|H3C3018
-3C3018:lI112|H3C3078
-3C3078:lI116|N
-3C22FC:lI97|H3C23B0
-3C23B0:lI105|N
-3C2254:lH3C230C|H3C2318
-3C230C:t2:H3C23C0,H3C23C8
-3C23C8:lI97|H3C246C
-3C246C:lI112|H3C2518
-3C2518:lI112|H3C25CC
-3C25CC:lI108|H3C2680
-3C2680:lI105|H3C2734
-3C2734:lI99|H3C27F0
-3C27F0:lI97|H3C28AC
-3C28AC:lI116|H3C2970
-3C2970:lI105|H3C2A34
-3C2A34:lI111|H3C2B00
-3C2B00:lI110|H3C2BC4
-3C2BC4:lI47|H3C2C78
-3C2C78:lI112|H3C2D28
-3C2D28:lI111|H3C2DD0
-3C2DD0:lI115|H3C2E58
-3C2E58:lI116|H3C2ED0
-3C2ED0:lI115|H3C2F48
-3C2F48:lI99|H3C2FB8
-3C2FB8:lI114|H3C3020
-3C3020:lI105|H3C3080
-3C3080:lI112|H3C30D8
-3C30D8:lI116|N
-3C23C0:lI101|H3C2464
-3C2464:lI112|H3C2510
-3C2510:lI115|N
-3C2318:lH3C23D0|H3C23DC
-3C23D0:t2:H3C2474,H3C247C
-3C247C:lI97|H3C2528
-3C2528:lI112|H3C25D4
-3C25D4:lI112|H3C2688
-3C2688:lI108|H3C273C
-3C273C:lI105|H3C27F8
-3C27F8:lI99|H3C28B4
-3C28B4:lI97|H3C2978
-3C2978:lI116|H3C2A3C
-3C2A3C:lI105|H3C2B08
-3C2B08:lI111|H3C2BCC
-3C2BCC:lI110|H3C2C80
-3C2C80:lI47|H3C2D30
-3C2D30:lI112|H3C2DD8
-3C2DD8:lI111|H3C2E60
-3C2E60:lI115|H3C2ED8
-3C2ED8:lI116|H3C2F50
-3C2F50:lI115|H3C2FC0
-3C2FC0:lI99|H3C3028
-3C3028:lI114|H3C3088
-3C3088:lI105|H3C30E0
-3C30E0:lI112|H3C3130
-3C3130:lI116|N
-3C2474:lI112|H3C2520
-3C2520:lI115|N
-3C23DC:lH3C2484|H3C2490
-3C2484:t2:H3C2530,H3C2538
-3C2538:lI97|H3C25E4
-3C25E4:lI112|H3C2698
-3C2698:lI112|H3C2744
-3C2744:lI108|H3C2800
-3C2800:lI105|H3C28BC
-3C28BC:lI99|H3C2980
-3C2980:lI97|H3C2A44
-3C2A44:lI116|H3C2B10
-3C2B10:lI105|H3C2BD4
-3C2BD4:lI111|H3C2C88
-3C2C88:lI110|H3C2D38
-3C2D38:lI47|H3C2DE0
-3C2DE0:lI112|H3C2E68
-3C2E68:lI100|H3C2EE0
-3C2EE0:lI102|N
-3C2530:lI112|H3C25DC
-3C25DC:lI100|H3C2690
-3C2690:lI102|N
-3C2490:lH3C2540|H3C254C
-3C2540:t2:H3C25EC,H3C25F4
-3C25F4:lI97|H3C26A8
-3C26A8:lI112|H3C2754
-3C2754:lI112|H3C2808
-3C2808:lI108|H3C28C4
-3C28C4:lI105|H3C2988
-3C2988:lI99|H3C2A4C
-3C2A4C:lI97|H3C2B18
-3C2B18:lI116|H3C2BDC
-3C2BDC:lI105|H3C2C90
-3C2C90:lI111|H3C2D40
-3C2D40:lI110|H3C2DE8
-3C2DE8:lI47|H3C2E70
-3C2E70:lI111|H3C2EE8
-3C2EE8:lI100|H3C2F58
-3C2F58:lI97|N
-3C25EC:lI111|H3C26A0
-3C26A0:lI100|H3C274C
-3C274C:lI97|N
-3C254C:lH3C25FC|H3C2608
-3C25FC:t2:H3C26B0,H3C26B8
-3C26B8:lI97|H3C2764
-3C2764:lI112|H3C2818
-3C2818:lI112|H3C28CC
-3C28CC:lI108|H3C2990
-3C2990:lI105|H3C2A54
-3C2A54:lI99|H3C2B20
-3C2B20:lI97|H3C2BE4
-3C2BE4:lI116|H3C2C98
-3C2C98:lI105|H3C2D48
-3C2D48:lI111|H3C2DF0
-3C2DF0:lI110|H3C2E78
-3C2E78:lI47|H3C2EF0
-3C2EF0:lI111|H3C2F60
-3C2F60:lI99|H3C2FC8
-3C2FC8:lI116|H3C3030
-3C3030:lI101|H3C3090
-3C3090:lI116|H3C30E8
-3C30E8:lI45|H3C3138
-3C3138:lI115|H3C3180
-3C3180:lI116|H3C31C8
-3C31C8:lI114|H3C3210
-3C3210:lI101|H3C3258
-3C3258:lI97|H3C32A0
-3C32A0:lI109|N
-3C26B0:lI98|H3C275C
-3C275C:lI105|H3C2810
-3C2810:lI110|N
-3C2608:lH3C26C0|H3C26CC
-3C26C0:t2:H3C276C,H3C2774
-3C2774:lI97|H3C2828
-3C2828:lI112|H3C28DC
-3C28DC:lI112|H3C2998
-3C2998:lI108|H3C2A5C
-3C2A5C:lI105|H3C2B28
-3C2B28:lI99|H3C2BEC
-3C2BEC:lI97|H3C2CA0
-3C2CA0:lI116|H3C2D50
-3C2D50:lI105|H3C2DF8
-3C2DF8:lI111|H3C2E80
-3C2E80:lI110|H3C2EF8
-3C2EF8:lI47|H3C2F68
-3C2F68:lI111|H3C2FD0
-3C2FD0:lI99|H3C3038
-3C3038:lI116|H3C3098
-3C3098:lI101|H3C30F0
-3C30F0:lI116|H3C3140
-3C3140:lI45|H3C3188
-3C3188:lI115|H3C31D0
-3C31D0:lI116|H3C3218
-3C3218:lI114|H3C3260
-3C3260:lI101|H3C32A8
-3C32A8:lI97|H3C32E8
-3C32E8:lI109|N
-3C276C:lI100|H3C2820
-3C2820:lI109|H3C28D4
-3C28D4:lI115|N
-3C26CC:lH3C277C|H3C2788
-3C277C:t2:H3C2830,H3C2838
-3C2838:lI97|H3C28EC
-3C28EC:lI112|H3C29A8
-3C29A8:lI112|H3C2A64
-3C2A64:lI108|H3C2B30
-3C2B30:lI105|H3C2BF4
-3C2BF4:lI99|H3C2CA8
-3C2CA8:lI97|H3C2D58
-3C2D58:lI116|H3C2E00
-3C2E00:lI105|H3C2E88
-3C2E88:lI111|H3C2F00
-3C2F00:lI110|H3C2F70
-3C2F70:lI47|H3C2FD8
-3C2FD8:lI111|H3C3040
-3C3040:lI99|H3C30A0
-3C30A0:lI116|H3C30F8
-3C30F8:lI101|H3C3148
-3C3148:lI116|H3C3190
-3C3190:lI45|H3C31D8
-3C31D8:lI115|H3C3220
-3C3220:lI116|H3C3268
-3C3268:lI114|H3C32B0
-3C32B0:lI101|H3C32F0
-3C32F0:lI97|H3C3320
-3C3320:lI109|N
-3C2830:lI108|H3C28E4
-3C28E4:lI104|H3C29A0
-3C29A0:lI97|N
-3C2788:lH3C2840|H3C284C
-3C2840:t2:H3C28F4,H3C28FC
-3C28FC:lI97|H3C29B8
-3C29B8:lI112|H3C2A74
-3C2A74:lI112|H3C2B38
-3C2B38:lI108|H3C2BFC
-3C2BFC:lI105|H3C2CB0
-3C2CB0:lI99|H3C2D60
-3C2D60:lI97|H3C2E08
-3C2E08:lI116|H3C2E90
-3C2E90:lI105|H3C2F08
-3C2F08:lI111|H3C2F78
-3C2F78:lI110|H3C2FE0
-3C2FE0:lI47|H3C3048
-3C3048:lI111|H3C30A8
-3C30A8:lI99|H3C3100
-3C3100:lI116|H3C3150
-3C3150:lI101|H3C3198
-3C3198:lI116|H3C31E0
-3C31E0:lI45|H3C3228
-3C3228:lI115|H3C3270
-3C3270:lI116|H3C32B8
-3C32B8:lI114|H3C32F8
-3C32F8:lI101|H3C3328
-3C3328:lI97|H3C3350
-3C3350:lI109|N
-3C28F4:lI108|H3C29B0
-3C29B0:lI122|H3C2A6C
-3C2A6C:lI104|N
-3C284C:lH3C2904|H3C2910
-3C2904:t2:H3C29C0,H3C29C8
-3C29C8:lI97|H3C2A84
-3C2A84:lI112|H3C2B48
-3C2B48:lI112|H3C2C04
-3C2C04:lI108|H3C2CB8
-3C2CB8:lI105|H3C2D68
-3C2D68:lI99|H3C2E10
-3C2E10:lI97|H3C2E98
-3C2E98:lI116|H3C2F10
-3C2F10:lI105|H3C2F80
-3C2F80:lI111|H3C2FE8
-3C2FE8:lI110|H3C3050
-3C3050:lI47|H3C30B0
-3C30B0:lI111|H3C3108
-3C3108:lI99|H3C3158
-3C3158:lI116|H3C31A0
-3C31A0:lI101|H3C31E8
-3C31E8:lI116|H3C3230
-3C3230:lI45|H3C3278
-3C3278:lI115|H3C32C0
-3C32C0:lI116|H3C3300
-3C3300:lI114|H3C3330
-3C3330:lI101|H3C3358
-3C3358:lI97|H3C3378
-3C3378:lI109|N
-3C29C0:lI101|H3C2A7C
-3C2A7C:lI120|H3C2B40
-3C2B40:lI101|N
-3C2910:lH3C29D0|H3C29DC
-3C29D0:t2:H3C2A8C,H3C2A94
-3C2A94:lI97|H3C2B58
-3C2B58:lI112|H3C2C14
-3C2C14:lI112|H3C2CC8
-3C2CC8:lI108|H3C2D78
-3C2D78:lI105|H3C2E18
-3C2E18:lI99|H3C2EA0
-3C2EA0:lI97|H3C2F18
-3C2F18:lI116|H3C2F88
-3C2F88:lI105|H3C2FF0
-3C2FF0:lI111|H3C3058
-3C3058:lI110|H3C30B8
-3C30B8:lI47|H3C3110
-3C3110:lI111|H3C3160
-3C3160:lI99|H3C31A8
-3C31A8:lI116|H3C31F0
-3C31F0:lI101|H3C3238
-3C3238:lI116|H3C3280
-3C3280:lI45|H3C32C8
-3C32C8:lI115|H3C3308
-3C3308:lI116|H3C3338
-3C3338:lI114|H3C3360
-3C3360:lI101|H3C3380
-3C3380:lI97|H3C3398
-3C3398:lI109|N
-3C2A8C:lI99|H3C2B50
-3C2B50:lI108|H3C2C0C
-3C2C0C:lI97|H3C2CC0
-3C2CC0:lI115|H3C2D70
-3C2D70:lI115|N
-3C29DC:lH3C2A9C|H3C2AA8
-3C2A9C:t2:H3C2B60,H3C2B68
-3C2B68:lI97|H3C2C24
-3C2C24:lI112|H3C2CD8
-3C2CD8:lI112|H3C2D80
-3C2D80:lI108|H3C2E20
-3C2E20:lI105|H3C2EA8
-3C2EA8:lI99|H3C2F20
-3C2F20:lI97|H3C2F90
-3C2F90:lI116|H3C2FF8
-3C2FF8:lI105|H3C3060
-3C3060:lI111|H3C30C0
-3C30C0:lI110|H3C3118
-3C3118:lI47|H3C3168
-3C3168:lI109|H3C31B0
-3C31B0:lI115|H3C31F8
-3C31F8:lI119|H3C3240
-3C3240:lI111|H3C3288
-3C3288:lI114|H3C32D0
-3C32D0:lI100|N
-3C2B60:lI100|H3C2C1C
-3C2C1C:lI111|H3C2CD0
-3C2CD0:lI99|N
-3C2AA8:lH3C2B70|H3C2B7C
-3C2B70:t2:H3C2C2C,H3C2C34
-3C2C34:lI97|H3C2CE8
-3C2CE8:lI112|H3C2D90
-3C2D90:lI112|H3C2E28
-3C2E28:lI108|H3C2EB0
-3C2EB0:lI105|H3C2F28
-3C2F28:lI99|H3C2F98
-3C2F98:lI97|H3C3000
-3C3000:lI116|H3C3068
-3C3068:lI105|H3C30C8
-3C30C8:lI111|H3C3120
-3C3120:lI110|H3C3170
-3C3170:lI47|H3C31B8
-3C31B8:lI109|H3C3200
-3C3200:lI97|H3C3248
-3C3248:lI99|H3C3290
-3C3290:lI45|H3C32D8
-3C32D8:lI99|H3C3310
-3C3310:lI111|H3C3340
-3C3340:lI109|H3C3368
-3C3368:lI112|H3C3388
-3C3388:lI97|H3C33A0
-3C33A0:lI99|H3C33B0
-3C33B0:lI116|H3C33C0
-3C33C0:lI112|H3C33D0
-3C33D0:lI114|H3C33E0
-3C33E0:lI111|N
-3C2C2C:lI99|H3C2CE0
-3C2CE0:lI112|H3C2D88
-3C2D88:lI116|N
-3C2B7C:lH3C2C3C|N
-3C2C3C:t2:H3C2CF0,H3C2CF8
-3C2CF8:lI97|H3C2DA0
-3C2DA0:lI112|H3C2E38
-3C2E38:lI112|H3C2EB8
-3C2EB8:lI108|H3C2F30
-3C2F30:lI105|H3C2FA0
-3C2FA0:lI99|H3C3008
-3C3008:lI97|H3C3070
-3C3070:lI116|H3C30D0
-3C30D0:lI105|H3C3128
-3C3128:lI111|H3C3178
-3C3178:lI110|H3C31C0
-3C31C0:lI47|H3C3208
-3C3208:lI109|H3C3250
-3C3250:lI97|H3C3298
-3C3298:lI99|H3C32E0
-3C32E0:lI45|H3C3318
-3C3318:lI98|H3C3348
-3C3348:lI105|H3C3370
-3C3370:lI110|H3C3390
-3C3390:lI104|H3C33A8
-3C33A8:lI101|H3C33B8
-3C33B8:lI120|H3C33C8
-3C33C8:lI52|H3C33D8
-3C33D8:lI48|N
-3C2CF0:lI104|H3C2D98
-3C2D98:lI113|H3C2E30
-3C2E30:lI120|N
-3BDBCC:lH3BDA78|H3BDA8C
-3BDA78:t2:A4:port,I8888
-3BDA8C:lH3BDB04|H3BDB10
-3BDB04:t2:AC:bind_address,H3BDB64
-3BDB64:t4:I127,I0,I0,I1
-3BDB10:lH3BDB78|H3BDB84
-3BDB78:t2:AB:server_name,H3BDBD4
-3BDBD4:lI108|H3BDC24
-3BDC24:lI111|H3BDC88
-3BDC88:lI99|H3BDCF0
-3BDCF0:lI97|H3BDD70
-3BDD70:lI108|H3BDDF8
-3BDDF8:lI104|H3BDE90
-3BDE90:lI111|H3BDF40
-3BDF40:lI115|H3BDFFC
-3BDFFC:lI116|N
-3BDB84:lH3BDBDC|H3BDBE8
-3BDBDC:t2:AE:max_header_siz,I1024
-3BDBE8:lH3BDC2C|H3BDC38
-3BDC2C:t2:A11:max_header_action,A8:reply414
-3BDC38:lH3BDC90|H3BDC9C
-3BDC90:t2:A8:com_type,A7:ip_comm
-3BDC9C:lH3BDCF8|H3BDD04
-3BDCF8:t2:A7:modules,H3BDD78
-3BDD78:lA9:mod_alias|H3BDE00
-3BDE00:lA8:mod_auth|H3BDE98
-3BDE98:lA7:mod_esi|H3BDF48
-3BDF48:lAB:mod_actions|H3BE004
-3BE004:lA7:mod_cgi|H3BE0D0
-3BE0D0:lAB:mod_include|H3BE1A4
-3BE1A4:lA7:mod_dir|H3BE288
-3BE288:lA7:mod_get|H3BE378
-3BE378:lA8:mod_head|H3BE47C
-3BE47C:lA7:mod_log|H3BE580
-3BE580:lAC:mod_disk_log|N
-3BDD04:lH3BDD80|H3BDD8C
-3BDD80:t2:AF:directory_index,H3BDE08
-3BDE08:lH3BDEA0|N
-3BDEA0:lI105|H3BDF50
-3BDF50:lI110|H3BE00C
-3BE00C:lI100|H3BE0D8
-3BE0D8:lI101|H3BE1AC
-3BE1AC:lI120|H3BE290
-3BE290:lI46|H3BE380
-3BE380:lI104|H3BE484
-3BE484:lI116|H3BE588
-3BE588:lI109|H3BE68C
-3BE68C:lI108|N
-3BDD8C:lH3BDE10|H3BDE1C
-3BDE10:t2:AC:default_type,H3BDEA8
-3BDEA8:lI116|H3BDF58
-3BDF58:lI101|H3BE014
-3BE014:lI120|H3BE0E0
-3BE0E0:lI116|H3BE1B4
-3BE1B4:lI47|H3BE298
-3BE298:lI112|H3BE388
-3BE388:lI108|H3BE48C
-3BE48C:lI97|H3BE590
-3BE590:lI105|H3BE694
-3BE694:lI110|N
-3BDE1C:lH3BDEB0|H3BDEBC
-3BDEB0:t2:A10:erl_script_alias,H3BDF60
-3BDF60:t2:H3BE01C,H3BE024
-3BE024:lH3BE0F0|N
-3BE0F0:lI119|H3BE1C4
-3BE1C4:lI101|H3BE2A8
-3BE2A8:lI98|H3BE398
-3BE398:lI116|H3BE49C
-3BE49C:lI111|H3BE5A0
-3BE5A0:lI111|H3BE6A4
-3BE6A4:lI108|N
-3BE01C:lI47|H3BE0E8
-3BE0E8:lI119|H3BE1BC
-3BE1BC:lI101|H3BE2A0
-3BE2A0:lI98|H3BE390
-3BE390:lI116|H3BE494
-3BE494:lI111|H3BE598
-3BE598:lI111|H3BE69C
-3BE69C:lI108|N
-3BDEBC:lH3BDF6C|H3BDF78
-3BDF6C:t2:A5:alias,H3BE02C
-3BE02C:t2:H3BE0F8,H3BE100
-3BE100:lI47|H3BE1D4
-3BE1D4:lI99|H3BE2B8
-3BE2B8:lI108|H3BE3A8
-3BE3A8:lI101|H3BE4AC
-3BE4AC:lI97|H3BE5B0
-3BE5B0:lI114|H3BE6B4
-3BE6B4:lI99|H3BE7A8
-3BE7A8:lI97|H3BE894
-3BE894:lI115|H3BE980
-3BE980:lI101|H3BEA74
-3BEA74:lI47|H3BEB68
-3BEB68:lI111|H3BEC54
-3BEC54:lI116|H3BED40
-3BED40:lI112|H3BEE2C
-3BEE2C:lI47|H3BEF00
-3BEF00:lI101|H3BEFD4
-3BEFD4:lI114|H3BF0A0
-3BF0A0:lI116|H3BF174
-3BF174:lI115|H3BF238
-3BF238:lI47|H3BF2FC
-3BF2FC:lI108|H3BF3A8
-3BF3A8:lI105|H3BF45C
-3BF45C:lI98|H3BF518
-3BF518:lI47|H3BF5DC
-3BF5DC:lI111|H3BF6B0
-3BF6B0:lI98|H3BF784
-3BF784:lI115|H3BF858
-3BF858:lI101|H3BF93C
-3BF93C:lI114|H3BFA18
-3BFA18:lI118|H3BFAF4
-3BFAF4:lI101|H3BFBD0
-3BFBD0:lI114|H3BFC9C
-3BFC9C:lI47|H3BFD60
-3BFD60:lI112|H3BFE2C
-3BFE2C:lI114|H3BFEE0
-3BFEE0:lI105|H3BFF94
-3BFF94:lI118|H3C0040
-3C0040:lI47|H3C00EC
-3C00EC:lI99|H3C0198
-3C0198:lI114|H3C024C
-3C024C:lI97|H3C0308
-3C0308:lI115|H3C03BC
-3C03BC:lI104|H3C0458
-3C0458:lI100|H3C04F4
-3C04F4:lI117|H3C0590
-3C0590:lI109|H3C0634
-3C0634:lI112|H3C06E0
-3C06E0:lI95|H3C078C
-3C078C:lI118|H3C0830
-3C0830:lI105|H3C08BC
-3C08BC:lI101|H3C0950
-3C0950:lI119|H3C09E4
-3C09E4:lI101|H3C0A80
-3C0A80:lI114|N
-3BE0F8:lI47|H3BE1CC
-3BE1CC:lI99|H3BE2B0
-3BE2B0:lI114|H3BE3A0
-3BE3A0:lI97|H3BE4A4
-3BE4A4:lI115|H3BE5A8
-3BE5A8:lI104|H3BE6AC
-3BE6AC:lI100|H3BE7A0
-3BE7A0:lI117|H3BE88C
-3BE88C:lI109|H3BE978
-3BE978:lI112|H3BEA6C
-3BEA6C:lI95|H3BEB60
-3BEB60:lI118|H3BEC4C
-3BEC4C:lI105|H3BED38
-3BED38:lI101|H3BEE24
-3BEE24:lI119|H3BEEF8
-3BEEF8:lI101|H3BEFCC
-3BEFCC:lI114|N
-3BDF78:lH3BE038|H3BE044
-3BE038:t2:A5:alias,H3BE108
-3BE108:t2:H3BE1DC,H3BE1E4
-3BE1E4:lI47|H3BE2C8
-3BE2C8:lI99|H3BE3B8
-3BE3B8:lI108|H3BE4BC
-3BE4BC:lI101|H3BE5C0
-3BE5C0:lI97|H3BE6C4
-3BE6C4:lI114|H3BE7B8
-3BE7B8:lI99|H3BE8A4
-3BE8A4:lI97|H3BE990
-3BE990:lI115|H3BEA84
-3BEA84:lI101|H3BEB78
-3BEB78:lI47|H3BEC64
-3BEC64:lI111|H3BED50
-3BED50:lI116|H3BEE3C
-3BEE3C:lI112|H3BEF10
-3BEF10:lI47|H3BEFE4
-3BEFE4:lI101|H3BF0B0
-3BF0B0:lI114|H3BF184
-3BF184:lI116|H3BF248
-3BF248:lI115|H3BF304
-3BF304:lI47|H3BF3B0
-3BF3B0:lI101|H3BF464
-3BF464:lI114|H3BF520
-3BF520:lI116|H3BF5E4
-3BF5E4:lI115|H3BF6B8
-3BF6B8:lI47|H3BF78C
-3BF78C:lI100|H3BF860
-3BF860:lI111|H3BF944
-3BF944:lI99|H3BFA20
-3BFA20:lI47|H3BFAFC
-3BFAFC:lI104|H3BFBD8
-3BFBD8:lI116|H3BFCA4
-3BFCA4:lI109|H3BFD68
-3BFD68:lI108|N
-3BE1DC:lI47|H3BE2C0
-3BE2C0:lI99|H3BE3B0
-3BE3B0:lI114|H3BE4B4
-3BE4B4:lI97|H3BE5B8
-3BE5B8:lI115|H3BE6BC
-3BE6BC:lI104|H3BE7B0
-3BE7B0:lI100|H3BE89C
-3BE89C:lI117|H3BE988
-3BE988:lI109|H3BEA7C
-3BEA7C:lI112|H3BEB70
-3BEB70:lI95|H3BEC5C
-3BEC5C:lI101|H3BED48
-3BED48:lI114|H3BEE34
-3BEE34:lI116|H3BEF08
-3BEF08:lI115|H3BEFDC
-3BEFDC:lI95|H3BF0A8
-3BF0A8:lI100|H3BF17C
-3BF17C:lI111|H3BF240
-3BF240:lI99|N
-3BE044:lH3BE114|H3BE120
-3BE114:t2:A5:alias,H3BE1EC
-3BE1EC:t2:H3BE2D0,H3BE2D8
-3BE2D8:lI47|H3BE3C8
-3BE3C8:lI99|H3BE4CC
-3BE4CC:lI108|H3BE5D0
-3BE5D0:lI101|H3BE6D4
-3BE6D4:lI97|H3BE7C8
-3BE7C8:lI114|H3BE8B4
-3BE8B4:lI99|H3BE9A0
-3BE9A0:lI97|H3BEA94
-3BEA94:lI115|H3BEB88
-3BEB88:lI101|H3BEC74
-3BEC74:lI47|H3BED60
-3BED60:lI111|H3BEE4C
-3BEE4C:lI116|H3BEF20
-3BEF20:lI112|H3BEFEC
-3BEFEC:lI47|H3BF0B8
-3BF0B8:lI101|H3BF18C
-3BF18C:lI114|H3BF250
-3BF250:lI116|H3BF30C
-3BF30C:lI115|H3BF3B8
-3BF3B8:lI47|H3BF46C
-3BF46C:lI108|H3BF528
-3BF528:lI105|H3BF5EC
-3BF5EC:lI98|H3BF6C0
-3BF6C0:lI47|H3BF794
-3BF794:lI111|H3BF868
-3BF868:lI98|H3BF94C
-3BF94C:lI115|H3BFA28
-3BFA28:lI101|H3BFB04
-3BFB04:lI114|H3BFBE0
-3BFBE0:lI118|H3BFCAC
-3BFCAC:lI101|H3BFD70
-3BFD70:lI114|H3BFE34
-3BFE34:lI47|H3BFEE8
-3BFEE8:lI100|H3BFF9C
-3BFF9C:lI111|H3C0048
-3C0048:lI99|H3C00F4
-3C00F4:lI47|H3C01A0
-3C01A0:lI104|H3C0254
-3C0254:lI116|H3C0310
-3C0310:lI109|H3C03C4
-3C03C4:lI108|N
-3BE2D0:lI47|H3BE3C0
-3BE3C0:lI99|H3BE4C4
-3BE4C4:lI114|H3BE5C8
-3BE5C8:lI97|H3BE6CC
-3BE6CC:lI115|H3BE7C0
-3BE7C0:lI104|H3BE8AC
-3BE8AC:lI100|H3BE998
-3BE998:lI117|H3BEA8C
-3BEA8C:lI109|H3BEB80
-3BEB80:lI112|H3BEC6C
-3BEC6C:lI95|H3BED58
-3BED58:lI100|H3BEE44
-3BEE44:lI111|H3BEF18
-3BEF18:lI99|N
-3BE120:lH3BE1F8|N
-3BE1F8:t2:A10:erl_script_alias,H3BE2E0
-3BE2E0:t2:H3BE3D0,H3BE3D8
-3BE3D8:lH3BE4DC|N
-3BE4DC:lI99|H3BE5E0
-3BE5E0:lI114|H3BE6E4
-3BE6E4:lI97|H3BE7D8
-3BE7D8:lI115|H3BE8C4
-3BE8C4:lI104|H3BE9B0
-3BE9B0:lI100|H3BEAA4
-3BEAA4:lI117|H3BEB90
-3BEB90:lI109|H3BEC7C
-3BEC7C:lI112|H3BED68
-3BED68:lI95|H3BEE54
-3BEE54:lI118|H3BEF28
-3BEF28:lI105|H3BEFF4
-3BEFF4:lI101|H3BF0C0
-3BF0C0:lI119|H3BF194
-3BF194:lI101|H3BF258
-3BF258:lI114|N
-3BE3D0:lI47|H3BE4D4
-3BE4D4:lI99|H3BE5D8
-3BE5D8:lI100|H3BE6DC
-3BE6DC:lI118|H3BE7D0
-3BE7D0:lI95|H3BE8BC
-3BE8BC:lI101|H3BE9A8
-3BE9A8:lI114|H3BEA9C
-3BEA9C:lI108|N
-3BDE2C:lH3BDA9C|H3BDECC
-3BDA9C:t4:I127,I0,I0,I1
-3BDECC:lI8888|H3BDF88
-3BDF88:lN|N
-3BDD1C:lN|N
-3BDA50:t2:AD:$initial_call,H3BDAB8
-3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
-3BDA5C:t2:A9:verbosity,A7:silence
-3BDAC8:t2:AE:auth_verbosity,A7:silence
-3BDB28:t2:A12:security_verbosity,A7:silence
-3BDB9C:t2:A12:acceptor_verbosity,A7:silence
-3BDC00:t2:AA:$ancestors,H3BDC5C
-3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
-3BDCB4:lA8:web_tool|H3BDD24
-3BDD24:lP<0.27.0>|N
-3BDADC:t2:A19:request_handler_verbosity,A7:silence
-3BDB3C:t2:A5:sname,A3:man
-=proc_dictionary:<0.47.0>
-H36E688
-H36E694
-H36E6A0
-H36E6AC
-=proc_stack:<0.47.0>
-36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
-y0:I5
-y1:p<0.161>
-y2:p<0.141>
-36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
-y0:N
-36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y0:N
-36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y1:P<0.46.0>
-y2:A7:ip_comm
-y3:p<0.141>
-y4:A1B:httpd_conf__127_0_0_1__8888
-36c558:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:AE:httpd_acceptor
-y2:A8:acceptor
-y3:H36E6C8
-=proc_heap:<0.47.0>
-36E6C8:lP<0.44.0>|H36E724
-36E724:lP<0.46.0>|H36E748
-36E748:lA7:ip_comm|H36E760
-36E760:lH36E6D0|H36E778
-36E6D0:t4:I127,I0,I0,I1
-36E778:lI8888|H36E788
-36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
-36E798:lA7:silence|N
-36E688:t2:AD:$initial_call,H36E6F0
-36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
-36E694:t2:A9:verbosity,A7:silence
-36E6A0:t2:AA:$ancestors,H36E700
-36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
-36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
-36E750:lA8:web_tool|H36E768
-36E768:lP<0.27.0>|N
-36E6AC:t2:A5:sname,A3:acc
-=proc_dictionary:<0.48.0>
-H385E48
-H385E54
-=proc_stack:<0.48.0>
-3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A10:crashdump_viewer
-y3:H3AB280
-y4:A17:crashdump_viewer_server
-y5:P<0.41.0>
-3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H385E90
-=proc_heap:<0.48.0>
-3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
-385E90:lAA:gen_server|H385ED8
-385ED8:lP<0.41.0>|H385F10
-385F10:lP<0.41.0>|H385F58
-385F58:lH385FA8|H385FB4
-385FA8:t2:A5:local,A17:crashdump_viewer_server
-385FB4:lA10:crashdump_viewer|H386014
-386014:lN|H38606C
-38606C:lN|N
-385E48:t2:AD:$initial_call,H385EB0
-385EB0:t3:A3:gen,A7:init_it,H385E90
-385E54:t2:AA:$ancestors,H385EC0
-385EC0:lA6:websup|H385F08
-385F08:lA8:web_tool|H385F50
-385F50:lP<0.27.0>|N
-=proc_stack:<0.49.0>
-36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
-y0:H369E10
-y1:P<0.22.0>
-36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
-y0:N
-36a128:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.49.0>
-369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
-=atoms
-http_cache_control
-copy_word
-drop_line
-copy_line
-write_rest_of_line
-drop_to_empty_line
-read_to_empty_line_reverse
-set_pos
-read_line_backwards
-jumped
-jump_to_empty_line_or_eof
-get_pos
-translate_atoms
-translate_fun
-translate_funs
-translate_loaded_modules2
-translate_loaded_modules_totals
-translate_loaded_modules
-translate_links
-get_all_creations
-translate_node_info2
-translate_node_info
-translate_dist_info2
-translate_dist_info
-get_msg
-translate_timers
-translate_ets
-translate_ets_tables
-do_translate_sl_alloc_r7_r8
-translate_sl_alloc_r7_r8
-translate_sl_alloc_line
-do_translate_sl_alloc
-translate_sl_alloc
-translate_memory_and_allocated_area_r9b
-translate_allocated_areas
-translate_internal_table_line
-translate_index_table
-translate_hash_table
-translate_internal_tables
-translate_ports
-write_last_calls
-write_msg_q_stuff
-translate_process
-translate_processes
-erts_vsn
-translate_summary
-'Send'
-erl_crash_dump
-internal_tables
-mods
-zombies
-http_content_length
-http_content_type
-'-procs_summary_body/5-fun-0-'
-'-expanded_memory_body/2-fun-0-'
-'-expanded_memory_body/2-fun-1-'
-'-expanded_memory_body/2-fun-2-'
-'-ports_body/3-fun-0-'
-'-ets_tables_body/4-fun-0-'
-'-internal_ets_tables_table/1-fun-0-'
-'-timers_body/3-fun-0-'
-'-make_nodes_table/2-fun-0-'
-'-loaded_mods_body/5-fun-0-'
-'-funs_body/3-fun-0-'
-'-memory_body/3-fun-0-'
-'-allocated_areas_body/3-fun-0-'
-'-allocator_info_body/3-fun-0-'
-'-allocator_info_body/3-fun-1-'
-'-allocator_info_body/3-fun-2-'
-'-hash_tables_body/3-fun-0-'
-'-index_tables_body/3-fun-0-'
-enter_write_file
-replace_insrt
-'$insrt'
-special
-initial
-pretty_format
-heading
-to_gt_noreverse
-to_gt
-href_proc_port
-br
-font
-h2
-h1
-img
-href
-pre
-em
-td
-th
-tr
-frame
-frameset
-html_header
-index_tables_table
-index_tables_body
-hash_tables_table
-hash_tables_body
-allocator_info_body
-allocated_areas_table
-allocated_areas_body
-memory_table
-memory_body
-atoms_body
-funs_table
-funs_body
-loaded_mod_details_body
-loaded_mods_table
-loaded_mods_body
-format_extra_info
-format_links_and_monitors
-to_end_par
-break_lines_creation
-maybe_refcount
-nodes_table_row
-nodes_table_heading
-make_nodes_table
-nodes_body
-timers_table
-timers_body
-internal_ets_tables_table1
-internal_ets_tables_table
-ets_tables_table
-ets_tables_body
-ports_table
-ports_body
-expanded_binary_body
-dict_table
-stackdump_table
-msgq_table
-expanded_memory_body
-link_to_read_memory
-display_or_link_to_expand
-proc_details_body
-procs_summary_table
-summary_table_head
-procs_summary_body
-pretty_info_body
-info_body
-error_body
-general_info_body
-format_title
-format_picture
-format_item
-arentState
-format_items
-menu_body
-filename_body
-start_page_frameset
-get_translated_filename_frame_body
-read_file_frame_body
-welcome_body
-http_
-http_te
-http_connection
-http_if_modified_since
-http_referer
-http_accept_encoding
-http_accept
-http_host
-http_user_agent
-'-create_header1/3-fun-0-'
-send_response_old
-transform
-mapfilter
-create_header1
-accept_ranges
-cache_control
-pragma
-trailer
-etag
-retry_after
-content_encoding
-content_language
-content_location
-content_MD5
-content_range
-expires
-transfer_encoding
-get_connection
-bad_args
-send_header
-get_body
-traverse_modules
-formatAbsoluteURI
-removeServer
-formatRequestUri
-tagup_header
-verify_request
-split_lines
-find_content_type
-maybe_remove_nl
-get_persistens
-df
-dm
-dy
-year_day_to_date2
-year_day_to_date
-dty
-day_to_year
-valid_date1
-valid_date
-universal_time_to_local_time
-time_to_seconds
-seconds_to_time
-seconds_to_daystime
-now_to_local_time
-now_to_universal_time
-now_to_datetime
-last_day_of_the_month1
-last_day_of_the_month
-is_leap_year1
-is_leap_year
-gregorian_seconds_to_datetime
-gregorian_days_to_date
-date_to_gregorian_days
-'-parse_trailers/1-lc^0/1-0-'
-'-read_trailer_end/4-fun-0-'
-'-read_trailer_end/4-lc^0/1-0-'
-'-remove_newline/1-fun-0-'
-remove_newline
-close_sleep
-unknown_size
-send_read_status
-handle_read_error
-transfer_coding
-expect
-getTrailerField
-read_trailer
-get_chunk_size
-read_chunked_entity_body
-read_chunk_trailer
-read_trailer_end
-parse_trailers
-parse_chunk_trailer
-body_to_big
-parse_chunked_entity_body
-parse_chunk_size
-read_chunked_entity
-etimedout
-body_too_long
-unknown_coding
-chunked
-read_entity_body2
-no_expect_header
-http_1_0_expect_header
-read_entity_body
-header_too_long
-hsplit \ No newline at end of file
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms
deleted file mode 100644
index 78e301a6c7..0000000000
--- a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms
+++ /dev/null
@@ -1,13085 +0,0 @@
-=erl_crash_dump:0.1
-Wed Apr 21 13:22:44 2004
-Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
-System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
-Compiled: Thu Dec 18 14:07:45 2003
-Atoms: 5614
-=memory
-total: 653336887
-processes: 1768396
-processes_used: 1765460
-system: 651568491
-atom: 244837
-atom_used: 237116
-binary: 648618369
-code: 2158413
-ets: 225620
-=hash_table:atom_tab
-size: 4813
-used: 3304
-objs: 5614
-depth: 7
-=index_table:atom_tab
-size: 5700
-limit: 1048576
-used: 5614
-rate: 100
-=hash_table:module_code
-size: 97
-used: 69
-objs: 107
-depth: 5
-=index_table:module_code
-size: 110
-limit: 65536
-used: 107
-rate: 10
-=hash_table:export_list
-size: 2411
-used: 1674
-objs: 2843
-depth: 6
-=index_table:export_list
-size: 2900
-limit: 65536
-used: 2843
-rate: 100
-=hash_table:process_reg
-size: 47
-used: 16
-objs: 23
-depth: 3
-=hash_table:fun_table
-size: 397
-used: 261
-objs: 400
-depth: 4
-=hash_table:node_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=hash_table:dist_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=allocated_areas
-processes: 1765460 1768396
-ets: 225620
-sys_misc: 24634
-static: 295033
-atom_space: 65544 57967
-binary: 648618369
-atom_table: 42141
-module_table: 920
-export_table: 21336
-register_table: 252
-fun_table: 1650
-module_refs: 1024
-loaded_code: 1968915
-dist_table: 159
-node_table: 131
-bits_bufs_size: 19
-bif_timer: 13392
-link_lh: 0
-dist_buf: 0
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:sys_alloc
-option e: true
-option m: libc
-=allocator:temp_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 90
-option rsbcmt: 80
-option mmbcs: 65536
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: af
-mbcs blocks: 0 9 9
-mbcs blocks size: 0 35376 35376
-mbcs carriers: 1 1 1
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 65568 65568 65568
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 65568
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-temp_alloc calls: 6155
-temp_free calls: 6155
-temp_realloc calls: 29
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 1
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:sl_alloc
-option e: false
-=allocator:std_alloc
-option e: false
-=allocator:ll_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 4294967295
-option asbcst: 0
-option rsbcst: 0
-option rsbcmt: 0
-option mmbcs: 2097152
-option mmsbc: 0
-option mmmbc: 0
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: aobf
-mbcs blocks: 592 592 592
-mbcs blocks size: 2838520 2863304 2863304
-mbcs carriers: 2 2 2
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 2
-mbcs carriers size: 3145760 3145760 3145760
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 3145760
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-ll_alloc calls: 592
-ll_free calls: 0
-ll_realloc calls: 235
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 2
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:eheap_alloc
-versions: 2.1 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 50
-option rsbcmt: 80
-option mmbcs: 524288
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option mbsd: 3
-option as: gf
-mbcs blocks: 56 102 102
-mbcs blocks size: 833280 1638920 1638920
-mbcs carriers: 2 3 3
-mbcs mseg carriers: 1
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 1998880 3047456 3047456
-mbcs mseg carriers size: 1474560
-mbcs sys_alloc carriers size: 524320
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-eheap_alloc calls: 6971
-eheap_free calls: 6914
-eheap_realloc calls: 461
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-sys_alloc calls: 3
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:binary_alloc
-option e: false
-=allocator:ets_alloc
-option e: false
-=allocator:fix_alloc
-option e: true
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:mseg_alloc
-version: 0.9
-option amcbf: 4194304
-option rmcbf: 20
-option mcs: 5
-option cci: 1000
-cached_segments: 0
-cache_hits: 13
-segments: 2
-segments_watermark: 2
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-mseg_create calls: 4
-mseg_destroy calls: 1
-mseg_clear_cache calls: 6
-mseg_check_cache calls: 2
-=allocator:alloc_util
-option mmc: 1024
-option ycs: 1048576
-=allocator:instr
-option m: false
-option s: false
-option t: false
-=proc:<0.0.0>
-State: Waiting
-Name: init
-Spawned as: otp_ring0:start/2
-Spawned by: []
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
-Reductions: 3851
-Stack+heap: 377
-OldHeap: 610
-Heap unused: 53
-OldHeap unused: 610
-Program counter: 0x1f496c (init:loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.2.0>
-State: Waiting
-Name: erl_prim_loader
-Spawned as: erlang:apply/2
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.0.0>,#Port<0.2>]
-Reductions: 201036
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 923
-OldHeap unused: 987
-Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.4.0>
-State: Waiting
-Name: error_logger
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.0.0>]
-Reductions: 296
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 851
-OldHeap unused: 0
-Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.5.0>
-State: Waiting
-Name: application_controller
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.7.0>,<0.0.0>]
-Reductions: 1508
-Stack+heap: 1597
-OldHeap: 0
-Heap unused: 835
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.7.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.6.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.8.0>,<0.5.0>]
-Reductions: 23
-Stack+heap: 377
-OldHeap: 0
-Heap unused: 79
-OldHeap unused: 0
-Program counter: 0x248d04 (application_master:main_loop/2 + 28)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.8.0>
-State: Waiting
-Spawned as: application_master:start_it/4
-Spawned by: <0.7.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>,<0.7.0>]
-Reductions: 91
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 177
-OldHeap unused: 0
-Program counter: 0x24a26c (application_master:loop_it/4 + 40)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.9.0>
-State: Waiting
-Name: kernel_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.8.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
-Reductions: 7402
-Stack+heap: 610
-OldHeap: 987
-Heap unused: 311
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.10.0>
-State: Waiting
-Name: rex
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 44
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 144
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.11.0>
-State: Waiting
-Name: global_name_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
-Reductions: 47
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 98
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.12.0>
-State: Waiting
-Spawned as: global:init_the_locker/1
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 3
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 227
-OldHeap unused: 0
-Program counter: 0x261340 (global:loop_the_locker/2 + 92)
-CP: 0x261184 (global:init_the_locker/1 + 112)
-arity = 0
-=proc:<0.13.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 4
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 221
-OldHeap unused: 0
-Program counter: 0x265288 (global:collect_deletions/2 + 76)
-CP: 0x2651ac (global:loop_the_deleter/1 + 36)
-arity = 0
-=proc:<0.14.0>
-State: Waiting
-Name: inet_db
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 376
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 30
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.15.0>
-State: Waiting
-Name: global_group
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 71
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 92
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.16.0>
-State: Waiting
-Name: file_server_2
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 119
-Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
-Reductions: 83605
-Stack+heap: 4181
-OldHeap: 4181
-Heap unused: 1720
-OldHeap unused: 4181
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.17.0>
-State: Waiting
-Name: file_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
-Reductions: 12
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 207
-OldHeap unused: 0
-Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.18.0>
-State: Waiting
-Name: code_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 108900
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 4389
-OldHeap unused: 6765
-Program counter: 0x2a6e64 (code_server:loop/1 + 64)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.19.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.9.0>]
-Reductions: 74
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 180
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.20.0>
-State: Waiting
-Spawned as: user_drv:server/2
-Spawned by: <0.19.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
-Reductions: 596
-Stack+heap: 233
-OldHeap: 377
-Heap unused: 214
-OldHeap unused: 377
-Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.21.0>
-State: Waiting
-Name: user
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
-Reductions: 26
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 202
-OldHeap unused: 0
-Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.22.0>
-State: Waiting
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
-Reductions: 1244
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 40
-OldHeap unused: 233
-Program counter: 0x2cf238 (group:get_line1/3 + 1652)
-CP: 0x2cf230 (group:get_line1/3 + 1644)
-arity = 0
-=proc:<0.23.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 45
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 63
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.24.0>
-State: Waiting
-Name: kernel_safe_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.31.0>,<0.9.0>]
-Reductions: 133
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 198
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.25.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.22.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
-Reductions: 161
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 169
-OldHeap unused: 0
-Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
-CP: 0x2e06fc (shell:server_loop/6 + 140)
-arity = 0
-=proc:<0.27.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.25.0>]
-Reductions: 506
-Stack+heap: 4181
-OldHeap: 0
-Heap unused: 1131
-OldHeap unused: 0
-Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.31.0>
-State: Waiting
-Name: inet_gethost_native_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.24.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.32.0>,<0.24.0>]
-Reductions: 49
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 87
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.32.0>
-State: Waiting
-Name: inet_gethost_native
-Spawned as: inet_gethost_native:server_init/2
-Spawned by: <0.31.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 118
-Link list: [#Port<0.105>,<0.31.0>]
-Reductions: 65
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 13
-OldHeap unused: 0
-Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.33.0>
-State: Waiting
-Name: web_tool
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.27.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.41.0>]
-Reductions: 131773
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 2941
-OldHeap unused: 6765
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.41.0>
-State: Waiting
-Name: websup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.48.0>,<0.33.0>]
-Reductions: 118
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 205
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.43.0>
-State: Waiting
-Name: httpd_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
-Reductions: 1220
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 277
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.44.0>
-State: Waiting
-Name: httpd_acc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.47.0>,<0.43.0>]
-Reductions: 147
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 77
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.45.0>
-State: Waiting
-Name: httpd_misc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 52
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 80
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.46.0>
-State: Waiting
-Name: httpd__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 2905
-Stack+heap: 6765
-OldHeap: 10946
-Heap unused: 138
-OldHeap unused: 10946
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.47.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.44.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
-Reductions: 874
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 190
-OldHeap unused: 233
-Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
-CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
-arity = 0
-=proc:<0.48.0>
-State: Waiting
-Name: crashdump_viewer_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.41.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.56.0>,<0.41.0>]
-Reductions: 1913
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 524
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.49.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
-Reductions: 15
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 190
-OldHeap unused: 0
-Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
-CP: 0x30174c (io:parse_erl_exprs/3 + 92)
-arity = 0
-=proc:<0.56.0>
-State: Garbing
-Spawned as: erlang:apply/2
-Last scheduled in for: erlang:garbage_collect/0
-Spawned by: <0.48.0>
-Started: Wed Apr 21 13:22:27 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 121
-Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
-Reductions: 2420470
-Stack+heap: 121393
-OldHeap: 0
-Heap unused: 22172
-OldHeap unused: 0
-New heap start: FE5768E0
-New heap top: FE5D7734
-Stack top: FE5ED130
-Stack end: FE5ED1A4
-Old heap start: 0
-Old heap top: 0
-Old heap end: 0
-Program counter: 0x1a4980 (unknown function)
-CP: 0x20710c (prim_file:read/2 + 436)
-=port:#Port<0.1>
-Slot: 1
-Connected: #Port<0.0>
-Port controls linked-in driver: async
-=port:#Port<0.2>
-Slot: 2
-Connected: <0.2.0>
-Links: <0.2.0>
-Port controls linked-in driver: efile
-=port:#Port<0.4>
-Slot: 4
-Connected: <0.16.0>
-Links: <0.16.0>
-Port controls linked-in driver: efile
-=port:#Port<0.72>
-Slot: 72
-Connected: <0.20.0>
-Links: <0.20.0>
-Port controls linked-in driver: tty_sl -c -e
-=port:#Port<0.105>
-Slot: 105
-Connected: <0.32.0>
-Links: <0.32.0>
-Port controls external process: inet_gethost 4
-=port:#Port<0.141>
-Slot: 141
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=port:#Port<0.157>
-Slot: 157
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.158>
-Slot: 158
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.161>
-Slot: 161
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=ets:<0.18.0>
-Slot: 9
-Table: 9
-Name: code
-Buckets: 256
-Objects: 289
-Words: 14108
-=ets:<0.18.0>
-Slot: 10
-Table: 10
-Name: code_names
-Buckets: 256
-Objects: 47
-Words: 4334
-=ets:<0.32.0>
-Slot: 11
-Table: 11
-Name: ign_requests
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.32.0>
-Slot: 12
-Table: 12
-Name: ign_req_index
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.33.0>
-Slot: 13
-Table: 13
-Name: app_data
-Buckets: 256
-Objects: 7
-Words: 952
-=ets:<0.46.0>
-Slot: 15
-Table: 15
-Name: httpd_mime__127_0_0_1__8888
-Buckets: 256
-Objects: 105
-Words: 5742
-=ets:<0.11.0>
-Slot: 84
-Table: global_names
-Name: global_names
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 95
-Table: global_locks
-Name: global_locks
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 96
-Table: global_names_ext
-Name: global_names_ext
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.14.0>
-Slot: 316
-Table: inet_cache
-Name: inet_cache
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 340
-Table: cdv_menu_table
-Name: cdv_menu_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 341
-Table: cdv_dump_index_table
-Name: cdv_dump_index_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 342
-Table: cdv_decode_heap_table
-Name: cdv_decode_heap_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.16.0>
-Slot: 780
-Table: file_io_servers
-Name: file_io_servers
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.46.0>
-Slot: 984
-Table: httpd_conf__127_0_0_1__8888
-Name: httpd_conf__127_0_0_1__8888
-Buckets: 256
-Objects: 17
-Words: 1176
-=ets:<0.14.0>
-Slot: 1342
-Table: inet_hosts
-Name: inet_hosts
-Buckets: 256
-Objects: 4
-Words: 421
-=ets:<0.14.0>
-Slot: 1362
-Table: inet_db
-Name: inet_db
-Buckets: 256
-Objects: 20
-Words: 671
-=ets:<0.5.0>
-Slot: 1655
-Table: ac_tab
-Name: ac_tab
-Buckets: 256
-Objects: 6
-Words: 843
-=timer:<0.14.0>
-Message: refresh_timeout
-Time left: 3565692 ms
-=node:'nonode@nohost'
-=no_distribution
-=loaded_modules
-Current code: 1968915
-Old code: 0
-=mod:otp_ring0
-Current size: 489
-=mod:init
-Current size: 30110
-=mod:prim_inet
-Current size: 35532
-=mod:prim_file
-Current size: 24965
-=mod:erl_prim_loader
-Current size: 19607
-=mod:erlang
-Current size: 11137
-=mod:error_handler
-Current size: 2389
-Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
-=mod:heart
-Current size: 6687
-Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
-=mod:error_logger
-Current size: 7051
-Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
-=mod:gen_event
-Current size: 18288
-Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
-=mod:gen
-Current size: 7129
-Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
-=mod:proc_lib
-Current size: 11658
-Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
-=mod:application_controller
-Current size: 55249
-Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
-=mod:gen_server
-Current size: 18728
-Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
-=mod:sys
-Current size: 11589
-Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
-=mod:lists
-Current size: 18638
-Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
-=mod:application
-Current size: 2666
-Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
-=mod:application_master
-Current size: 10912
-Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
-=mod:kernel
-Current size: 7639
-Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
-=mod:supervisor
-Current size: 24469
-Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
-=mod:rpc
-Current size: 14539
-Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
-=mod:gb_trees
-Current size: 8274
-Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
-=mod:global
-Current size: 40753
-Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
-=mod:inet_db
-Current size: 34555
-Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
-=mod:inet_config
-Current size: 13575
-Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
-=mod:os
-Current size: 5997
-Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
-=mod:inet_udp
-Current size: 2451
-Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
-=mod:inet
-Current size: 28288
-Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
-=mod:inet_parse
-Current size: 21928
-Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
-=mod:filename
-Current size: 17411
-Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
-=mod:inet_hosts
-Current size: 3745
-Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
-=mod:erl_distribution
-Current size: 2512
-Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
-=mod:global_group
-Current size: 30960
-Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
-=mod:net_kernel
-Current size: 37648
-Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
-=mod:file_server
-Current size: 8372
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
-=mod:old_file_server
-Current size: 3074
-Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
-=mod:code
-Current size: 7419
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
-=mod:code_server
-Current size: 30811
-Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
-=mod:code_aux
-Current size: 1736
-Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
-=mod:packages
-Current size: 3119
-Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
-=mod:hipe_unified_loader
-Current size: 37330
-Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
-=mod:hipe_sparc_loader
-Current size: 1821
-Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
-=mod:ets
-Current size: 16577
-Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
-=mod:lists_sort
-Current size: 38692
-Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
-=mod:user_sup
-Current size: 2355
-Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
-=mod:supervisor_bridge
-Current size: 2944
-Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
-=mod:user_drv
-Current size: 14630
-Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
-=mod:group
-Current size: 10165
-Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
-=mod:io_lib
-Current size: 12601
-Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
-=mod:edlin
-Current size: 18178
-Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
-=mod:io_lib_format
-Current size: 16189
-Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
-=mod:kernel_config
-Current size: 3295
-Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
-=mod:shell
-Current size: 22571
-Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
-=mod:error_logger_tty_h
-Current size: 7773
-Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
-=mod:erl_eval
-Current size: 33481
-Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
-=mod:orddict
-Current size: 4872
-Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
-=mod:c
-Current size: 19555
-Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
-=mod:io
-Current size: 7417
-Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
-=mod:file
-Current size: 20795
-Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
-=mod:file_io_server
-Current size: 12071
-Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
-=mod:erl_scan
-Current size: 21891
-Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
-=mod:erl_parse
-Current size: 161233
-Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
-=mod:erl_lint
-Current size: 73159
-Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
-=mod:ordsets
-Current size: 3257
-Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
-=mod:dict
-Current size: 15637
-Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
-=mod:otp_internal
-Current size: 7133
-Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
-=mod:user_default
-Current size: 1261
-Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
-=mod:tt
-Current size: 2959
-Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
-=mod:distel
-Current size: 18214
-Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
-Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
-=mod:crashdump_viewer
-Current size: 125756
-Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
-=mod:webtool
-Current size: 29229
-Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
-=mod:gen_tcp
-Current size: 3574
-Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
-=mod:inet_tcp
-Current size: 2743
-Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
-=mod:inet_gethost_native
-Current size: 15611
-Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
-=mod:filelib
-Current size: 7202
-Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
-=mod:httpd_util
-Current size: 24068
-Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
-=mod:webtool_sup
-Current size: 695
-Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
-=mod:httpd_conf
-Current size: 33659
-Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
-=mod:regexp
-Current size: 13698
-Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
-=mod:string
-Current size: 7740
-Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
-=mod:httpd
-Current size: 7563
-Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
-=mod:httpd_sup
-Current size: 4068
-Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
-=mod:httpd_acceptor_sup
-Current size: 2161
-Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
-=mod:httpd_verbosity
-Current size: 2672
-Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
-=mod:timer
-Current size: 8223
-Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
-=mod:httpd_misc_sup
-Current size: 2066
-Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
-=mod:httpd_manager
-Current size: 28916
-Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
-=mod:mod_alias
-Current size: 6720
-Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
-=mod:mod_auth
-Current size: 25168
-Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
-=mod:mod_esi
-Current size: 22534
-Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
-=mod:mod_actions
-Current size: 3625
-Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
-=mod:mod_cgi
-Current size: 25891
-Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
-=mod:mod_include
-Current size: 34923
-Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
-=mod:mod_dir
-Current size: 13488
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
-=mod:mod_get
-Current size: 4672
-Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
-=mod:mod_head
-Current size: 3074
-Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
-=mod:mod_log
-Current size: 8546
-Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
-=mod:mod_disk_log
-Current size: 15160
-Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
-=mod:httpd_socket
-Current size: 7426
-Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
-=mod:httpd_acceptor
-Current size: 4472
-Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
-=mod:io_lib_pretty
-Current size: 8171
-Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
-=mod:httpd_request_handler
-Current size: 26393
-Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
-=mod:calendar
-Current size: 7158
-Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
-=mod:httpd_parse
-Current size: 9977
-Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
-=mod:httpd_response
-Current size: 13535
-Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
-=mod:crashdump_viewer_html
-Current size: 68343
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
-=mod:crashdump_translate
-Current size: 89840
-Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
-=fun
-Module: crashdump_viewer_html
-Uniq: 9122590
-Index: 0
-Address: 526308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 77168418
-Index: 14
-Address: 26541c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 88083515
-Index: 9
-Address: 284c30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 36747896
-Index: 4
-Address: 26df84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 80395734
-Index: 8
-Address: 265838
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 103184573
-Index: 5
-Address: 2fa59c
-Native_address: bce80
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 88265811
-Index: 24
-Address: 34f6a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 9644262
-Index: 2
-Address: 292cec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 100885585
-Index: 0
-Address: 29eb2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 128335479
-Index: 6
-Address: 26de84
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 42988083
-Index: 1
-Address: 210c14
-Native_address: bcf04
-Refc: 1
-=fun
-Module: dict
-Uniq: 7105125
-Index: 7
-Address: 354f84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 29030584
-Index: 8
-Address: 234978
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 29214351
-Index: 2
-Address: 285660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 5158633
-Index: 4
-Address: 274034
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 74624950
-Index: 25
-Address: 34f63c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 6477018
-Index: 3
-Address: 2adb6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 117885138
-Index: 7
-Address: 2ffff8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 47566924
-Index: 6
-Address: 354fb8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 114637756
-Index: 12
-Address: 313c60
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121316204
-Index: 31
-Address: 313a68
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61363639
-Index: 12
-Address: 2ad6a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 116208699
-Index: 3
-Address: 274094
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 113750737
-Index: 0
-Address: 292d54
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 12853672
-Index: 0
-Address: 222e74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108046357
-Index: 12
-Address: 4ab0b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 111569299
-Index: 47
-Address: 34e80c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 20108653
-Index: 15
-Address: 2f9f94
-Native_address: bcea4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 45252965
-Index: 15
-Address: 313c0c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 12437425
-Index: 9
-Address: 4ab3e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 30942993
-Index: 22
-Address: 34f6ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 93430337
-Index: 3
-Address: 33b100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 6604883
-Index: 2
-Address: 33b16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 36867745
-Index: 5
-Address: 255e28
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 90563105
-Index: 1
-Address: 285708
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 18519297
-Index: 7
-Address: 26ddfc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8058975
-Index: 16
-Address: 4a36b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 30694569
-Index: 7
-Address: 27d018
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 76933943
-Index: 0
-Address: 2741b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 9033258
-Index: 6
-Address: 4a4690
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 74851752
-Index: 5
-Address: 4a4798
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 50855382
-Index: 4
-Address: 2659a8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39211582
-Index: 52
-Address: 34e504
-Native_address: bceec
-Refc: 1
-=fun
-Module: file_server
-Uniq: 77665472
-Index: 0
-Address: 2a0dec
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 57487277
-Index: 8
-Address: 2fa3c4
-Native_address: bce94
-Refc: 1
-=fun
-Module: webtool
-Uniq: 87386575
-Index: 11
-Address: 4ab1c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 58991950
-Index: 8
-Address: 4a4338
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 118859163
-Index: 17
-Address: 4a34d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 38265609
-Index: 12
-Address: 354dec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 56903339
-Index: 1
-Address: 2527c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 129504763
-Index: 0
-Address: 28aae8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 44817307
-Index: 10
-Address: 354e3c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 52856894
-Index: 41
-Address: 34eb70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22623360
-Index: 23
-Address: 34f5d4
-Native_address: bceec
-Refc: 1
-=fun
-Module: orddict
-Uniq: 34963136
-Index: 0
-Address: 2fbbbc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erlang
-Uniq: 24496633
-Index: 0
-Address: 213744
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 99313855
-Index: 27
-Address: 2f9914
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 99137703
-Index: 3
-Address: 4b5dfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 124043500
-Index: 3
-Address: 222b84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 102650878
-Index: 22
-Address: 313b48
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 13333720
-Index: 12
-Address: 34fb2c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 133457
-Index: 5
-Address: 292a80
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 64640983
-Index: 4
-Address: 29e944
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 7580218
-Index: 2
-Address: 255f08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 131850870
-Index: 59
-Address: 34e6b8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 56617403
-Index: 10
-Address: 284b40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108680306
-Index: 4
-Address: 4ab5e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 90880071
-Index: 2
-Address: 26e150
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_io_server
-Uniq: 23980778
-Index: 0
-Address: 30ac30
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 12006418
-Index: 19
-Address: 2f9d54
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 81701030
-Index: 8
-Address: 526228
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 71013875
-Index: 1
-Address: 4a4ddc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: distel
-Uniq: 87740845
-Index: 2
-Address: 35c0e0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 90782401
-Index: 17
-Address: 2f9e8c
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 133882676
-Index: 6
-Address: 2e52ac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 105698088
-Index: 3
-Address: 2855b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 58370899
-Index: 0
-Address: 27d370
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 15274536
-Index: 25
-Address: 2f9a94
-Native_address: bcef4
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 94349557
-Index: 0
-Address: 252844
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 33328185
-Index: 1
-Address: 33b1d8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86971387
-Index: 16
-Address: 313db0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 53364473
-Index: 38
-Address: 34ee84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 128145687
-Index: 0
-Address: 4ab944
-Native_address: bcee4
-Refc: 1
-=fun
-Module: c
-Uniq: 98651404
-Index: 10
-Address: 2fff20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 78224618
-Index: 0
-Address: 313dcc
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 40779085
-Index: 11
-Address: 2e50c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 93517350
-Index: 4
-Address: 300090
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 58551291
-Index: 0
-Address: 234f14
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 10055518
-Index: 17
-Address: 526170
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 15795706
-Index: 19
-Address: 313bd4
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 31129467
-Index: 13
-Address: 313c44
-Native_address: bced4
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 115635393
-Index: 0
-Address: 2a1a4c
-Native_address: bcf04
-Refc: 2
-=fun
-Module: erl_eval
-Uniq: 65839696
-Index: 22
-Address: 2f9c00
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 69275064
-Index: 28
-Address: 313aa0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 55938066
-Index: 11
-Address: 354d6c
-Native_address: bceec
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 22323433
-Index: 3
-Address: 252688
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 129726129
-Index: 29
-Address: 313abc
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 84346832
-Index: 0
-Address: 3550fc
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 102096820
-Index: 7
-Address: 2e5290
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 70385762
-Index: 11
-Address: 27cf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_cgi
-Uniq: 1483038
-Index: 0
-Address: 4ec2e8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 3664813
-Index: 1
-Address: 3550b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 131143671
-Index: 6
-Address: 27d08c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 46286977
-Index: 2
-Address: 2740b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_esi
-Uniq: 49099432
-Index: 0
-Address: 4e522c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 95764905
-Index: 2
-Address: 24aaa8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: packages
-Uniq: 62890926
-Index: 0
-Address: 2ae814
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 41564771
-Index: 35
-Address: 3139f8
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 95490768
-Index: 0
-Address: 4a4dc0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121559432
-Index: 3
-Address: 313d78
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_conf
-Uniq: 21152662
-Index: 0
-Address: 4be5a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 41630916
-Index: 5
-Address: 29e914
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 19747201
-Index: 5
-Address: 313d24
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 100584837
-Index: 36
-Address: 34f0f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 64635712
-Index: 15
-Address: 34f94c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 46398361
-Index: 3
-Address: 29e9a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86699817
-Index: 27
-Address: 313b2c
-Native_address: bced4
-Refc: 1
-=fun
-Module: distel
-Uniq: 40869731
-Index: 0
-Address: 35c12c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 83701641
-Index: 1
-Address: 27d33c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_auth
-Uniq: 85845790
-Index: 0
-Address: 4dfd84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 101292714
-Index: 9
-Address: 2e519c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 134173702
-Index: 1
-Address: 265b68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 92433687
-Index: 6
-Address: 2ad9f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 62315241
-Index: 8
-Address: 354f38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 11615541
-Index: 12
-Address: 265530
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 11160090
-Index: 2
-Address: 2b6bb4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 12116524
-Index: 15
-Address: 2342c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 61620901
-Index: 2
-Address: 4fc670
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 23665189
-Index: 12
-Address: 4a3b94
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 43844413
-Index: 0
-Address: 300100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 100514258
-Index: 6
-Address: 313d08
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 54271286
-Index: 17
-Address: 34f8a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 47017252
-Index: 3
-Address: 26dfa0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 1228304
-Index: 7
-Address: 4a45a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 127131470
-Index: 10
-Address: 2655a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_server
-Uniq: 22638227
-Index: 1
-Address: 2a0e20
-Native_address: bcf04
-Refc: 1
-=fun
-Module: code_server
-Uniq: 112704920
-Index: 15
-Address: 2ad488
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88302875
-Index: 2
-Address: 2fa76c
-Native_address: bceb4
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 85808984
-Index: 1
-Address: 28ab18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 106391799
-Index: 0
-Address: 33b22c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25830519
-Index: 5
-Address: 27d0c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 110491036
-Index: 1
-Address: 2e5398
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 13128736
-Index: 5
-Address: 52627c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 84644982
-Index: 21
-Address: 313b9c
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 120577486
-Index: 3
-Address: 34fffc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 4504456
-Index: 44
-Address: 34e938
-Native_address: bceec
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 28754183
-Index: 0
-Address: 500140
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 88043334
-Index: 14
-Address: 313c28
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61592373
-Index: 0
-Address: 2adc28
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74468346
-Index: 26
-Address: 313ad8
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69896253
-Index: 21
-Address: 2f9c40
-Native_address: bce80
-Refc: 1
-=fun
-Module: global_group
-Uniq: 59656873
-Index: 4
-Address: 292ac0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 103891261
-Index: 2
-Address: 4a4d70
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 89619733
-Index: 0
-Address: 4b5e64
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 133201466
-Index: 10
-Address: 2e5180
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 32159369
-Index: 2
-Address: 4ab820
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 76861396
-Index: 2
-Address: 2adbb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 48206487
-Index: 0
-Address: 4fc6f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 118996551
-Index: 28
-Address: 34f384
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 12593774
-Index: 50
-Address: 34e60c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 48542841
-Index: 1
-Address: 50e88c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56178490
-Index: 9
-Address: 4a420c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 88212576
-Index: 4
-Address: 35bf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 79562132
-Index: 29
-Address: 34f368
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 129524917
-Index: 32
-Address: 34f2c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54029891
-Index: 23
-Address: 2f9af0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 108872092
-Index: 4
-Address: 27d0f0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 40905124
-Index: 6
-Address: 234ac0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 50124876
-Index: 10
-Address: 2ad760
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 791358
-Index: 48
-Address: 34e7b0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 18404828
-Index: 24
-Address: 313af4
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 13278653
-Index: 1
-Address: 4b5e48
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 110307423
-Index: 13
-Address: 284a7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 99592247
-Index: 0
-Address: 256118
-Native_address: bcf04
-Refc: 1
-=fun
-Module: global
-Uniq: 99918211
-Index: 2
-Address: 265af4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 71442319
-Index: 27
-Address: 34f510
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 7612785
-Index: 13
-Address: 2fa0fc
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56095795
-Index: 15
-Address: 4a38a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 23626796
-Index: 25
-Address: 313b10
-Native_address: bced4
-Refc: 1
-=fun
-Module: file_server
-Uniq: 126074974
-Index: 2
-Address: 2a0cac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 104278122
-Index: 1
-Address: 274154
-Native_address: bcefc
-Refc: 1
-=fun
-Module: sys
-Uniq: 90854051
-Index: 0
-Address: 240344
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 113334594
-Index: 2
-Address: 313d5c
-Native_address: bced4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 8832142
-Index: 7
-Address: 284e30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9159706
-Index: 42
-Address: 34eb54
-Native_address: bceec
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 123946665
-Index: 8
-Address: 26e494
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3149789
-Index: 1
-Address: 5262d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 48288621
-Index: 11
-Address: 2ffed8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8953292
-Index: 20
-Address: 4a4d54
-Native_address: bcee4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9632158
-Index: 4
-Address: 34ff88
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 31111567
-Index: 7
-Address: 29e8c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 85307443
-Index: 10
-Address: 2fa29c
-Native_address: bcec4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 104417191
-Index: 7
-Address: 313cd0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 43625777
-Index: 5
-Address: 354fec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 92698798
-Index: 3
-Address: 4ab780
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 39074546
-Index: 6
-Address: 2fa54c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 71451126
-Index: 5
-Address: 234b98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 122084387
-Index: 6
-Address: 300038
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 9625924
-Index: 14
-Address: 284a60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 128777368
-Index: 11
-Address: 313c7c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 10203723
-Index: 7
-Address: 4ab4f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 35032400
-Index: 10
-Address: 313c98
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 17252586
-Index: 34
-Address: 313a14
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 7177165
-Index: 11
-Address: 2ad734
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 115778175
-Index: 3
-Address: 4a4930
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 96440880
-Index: 51
-Address: 34e590
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 68275407
-Index: 0
-Address: 2b7340
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88854488
-Index: 16
-Address: 2f9f04
-Native_address: bcebc
-Refc: 1
-=fun
-Module: global
-Uniq: 26353848
-Index: 13
-Address: 2654e8
-Native_address: bcf04
-Refc: 3
-=fun
-Module: global
-Uniq: 93414722
-Index: 11
-Address: 265568
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 11194189
-Index: 60
-Address: 34fe0c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 125189992
-Index: 8
-Address: 2fffdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 112472016
-Index: 2
-Address: 355088
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 104426442
-Index: 5
-Address: 2e52e0
-Native_address: bceec
-Refc: 1
-=fun
-Module: global
-Uniq: 17426458
-Index: 0
-Address: 265bc4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 81191039
-Index: 5
-Address: 2ada48
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 71765042
-Index: 5
-Address: 284f74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 85855821
-Index: 2
-Address: 1fa298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 70586122
-Index: 10
-Address: 4a3fe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 87067911
-Index: 49
-Address: 34e708
-Native_address: bcef4
-Refc: 1
-=fun
-Module: distel
-Uniq: 63126735
-Index: 1
-Address: 35c0fc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: c
-Uniq: 58270309
-Index: 1
-Address: 3000e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: ets
-Uniq: 80538457
-Index: 1
-Address: 2bc1a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 69827241
-Index: 9
-Address: 34fd70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 103968752
-Index: 3
-Address: 355054
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 117175573
-Index: 21
-Address: 34f728
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 57865450
-Index: 2
-Address: 2e537c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 14705965
-Index: 20
-Address: 313b80
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 85360931
-Index: 6
-Address: 4ab56c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: kernel_config
-Uniq: 41755598
-Index: 0
-Address: 2d9e20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 7110547
-Index: 37
-Address: 34ef14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 28091577
-Index: 16
-Address: 234244
-Native_address: bcef4
-Refc: 2
-=fun
-Module: code_server
-Uniq: 96448152
-Index: 14
-Address: 2ad4e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 40177568
-Index: 13
-Address: 4a39a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 31948320
-Index: 58
-Address: 34dfdc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 54153760
-Index: 7
-Address: 265854
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 60156260
-Index: 3
-Address: 5262b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 1010616
-Index: 2
-Address: 350064
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 96784459
-Index: 1
-Address: 1fa2b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 48691771
-Index: 18
-Address: 313bb8
-Native_address: bced4
-Refc: 1
-=fun
-Module: global
-Uniq: 26895060
-Index: 9
-Address: 265710
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 109625093
-Index: 7
-Address: 2ad8fc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 59436171
-Index: 1
-Address: 3500dc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 92768306
-Index: 9
-Address: 354f04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 106430008
-Index: 3
-Address: 292b38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 79749196
-Index: 6
-Address: 1fa01c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 6014929
-Index: 9
-Address: 2fa324
-Native_address: bceac
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 57051922
-Index: 7
-Address: 234a28
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 77043468
-Index: 6
-Address: 29e8e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 36176045
-Index: 9
-Address: 52620c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 35862809
-Index: 3
-Address: 255edc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113649451
-Index: 4
-Address: 2850a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 67943969
-Index: 5
-Address: 2658f4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 109003032
-Index: 16
-Address: 5260d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 104711447
-Index: 13
-Address: 525f5c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 107666872
-Index: 9
-Address: 27cfb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 89410000
-Index: 10
-Address: 5261f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 47356870
-Index: 11
-Address: 284ab4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17873449
-Index: 56
-Address: 34e1e8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 8839441
-Index: 33
-Address: 34f25c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 82513204
-Index: 2
-Address: 222c18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 5973059
-Index: 0
-Address: 24ab7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 127832132
-Index: 0
-Address: 4b065c
-Native_address: bcefc
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 39322658
-Index: 14
-Address: 525f40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_server
-Uniq: 100284021
-Index: 0
-Address: 23d288
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 17430070
-Index: 12
-Address: 284a98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 97509773
-Index: 3
-Address: 1fa27c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 32364818
-Index: 3
-Address: 35c050
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 58576084
-Index: 32
-Address: 313a4c
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 38384851
-Index: 14
-Address: 4a3988
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 14139883
-Index: 4
-Address: 234d78
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 122590256
-Index: 0
-Address: 2fa8b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 14705629
-Index: 11
-Address: 2fa22c
-Native_address: bcedc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 9273769
-Index: 4
-Address: 2fa684
-Native_address: bcee4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 87950142
-Index: 11
-Address: 5261d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 54913678
-Index: 1
-Address: 4fc6b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 28370334
-Index: 0
-Address: 26e4b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 24927227
-Index: 40
-Address: 34ed4c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 105437500
-Index: 33
-Address: 313a30
-Native_address: bced4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 10921695
-Index: 1
-Address: 234eac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 112431564
-Index: 55
-Address: 34e22c
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 129460863
-Index: 5
-Address: 4ab5c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 89001648
-Index: 3
-Address: 27d2ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 36199507
-Index: 8
-Address: 27cfe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 35620771
-Index: 2
-Address: 5262ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 83214871
-Index: 18
-Address: 2f9e34
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 122455383
-Index: 1
-Address: 2adc0c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22389488
-Index: 31
-Address: 34f1b8
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 41869059
-Index: 12
-Address: 2fa1d4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 18130505
-Index: 45
-Address: 34e904
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 107414126
-Index: 1
-Address: 2b706c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 116638945
-Index: 28
-Address: 2f98f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 48465762
-Index: 9
-Address: 2348c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 87633852
-Index: 0
-Address: 50e97c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 28213098
-Index: 8
-Address: 4ab42c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 123630574
-Index: 4
-Address: 222b58
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 127425508
-Index: 13
-Address: 354eb4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 95048118
-Index: 16
-Address: 2ad46c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 108661978
-Index: 19
-Address: 34f75c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 21272619
-Index: 13
-Address: 34fad8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29943747
-Index: 17
-Address: 313bf0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 120240397
-Index: 4
-Address: 313d94
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 124060676
-Index: 0
-Address: 350124
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 100975346
-Index: 6
-Address: 526260
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61421476
-Index: 4
-Address: 2ada9c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45197232
-Index: 7
-Address: 34fe5c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3151900
-Index: 15
-Address: 525f24
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 77509245
-Index: 2
-Address: 4b5e2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 94110229
-Index: 8
-Address: 2ad7e4
-Native_address: bcef4
-Refc: 3
-=fun
-Module: rpc
-Uniq: 101217130
-Index: 1
-Address: 2560c4
-Native_address: bcf04
-Refc: 1
-=fun
-Module: lists
-Uniq: 103647452
-Index: 0
-Address: 244b7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 37841211
-Index: 9
-Address: 2ad77c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 40109251
-Index: 54
-Address: 34e2b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 98012300
-Index: 0
-Address: 1fa2d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 73604759
-Index: 10
-Address: 4ab270
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 12042434
-Index: 1
-Address: 313d40
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 127137775
-Index: 4
-Address: 2e531c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 45498037
-Index: 12
-Address: 27cec0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 122441107
-Index: 34
-Address: 34f1d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70933889
-Index: 46
-Address: 34e8d0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 69850797
-Index: 2
-Address: 27d308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 103965539
-Index: 13
-Address: 234684
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29979659
-Index: 30
-Address: 313a84
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17148721
-Index: 20
-Address: 34f778
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_response
-Uniq: 100673049
-Index: 0
-Address: 5165dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 10508176
-Index: 1
-Address: 4b04dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32476064
-Index: 57
-Address: 34e1c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74835078
-Index: 9
-Address: 313cec
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 60689814
-Index: 19
-Address: 4a3b78
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39269715
-Index: 5
-Address: 34ff14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 112923172
-Index: 0
-Address: 2e5404
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43010824
-Index: 14
-Address: 2fa03c
-Native_address: bce8c
-Refc: 1
-=fun
-Module: global
-Uniq: 82495254
-Index: 3
-Address: 265ac8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 48568081
-Index: 8
-Address: 2e5220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 77236637
-Index: 7
-Address: 1fa000
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 109386574
-Index: 1
-Address: 2fa804
-Native_address: bce9c
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 42613220
-Index: 14
-Address: 34f980
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 67093144
-Index: 23
-Address: 313b64
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 86833790
-Index: 11
-Address: 34fbe8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 6344855
-Index: 1
-Address: 29eabc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 5149749
-Index: 35
-Address: 34f220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 93451769
-Index: 5
-Address: 1fa120
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 117428568
-Index: 11
-Address: 234758
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 15225890
-Index: 4
-Address: 526298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 120760477
-Index: 2
-Address: 234cdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 88561919
-Index: 3
-Address: 3000ac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 108931174
-Index: 8
-Address: 313cb4
-Native_address: bced4
-Refc: 1
-=fun
-Module: rpc
-Uniq: 122901192
-Index: 4
-Address: 255e44
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32985930
-Index: 10
-Address: 34fc40
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 97968498
-Index: 1
-Address: 292b7c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 45671671
-Index: 18
-Address: 4a32d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 117968056
-Index: 3
-Address: 2fa6ec
-Native_address: bcecc
-Refc: 1
-=fun
-Module: init
-Uniq: 108717591
-Index: 4
-Address: 1fa194
-Native_address: bcf04
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 15091954
-Index: 2
-Address: 2526dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 65707495
-Index: 6
-Address: 2658a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 34473969
-Index: 17
-Address: 2ad450
-Native_address: bcef4
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 124296602
-Index: 7
-Address: 526244
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 23074707
-Index: 15
-Address: 265460
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25972856
-Index: 10
-Address: 27cf74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43110452
-Index: 24
-Address: 2f9ad4
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 106445918
-Index: 13
-Address: 2ad660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 116071286
-Index: 12
-Address: 5261b8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 130814477
-Index: 8
-Address: 284cfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 121017037
-Index: 39
-Address: 34ed80
-Native_address: bcef4
-Refc: 1
-=fun
-Module: ets
-Uniq: 104895267
-Index: 0
-Address: 2bc1bc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 104682437
-Index: 11
-Address: 4a3de0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70248777
-Index: 30
-Address: 34f30c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 13274975
-Index: 5
-Address: 300074
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 98442771
-Index: 53
-Address: 34e2d0
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69829006
-Index: 7
-Address: 2fa47c
-Native_address: bce80
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 36444943
-Index: 1
-Address: 2a1a80
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 58719455
-Index: 26
-Address: 34f5f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: timer
-Uniq: 42505885
-Index: 0
-Address: 4cd62c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54682479
-Index: 20
-Address: 2f9d08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 86070332
-Index: 1
-Address: 222d7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 54728136
-Index: 9
-Address: 2fff68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 16474219
-Index: 3
-Address: 234c60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 108831556
-Index: 10
-Address: 234810
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 72053761
-Index: 16
-Address: 34f8ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 65127616
-Index: 2
-Address: 29ea04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 126167637
-Index: 14
-Address: 234640
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113704917
-Index: 0
-Address: 285788
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 75279647
-Index: 1
-Address: 500100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 119218247
-Index: 5
-Address: 26df68
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 85690044
-Index: 4
-Address: 4b5d6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 53075592
-Index: 1
-Address: 26e16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 39490182
-Index: 2
-Address: 3000c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 75189006
-Index: 12
-Address: 234714
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 14980808
-Index: 43
-Address: 34eb38
-Native_address: bceec
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 16463468
-Index: 4
-Address: 4a4914
-Native_address: bcee4
-Refc: 1
-=fun
-Module: dict
-Uniq: 99965326
-Index: 4
-Address: 355020
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 36900786
-Index: 6
-Address: 284f3c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45447147
-Index: 18
-Address: 34f794
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32353825
-Index: 6
-Address: 34fe78
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 134052338
-Index: 8
-Address: 34fdc0
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_master
-Uniq: 23840924
-Index: 1
-Address: 24aae0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108282500
-Index: 1
-Address: 4ab918
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 31081110
-Index: 0
-Address: 210c68
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54275742
-Index: 26
-Address: 2f9a4c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 45083091
-Index: 3
-Address: 2e5350
-Native_address: bcf04
-Refc: 3
-=proc_stack:<0.0.0>
-3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H371264
-=proc_heap:<0.0.0>
-371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
-3710FC:t2:H371138,H371140
-371140:lI80|H371194
-371194:lI49|H3711E0
-3711E0:lI48|H371204
-371204:lI66|N
-371138:lI79|H37118C
-37118C:lI84|H3711D8
-3711D8:lI80|H3711FC
-3711FC:lI32|H37120C
-37120C:lI32|H371214
-371214:lI65|H37121C
-37121C:lI80|H371224
-371224:lI78|H37122C
-37122C:lI32|H371234
-371234:lI49|H37123C
-37123C:lI56|H371244
-371244:lI49|H37124C
-37124C:lI32|H371254
-371254:lI48|H37125C
-37125C:lI49|N
-37128C:t2:A7:started,A7:started
-3710F4:lH371124|H371130
-371124:t2:A16:application_controller,P<0.5.0>
-371130:lH371178|H371184
-371178:t2:AC:error_logger,P<0.4.0>
-371184:lH3711CC|N
-3711CC:t2:AF:erl_prim_loader,P<0.2.0>
-3710D8:lH3710E0|H3710EC
-3710E0:t2:A5:-root,H371108
-371108:lH371148|N
-371148:Yh13:2F636C656172636173652F6F74702F65727473
-3710EC:lH371110|H37111C
-371110:t2:A9:-progname,H371164
-371164:lH37119C|N
-37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
-37111C:lH37116C|N
-37116C:t2:A5:-home,H3711C4
-3711C4:lH3711E8|N
-3711E8:YhA:2F686F6D652F73697269
-=proc_stack:<0.2.0>
-38eca8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H367D20
-y1:P<0.1.0>
-y2:H367D28
-y3:A8:infinity
-=proc_heap:<0.2.0>
-367D20:lH367D48|H367D50
-367D48:lI47|H367D58
-367D58:lI99|H367D68
-367D68:lI108|H367D78
-367D78:lI101|H367D88
-367D88:lI97|H367D98
-367D98:lI114|H367DA8
-367DA8:lI99|H367DB8
-367DB8:lI97|H367DC8
-367DC8:lI115|H367DD8
-367DD8:lI101|H367DE8
-367DE8:lI47|H367DF8
-367DF8:lI111|H367E08
-367E08:lI116|H367E18
-367E18:lI112|H367E28
-367E28:lI47|H367E38
-367E38:lI101|H367E48
-367E48:lI114|H367E58
-367E58:lI116|H367E68
-367E68:lI115|H367E78
-367E78:lI47|H367E88
-367E88:lI108|H367E98
-367E98:lI105|H367EA8
-367EA8:lI98|H367EB8
-367EB8:lI47|H367EC8
-367EC8:lI107|H367ED8
-367ED8:lI101|H367EE8
-367EE8:lI114|H367EF8
-367EF8:lI110|H367F08
-367F08:lI101|H367F18
-367F18:lI108|H367F28
-367F28:lI47|H367F38
-367F38:lI101|H367F48
-367F48:lI98|H367F58
-367F58:lI105|H367F68
-367F68:lI110|N
-367D50:lH367D60|N
-367D60:lI47|H367D70
-367D70:lI99|H367D80
-367D80:lI108|H367D90
-367D90:lI101|H367DA0
-367DA0:lI97|H367DB0
-367DB0:lI114|H367DC0
-367DC0:lI99|H367DD0
-367DD0:lI97|H367DE0
-367DE0:lI115|H367DF0
-367DF0:lI101|H367E00
-367E00:lI47|H367E10
-367E10:lI111|H367E20
-367E20:lI116|H367E30
-367E30:lI112|H367E40
-367E40:lI47|H367E50
-367E50:lI101|H367E60
-367E60:lI114|H367E70
-367E70:lI116|H367E80
-367E80:lI115|H367E90
-367E90:lI47|H367EA0
-367EA0:lI108|H367EB0
-367EB0:lI105|H367EC0
-367EC0:lI98|H367ED0
-367ED0:lI47|H367EE0
-367EE0:lI115|H367EF0
-367EF0:lI116|H367F00
-367F00:lI100|H367F10
-367F10:lI108|H367F20
-367F20:lI105|H367F30
-367F30:lI98|H367F40
-367F40:lI47|H367F50
-367F50:lI101|H367F60
-367F60:lI98|H367F70
-367F70:lI105|H367F78
-367F78:lI110|N
-367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
-=proc_dictionary:<0.4.0>
-H3AC588
-H3AC594
-=proc_stack:<0.4.0>
-3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:H3B21E8
-y2:AC:error_logger
-y3:P<0.1.0>
-3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3AC5A8
-=proc_heap:<0.4.0>
-3B21E8:lH3B2144|H3B21E0
-3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
-3B21E0:lH3B21BC|N
-3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
-3AC610:t2:P<0.21.0>,AC:error_logger
-3AC5A8:lA9:gen_event|H3AC5E8
-3AC5E8:lP<0.1.0>|H3AC608
-3AC608:lP<0.1.0>|H3AC61C
-3AC61C:lH3AC624|H3AC630
-3AC624:t2:A5:local,AC:error_logger
-3AC630:lN|H3AC638
-3AC638:lN|H3AC640
-3AC640:lN|N
-3AC588:t2:AD:$initial_call,H3AC5B0
-3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
-3AC594:t2:AA:$ancestors,H3AC5C0
-3AC5C0:lP<0.1.0>|N
-=proc_dictionary:<0.5.0>
-H372E4C
-H372E58
-=proc_stack:<0.5.0>
-374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A16:application_controller
-y3:H3739F4
-y4:A16:application_controller
-y5:P<0.1.0>
-374720:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H372ED0
-=proc_heap:<0.5.0>
-3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
-373928:lH37391C|H372F54
-37391C:t2:A6:stdlib,A9:permanent
-372F54:lH372F90|N
-372F90:t2:A6:kernel,A9:permanent
-373914:lH373908|H372F4C
-373908:t2:A6:stdlib,A9:undefined
-372F4C:lH372F84|N
-372F84:t2:A6:kernel,P<0.7.0>
-372ED0:lAA:gen_server|H372F5C
-372F5C:lP<0.1.0>|H372F9C
-372F9C:lP<0.1.0>|H372FC4
-372FC4:lH372FEC|H372FF8
-372FEC:t2:A5:local,A16:application_controller
-372FF8:lA16:application_controller|H373018
-373018:lH373038|H373048
-373038:t3:AB:application,A6:kernel,H373060
-373060:lH373078|H373084
-373078:t2:AB:description,H37309C
-37309C:lI69|H3730C8
-3730C8:lI82|H3730FC
-3730FC:lI84|H373130
-373130:lI83|H37316C
-37316C:lI32|H3731A8
-3731A8:lI32|H3731E4
-3731E4:lI67|H373220
-373220:lI88|H37325C
-37325C:lI67|H37329C
-37329C:lI32|H3732D0
-3732D0:lI49|H3732FC
-3732FC:lI51|H373328
-373328:lI56|H373348
-373348:lI32|H373368
-373368:lI49|H373388
-373388:lI48|N
-373084:lH3730A4|H3730B0
-3730A4:t2:A3:vsn,H3730D0
-3730D0:lI50|H373104
-373104:lI46|H373138
-373138:lI57|N
-3730B0:lH3730D8|H3730E4
-3730D8:t2:A2:id,N
-3730E4:lH37310C|H373118
-37310C:t2:A7:modules,H373140
-373140:lAB:application|H373174
-373174:lA16:application_controller|H3731B0
-3731B0:lA12:application_master|H3731EC
-3731EC:lA13:application_starter|H373228
-373228:lA4:auth|H373264
-373264:lA4:code|H3732A4
-3732A4:lA8:code_aux|H3732D8
-3732D8:lA8:packages|H373304
-373304:lAB:code_server|H373330
-373330:lA9:dist_util|H373350
-373350:lAF:erl_boot_server|H373370
-373370:lA10:erl_distribution|H373390
-373390:lAF:erl_prim_loader|H3733A8
-3733A8:lA9:erl_reply|H3733C0
-3733C0:lA6:erlang|H3733D8
-3733D8:lAD:error_handler|H3733F0
-3733F0:lAC:error_logger|H373408
-373408:lA4:file|H373420
-373420:lAB:file_server|H373438
-373438:lAF:old_file_server|H373450
-373450:lAE:file_io_server|H373468
-373468:lA9:prim_file|H373480
-373480:lA6:global|H373498
-373498:lAC:global_group|H3734B0
-3734B0:lAD:global_search|H3734C8
-3734C8:lA5:group|H3734E0
-3734E0:lA5:heart|H3734F8
-3734F8:lA13:hipe_unified_loader|H373510
-373510:lA11:hipe_sparc_loader|H373520
-373520:lAF:hipe_x86_loader|H373530
-373530:lA9:inet6_tcp|H373540
-373540:lAE:inet6_tcp_dist|H373550
-373550:lA9:inet6_udp|H373560
-373560:lAB:inet_config|H373570
-373570:lAA:inet_hosts|H373580
-373580:lA13:inet_gethost_native|H373590
-373590:lAD:inet_tcp_dist|H3735A0
-3735A0:lA4:init|H3735B0
-3735B0:lA6:kernel|H3735C0
-3735C0:lAD:kernel_config|H3735D0
-3735D0:lA3:net|H3735E0
-3735E0:lA7:net_adm|H3735F0
-3735F0:lAA:net_kernel|H373600
-373600:lA2:os|H373610
-373610:lA8:ram_file|H373620
-373620:lA3:rpc|H373630
-373630:lA4:user|H373640
-373640:lA8:user_drv|H373650
-373650:lA8:user_sup|H373660
-373660:lA8:disk_log|H373670
-373670:lAA:disk_log_1|H373680
-373680:lAF:disk_log_server|H373690
-373690:lAC:disk_log_sup|H3736A0
-3736A0:lA7:dist_ac|H3736B0
-3736B0:lA8:erl_ddll|H3736C0
-3736C0:lA8:erl_epmd|H3736D0
-3736D0:lAA:erts_debug|H3736E0
-3736E0:lA7:gen_tcp|H3736F0
-3736F0:lA7:gen_udp|H373700
-373700:lA9:prim_inet|H373708
-373708:lA4:inet|H373710
-373710:lA7:inet_db|H373718
-373718:lA8:inet_dns|H373720
-373720:lAA:inet_parse|H373728
-373728:lA8:inet_res|H373730
-373730:lA8:inet_tcp|H373738
-373738:lA8:inet_udp|H373740
-373740:lA3:pg2|H373748
-373748:lA9:seq_trace|H373750
-373750:lA6:socks5|H373758
-373758:lAB:socks5_auth|H373760
-373760:lAA:socks5_tcp|H373768
-373768:lAA:socks5_udp|H373770
-373770:lAF:wrap_log_reader|H373778
-373778:lA4:zlib|H373780
-373780:lA9:otp_ring0|N
-373118:lH373148|H373154
-373148:t2:AA:registered,H37317C
-37317C:lA16:application_controller|H3731B8
-3731B8:lA9:erl_reply|H3731F4
-3731F4:lA4:auth|H373230
-373230:lAB:boot_server|H37326C
-37326C:lAB:code_server|H3732AC
-3732AC:lAF:disk_log_server|H3732E0
-3732E0:lAC:disk_log_sup|H37330C
-37330C:lAF:erl_prim_loader|H373338
-373338:lAC:error_logger|H373358
-373358:lAB:file_server|H373378
-373378:lAD:file_server_2|H373398
-373398:lAF:fixtable_server|H3733B0
-3733B0:lAC:global_group|H3733C8
-3733C8:lA12:global_name_server|H3733E0
-3733E0:lA5:heart|H3733F8
-3733F8:lA4:init|H373410
-373410:lAD:kernel_config|H373428
-373428:lAA:kernel_sup|H373440
-373440:lAA:net_kernel|H373458
-373458:lA7:net_sup|H373470
-373470:lA3:rex|H373488
-373488:lA4:user|H3734A0
-3734A0:lA9:os_server|H3734B8
-3734B8:lAB:ddll_server|H3734D0
-3734D0:lA8:erl_epmd|H3734E8
-3734E8:lA7:inet_db|H373500
-373500:lA3:pg2|N
-373154:lH373184|H373190
-373184:t2:AC:applications,N
-373190:lH3731C0|H3731CC
-3731C0:t2:A15:included_applications,N
-3731CC:lH3731FC|H373208
-3731FC:t2:A3:env,H373238
-373238:lH373274|N
-373274:t2:AC:error_logger,A3:tty
-373208:lH373240|H37324C
-373240:t2:AC:start_phases,A9:undefined
-37324C:lH373280|H37328C
-373280:t2:A4:maxT,A8:infinity
-37328C:lH3732B4|H3732C0
-3732B4:t2:A4:maxP,A8:infinity
-3732C0:lH3732E8|N
-3732E8:t2:A3:mod,H373314
-373314:t2:A6:kernel,N
-373048:lN|N
-372E4C:t2:AD:$initial_call,H372EE4
-372EE4:t3:A3:gen,A7:init_it,H372ED0
-372E58:t2:AA:$ancestors,H372EF4
-372EF4:lP<0.1.0>|N
-=proc_dictionary:<0.7.0>
-H369B78
-H369B5C
-=proc_stack:<0.7.0>
-369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:H369C2C
-y1:P<0.5.0>
-369d70:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A12:application_master
-y2:A4:init
-y3:H369B2C
-=proc_heap:<0.7.0>
-369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
-3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
-369A3C:lAB:application|H369A34
-369A34:lA16:application_controller|H369A2C
-369A2C:lA12:application_master|H369A24
-369A24:lA13:application_starter|H369A1C
-369A1C:lA4:auth|H369A14
-369A14:lA4:code|H369A0C
-369A0C:lA8:code_aux|H369A04
-369A04:lA8:packages|H3699FC
-3699FC:lAB:code_server|H3699F4
-3699F4:lA9:dist_util|H3699EC
-3699EC:lAF:erl_boot_server|H3699E4
-3699E4:lA10:erl_distribution|H3699DC
-3699DC:lAF:erl_prim_loader|H3699D4
-3699D4:lA9:erl_reply|H3699CC
-3699CC:lA6:erlang|H3699C4
-3699C4:lAD:error_handler|H3699BC
-3699BC:lAC:error_logger|H3699B4
-3699B4:lA4:file|H3699AC
-3699AC:lAB:file_server|H3699A4
-3699A4:lAF:old_file_server|H36999C
-36999C:lAE:file_io_server|H369994
-369994:lA9:prim_file|H36998C
-36998C:lA6:global|H369984
-369984:lAC:global_group|H36997C
-36997C:lAD:global_search|H369974
-369974:lA5:group|H36996C
-36996C:lA5:heart|H369964
-369964:lA13:hipe_unified_loader|H36995C
-36995C:lA11:hipe_sparc_loader|H369954
-369954:lAF:hipe_x86_loader|H36994C
-36994C:lA9:inet6_tcp|H369944
-369944:lAE:inet6_tcp_dist|H36993C
-36993C:lA9:inet6_udp|H369934
-369934:lAB:inet_config|H36992C
-36992C:lAA:inet_hosts|H369924
-369924:lA13:inet_gethost_native|H36991C
-36991C:lAD:inet_tcp_dist|H369914
-369914:lA4:init|H36990C
-36990C:lA6:kernel|H369904
-369904:lAD:kernel_config|H3698FC
-3698FC:lA3:net|H3698F4
-3698F4:lA7:net_adm|H3698EC
-3698EC:lAA:net_kernel|H3698E4
-3698E4:lA2:os|H3698DC
-3698DC:lA8:ram_file|H3698D4
-3698D4:lA3:rpc|H3698CC
-3698CC:lA4:user|H3698C4
-3698C4:lA8:user_drv|H3698BC
-3698BC:lA8:user_sup|H3698B4
-3698B4:lA8:disk_log|H3698AC
-3698AC:lAA:disk_log_1|H3698A4
-3698A4:lAF:disk_log_server|H36989C
-36989C:lAC:disk_log_sup|H369894
-369894:lA7:dist_ac|H36988C
-36988C:lA8:erl_ddll|H369884
-369884:lA8:erl_epmd|H36987C
-36987C:lAA:erts_debug|H369874
-369874:lA7:gen_tcp|H36986C
-36986C:lA7:gen_udp|H369864
-369864:lA9:prim_inet|H36985C
-36985C:lA4:inet|H369854
-369854:lA7:inet_db|H36984C
-36984C:lA8:inet_dns|H369844
-369844:lAA:inet_parse|H36983C
-36983C:lA8:inet_res|H369834
-369834:lA8:inet_tcp|H36982C
-36982C:lA8:inet_udp|H369824
-369824:lA3:pg2|H36981C
-36981C:lA9:seq_trace|H369814
-369814:lA6:socks5|H36980C
-36980C:lAB:socks5_auth|H369804
-369804:lAA:socks5_tcp|H3697FC
-3697FC:lAA:socks5_udp|H3697F4
-3697F4:lAF:wrap_log_reader|H3697EC
-3697EC:lA4:zlib|H3697E4
-3697E4:lA9:otp_ring0|N
-3697D8:t2:A6:kernel,N
-369B14:lA16:application_controller|H369B0C
-369B0C:lA9:erl_reply|H369B04
-369B04:lA4:auth|H369AFC
-369AFC:lAB:boot_server|H369AF4
-369AF4:lAB:code_server|H369AEC
-369AEC:lAF:disk_log_server|H369AE4
-369AE4:lAC:disk_log_sup|H369ADC
-369ADC:lAF:erl_prim_loader|H369AD4
-369AD4:lAC:error_logger|H369ACC
-369ACC:lAB:file_server|H369AC4
-369AC4:lAD:file_server_2|H369ABC
-369ABC:lAF:fixtable_server|H369AB4
-369AB4:lAC:global_group|H369AAC
-369AAC:lA12:global_name_server|H369AA4
-369AA4:lA5:heart|H369A9C
-369A9C:lA4:init|H369A94
-369A94:lAD:kernel_config|H369A8C
-369A8C:lAA:kernel_sup|H369A84
-369A84:lAA:net_kernel|H369A7C
-369A7C:lA7:net_sup|H369A74
-369A74:lA3:rex|H369A6C
-369A6C:lA4:user|H369A64
-369A64:lA9:os_server|H369A5C
-369A5C:lAB:ddll_server|H369A54
-369A54:lA8:erl_epmd|H369A4C
-369A4C:lA7:inet_db|H369A44
-369A44:lA3:pg2|N
-369B2C:lP<0.5.0>|H369B24
-369B24:lP<0.6.0>|H3697A8
-3697A8:lH3697B0|H369B1C
-369B1C:lA6:normal|N
-369B78:t2:AD:$initial_call,H369B68
-369B68:t3:A12:application_master,A4:init,H369B2C
-369B5C:t2:AA:$ancestors,H369B54
-369B54:lP<0.6.0>|N
-=proc_stack:<0.8.0>
-384ec0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H384BDC
-y1:A6:kernel
-y2:P<0.9.0>
-y3:P<0.7.0>
-=proc_heap:<0.8.0>
-384BDC:t2:A5:state,A3:tty
-=proc_dictionary:<0.9.0>
-H376850
-H37685C
-=proc_stack:<0.9.0>
-36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36B8E8
-y4:AA:kernel_sup
-y5:P<0.8.0>
-36be04:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3768D4
-=proc_heap:<0.9.0>
-36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
-36B8D4:lH36B8B0|H36B6E8
-36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
-376C00:lA6:kernel|N
-376BF0:t3:AA:supervisor,AA:start_link,H376C08
-376C08:lH376C10|H376C1C
-376C10:t2:A5:local,AF:kernel_safe_sup
-376C1C:lA6:kernel|H376C24
-376C24:lA4:safe|N
-36B6E8:lH36B6C4|H36B490
-36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
-376BC4:lAD:kernel_config|N
-376BB4:t3:AD:kernel_config,AA:start_link,N
-36B490:lH36B498|H36B4BC
-36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
-376B80:lA8:user_sup|N
-376B70:t3:A8:user_sup,A5:start,N
-36B4BC:lH36B4C4|H376CB0
-36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
-376B1C:lA4:code|N
-376B0C:t3:A4:code,AA:start_link,N
-376CB0:lH376CB8|H376CDC
-376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
-376AC8:lAF:old_file_server|N
-376AB8:t3:AF:old_file_server,AA:start_link,N
-376CDC:lH376CE4|H376C2C
-376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
-376A68:lA4:file|H376AB0
-376AB0:lAB:file_server|H376B04
-376B04:lAE:file_io_server|H376B68
-376B68:lA9:prim_file|N
-376A58:t3:AB:file_server,AA:start_link,N
-376C2C:lH376C34|H376C58
-376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
-376A04:lAC:global_group|N
-3769F4:t3:AC:global_group,AA:start_link,N
-376C58:lH376C60|H376C84
-376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
-37697C:lA10:erl_distribution|N
-37696C:t3:A10:erl_distribution,AA:start_link,N
-376C84:lH376C8C|H3768A0
-376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
-376904:lA7:inet_db|N
-3768F4:t3:A7:inet_db,AA:start_link,N
-3768A0:lH376938|H37695C
-376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
-3769C0:lA6:global|N
-3769B0:t3:A6:global,AA:start_link,N
-37695C:lH3769C8|N
-3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
-376A48:lA3:rpc|N
-376A38:t3:A3:rpc,AA:start_link,N
-376868:t2:A5:local,AA:kernel_sup
-3768D4:lAA:gen_server|H376964
-376964:lP<0.8.0>|H3769EC
-3769EC:lP<0.8.0>|H376A50
-376A50:lH376A9C|H376AA8
-376A9C:t2:A5:local,AA:kernel_sup
-376AA8:lAA:supervisor|H376AFC
-376AFC:lH376B50|H376B60
-376B50:t3:H376868,A6:kernel,N
-376B60:lN|N
-376850:t2:AD:$initial_call,H3768DC
-3768DC:t3:A3:gen,A7:init_it,H3768D4
-37685C:t2:AA:$ancestors,H3768EC
-3768EC:lP<0.8.0>|N
-=proc_dictionary:<0.10.0>
-H367A10
-H3679F4
-=proc_stack:<0.10.0>
-367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A3:rpc
-y3:H367AA8
-y4:A3:rex
-y5:P<0.9.0>
-367d08:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3679C4
-=proc_heap:<0.10.0>
-367AA8:t2:I0,A3:nil
-3679C4:lAA:gen_server|H3679BC
-3679BC:lP<0.9.0>|H3679B4
-3679B4:lP<0.9.0>|H367988
-367988:lH367990|H3679AC
-367990:t2:A5:local,A3:rex
-3679AC:lA3:rpc|H3679A4
-3679A4:lN|H36799C
-36799C:lN|N
-367A10:t2:AD:$initial_call,H367A00
-367A00:t3:A3:gen,A7:init_it,H3679C4
-3679F4:t2:AA:$ancestors,H3679EC
-3679EC:lAA:kernel_sup|H3679CC
-3679CC:lP<0.8.0>|N
-=proc_dictionary:<0.11.0>
-H36ADD8
-H36ADBC
-=proc_stack:<0.11.0>
-36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A6:global
-y3:H36AF0C
-y4:A12:global_name_server
-y5:P<0.9.0>
-36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36AD8C
-=proc_heap:<0.11.0>
-36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
-36AD8C:lAA:gen_server|H36AD84
-36AD84:lP<0.9.0>|H36AD7C
-36AD7C:lP<0.9.0>|H36AD50
-36AD50:lH36AD58|H36AD74
-36AD58:t2:A5:local,A12:global_name_server
-36AD74:lA6:global|H36AD6C
-36AD6C:lN|H36AD64
-36AD64:lN|N
-36ADD8:t2:AD:$initial_call,H36ADC8
-36ADC8:t3:A3:gen,A7:init_it,H36AD8C
-36ADBC:t2:AA:$ancestors,H36ADB4
-36ADB4:lAA:kernel_sup|H36AD94
-36AD94:lP<0.8.0>|N
-=proc_stack:<0.12.0>
-36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
-y0:N
-y1:N
-y2:N
-y3:N
-y4:N
-y5:N
-y6:A8:infinity
-y7:H368EB0
-y8:P<0.11.0>
-369244:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-=proc_heap:<0.12.0>
-368EB0:t3:A5:multi,A9:undefined,N
-=proc_stack:<0.13.0>
-3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
-y0:A8:infinity
-y1:N
-y2:P<0.11.0>
-3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
-y0:N
-y1:N
-y2:P<0.11.0>
-3695f0:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.13.0>
-=proc_dictionary:<0.14.0>
-H36A998
-H36A9A4
-=proc_stack:<0.14.0>
-372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:inet_db
-y3:H36A9B0
-y4:A7:inet_db
-y5:P<0.9.0>
-372e28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36A9C8
-=proc_heap:<0.14.0>
-36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
-36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
-36A9C8:lAA:gen_server|H36A9F8
-36A9F8:lP<0.9.0>|H36AA08
-36AA08:lP<0.9.0>|H36AA10
-36AA10:lH36AA18|H36AA24
-36AA18:t2:A5:local,A7:inet_db
-36AA24:lA7:inet_db|H36AA2C
-36AA2C:lN|H36AA34
-36AA34:lN|N
-36A998:t2:AD:$initial_call,H36A9D0
-36A9D0:t3:A3:gen,A7:init_it,H36A9C8
-36A9A4:t2:AA:$ancestors,H36A9E0
-36A9E0:lAA:kernel_sup|H36AA00
-36AA00:lP<0.8.0>|N
-=proc_dictionary:<0.15.0>
-H372788
-H3727F8
-H37276C
-H37280C
-H372820
-=proc_stack:<0.15.0>
-372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AC:global_group
-y3:H3728C8
-y4:AC:global_group
-y5:P<0.9.0>
-372a80:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37273C
-=proc_heap:<0.15.0>
-3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
-37273C:lAA:gen_server|H372734
-372734:lP<0.9.0>|H37272C
-37272C:lP<0.9.0>|H372700
-372700:lH372708|H372724
-372708:t2:A5:local,AC:global_group
-372724:lAC:global_group|H37271C
-37271C:lN|H372714
-372714:lN|N
-372788:t2:AD:$initial_call,H372778
-372778:t3:A3:gen,A7:init_it,H37273C
-3727F8:t2:A10:registered_names,H3727F0
-3727F0:lA9:undefined|N
-37276C:t2:AA:$ancestors,H372764
-372764:lAA:kernel_sup|H372744
-372744:lP<0.8.0>|N
-37280C:t2:A4:send,H372804
-372804:lA9:undefined|N
-372820:t2:AC:whereis_name,H372818
-372818:lA9:undefined|N
-=proc_dictionary:<0.16.0>
-H37B918
-H37B924
-=proc_stack:<0.16.0>
-3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AB:file_server
-y3:p<0.4>
-y4:AD:file_server_2
-y5:P<0.9.0>
-3d3058:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37B930
-=proc_heap:<0.16.0>
-37B930:lAA:gen_server|H37B950
-37B950:lP<0.9.0>|H37B960
-37B960:lP<0.9.0>|H37B968
-37B968:lH37B970|H37B97C
-37B970:t2:A5:local,AD:file_server_2
-37B97C:lAB:file_server|H37B984
-37B984:lN|H37B98C
-37B98C:lN|N
-37B918:t2:AD:$initial_call,H37B938
-37B938:t3:A3:gen,A7:init_it,H37B930
-37B924:t2:AA:$ancestors,H37B948
-37B948:lAA:kernel_sup|H37B958
-37B958:lP<0.8.0>|N
-=proc_stack:<0.17.0>
-3763cc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H376084
-y1:P<0.16.0>
-y2:P<0.9.0>
-=proc_heap:<0.17.0>
-376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
-=proc_stack:<0.18.0>
-3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H38AE84
-y1:P<0.9.0>
-=proc_heap:<0.18.0>
-38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
-38AEB8:lH3873D4|H38AEE0
-3873D4:lI46|N
-38AEE0:lH3873EC|H38AF10
-3873EC:lI47|H387404
-387404:lI99|H387424
-387424:lI108|H38744C
-38744C:lI101|H38747C
-38747C:lI97|H3874B4
-3874B4:lI114|H3874F4
-3874F4:lI99|H38753C
-38753C:lI97|H38758C
-38758C:lI115|H3875E4
-3875E4:lI101|H387644
-387644:lI47|H3876AC
-3876AC:lI111|H38771C
-38771C:lI116|H387794
-387794:lI112|H387814
-387814:lI47|H38789C
-38789C:lI101|H38792C
-38792C:lI114|H3879BC
-3879BC:lI116|H387A54
-387A54:lI115|H387AF4
-387AF4:lI47|H387B9C
-387B9C:lI108|H387C4C
-387C4C:lI105|H387D04
-387D04:lI98|H387DC4
-387DC4:lI47|H387E8C
-387E8C:lI107|H387F5C
-387F5C:lI101|H388034
-388034:lI114|H388114
-388114:lI110|H3881FC
-3881FC:lI101|H3882EC
-3882EC:lI108|H3883E4
-3883E4:lI47|H3884E4
-3884E4:lI101|H3885EC
-3885EC:lI98|H3886FC
-3886FC:lI105|H388814
-388814:lI110|N
-38AF10:lH38740C|H38AF48
-38740C:lI47|H38742C
-38742C:lI99|H387454
-387454:lI108|H387484
-387484:lI101|H3874BC
-3874BC:lI97|H3874FC
-3874FC:lI114|H387544
-387544:lI99|H387594
-387594:lI97|H3875EC
-3875EC:lI115|H38764C
-38764C:lI101|H3876B4
-3876B4:lI47|H387724
-387724:lI111|H38779C
-38779C:lI116|H38781C
-38781C:lI112|H3878A4
-3878A4:lI47|H387934
-387934:lI101|H3879C4
-3879C4:lI114|H387A5C
-387A5C:lI116|H387AFC
-387AFC:lI115|H387BA4
-387BA4:lI47|H387C54
-387C54:lI108|H387D0C
-387D0C:lI105|H387DCC
-387DCC:lI98|H387E94
-387E94:lI47|H387F64
-387F64:lI115|H38803C
-38803C:lI116|H38811C
-38811C:lI100|H388204
-388204:lI108|H3882F4
-3882F4:lI105|H3883EC
-3883EC:lI98|H3884EC
-3884EC:lI47|H3885F4
-3885F4:lI101|H388704
-388704:lI98|H38881C
-38881C:lI105|H38892C
-38892C:lI110|N
-38AF48:lH387434|H38AF70
-387434:lI47|H38745C
-38745C:lI99|H38748C
-38748C:lI108|H3874C4
-3874C4:lI101|H387504
-387504:lI97|H38754C
-38754C:lI114|H38759C
-38759C:lI99|H3875F4
-3875F4:lI97|H387654
-387654:lI115|H3876BC
-3876BC:lI101|H38772C
-38772C:lI47|H3877A4
-3877A4:lI111|H387824
-387824:lI116|H3878AC
-3878AC:lI112|H38793C
-38793C:lI47|H3879CC
-3879CC:lI101|H387A64
-387A64:lI114|H387B04
-387B04:lI116|H387BAC
-387BAC:lI115|H387C5C
-387C5C:lI47|H387D14
-387D14:lI108|H387DD4
-387DD4:lI105|H387E9C
-387E9C:lI98|H387F6C
-387F6C:lI47|H388044
-388044:lI119|H388124
-388124:lI101|H38820C
-38820C:lI98|H3882FC
-3882FC:lI116|H3883F4
-3883F4:lI111|H3884F4
-3884F4:lI111|H3885FC
-3885FC:lI108|H38870C
-38870C:lI47|H388824
-388824:lI101|H388934
-388934:lI98|H388A44
-388A44:lI105|H388B54
-388B54:lI110|N
-38AF70:lH387464|H38AF98
-387464:lI47|H387494
-387494:lI99|H3874CC
-3874CC:lI108|H38750C
-38750C:lI101|H387554
-387554:lI97|H3875A4
-3875A4:lI114|H3875FC
-3875FC:lI99|H38765C
-38765C:lI97|H3876C4
-3876C4:lI115|H387734
-387734:lI101|H3877AC
-3877AC:lI47|H38782C
-38782C:lI111|H3878B4
-3878B4:lI116|H387944
-387944:lI112|H3879D4
-3879D4:lI47|H387A6C
-387A6C:lI101|H387B0C
-387B0C:lI114|H387BB4
-387BB4:lI116|H387C64
-387C64:lI115|H387D1C
-387D1C:lI47|H387DDC
-387DDC:lI108|H387EA4
-387EA4:lI105|H387F74
-387F74:lI98|H38804C
-38804C:lI47|H38812C
-38812C:lI116|H388214
-388214:lI118|H388304
-388304:lI47|H3883FC
-3883FC:lI101|H3884FC
-3884FC:lI98|H388604
-388604:lI105|H388714
-388714:lI110|N
-38AF98:lH38749C|H38AFC0
-38749C:lI47|H3874D4
-3874D4:lI99|H387514
-387514:lI108|H38755C
-38755C:lI101|H3875AC
-3875AC:lI97|H387604
-387604:lI114|H387664
-387664:lI99|H3876CC
-3876CC:lI97|H38773C
-38773C:lI115|H3877B4
-3877B4:lI101|H387834
-387834:lI47|H3878BC
-3878BC:lI111|H38794C
-38794C:lI116|H3879DC
-3879DC:lI112|H387A74
-387A74:lI47|H387B14
-387B14:lI101|H387BBC
-387BBC:lI114|H387C6C
-387C6C:lI116|H387D24
-387D24:lI115|H387DE4
-387DE4:lI47|H387EAC
-387EAC:lI108|H387F7C
-387F7C:lI105|H388054
-388054:lI98|H388134
-388134:lI47|H38821C
-38821C:lI116|H38830C
-38830C:lI115|H388404
-388404:lI112|H388504
-388504:lI47|H38860C
-38860C:lI101|H38871C
-38871C:lI98|H38882C
-38882C:lI105|H38893C
-38893C:lI110|N
-38AFC0:lH3874DC|H38AFE8
-3874DC:lI47|H38751C
-38751C:lI99|H387564
-387564:lI108|H3875B4
-3875B4:lI101|H38760C
-38760C:lI97|H38766C
-38766C:lI114|H3876D4
-3876D4:lI99|H387744
-387744:lI97|H3877BC
-3877BC:lI115|H38783C
-38783C:lI101|H3878C4
-3878C4:lI47|H387954
-387954:lI111|H3879E4
-3879E4:lI116|H387A7C
-387A7C:lI112|H387B1C
-387B1C:lI47|H387BC4
-387BC4:lI101|H387C74
-387C74:lI114|H387D2C
-387D2C:lI116|H387DEC
-387DEC:lI115|H387EB4
-387EB4:lI47|H387F84
-387F84:lI108|H38805C
-38805C:lI105|H38813C
-38813C:lI98|H388224
-388224:lI47|H388314
-388314:lI116|H38840C
-38840C:lI111|H38850C
-38850C:lI111|H388614
-388614:lI108|H388724
-388724:lI115|H388834
-388834:lI47|H388944
-388944:lI101|H388A4C
-388A4C:lI98|H388B5C
-388B5C:lI105|H388C6C
-388C6C:lI110|N
-38AFE8:lH387524|H38B008
-387524:lI47|H38756C
-38756C:lI99|H3875BC
-3875BC:lI108|H387614
-387614:lI101|H387674
-387674:lI97|H3876DC
-3876DC:lI114|H38774C
-38774C:lI99|H3877C4
-3877C4:lI97|H387844
-387844:lI115|H3878CC
-3878CC:lI101|H38795C
-38795C:lI47|H3879EC
-3879EC:lI111|H387A84
-387A84:lI116|H387B24
-387B24:lI112|H387BCC
-387BCC:lI47|H387C7C
-387C7C:lI101|H387D34
-387D34:lI114|H387DF4
-387DF4:lI116|H387EBC
-387EBC:lI115|H387F8C
-387F8C:lI47|H388064
-388064:lI108|H388144
-388144:lI105|H38822C
-38822C:lI98|H38831C
-38831C:lI47|H388414
-388414:lI116|H388514
-388514:lI111|H38861C
-38861C:lI111|H38872C
-38872C:lI108|H38883C
-38883C:lI98|H38894C
-38894C:lI97|H388A54
-388A54:lI114|H388B64
-388B64:lI47|H388C74
-388C74:lI101|H388D84
-388D84:lI98|H388E9C
-388E9C:lI105|H388FB4
-388FB4:lI110|N
-38B008:lH387574|H38B018
-387574:lI47|H3875C4
-3875C4:lI99|H38761C
-38761C:lI108|H38767C
-38767C:lI101|H3876E4
-3876E4:lI97|H387754
-387754:lI114|H3877CC
-3877CC:lI99|H38784C
-38784C:lI97|H3878D4
-3878D4:lI115|H387964
-387964:lI101|H3879F4
-3879F4:lI47|H387A8C
-387A8C:lI111|H387B2C
-387B2C:lI116|H387BD4
-387BD4:lI112|H387C84
-387C84:lI47|H387D3C
-387D3C:lI101|H387DFC
-387DFC:lI114|H387EC4
-387EC4:lI116|H387F94
-387F94:lI115|H38806C
-38806C:lI47|H38814C
-38814C:lI108|H388234
-388234:lI105|H388324
-388324:lI98|H38841C
-38841C:lI47|H38851C
-38851C:lI116|H388624
-388624:lI101|H388734
-388734:lI115|H388844
-388844:lI116|H388954
-388954:lI95|H388A5C
-388A5C:lI115|H388B6C
-388B6C:lI101|H388C7C
-388C7C:lI114|H388D8C
-388D8C:lI118|H388EA4
-388EA4:lI101|H388FBC
-388FBC:lI114|H3890D4
-3890D4:lI47|H3891EC
-3891EC:lI101|H3892FC
-3892FC:lI98|H38940C
-38940C:lI105|H38951C
-38951C:lI110|N
-38B018:lH3875CC|H38AE7C
-3875CC:lI47|H387624
-387624:lI99|H387684
-387684:lI108|H3876EC
-3876EC:lI101|H38775C
-38775C:lI97|H3877D4
-3877D4:lI114|H387854
-387854:lI99|H3878DC
-3878DC:lI97|H38796C
-38796C:lI115|H3879FC
-3879FC:lI101|H387A94
-387A94:lI47|H387B34
-387B34:lI111|H387BDC
-387BDC:lI116|H387C8C
-387C8C:lI112|H387D44
-387D44:lI47|H387E04
-387E04:lI101|H387ECC
-387ECC:lI114|H387F9C
-387F9C:lI116|H388074
-388074:lI115|H388154
-388154:lI47|H38823C
-38823C:lI108|H38832C
-38832C:lI105|H388424
-388424:lI98|H388524
-388524:lI47|H38862C
-38862C:lI115|H38873C
-38873C:lI115|H38884C
-38884C:lI108|H38895C
-38895C:lI47|H388A64
-388A64:lI101|H388B74
-388B74:lI98|H388C84
-388C84:lI105|H388D94
-388D94:lI110|N
-38AE7C:lH38762C|H38AEB0
-38762C:lI47|H38768C
-38768C:lI99|H3876F4
-3876F4:lI108|H387764
-387764:lI101|H3877DC
-3877DC:lI97|H38785C
-38785C:lI114|H3878E4
-3878E4:lI99|H387974
-387974:lI97|H387A04
-387A04:lI115|H387A9C
-387A9C:lI101|H387B3C
-387B3C:lI47|H387BE4
-387BE4:lI111|H387C94
-387C94:lI116|H387D4C
-387D4C:lI112|H387E0C
-387E0C:lI47|H387ED4
-387ED4:lI101|H387FA4
-387FA4:lI114|H38807C
-38807C:lI116|H38815C
-38815C:lI115|H388244
-388244:lI47|H388334
-388334:lI108|H38842C
-38842C:lI105|H38852C
-38852C:lI98|H388634
-388634:lI47|H388744
-388744:lI115|H388854
-388854:lI110|H388964
-388964:lI109|H388A6C
-388A6C:lI112|H388B7C
-388B7C:lI47|H388C8C
-388C8C:lI101|H388D9C
-388D9C:lI98|H388EAC
-388EAC:lI105|H388FC4
-388FC4:lI110|N
-38AEB0:lH387694|H38AED8
-387694:lI47|H3876FC
-3876FC:lI99|H38776C
-38776C:lI108|H3877E4
-3877E4:lI101|H387864
-387864:lI97|H3878EC
-3878EC:lI114|H38797C
-38797C:lI99|H387A0C
-387A0C:lI97|H387AA4
-387AA4:lI115|H387B44
-387B44:lI101|H387BEC
-387BEC:lI47|H387C9C
-387C9C:lI111|H387D54
-387D54:lI116|H387E14
-387E14:lI112|H387EDC
-387EDC:lI47|H387FAC
-387FAC:lI101|H388084
-388084:lI114|H388164
-388164:lI116|H38824C
-38824C:lI115|H38833C
-38833C:lI47|H388434
-388434:lI108|H388534
-388534:lI105|H38863C
-38863C:lI98|H38874C
-38874C:lI47|H38885C
-38885C:lI115|H38896C
-38896C:lI97|H388A74
-388A74:lI115|H388B84
-388B84:lI108|H388C94
-388C94:lI47|H388DA4
-388DA4:lI101|H388EB4
-388EB4:lI98|H388FCC
-388FCC:lI105|H3890DC
-3890DC:lI110|N
-38AED8:lH387704|H38AF08
-387704:lI47|H387774
-387774:lI99|H3877EC
-3877EC:lI108|H38786C
-38786C:lI101|H3878F4
-3878F4:lI97|H387984
-387984:lI114|H387A14
-387A14:lI99|H387AAC
-387AAC:lI97|H387B4C
-387B4C:lI115|H387BF4
-387BF4:lI101|H387CA4
-387CA4:lI47|H387D5C
-387D5C:lI111|H387E1C
-387E1C:lI116|H387EE4
-387EE4:lI112|H387FB4
-387FB4:lI47|H38808C
-38808C:lI101|H38816C
-38816C:lI114|H388254
-388254:lI116|H388344
-388344:lI115|H38843C
-38843C:lI47|H38853C
-38853C:lI108|H388644
-388644:lI105|H388754
-388754:lI98|H388864
-388864:lI47|H388974
-388974:lI114|H388A7C
-388A7C:lI117|H388B8C
-388B8C:lI110|H388C9C
-388C9C:lI116|H388DAC
-388DAC:lI105|H388EBC
-388EBC:lI109|H388FD4
-388FD4:lI101|H3890E4
-3890E4:lI95|H3891F4
-3891F4:lI116|H389304
-389304:lI111|H389414
-389414:lI111|H389524
-389524:lI108|H389624
-389624:lI115|H38971C
-38971C:lI47|H389814
-389814:lI101|H38990C
-38990C:lI98|H389A04
-389A04:lI105|H389AE4
-389AE4:lI110|N
-38AF08:lH38777C|H38AF40
-38777C:lI47|H3877F4
-3877F4:lI99|H387874
-387874:lI108|H3878FC
-3878FC:lI101|H38798C
-38798C:lI97|H387A1C
-387A1C:lI114|H387AB4
-387AB4:lI99|H387B54
-387B54:lI97|H387BFC
-387BFC:lI115|H387CAC
-387CAC:lI101|H387D64
-387D64:lI47|H387E24
-387E24:lI111|H387EEC
-387EEC:lI116|H387FBC
-387FBC:lI112|H388094
-388094:lI47|H388174
-388174:lI101|H38825C
-38825C:lI114|H38834C
-38834C:lI116|H388444
-388444:lI115|H388544
-388544:lI47|H38864C
-38864C:lI108|H38875C
-38875C:lI105|H38886C
-38886C:lI98|H38897C
-38897C:lI47|H388A84
-388A84:lI114|H388B94
-388B94:lI115|H388CA4
-388CA4:lI104|H388DB4
-388DB4:lI101|H388EC4
-388EC4:lI108|H388FDC
-388FDC:lI108|H3890EC
-3890EC:lI47|H3891FC
-3891FC:lI101|H38930C
-38930C:lI98|H38941C
-38941C:lI105|H38952C
-38952C:lI110|N
-38AF40:lH3877FC|H38AF68
-3877FC:lI47|H38787C
-38787C:lI99|H387904
-387904:lI108|H387994
-387994:lI101|H387A24
-387A24:lI97|H387ABC
-387ABC:lI114|H387B5C
-387B5C:lI99|H387C04
-387C04:lI97|H387CB4
-387CB4:lI115|H387D6C
-387D6C:lI101|H387E2C
-387E2C:lI47|H387EF4
-387EF4:lI111|H387FC4
-387FC4:lI116|H38809C
-38809C:lI112|H38817C
-38817C:lI47|H388264
-388264:lI101|H388354
-388354:lI114|H38844C
-38844C:lI116|H38854C
-38854C:lI115|H388654
-388654:lI47|H388764
-388764:lI108|H388874
-388874:lI105|H388984
-388984:lI98|H388A8C
-388A8C:lI47|H388B9C
-388B9C:lI112|H388CAC
-388CAC:lI109|H388DBC
-388DBC:lI97|H388ECC
-388ECC:lI110|H388FE4
-388FE4:lI47|H3890F4
-3890F4:lI101|H389204
-389204:lI98|H389314
-389314:lI105|H389424
-389424:lI110|N
-38AF68:lH387884|H38AF90
-387884:lI47|H38790C
-38790C:lI99|H38799C
-38799C:lI108|H387A2C
-387A2C:lI101|H387AC4
-387AC4:lI97|H387B64
-387B64:lI114|H387C0C
-387C0C:lI99|H387CBC
-387CBC:lI97|H387D74
-387D74:lI115|H387E34
-387E34:lI101|H387EFC
-387EFC:lI47|H387FCC
-387FCC:lI111|H3880A4
-3880A4:lI116|H388184
-388184:lI112|H38826C
-38826C:lI47|H38835C
-38835C:lI101|H388454
-388454:lI114|H388554
-388554:lI116|H38865C
-38865C:lI115|H38876C
-38876C:lI47|H38887C
-38887C:lI108|H38898C
-38898C:lI105|H388A94
-388A94:lI98|H388BA4
-388BA4:lI47|H388CB4
-388CB4:lI112|H388DC4
-388DC4:lI97|H388ED4
-388ED4:lI114|H388FEC
-388FEC:lI115|H3890FC
-3890FC:lI101|H38920C
-38920C:lI116|H38931C
-38931C:lI111|H38942C
-38942C:lI111|H389534
-389534:lI108|H38962C
-38962C:lI115|H389724
-389724:lI47|H38981C
-38981C:lI101|H389914
-389914:lI98|H389A0C
-389A0C:lI105|H389AEC
-389AEC:lI110|N
-38AF90:lH387914|H38AFB8
-387914:lI47|H3879A4
-3879A4:lI99|H387A34
-387A34:lI108|H387ACC
-387ACC:lI101|H387B6C
-387B6C:lI97|H387C14
-387C14:lI114|H387CC4
-387CC4:lI99|H387D7C
-387D7C:lI97|H387E3C
-387E3C:lI115|H387F04
-387F04:lI101|H387FD4
-387FD4:lI47|H3880AC
-3880AC:lI111|H38818C
-38818C:lI116|H388274
-388274:lI112|H388364
-388364:lI47|H38845C
-38845C:lI101|H38855C
-38855C:lI114|H388664
-388664:lI116|H388774
-388774:lI115|H388884
-388884:lI47|H388994
-388994:lI108|H388A9C
-388A9C:lI105|H388BAC
-388BAC:lI98|H388CBC
-388CBC:lI47|H388DCC
-388DCC:lI111|H388EDC
-388EDC:lI116|H388FF4
-388FF4:lI112|H389104
-389104:lI95|H389214
-389214:lI109|H389324
-389324:lI105|H389434
-389434:lI98|H38953C
-38953C:lI115|H389634
-389634:lI47|H38972C
-38972C:lI101|H389824
-389824:lI98|H38991C
-38991C:lI105|H389A14
-389A14:lI110|N
-38AFB8:lH3879AC|H38AFE0
-3879AC:lI47|H387A3C
-387A3C:lI99|H387AD4
-387AD4:lI108|H387B74
-387B74:lI101|H387C1C
-387C1C:lI97|H387CCC
-387CCC:lI114|H387D84
-387D84:lI99|H387E44
-387E44:lI97|H387F0C
-387F0C:lI115|H387FDC
-387FDC:lI101|H3880B4
-3880B4:lI47|H388194
-388194:lI111|H38827C
-38827C:lI116|H38836C
-38836C:lI112|H388464
-388464:lI47|H388564
-388564:lI101|H38866C
-38866C:lI114|H38877C
-38877C:lI116|H38888C
-38888C:lI115|H38899C
-38899C:lI47|H388AA4
-388AA4:lI108|H388BB4
-388BB4:lI105|H388CC4
-388CC4:lI98|H388DD4
-388DD4:lI47|H388EE4
-388EE4:lI111|H388FFC
-388FFC:lI115|H38910C
-38910C:lI95|H38921C
-38921C:lI109|H38932C
-38932C:lI111|H38943C
-38943C:lI110|H389544
-389544:lI47|H38963C
-38963C:lI101|H389734
-389734:lI98|H38982C
-38982C:lI105|H389924
-389924:lI110|N
-38AFE0:lH387A44|H38B000
-387A44:lI47|H387ADC
-387ADC:lI99|H387B7C
-387B7C:lI108|H387C24
-387C24:lI101|H387CD4
-387CD4:lI97|H387D8C
-387D8C:lI114|H387E4C
-387E4C:lI99|H387F14
-387F14:lI97|H387FE4
-387FE4:lI115|H3880BC
-3880BC:lI101|H38819C
-38819C:lI47|H388284
-388284:lI111|H388374
-388374:lI116|H38846C
-38846C:lI112|H38856C
-38856C:lI47|H388674
-388674:lI101|H388784
-388784:lI114|H388894
-388894:lI116|H3889A4
-3889A4:lI115|H388AAC
-388AAC:lI47|H388BBC
-388BBC:lI108|H388CCC
-388CCC:lI105|H388DDC
-388DDC:lI98|H388EEC
-388EEC:lI47|H389004
-389004:lI111|H389114
-389114:lI114|H389224
-389224:lI98|H389334
-389334:lI101|H389444
-389444:lI114|H38954C
-38954C:lI47|H389644
-389644:lI101|H38973C
-38973C:lI98|H389834
-389834:lI105|H38992C
-38992C:lI110|N
-38B000:lH387AE4|H38B010
-387AE4:lI47|H387B84
-387B84:lI99|H387C2C
-387C2C:lI108|H387CDC
-387CDC:lI101|H387D94
-387D94:lI97|H387E54
-387E54:lI114|H387F1C
-387F1C:lI99|H387FEC
-387FEC:lI97|H3880C4
-3880C4:lI115|H3881A4
-3881A4:lI101|H38828C
-38828C:lI47|H38837C
-38837C:lI111|H388474
-388474:lI116|H388574
-388574:lI112|H38867C
-38867C:lI47|H38878C
-38878C:lI101|H38889C
-38889C:lI114|H3889AC
-3889AC:lI116|H388AB4
-388AB4:lI115|H388BC4
-388BC4:lI47|H388CD4
-388CD4:lI108|H388DE4
-388DE4:lI105|H388EF4
-388EF4:lI98|H38900C
-38900C:lI47|H38911C
-38911C:lI111|H38922C
-38922C:lI100|H38933C
-38933C:lI98|H38944C
-38944C:lI99|H389554
-389554:lI47|H38964C
-38964C:lI101|H389744
-389744:lI98|H38983C
-38983C:lI105|H389934
-389934:lI110|N
-38B010:lH387B8C|H38B020
-387B8C:lI47|H387C34
-387C34:lI99|H387CE4
-387CE4:lI108|H387D9C
-387D9C:lI101|H387E5C
-387E5C:lI97|H387F24
-387F24:lI114|H387FF4
-387FF4:lI99|H3880CC
-3880CC:lI97|H3881AC
-3881AC:lI115|H388294
-388294:lI101|H388384
-388384:lI47|H38847C
-38847C:lI111|H38857C
-38857C:lI116|H388684
-388684:lI112|H388794
-388794:lI47|H3888A4
-3888A4:lI101|H3889B4
-3889B4:lI114|H388ABC
-388ABC:lI116|H388BCC
-388BCC:lI115|H388CDC
-388CDC:lI47|H388DEC
-388DEC:lI108|H388EFC
-388EFC:lI105|H389014
-389014:lI98|H389124
-389124:lI47|H389234
-389234:lI111|H389344
-389344:lI98|H389454
-389454:lI115|H38955C
-38955C:lI101|H389654
-389654:lI114|H38974C
-38974C:lI118|H389844
-389844:lI101|H38993C
-38993C:lI114|H389A1C
-389A1C:lI47|H389AF4
-389AF4:lI101|H389BBC
-389BBC:lI98|H389C84
-389C84:lI105|H389D4C
-389D4C:lI110|N
-38B020:lH387C3C|H38B028
-387C3C:lI47|H387CEC
-387CEC:lI99|H387DA4
-387DA4:lI108|H387E64
-387E64:lI101|H387F2C
-387F2C:lI97|H387FFC
-387FFC:lI114|H3880D4
-3880D4:lI99|H3881B4
-3881B4:lI97|H38829C
-38829C:lI115|H38838C
-38838C:lI101|H388484
-388484:lI47|H388584
-388584:lI111|H38868C
-38868C:lI116|H38879C
-38879C:lI112|H3888AC
-3888AC:lI47|H3889BC
-3889BC:lI101|H388AC4
-388AC4:lI114|H388BD4
-388BD4:lI116|H388CE4
-388CE4:lI115|H388DF4
-388DF4:lI47|H388F04
-388F04:lI108|H38901C
-38901C:lI105|H38912C
-38912C:lI98|H38923C
-38923C:lI47|H38934C
-38934C:lI109|H38945C
-38945C:lI110|H389564
-389564:lI101|H38965C
-38965C:lI115|H389754
-389754:lI105|H38984C
-38984C:lI97|H389944
-389944:lI95|H389A24
-389A24:lI115|H389AFC
-389AFC:lI101|H389BC4
-389BC4:lI115|H389C8C
-389C8C:lI115|H389D54
-389D54:lI105|H389E14
-389E14:lI111|H389ECC
-389ECC:lI110|H389F7C
-389F7C:lI47|H38A01C
-38A01C:lI101|H38A0AC
-38A0AC:lI98|H38A12C
-38A12C:lI105|H38A19C
-38A19C:lI110|N
-38B028:lH387CF4|H38B030
-387CF4:lI47|H387DAC
-387DAC:lI99|H387E6C
-387E6C:lI108|H387F34
-387F34:lI101|H388004
-388004:lI97|H3880DC
-3880DC:lI114|H3881BC
-3881BC:lI99|H3882A4
-3882A4:lI97|H388394
-388394:lI115|H38848C
-38848C:lI101|H38858C
-38858C:lI47|H388694
-388694:lI111|H3887A4
-3887A4:lI116|H3888B4
-3888B4:lI112|H3889C4
-3889C4:lI47|H388ACC
-388ACC:lI101|H388BDC
-388BDC:lI114|H388CEC
-388CEC:lI116|H388DFC
-388DFC:lI115|H388F0C
-388F0C:lI47|H389024
-389024:lI108|H389134
-389134:lI105|H389244
-389244:lI98|H389354
-389354:lI47|H389464
-389464:lI109|H38956C
-38956C:lI110|H389664
-389664:lI101|H38975C
-38975C:lI115|H389854
-389854:lI105|H38994C
-38994C:lI97|H389A2C
-389A2C:lI47|H389B04
-389B04:lI101|H389BCC
-389BCC:lI98|H389C94
-389C94:lI105|H389D5C
-389D5C:lI110|N
-38B030:lH387DB4|H38B038
-387DB4:lI47|H387E74
-387E74:lI99|H387F3C
-387F3C:lI108|H38800C
-38800C:lI101|H3880E4
-3880E4:lI97|H3881C4
-3881C4:lI114|H3882AC
-3882AC:lI99|H38839C
-38839C:lI97|H388494
-388494:lI115|H388594
-388594:lI101|H38869C
-38869C:lI47|H3887AC
-3887AC:lI111|H3888BC
-3888BC:lI116|H3889CC
-3889CC:lI112|H388AD4
-388AD4:lI47|H388BE4
-388BE4:lI101|H388CF4
-388CF4:lI114|H388E04
-388E04:lI116|H388F14
-388F14:lI115|H38902C
-38902C:lI47|H38913C
-38913C:lI108|H38924C
-38924C:lI105|H38935C
-38935C:lI98|H38946C
-38946C:lI47|H389574
-389574:lI109|H38966C
-38966C:lI110|H389764
-389764:lI101|H38985C
-38985C:lI109|H389954
-389954:lI111|H389A34
-389A34:lI115|H389B0C
-389B0C:lI121|H389BD4
-389BD4:lI110|H389C9C
-389C9C:lI101|H389D64
-389D64:lI47|H389E1C
-389E1C:lI101|H389ED4
-389ED4:lI98|H389F84
-389F84:lI105|H38A024
-38A024:lI110|N
-38B038:lH387E7C|H38B040
-387E7C:lI47|H387F44
-387F44:lI99|H388014
-388014:lI108|H3880EC
-3880EC:lI101|H3881CC
-3881CC:lI97|H3882B4
-3882B4:lI114|H3883A4
-3883A4:lI99|H38849C
-38849C:lI97|H38859C
-38859C:lI115|H3886A4
-3886A4:lI101|H3887B4
-3887B4:lI47|H3888C4
-3888C4:lI111|H3889D4
-3889D4:lI116|H388ADC
-388ADC:lI112|H388BEC
-388BEC:lI47|H388CFC
-388CFC:lI101|H388E0C
-388E0C:lI114|H388F1C
-388F1C:lI116|H389034
-389034:lI115|H389144
-389144:lI47|H389254
-389254:lI108|H389364
-389364:lI105|H389474
-389474:lI98|H38957C
-38957C:lI47|H389674
-389674:lI109|H38976C
-38976C:lI101|H389864
-389864:lI103|H38995C
-38995C:lI97|H389A3C
-389A3C:lI99|H389B14
-389B14:lI111|H389BDC
-389BDC:lI47|H389CA4
-389CA4:lI101|H389D6C
-389D6C:lI98|H389E24
-389E24:lI105|H389EDC
-389EDC:lI110|N
-38B040:lH387F4C|H38B048
-387F4C:lI47|H38801C
-38801C:lI99|H3880F4
-3880F4:lI108|H3881D4
-3881D4:lI101|H3882BC
-3882BC:lI97|H3883AC
-3883AC:lI114|H3884A4
-3884A4:lI99|H3885A4
-3885A4:lI97|H3886AC
-3886AC:lI115|H3887BC
-3887BC:lI101|H3888CC
-3888CC:lI47|H3889DC
-3889DC:lI111|H388AE4
-388AE4:lI116|H388BF4
-388BF4:lI112|H388D04
-388D04:lI47|H388E14
-388E14:lI101|H388F24
-388F24:lI114|H38903C
-38903C:lI116|H38914C
-38914C:lI115|H38925C
-38925C:lI47|H38936C
-38936C:lI108|H38947C
-38947C:lI105|H389584
-389584:lI98|H38967C
-38967C:lI47|H389774
-389774:lI106|H38986C
-38986C:lI105|H389964
-389964:lI110|H389A44
-389A44:lI116|H389B1C
-389B1C:lI101|H389BE4
-389BE4:lI114|H389CAC
-389CAC:lI102|H389D74
-389D74:lI97|H389E2C
-389E2C:lI99|H389EE4
-389EE4:lI101|N
-38B048:lH388024|H38B050
-388024:lI47|H3880FC
-3880FC:lI99|H3881DC
-3881DC:lI108|H3882C4
-3882C4:lI101|H3883B4
-3883B4:lI97|H3884AC
-3884AC:lI114|H3885AC
-3885AC:lI99|H3886B4
-3886B4:lI97|H3887C4
-3887C4:lI115|H3888D4
-3888D4:lI101|H3889E4
-3889E4:lI47|H388AEC
-388AEC:lI111|H388BFC
-388BFC:lI116|H388D0C
-388D0C:lI112|H388E1C
-388E1C:lI47|H388F2C
-388F2C:lI101|H389044
-389044:lI114|H389154
-389154:lI116|H389264
-389264:lI115|H389374
-389374:lI47|H389484
-389484:lI108|H38958C
-38958C:lI105|H389684
-389684:lI98|H38977C
-38977C:lI47|H389874
-389874:lI105|H38996C
-38996C:lI110|H389A4C
-389A4C:lI101|H389B24
-389B24:lI116|H389BEC
-389BEC:lI115|H389CB4
-389CB4:lI47|H389D7C
-389D7C:lI101|H389E34
-389E34:lI98|H389EEC
-389EEC:lI105|H389F8C
-389F8C:lI110|N
-38B050:lH388104|H38B058
-388104:lI47|H3881E4
-3881E4:lI99|H3882CC
-3882CC:lI108|H3883BC
-3883BC:lI101|H3884B4
-3884B4:lI97|H3885B4
-3885B4:lI114|H3886BC
-3886BC:lI99|H3887CC
-3887CC:lI97|H3888DC
-3888DC:lI115|H3889EC
-3889EC:lI101|H388AF4
-388AF4:lI47|H388C04
-388C04:lI111|H388D14
-388D14:lI116|H388E24
-388E24:lI112|H388F34
-388F34:lI47|H38904C
-38904C:lI101|H38915C
-38915C:lI114|H38926C
-38926C:lI116|H38937C
-38937C:lI115|H38948C
-38948C:lI47|H389594
-389594:lI108|H38968C
-38968C:lI105|H389784
-389784:lI98|H38987C
-38987C:lI47|H389974
-389974:lI105|H389A54
-389A54:lI99|H389B2C
-389B2C:lI47|H389BF4
-389BF4:lI101|H389CBC
-389CBC:lI98|H389D84
-389D84:lI105|H389E3C
-389E3C:lI110|N
-38B058:lH3881EC|H38B060
-3881EC:lI47|H3882D4
-3882D4:lI99|H3883C4
-3883C4:lI108|H3884BC
-3884BC:lI101|H3885BC
-3885BC:lI97|H3886C4
-3886C4:lI114|H3887D4
-3887D4:lI99|H3888E4
-3888E4:lI97|H3889F4
-3889F4:lI115|H388AFC
-388AFC:lI101|H388C0C
-388C0C:lI47|H388D1C
-388D1C:lI111|H388E2C
-388E2C:lI116|H388F3C
-388F3C:lI112|H389054
-389054:lI47|H389164
-389164:lI101|H389274
-389274:lI114|H389384
-389384:lI116|H389494
-389494:lI115|H38959C
-38959C:lI47|H389694
-389694:lI108|H38978C
-38978C:lI105|H389884
-389884:lI98|H38997C
-38997C:lI47|H389A5C
-389A5C:lI104|H389B34
-389B34:lI105|H389BFC
-389BFC:lI112|H389CC4
-389CC4:lI101|H389D8C
-389D8C:lI47|H389E44
-389E44:lI101|H389EF4
-389EF4:lI98|H389F94
-389F94:lI105|H38A02C
-38A02C:lI110|N
-38B060:lH3882DC|H38B068
-3882DC:lI47|H3883CC
-3883CC:lI99|H3884C4
-3884C4:lI108|H3885C4
-3885C4:lI101|H3886CC
-3886CC:lI97|H3887DC
-3887DC:lI114|H3888EC
-3888EC:lI99|H3889FC
-3889FC:lI97|H388B04
-388B04:lI115|H388C14
-388C14:lI101|H388D24
-388D24:lI47|H388E34
-388E34:lI111|H388F44
-388F44:lI116|H38905C
-38905C:lI112|H38916C
-38916C:lI47|H38927C
-38927C:lI101|H38938C
-38938C:lI114|H38949C
-38949C:lI116|H3895A4
-3895A4:lI115|H38969C
-38969C:lI47|H389794
-389794:lI108|H38988C
-38988C:lI105|H389984
-389984:lI98|H389A64
-389A64:lI47|H389B3C
-389B3C:lI103|H389C04
-389C04:lI115|H389CCC
-389CCC:lI47|H389D94
-389D94:lI101|H389E4C
-389E4C:lI98|H389EFC
-389EFC:lI105|H389F9C
-389F9C:lI110|N
-38B068:lH3883D4|H38B070
-3883D4:lI47|H3884CC
-3884CC:lI99|H3885CC
-3885CC:lI108|H3886D4
-3886D4:lI101|H3887E4
-3887E4:lI97|H3888F4
-3888F4:lI114|H388A04
-388A04:lI99|H388B0C
-388B0C:lI97|H388C1C
-388C1C:lI115|H388D2C
-388D2C:lI101|H388E3C
-388E3C:lI47|H388F4C
-388F4C:lI111|H389064
-389064:lI116|H389174
-389174:lI112|H389284
-389284:lI47|H389394
-389394:lI101|H3894A4
-3894A4:lI114|H3895AC
-3895AC:lI116|H3896A4
-3896A4:lI115|H38979C
-38979C:lI47|H389894
-389894:lI108|H38998C
-38998C:lI105|H389A6C
-389A6C:lI98|H389B44
-389B44:lI47|H389C0C
-389C0C:lI101|H389CD4
-389CD4:lI118|H389D9C
-389D9C:lI97|H389E54
-389E54:lI47|H389F04
-389F04:lI101|H389FA4
-389FA4:lI98|H38A034
-38A034:lI105|H38A0B4
-38A0B4:lI110|N
-38B070:lH3884D4|H38B078
-3884D4:lI47|H3885D4
-3885D4:lI99|H3886DC
-3886DC:lI108|H3887EC
-3887EC:lI101|H3888FC
-3888FC:lI97|H388A0C
-388A0C:lI114|H388B14
-388B14:lI99|H388C24
-388C24:lI97|H388D34
-388D34:lI115|H388E44
-388E44:lI101|H388F54
-388F54:lI47|H38906C
-38906C:lI111|H38917C
-38917C:lI116|H38928C
-38928C:lI112|H38939C
-38939C:lI47|H3894AC
-3894AC:lI101|H3895B4
-3895B4:lI114|H3896AC
-3896AC:lI116|H3897A4
-3897A4:lI115|H38989C
-38989C:lI47|H389994
-389994:lI108|H389A74
-389A74:lI105|H389B4C
-389B4C:lI98|H389C14
-389C14:lI47|H389CDC
-389CDC:lI101|H389DA4
-389DA4:lI116|H389E5C
-389E5C:lI47|H389F0C
-389F0C:lI101|H389FAC
-389FAC:lI98|H38A03C
-38A03C:lI105|H38A0BC
-38A0BC:lI110|N
-38B078:lH3885DC|H38B080
-3885DC:lI47|H3886E4
-3886E4:lI99|H3887F4
-3887F4:lI108|H388904
-388904:lI101|H388A14
-388A14:lI97|H388B1C
-388B1C:lI114|H388C2C
-388C2C:lI99|H388D3C
-388D3C:lI97|H388E4C
-388E4C:lI115|H388F5C
-388F5C:lI101|H389074
-389074:lI47|H389184
-389184:lI111|H389294
-389294:lI116|H3893A4
-3893A4:lI112|H3894B4
-3894B4:lI47|H3895BC
-3895BC:lI101|H3896B4
-3896B4:lI114|H3897AC
-3897AC:lI116|H3898A4
-3898A4:lI115|H38999C
-38999C:lI47|H389A7C
-389A7C:lI108|H389B54
-389B54:lI105|H389C1C
-389C1C:lI98|H389CE4
-389CE4:lI47|H389DAC
-389DAC:lI101|H389E64
-389E64:lI114|H389F14
-389F14:lI108|H389FB4
-389FB4:lI95|H38A044
-38A044:lI105|H38A0C4
-38A0C4:lI110|H38A134
-38A134:lI116|H38A1A4
-38A1A4:lI101|H38A20C
-38A20C:lI114|H38A274
-38A274:lI102|H38A2DC
-38A2DC:lI97|H38A344
-38A344:lI99|H38A3AC
-38A3AC:lI101|N
-38B080:lH3886EC|H38B088
-3886EC:lI47|H3887FC
-3887FC:lI99|H38890C
-38890C:lI108|H388A1C
-388A1C:lI101|H388B24
-388B24:lI97|H388C34
-388C34:lI114|H388D44
-388D44:lI99|H388E54
-388E54:lI97|H388F64
-388F64:lI115|H38907C
-38907C:lI101|H38918C
-38918C:lI47|H38929C
-38929C:lI111|H3893AC
-3893AC:lI116|H3894BC
-3894BC:lI112|H3895C4
-3895C4:lI47|H3896BC
-3896BC:lI101|H3897B4
-3897B4:lI114|H3898AC
-3898AC:lI116|H3899A4
-3899A4:lI115|H389A84
-389A84:lI47|H389B5C
-389B5C:lI108|H389C24
-389C24:lI105|H389CEC
-389CEC:lI98|H389DB4
-389DB4:lI47|H389E6C
-389E6C:lI100|H389F1C
-389F1C:lI101|H389FBC
-389FBC:lI98|H38A04C
-38A04C:lI117|H38A0CC
-38A0CC:lI103|H38A13C
-38A13C:lI103|H38A1AC
-38A1AC:lI101|H38A214
-38A214:lI114|H38A27C
-38A27C:lI47|H38A2E4
-38A2E4:lI101|H38A34C
-38A34C:lI98|H38A3B4
-38A3B4:lI105|H38A414
-38A414:lI110|N
-38B088:lH388804|H38B090
-388804:lI47|H388914
-388914:lI99|H388A24
-388A24:lI108|H388B2C
-388B2C:lI101|H388C3C
-388C3C:lI97|H388D4C
-388D4C:lI114|H388E5C
-388E5C:lI99|H388F6C
-388F6C:lI97|H389084
-389084:lI115|H389194
-389194:lI101|H3892A4
-3892A4:lI47|H3893B4
-3893B4:lI111|H3894C4
-3894C4:lI116|H3895CC
-3895CC:lI112|H3896C4
-3896C4:lI47|H3897BC
-3897BC:lI101|H3898B4
-3898B4:lI114|H3899AC
-3899AC:lI116|H389A8C
-389A8C:lI115|H389B64
-389B64:lI47|H389C2C
-389C2C:lI108|H389CF4
-389CF4:lI105|H389DBC
-389DBC:lI98|H389E74
-389E74:lI47|H389F24
-389F24:lI99|H389FC4
-389FC4:lI114|H38A054
-38A054:lI121|H38A0D4
-38A0D4:lI112|H38A144
-38A144:lI116|H38A1B4
-38A1B4:lI111|H38A21C
-38A21C:lI47|H38A284
-38A284:lI101|H38A2EC
-38A2EC:lI98|H38A354
-38A354:lI105|H38A3BC
-38A3BC:lI110|N
-38B090:lH38891C|H38B098
-38891C:lI47|H388A2C
-388A2C:lI99|H388B34
-388B34:lI108|H388C44
-388C44:lI101|H388D54
-388D54:lI97|H388E64
-388E64:lI114|H388F74
-388F74:lI99|H38908C
-38908C:lI97|H38919C
-38919C:lI115|H3892AC
-3892AC:lI101|H3893BC
-3893BC:lI47|H3894CC
-3894CC:lI111|H3895D4
-3895D4:lI116|H3896CC
-3896CC:lI112|H3897C4
-3897C4:lI47|H3898BC
-3898BC:lI101|H3899B4
-3899B4:lI114|H389A94
-389A94:lI116|H389B6C
-389B6C:lI115|H389C34
-389C34:lI47|H389CFC
-389CFC:lI108|H389DC4
-389DC4:lI105|H389E7C
-389E7C:lI98|H389F2C
-389F2C:lI47|H389FCC
-389FCC:lI99|H38A05C
-38A05C:lI111|H38A0DC
-38A0DC:lI115|H38A14C
-38A14C:lI84|H38A1BC
-38A1BC:lI114|H38A224
-38A224:lI97|H38A28C
-38A28C:lI110|H38A2F4
-38A2F4:lI115|H38A35C
-38A35C:lI97|H38A3C4
-38A3C4:lI99|H38A41C
-38A41C:lI116|H38A46C
-38A46C:lI105|H38A4BC
-38A4BC:lI111|H38A50C
-38A50C:lI110|H38A554
-38A554:lI115|H38A59C
-38A59C:lI47|H38A5E4
-38A5E4:lI101|H38A62C
-38A62C:lI98|H38A66C
-38A66C:lI105|H38A6A4
-38A6A4:lI110|N
-38B098:lH388A34|H38B0A0
-388A34:lI47|H388B3C
-388B3C:lI99|H388C4C
-388C4C:lI108|H388D5C
-388D5C:lI101|H388E6C
-388E6C:lI97|H388F7C
-388F7C:lI114|H389094
-389094:lI99|H3891A4
-3891A4:lI97|H3892B4
-3892B4:lI115|H3893C4
-3893C4:lI101|H3894D4
-3894D4:lI47|H3895DC
-3895DC:lI111|H3896D4
-3896D4:lI116|H3897CC
-3897CC:lI112|H3898C4
-3898C4:lI47|H3899BC
-3899BC:lI101|H389A9C
-389A9C:lI114|H389B74
-389B74:lI116|H389C3C
-389C3C:lI115|H389D04
-389D04:lI47|H389DCC
-389DCC:lI108|H389E84
-389E84:lI105|H389F34
-389F34:lI98|H389FD4
-389FD4:lI47|H38A064
-38A064:lI99|H38A0E4
-38A0E4:lI111|H38A154
-38A154:lI115|H38A1C4
-38A1C4:lI84|H38A22C
-38A22C:lI105|H38A294
-38A294:lI109|H38A2FC
-38A2FC:lI101|H38A364
-38A364:lI47|H38A3CC
-38A3CC:lI101|H38A424
-38A424:lI98|H38A474
-38A474:lI105|H38A4C4
-38A4C4:lI110|N
-38B0A0:lH388B44|H38B0A8
-388B44:lI47|H388C54
-388C54:lI99|H388D64
-388D64:lI108|H388E74
-388E74:lI101|H388F84
-388F84:lI97|H38909C
-38909C:lI114|H3891AC
-3891AC:lI99|H3892BC
-3892BC:lI97|H3893CC
-3893CC:lI115|H3894DC
-3894DC:lI101|H3895E4
-3895E4:lI47|H3896DC
-3896DC:lI111|H3897D4
-3897D4:lI116|H3898CC
-3898CC:lI112|H3899C4
-3899C4:lI47|H389AA4
-389AA4:lI101|H389B7C
-389B7C:lI114|H389C44
-389C44:lI116|H389D0C
-389D0C:lI115|H389DD4
-389DD4:lI47|H389E8C
-389E8C:lI108|H389F3C
-389F3C:lI105|H389FDC
-389FDC:lI98|H38A06C
-38A06C:lI47|H38A0EC
-38A0EC:lI99|H38A15C
-38A15C:lI111|H38A1CC
-38A1CC:lI115|H38A234
-38A234:lI80|H38A29C
-38A29C:lI114|H38A304
-38A304:lI111|H38A36C
-38A36C:lI112|H38A3D4
-38A3D4:lI101|H38A42C
-38A42C:lI114|H38A47C
-38A47C:lI116|H38A4CC
-38A4CC:lI121|H38A514
-38A514:lI47|H38A55C
-38A55C:lI101|H38A5A4
-38A5A4:lI98|H38A5EC
-38A5EC:lI105|H38A634
-38A634:lI110|N
-38B0A8:lH388C5C|H38B0B0
-388C5C:lI47|H388D6C
-388D6C:lI99|H388E7C
-388E7C:lI108|H388F8C
-388F8C:lI101|H3890A4
-3890A4:lI97|H3891B4
-3891B4:lI114|H3892C4
-3892C4:lI99|H3893D4
-3893D4:lI97|H3894E4
-3894E4:lI115|H3895EC
-3895EC:lI101|H3896E4
-3896E4:lI47|H3897DC
-3897DC:lI111|H3898D4
-3898D4:lI116|H3899CC
-3899CC:lI112|H389AAC
-389AAC:lI47|H389B84
-389B84:lI101|H389C4C
-389C4C:lI114|H389D14
-389D14:lI116|H389DDC
-389DDC:lI115|H389E94
-389E94:lI47|H389F44
-389F44:lI108|H389FE4
-389FE4:lI105|H38A074
-38A074:lI98|H38A0F4
-38A0F4:lI47|H38A164
-38A164:lI99|H38A1D4
-38A1D4:lI111|H38A23C
-38A23C:lI115|H38A2A4
-38A2A4:lI78|H38A30C
-38A30C:lI111|H38A374
-38A374:lI116|H38A3DC
-38A3DC:lI105|H38A434
-38A434:lI102|H38A484
-38A484:lI105|H38A4D4
-38A4D4:lI99|H38A51C
-38A51C:lI97|H38A564
-38A564:lI116|H38A5AC
-38A5AC:lI105|H38A5F4
-38A5F4:lI111|H38A63C
-38A63C:lI110|H38A674
-38A674:lI47|H38A6AC
-38A6AC:lI101|H38A6D4
-38A6D4:lI98|H38A6EC
-38A6EC:lI105|H38A704
-38A704:lI110|N
-38B0B0:lH388D74|H38B0B8
-388D74:lI47|H388E84
-388E84:lI99|H388F94
-388F94:lI108|H3890AC
-3890AC:lI101|H3891BC
-3891BC:lI97|H3892CC
-3892CC:lI114|H3893DC
-3893DC:lI99|H3894EC
-3894EC:lI97|H3895F4
-3895F4:lI115|H3896EC
-3896EC:lI101|H3897E4
-3897E4:lI47|H3898DC
-3898DC:lI111|H3899D4
-3899D4:lI116|H389AB4
-389AB4:lI112|H389B8C
-389B8C:lI47|H389C54
-389C54:lI101|H389D1C
-389D1C:lI114|H389DE4
-389DE4:lI116|H389E9C
-389E9C:lI115|H389F4C
-389F4C:lI47|H389FEC
-389FEC:lI108|H38A07C
-38A07C:lI105|H38A0FC
-38A0FC:lI98|H38A16C
-38A16C:lI47|H38A1DC
-38A1DC:lI99|H38A244
-38A244:lI111|H38A2AC
-38A2AC:lI115|H38A314
-38A314:lI70|H38A37C
-38A37C:lI105|H38A3E4
-38A3E4:lI108|H38A43C
-38A43C:lI101|H38A48C
-38A48C:lI84|H38A4DC
-38A4DC:lI114|H38A524
-38A524:lI97|H38A56C
-38A56C:lI110|H38A5B4
-38A5B4:lI115|H38A5FC
-38A5FC:lI102|H38A644
-38A644:lI101|H38A67C
-38A67C:lI114|H38A6B4
-38A6B4:lI47|H38A6DC
-38A6DC:lI101|H38A6F4
-38A6F4:lI98|H38A70C
-38A70C:lI105|H38A71C
-38A71C:lI110|N
-38B0B8:lH388E8C|H38B0C0
-388E8C:lI47|H388F9C
-388F9C:lI99|H3890B4
-3890B4:lI108|H3891C4
-3891C4:lI101|H3892D4
-3892D4:lI97|H3893E4
-3893E4:lI114|H3894F4
-3894F4:lI99|H3895FC
-3895FC:lI97|H3896F4
-3896F4:lI115|H3897EC
-3897EC:lI101|H3898E4
-3898E4:lI47|H3899DC
-3899DC:lI111|H389ABC
-389ABC:lI116|H389B94
-389B94:lI112|H389C5C
-389C5C:lI47|H389D24
-389D24:lI101|H389DEC
-389DEC:lI114|H389EA4
-389EA4:lI116|H389F54
-389F54:lI115|H389FF4
-389FF4:lI47|H38A084
-38A084:lI108|H38A104
-38A104:lI105|H38A174
-38A174:lI98|H38A1E4
-38A1E4:lI47|H38A24C
-38A24C:lI99|H38A2B4
-38A2B4:lI111|H38A31C
-38A31C:lI115|H38A384
-38A384:lI69|H38A3EC
-38A3EC:lI118|H38A444
-38A444:lI101|H38A494
-38A494:lI110|H38A4E4
-38A4E4:lI116|H38A52C
-38A52C:lI68|H38A574
-38A574:lI111|H38A5BC
-38A5BC:lI109|H38A604
-38A604:lI97|H38A64C
-38A64C:lI105|H38A684
-38A684:lI110|H38A6BC
-38A6BC:lI47|H38A6E4
-38A6E4:lI101|H38A6FC
-38A6FC:lI98|H38A714
-38A714:lI105|H38A724
-38A724:lI110|N
-38B0C0:lH388FA4|H38B0C8
-388FA4:lI47|H3890BC
-3890BC:lI99|H3891CC
-3891CC:lI108|H3892DC
-3892DC:lI101|H3893EC
-3893EC:lI97|H3894FC
-3894FC:lI114|H389604
-389604:lI99|H3896FC
-3896FC:lI97|H3897F4
-3897F4:lI115|H3898EC
-3898EC:lI101|H3899E4
-3899E4:lI47|H389AC4
-389AC4:lI111|H389B9C
-389B9C:lI116|H389C64
-389C64:lI112|H389D2C
-389D2C:lI47|H389DF4
-389DF4:lI101|H389EAC
-389EAC:lI114|H389F5C
-389F5C:lI116|H389FFC
-389FFC:lI115|H38A08C
-38A08C:lI47|H38A10C
-38A10C:lI108|H38A17C
-38A17C:lI105|H38A1EC
-38A1EC:lI98|H38A254
-38A254:lI47|H38A2BC
-38A2BC:lI99|H38A324
-38A324:lI111|H38A38C
-38A38C:lI115|H38A3F4
-38A3F4:lI69|H38A44C
-38A44C:lI118|H38A49C
-38A49C:lI101|H38A4EC
-38A4EC:lI110|H38A534
-38A534:lI116|H38A57C
-38A57C:lI47|H38A5C4
-38A5C4:lI101|H38A60C
-38A60C:lI98|H38A654
-38A654:lI105|H38A68C
-38A68C:lI110|N
-38B0C8:lH3890C4|H38B0D0
-3890C4:lI47|H3891D4
-3891D4:lI99|H3892E4
-3892E4:lI108|H3893F4
-3893F4:lI101|H389504
-389504:lI97|H38960C
-38960C:lI114|H389704
-389704:lI99|H3897FC
-3897FC:lI97|H3898F4
-3898F4:lI115|H3899EC
-3899EC:lI101|H389ACC
-389ACC:lI47|H389BA4
-389BA4:lI111|H389C6C
-389C6C:lI116|H389D34
-389D34:lI112|H389DFC
-389DFC:lI47|H389EB4
-389EB4:lI101|H389F64
-389F64:lI114|H38A004
-38A004:lI116|H38A094
-38A094:lI115|H38A114
-38A114:lI47|H38A184
-38A184:lI108|H38A1F4
-38A1F4:lI105|H38A25C
-38A25C:lI98|H38A2C4
-38A2C4:lI47|H38A32C
-38A32C:lI99|H38A394
-38A394:lI111|H38A3FC
-38A3FC:lI109|H38A454
-38A454:lI112|H38A4A4
-38A4A4:lI105|H38A4F4
-38A4F4:lI108|H38A53C
-38A53C:lI101|H38A584
-38A584:lI114|H38A5CC
-38A5CC:lI47|H38A614
-38A614:lI101|H38A65C
-38A65C:lI98|H38A694
-38A694:lI105|H38A6C4
-38A6C4:lI110|N
-38B0D0:lH3891DC|H38B0D8
-3891DC:lI47|H3892EC
-3892EC:lI99|H3893FC
-3893FC:lI108|H38950C
-38950C:lI101|H389614
-389614:lI97|H38970C
-38970C:lI114|H389804
-389804:lI99|H3898FC
-3898FC:lI97|H3899F4
-3899F4:lI115|H389AD4
-389AD4:lI101|H389BAC
-389BAC:lI47|H389C74
-389C74:lI111|H389D3C
-389D3C:lI116|H389E04
-389E04:lI112|H389EBC
-389EBC:lI47|H389F6C
-389F6C:lI101|H38A00C
-38A00C:lI114|H38A09C
-38A09C:lI116|H38A11C
-38A11C:lI115|H38A18C
-38A18C:lI47|H38A1FC
-38A1FC:lI108|H38A264
-38A264:lI105|H38A2CC
-38A2CC:lI98|H38A334
-38A334:lI47|H38A39C
-38A39C:lI97|H38A404
-38A404:lI115|H38A45C
-38A45C:lI110|H38A4AC
-38A4AC:lI49|H38A4FC
-38A4FC:lI47|H38A544
-38A544:lI101|H38A58C
-38A58C:lI98|H38A5D4
-38A5D4:lI105|H38A61C
-38A61C:lI110|N
-38B0D8:lH3892F4|H38B0E0
-3892F4:lI47|H389404
-389404:lI99|H389514
-389514:lI108|H38961C
-38961C:lI101|H389714
-389714:lI97|H38980C
-38980C:lI114|H389904
-389904:lI99|H3899FC
-3899FC:lI97|H389ADC
-389ADC:lI115|H389BB4
-389BB4:lI101|H389C7C
-389C7C:lI47|H389D44
-389D44:lI111|H389E0C
-389E0C:lI116|H389EC4
-389EC4:lI112|H389F74
-389F74:lI47|H38A014
-38A014:lI101|H38A0A4
-38A0A4:lI114|H38A124
-38A124:lI116|H38A194
-38A194:lI115|H38A204
-38A204:lI47|H38A26C
-38A26C:lI108|H38A2D4
-38A2D4:lI105|H38A33C
-38A33C:lI98|H38A3A4
-38A3A4:lI47|H38A40C
-38A40C:lI97|H38A464
-38A464:lI112|H38A4B4
-38A4B4:lI112|H38A504
-38A504:lI109|H38A54C
-38A54C:lI111|H38A594
-38A594:lI110|H38A5DC
-38A5DC:lI47|H38A624
-38A624:lI101|H38A664
-38A664:lI98|H38A69C
-38A69C:lI105|H38A6CC
-38A6CC:lI110|N
-38B0E0:lH38AA88|H38B0E8
-38AA88:lI47|H38AA90
-38AA90:lI104|H38AA98
-38AA98:lI111|H38AAA0
-38AAA0:lI109|H38AAA8
-38AAA8:lI101|H38AAB0
-38AAB0:lI47|H38AAB8
-38AAB8:lI115|H38AAC0
-38AAC0:lI105|H38AAC8
-38AAC8:lI114|H38AAD0
-38AAD0:lI105|H38AAD8
-38AAD8:lI47|H38AAE0
-38AAE0:lI101|H38AAE8
-38AAE8:lI114|H38AAF0
-38AAF0:lI108|H38AAF8
-38AAF8:lI97|H38AB00
-38AB00:lI110|H38AB08
-38AB08:lI103|N
-38B0E8:lH38AB1C|H38B0F0
-38AB1C:lI47|H38AB2C
-38AB2C:lI104|H38AB4C
-38AB4C:lI111|H38AB74
-38AB74:lI109|H38ABA4
-38ABA4:lI101|H38ABC4
-38ABC4:lI47|H38ABE4
-38ABE4:lI115|H38AC04
-38AC04:lI105|H38AC24
-38AC24:lI114|H38AC3C
-38AC3C:lI105|H38AC44
-38AC44:lI47|H38AC4C
-38AC4C:lI116|H38AC54
-38AC54:lI111|H38AC5C
-38AC5C:lI111|H38AC64
-38AC64:lI108|H38AC6C
-38AC6C:lI115|H38AC74
-38AC74:lI47|H38AC7C
-38AC7C:lI100|H38AC84
-38AC84:lI105|H38AC8C
-38AC8C:lI115|H38AC94
-38AC94:lI116|H38AC9C
-38AC9C:lI101|H38ACA4
-38ACA4:lI108|H38ACAC
-38ACAC:lI47|H38ACB4
-38ACB4:lI101|H38ACBC
-38ACBC:lI98|H38ACC4
-38ACC4:lI105|H38ACCC
-38ACCC:lI110|N
-38B0F0:lH38B0F8|N
-38B0F8:lI47|H38B100
-38B100:lI104|H38B108
-38B108:lI111|H38B110
-38B110:lI109|H38B118
-38B118:lI101|H38B120
-38B120:lI47|H38B128
-38B128:lI115|H38B130
-38B130:lI105|H38B138
-38B138:lI114|H38B140
-38B140:lI105|H38B148
-38B148:lI47|H38B150
-38B150:lI79|H38B158
-38B158:lI84|H38B160
-38B160:lI80|H38B168
-38B168:lI47|H38B170
-38B170:lI103|H38B178
-38B178:lI112|H38B180
-38B180:lI114|H38B188
-38B188:lI115|H38B190
-38B190:lI95|H38B198
-38B198:lI116|H38B1A0
-38B1A0:lI114|H38B1A8
-38B1A8:lI97|H38B1B0
-38B1B0:lI99|H38B1B8
-38B1B8:lI101|H38B1C0
-38B1C0:lI47|H38B1C8
-38B1C8:lI106|H38B1D0
-38B1D0:lI97|H38B1D8
-38B1D8:lI110|N
-3873BC:lI47|H3873CC
-3873CC:lI99|H3873E4
-3873E4:lI108|H3873FC
-3873FC:lI101|H38741C
-38741C:lI97|H387444
-387444:lI114|H387474
-387474:lI99|H3874AC
-3874AC:lI97|H3874EC
-3874EC:lI115|H387534
-387534:lI101|H387584
-387584:lI47|H3875DC
-3875DC:lI111|H38763C
-38763C:lI116|H3876A4
-3876A4:lI112|H387714
-387714:lI47|H38778C
-38778C:lI101|H38780C
-38780C:lI114|H387894
-387894:lI116|H387924
-387924:lI115|N
-=proc_dictionary:<0.19.0>
-H370244
-H370250
-=proc_stack:<0.19.0>
-36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36B17C
-y4:P<0.19.0>
-y5:P<0.9.0>
-36b478:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37025C
-=proc_heap:<0.19.0>
-36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
-370238:t2:P<0.19.0>,A8:user_sup
-37025C:lAA:gen_server|H37027C
-37027C:lP<0.9.0>|H37028C
-37028C:lP<0.9.0>|H370294
-370294:lA11:supervisor_bridge|H37029C
-37029C:lH3702A4|H3702AC
-3702A4:lA8:user_sup|H3702B4
-3702B4:lN|H3702BC
-3702BC:lA4:self|N
-3702AC:lN|N
-370244:t2:AD:$initial_call,H370264
-370264:t3:A3:gen,A7:init_it,H37025C
-370250:t2:AA:$ancestors,H370274
-370274:lAA:kernel_sup|H370284
-370284:lP<0.8.0>|N
-=proc_dictionary:<0.20.0>
-H36F8A8
-=proc_stack:<0.20.0>
-36a714:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:H36F8C4
-y3:P<0.21.0>
-y4:P<0.22.0>
-y5:p<0.72>
-y6:p<0.72>
-=proc_heap:<0.20.0>
-36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
-36F8F0:lH36F900|H36F910
-36F900:t3:I1,P<0.21.0>,H36F920
-36F920:t0:
-36F910:lH36F924|N
-36F924:t3:I2,P<0.22.0>,H36F93C
-36F93C:t3:A5:shell,A5:start,N
-36F8A8:t2:A3:eof,A5:false
-=proc_dictionary:<0.21.0>
-H3709DC
-H3709D0
-H3709F8
-=proc_stack:<0.21.0>
-370d1c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:A9:undefined
-y2:P<0.20.0>
-=proc_heap:<0.21.0>
-3709DC:t2:AB:line_buffer,N
-3709D0:t2:AB:kill_buffer,N
-3709F8:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.22.0>
-H370D44
-H370D60
-H370D7C
-H370D38
-=proc_stack:<0.22.0>
-374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
-y0:N
-y1:N
-y2:A8:infinity
-y3:H374A00
-y4:P<0.20.0>
-y5:H374A28
-374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
-y0:H37499C
-y1:A6:io_lib
-y2:A9:get_until
-y3:H3748B8
-y4:P<0.20.0>
-y5:A5:start
-374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
-y0:P<0.49.0>
-y1:P<0.22.0>
-374acc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:P<0.25.0>
-y2:P<0.20.0>
-=proc_heap:<0.22.0>
-374A00:t4:A4:line,H37499C,H3749A4,A4:none
-3749A4:t2:N,N
-37499C:lI50|H374994
-374994:lI62|H37498C
-37498C:lI32|N
-374A28:t4:A5:stack,H370D58,H374A24,N
-374A24:t0:
-370D58:lH370D74|N
-370D74:lI99|H370D88
-370D88:lI114|H370D90
-370D90:lI97|H370D98
-370D98:lI115|H370DA0
-370DA0:lI104|H370DA8
-370DA8:lI100|H370DB0
-370DB0:lI117|H370DB8
-370DB8:lI109|H370DC0
-370DC0:lI112|H370DC8
-370DC8:lI95|H370DD0
-370DD0:lI118|H370DD8
-370DD8:lI105|H370DE0
-370DE0:lI101|H370DE8
-370DE8:lI119|H370DF0
-370DF0:lI101|H370DF8
-370DF8:lI114|H370E00
-370E00:lI58|H370E08
-370E08:lI115|H370E10
-370E10:lI116|H370E18
-370E18:lI97|H370E20
-370E20:lI114|H370E28
-370E28:lI116|H370E30
-370E30:lI40|H370E38
-370E38:lI41|H370E40
-370E40:lI46|H370E48
-370E48:lI10|N
-3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
-3748B0:lI1|N
-370D44:t2:AB:line_buffer,H370D58
-370D60:t2:A5:shell,P<0.25.0>
-370D7C:t2:AB:kill_buffer,N
-370D38:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.23.0>
-H376464
-H376448
-=proc_stack:<0.23.0>
-376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:kernel_config
-y3:N
-y4:P<0.23.0>
-y5:P<0.9.0>
-376770:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H376418
-=proc_heap:<0.23.0>
-376418:lAA:gen_server|H376410
-376410:lP<0.9.0>|H376408
-376408:lP<0.9.0>|H376400
-376400:lAD:kernel_config|H3763F8
-3763F8:lN|H3763F0
-3763F0:lN|N
-376464:t2:AD:$initial_call,H376454
-376454:t3:A3:gen,A7:init_it,H376418
-376448:t2:AA:$ancestors,H376440
-376440:lAA:kernel_sup|H376420
-376420:lP<0.8.0>|N
-=proc_dictionary:<0.24.0>
-H3705E0
-H3705EC
-=proc_stack:<0.24.0>
-36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F018
-y4:AF:kernel_safe_sup
-y5:P<0.9.0>
-36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37063C
-=proc_heap:<0.24.0>
-36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
-36F044:lH36F04C|N
-36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
-370660:lA13:inet_gethost_native|N
-370650:t3:A13:inet_gethost_native,AA:start_link,N
-370644:t2:A5:local,AF:kernel_safe_sup
-37063C:lAA:gen_server|H3706AC
-3706AC:lP<0.9.0>|H3706BC
-3706BC:lP<0.9.0>|H3706C4
-3706C4:lH3706CC|H3706D8
-3706CC:t2:A5:local,AF:kernel_safe_sup
-3706D8:lAA:supervisor|H3706E0
-3706E0:lH3706E8|H3706F8
-3706E8:t3:H370644,A6:kernel,A4:safe
-3706F8:lN|N
-3705E0:t2:AD:$initial_call,H370668
-370668:t3:A3:gen,A7:init_it,H37063C
-3705EC:t2:AA:$ancestors,H370678
-370678:lAA:kernel_sup|H3706B4
-3706B4:lP<0.8.0>|N
-=proc_dictionary:<0.25.0>
-H36E304
-H36E31C
-=proc_stack:<0.25.0>
-36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
-y0:N
-y1:N
-y2:P<0.27.0>
-y3:P<0.49.0>
-36e624:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:I2
-y3:I1
-y4:N
-y5:N
-y6:N
-y7:I20
-y8:I20
-=proc_heap:<0.25.0>
-36E304:t2:H36E2F8,H36E2A8
-36E2A8:lH36E2B0|N
-36E2B0:t4:A4:call,I1,H36E2C4,N
-36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
-36E2E8:t3:A4:atom,I1,A5:start
-36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
-36E2F8:t2:A7:command,I1
-36E31C:t2:H36E310,A2:ok
-36E310:t2:A6:result,I1
-=proc_stack:<0.27.0>
-3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:P<0.25.0>
-=proc_heap:<0.27.0>
-=proc_dictionary:<0.31.0>
-H36DA24
-H36DA08
-=proc_stack:<0.31.0>
-36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36DB68
-y4:A17:inet_gethost_native_sup
-y5:P<0.24.0>
-36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36D9D0
-=proc_heap:<0.31.0>
-36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
-36D994:t2:A5:local,A17:inet_gethost_native_sup
-36D9D0:lAA:gen_server|H36D9C8
-36D9C8:lP<0.24.0>|H36D9C0
-36D9C0:lP<0.24.0>|H36D970
-36D970:lH36D980|H36D9B8
-36D980:t2:A5:local,A17:inet_gethost_native_sup
-36D9B8:lA11:supervisor_bridge|H36D978
-36D978:lH36D9A8|H36D9B0
-36D9A8:lA13:inet_gethost_native|H36D9A0
-36D9A0:lN|H36D98C
-36D98C:lH36D994|N
-36D9B0:lN|N
-36DA24:t2:AD:$initial_call,H36DA14
-36DA14:t3:A3:gen,A7:init_it,H36D9D0
-36DA08:t2:AA:$ancestors,H36DA00
-36DA00:lAF:kernel_safe_sup|H36D9E0
-36D9E0:lAA:kernel_sup|H36D9D8
-36D9D8:lP<0.8.0>|N
-=proc_dictionary:<0.32.0>
-H36CFD4
-H36D0BC
-=proc_stack:<0.32.0>
-36d12c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H36CF18
-=proc_heap:<0.32.0>
-36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
-36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
-36CFD4:t2:A3:rid,I1
-36D0BC:t2:AC:num_requests,I0
-=proc_dictionary:<0.33.0>
-H3905C4
-H3905D0
-=proc_stack:<0.33.0>
-3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:webtool
-y3:H3C8570
-y4:A8:web_tool
-y5:P<0.33.0>
-3cef00:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3905FC
-=proc_heap:<0.33.0>
-3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
-3C85D4:lA10:crashdump_viewer|N
-3905F4:lH390650|H39065C
-390650:t2:A4:port,I8888
-39065C:lH3906C8|H3906D4
-3906C8:t2:AC:bind_address,H390760
-390760:t4:I127,I0,I0,I1
-3906D4:lH390774|H390780
-390774:t2:AB:server_name,H39082C
-39082C:lI108|H390908
-390908:lI111|H3909DC
-3909DC:lI99|H390AC0
-390AC0:lI97|H390B98
-390B98:lI108|H390C78
-390C78:lI104|H390D58
-390D58:lI111|H390E2C
-390E2C:lI115|H390F10
-390F10:lI116|N
-390780:lH390834|H390840
-390834:t2:AE:max_header_siz,I1024
-390840:lH390910|H39091C
-390910:t2:A11:max_header_action,A8:reply414
-39091C:lH3909E4|H3909F0
-3909E4:t2:A8:com_type,A7:ip_comm
-3909F0:lH390AC8|H390AD4
-390AC8:t2:A7:modules,H390BA0
-390BA0:lA9:mod_alias|H390C80
-390C80:lA8:mod_auth|H390D60
-390D60:lA7:mod_esi|H390E34
-390E34:lAB:mod_actions|H390F18
-390F18:lA7:mod_cgi|H390FF4
-390FF4:lAB:mod_include|H3910D8
-3910D8:lA7:mod_dir|H3911B4
-3911B4:lA7:mod_get|H3912A0
-3912A0:lA8:mod_head|H39139C
-39139C:lA7:mod_log|H3914A0
-3914A0:lAC:mod_disk_log|N
-390AD4:lH390BA8|H390BB4
-390BA8:t2:AF:directory_index,H390C88
-390C88:lH390D68|N
-390D68:lI105|H390E3C
-390E3C:lI110|H390F20
-390F20:lI100|H390FFC
-390FFC:lI101|H3910E0
-3910E0:lI120|H3911BC
-3911BC:lI46|H3912A8
-3912A8:lI104|H3913A4
-3913A4:lI116|H3914A8
-3914A8:lI109|H39159C
-39159C:lI108|N
-390BB4:lH390C90|N
-390C90:t2:AC:default_type,H390D70
-390D70:lI116|H390E44
-390E44:lI101|H390F28
-390F28:lI120|H391004
-391004:lI116|H3910E8
-3910E8:lI47|H3911C4
-3911C4:lI112|H3912B0
-3912B0:lI108|H3913AC
-3913AC:lI97|H3914B0
-3914B0:lI105|H3915A4
-3915A4:lI110|N
-3905EC:lI47|H390648
-390648:lI99|H3906C0
-3906C0:lI108|H390758
-390758:lI101|H390824
-390824:lI97|H390900
-390900:lI114|H3909D4
-3909D4:lI99|H390AB8
-390AB8:lI97|H390B90
-390B90:lI115|H390C70
-390C70:lI101|H390D50
-390D50:lI47|H390E24
-390E24:lI111|H390F08
-390F08:lI116|H390FEC
-390FEC:lI112|H3910D0
-3910D0:lI47|H3911AC
-3911AC:lI101|H391298
-391298:lI114|H391394
-391394:lI116|H391498
-391498:lI115|H391594
-391594:lI47|H391680
-391680:lI108|H39175C
-39175C:lI105|H391840
-391840:lI98|H391924
-391924:lI47|H3919F8
-3919F8:lI119|H391AC4
-391AC4:lI101|H391B90
-391B90:lI98|H391C54
-391C54:lI116|H391D18
-391D18:lI111|H391DD4
-391DD4:lI111|H391E90
-391E90:lI108|H391F5C
-391F5C:lI47|H392030
-392030:lI112|H3920EC
-3920EC:lI114|H3921A8
-3921A8:lI105|H392264
-392264:lI118|N
-3905FC:lAA:gen_server|H390664
-390664:lP<0.27.0>|H3906DC
-3906DC:lA4:self|H390788
-390788:lH390848|H390854
-390848:t2:A5:local,A8:web_tool
-390854:lA7:webtool|H390924
-390924:lH3909F8|H390A04
-3909F8:t2:H3905EC,H3905F4
-390A04:lN|N
-3905C4:t2:AD:$initial_call,H390614
-390614:t3:A3:gen,A7:init_it,H3905FC
-3905D0:t2:AA:$ancestors,H390624
-390624:lP<0.27.0>|N
-=proc_dictionary:<0.41.0>
-H36DF0C
-H36DF18
-=proc_stack:<0.41.0>
-36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36EA3C
-y4:A6:websup
-y5:P<0.33.0>
-36edc0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36DF24
-=proc_heap:<0.41.0>
-36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
-36EA68:lH36EA70|N
-36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
-36DF54:lA10:crashdump_viewer|N
-36DF44:t3:A10:crashdump_viewer,AA:start_link,N
-36DF38:t2:A5:local,A17:crashdump_viewer_server
-36DF2C:t2:A5:local,A6:websup
-36DF24:lAA:gen_server|H36DF84
-36DF84:lP<0.33.0>|H36DF94
-36DF94:lP<0.33.0>|H36DF9C
-36DF9C:lH36DFA4|H36DFB0
-36DFA4:t2:A5:local,A6:websup
-36DFB0:lAA:supervisor|H36DFB8
-36DFB8:lH36DFC0|H36DFD0
-36DFC0:t3:H36DF2C,AB:webtool_sup,N
-36DFD0:lN|N
-36DF0C:t2:AD:$initial_call,H36DF6C
-36DF6C:t3:A3:gen,A7:init_it,H36DF24
-36DF18:t2:AA:$ancestors,H36DF7C
-36DF7C:lA8:web_tool|H36DF8C
-36DF8C:lP<0.27.0>|N
-=proc_dictionary:<0.43.0>
-H39D940
-H39D94C
-=proc_stack:<0.43.0>
-3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H3A3E34
-y4:A1A:httpd_sup__127_0_0_1__8888
-y5:P<0.33.0>
-3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H39D9CC
-=proc_heap:<0.43.0>
-3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
-39DA88:lA9:undefined|H39DB18
-39DB18:lH39DB50|H39DB58
-39DB50:lH39DB88|H39DB94
-39DB88:t2:AB:server_root,H39DBD0
-39DBD0:lI47|H39DC0C
-39DC0C:lI99|H39DC50
-39DC50:lI108|H39DC84
-39DC84:lI101|H39DCC4
-39DCC4:lI97|H39DD28
-39DD28:lI114|H39DD90
-39DD90:lI99|H39DE00
-39DE00:lI97|H39DE78
-39DE78:lI115|H39DF00
-39DF00:lI101|H39DF90
-39DF90:lI47|H39E038
-39E038:lI111|H39E0E8
-39E0E8:lI116|H39E1AC
-39E1AC:lI112|H39E288
-39E288:lI47|H39E37C
-39E37C:lI101|H39E478
-39E478:lI114|H39E580
-39E580:lI116|H39E69C
-39E69C:lI115|H39E7B0
-39E7B0:lI47|H39E8C4
-39E8C4:lI108|H39E9D8
-39E9D8:lI105|H39EACC
-39EACC:lI98|H39EBC0
-39EBC0:lI47|H39ECB4
-39ECB4:lI119|H39EDA8
-39EDA8:lI101|H39EE7C
-39EE7C:lI98|H39EF50
-39EF50:lI116|H39F02C
-39F02C:lI111|H39F110
-39F110:lI111|H39F1E4
-39F1E4:lI108|H39F2B0
-39F2B0:lI47|H39F36C
-39F36C:lI112|H39F430
-39F430:lI114|H39F4FC
-39F4FC:lI105|H39F5C0
-39F5C0:lI118|H39F694
-39F694:lI47|H39F768
-39F768:lI114|H39F83C
-39F83C:lI111|H39F920
-39F920:lI111|H39F9FC
-39F9FC:lI116|N
-39DB94:lH39DBD8|H39DBE4
-39DBD8:t2:AD:document_root,H39DC14
-39DC14:lI47|H39DC58
-39DC58:lI99|H39DC8C
-39DC8C:lI108|H39DCCC
-39DCCC:lI101|H39DD30
-39DD30:lI97|H39DD98
-39DD98:lI114|H39DE08
-39DE08:lI99|H39DE80
-39DE80:lI97|H39DF08
-39DF08:lI115|H39DF98
-39DF98:lI101|H39E040
-39E040:lI47|H39E0F0
-39E0F0:lI111|H39E1B4
-39E1B4:lI116|H39E290
-39E290:lI112|H39E384
-39E384:lI47|H39E480
-39E480:lI101|H39E588
-39E588:lI114|H39E6A4
-39E6A4:lI116|H39E7B8
-39E7B8:lI115|H39E8CC
-39E8CC:lI47|H39E9E0
-39E9E0:lI108|H39EAD4
-39EAD4:lI105|H39EBC8
-39EBC8:lI98|H39ECBC
-39ECBC:lI47|H39EDB0
-39EDB0:lI119|H39EE84
-39EE84:lI101|H39EF58
-39EF58:lI98|H39F034
-39F034:lI116|H39F118
-39F118:lI111|H39F1EC
-39F1EC:lI111|H39F2B8
-39F2B8:lI108|H39F374
-39F374:lI47|H39F438
-39F438:lI112|H39F504
-39F504:lI114|H39F5C8
-39F5C8:lI105|H39F69C
-39F69C:lI118|H39F770
-39F770:lI47|H39F844
-39F844:lI114|H39F928
-39F928:lI111|H39FA04
-39FA04:lI111|H39FAD8
-39FAD8:lI116|H39FBB4
-39FBB4:lI47|H39FC80
-39FC80:lI100|H39FD44
-39FD44:lI111|H39FE10
-39FE10:lI99|N
-39DBE4:lH39DC1C|H39DC28
-39DC1C:t2:AA:mime_types,H39DC60
-39DC60:lH39DC94|H39DCA0
-39DC94:t2:H39DCD4,H39DCDC
-39DCDC:lI120|H39DD40
-39DD40:lI45|H39DDA8
-39DDA8:lI119|H39DE10
-39DE10:lI111|H39DE88
-39DE88:lI114|H39DF10
-39DF10:lI108|H39DFA0
-39DFA0:lI100|H39E048
-39E048:lI47|H39E0F8
-39E0F8:lI120|H39E1BC
-39E1BC:lI45|H39E298
-39E298:lI118|H39E38C
-39E38C:lI114|H39E488
-39E488:lI109|H39E590
-39E590:lI108|N
-39DCD4:lI119|H39DD38
-39DD38:lI114|H39DDA0
-39DDA0:lI108|N
-39DCA0:lH39DCE4|H39DCF0
-39DCE4:t2:H39DD48,H39DD50
-39DD50:lI120|H39DDB8
-39DDB8:lI45|H39DE20
-39DE20:lI119|H39DE98
-39DE98:lI111|H39DF18
-39DF18:lI114|H39DFA8
-39DFA8:lI108|H39E050
-39E050:lI100|H39E100
-39E100:lI47|H39E1C4
-39E1C4:lI120|H39E2A0
-39E2A0:lI45|H39E394
-39E394:lI118|H39E490
-39E490:lI114|H39E598
-39E598:lI109|H39E6AC
-39E6AC:lI108|N
-39DD48:lI118|H39DDB0
-39DDB0:lI114|H39DE18
-39DE18:lI109|H39DE90
-39DE90:lI108|N
-39DCF0:lH39DD58|H39DD64
-39DD58:t2:H39DDC0,H39DDC8
-39DDC8:lI120|H39DE30
-39DE30:lI45|H39DEA8
-39DEA8:lI99|H39DF20
-39DF20:lI111|H39DFB0
-39DFB0:lI110|H39E058
-39E058:lI102|H39E108
-39E108:lI101|H39E1CC
-39E1CC:lI114|H39E2A8
-39E2A8:lI101|H39E39C
-39E39C:lI110|H39E498
-39E498:lI99|H39E5A0
-39E5A0:lI101|H39E6B4
-39E6B4:lI47|H39E7C0
-39E7C0:lI120|H39E8D4
-39E8D4:lI45|H39E9E8
-39E9E8:lI99|H39EADC
-39EADC:lI111|H39EBD0
-39EBD0:lI111|H39ECC4
-39ECC4:lI108|H39EDB8
-39EDB8:lI116|H39EE8C
-39EE8C:lI97|H39EF60
-39EF60:lI108|H39F03C
-39F03C:lI107|N
-39DDC0:lI105|H39DE28
-39DE28:lI99|H39DEA0
-39DEA0:lI101|N
-39DD64:lH39DDD0|H39DDDC
-39DDD0:t2:H39DE38,H39DE40
-39DE40:lI118|H39DEB8
-39DEB8:lI105|H39DF30
-39DF30:lI100|H39DFC0
-39DFC0:lI101|H39E068
-39E068:lI111|H39E110
-39E110:lI47|H39E1D4
-39E1D4:lI120|H39E2B0
-39E2B0:lI45|H39E3A4
-39E3A4:lI115|H39E4A0
-39E4A0:lI103|H39E5A8
-39E5A8:lI105|H39E6BC
-39E6BC:lI45|H39E7C8
-39E7C8:lI109|H39E8DC
-39E8DC:lI111|H39E9F0
-39E9F0:lI118|H39EAE4
-39EAE4:lI105|H39EBD8
-39EBD8:lI101|N
-39DE38:lI109|H39DEB0
-39DEB0:lI111|H39DF28
-39DF28:lI118|H39DFB8
-39DFB8:lI105|H39E060
-39E060:lI101|N
-39DDDC:lH39DE48|H39DE54
-39DE48:t2:H39DEC0,H39DEC8
-39DEC8:lI118|H39DF40
-39DF40:lI105|H39DFD0
-39DFD0:lI100|H39E070
-39E070:lI101|H39E118
-39E118:lI111|H39E1DC
-39E1DC:lI47|H39E2B8
-39E2B8:lI120|H39E3AC
-39E3AC:lI45|H39E4A8
-39E4A8:lI109|H39E5B0
-39E5B0:lI115|H39E6C4
-39E6C4:lI118|H39E7D0
-39E7D0:lI105|H39E8E4
-39E8E4:lI100|H39E9F8
-39E9F8:lI101|H39EAEC
-39EAEC:lI111|N
-39DEC0:lI97|H39DF38
-39DF38:lI118|H39DFC8
-39DFC8:lI105|N
-39DE54:lH39DED0|H39DEDC
-39DED0:t2:H39DF48,H39DF50
-39DF50:lI118|H39DFE0
-39DFE0:lI105|H39E078
-39E078:lI100|H39E120
-39E120:lI101|H39E1E4
-39E1E4:lI111|H39E2C0
-39E2C0:lI47|H39E3B4
-39E3B4:lI113|H39E4B0
-39E4B0:lI117|H39E5B8
-39E5B8:lI105|H39E6CC
-39E6CC:lI99|H39E7D8
-39E7D8:lI107|H39E8EC
-39E8EC:lI116|H39EA00
-39EA00:lI105|H39EAF4
-39EAF4:lI109|H39EBE0
-39EBE0:lI101|N
-39DF48:lI113|H39DFD8
-39DFD8:lI116|N
-39DEDC:lH39DF58|H39DF64
-39DF58:t2:H39DFE8,H39DFF0
-39DFF0:lI118|H39E088
-39E088:lI105|H39E130
-39E130:lI100|H39E1EC
-39E1EC:lI101|H39E2C8
-39E2C8:lI111|H39E3BC
-39E3BC:lI47|H39E4B8
-39E4B8:lI113|H39E5C0
-39E5C0:lI117|H39E6D4
-39E6D4:lI105|H39E7E0
-39E7E0:lI99|H39E8F4
-39E8F4:lI107|H39EA08
-39EA08:lI116|H39EAFC
-39EAFC:lI105|H39EBE8
-39EBE8:lI109|H39ECCC
-39ECCC:lI101|N
-39DFE8:lI109|H39E080
-39E080:lI111|H39E128
-39E128:lI118|N
-39DF64:lH39DFF8|H39E004
-39DFF8:t2:H39E090,H39E098
-39E098:lI118|H39E140
-39E140:lI105|H39E1FC
-39E1FC:lI100|H39E2D8
-39E2D8:lI101|H39E3C4
-39E3C4:lI111|H39E4C0
-39E4C0:lI47|H39E5C8
-39E5C8:lI109|H39E6DC
-39E6DC:lI112|H39E7E8
-39E7E8:lI101|H39E8FC
-39E8FC:lI103|N
-39E090:lI109|H39E138
-39E138:lI112|H39E1F4
-39E1F4:lI101|H39E2D0
-39E2D0:lI103|N
-39E004:lH39E0A0|H39E0AC
-39E0A0:t2:H39E148,H39E150
-39E150:lI118|H39E20C
-39E20C:lI105|H39E2E8
-39E2E8:lI100|H39E3CC
-39E3CC:lI101|H39E4C8
-39E4C8:lI111|H39E5D0
-39E5D0:lI47|H39E6E4
-39E6E4:lI109|H39E7F0
-39E7F0:lI112|H39E904
-39E904:lI101|H39EA10
-39EA10:lI103|N
-39E148:lI109|H39E204
-39E204:lI112|H39E2E0
-39E2E0:lI103|N
-39E0AC:lH39E158|H39E164
-39E158:t2:H39E214,H39E21C
-39E21C:lI118|H39E2F8
-39E2F8:lI105|H39E3DC
-39E3DC:lI100|H39E4D0
-39E4D0:lI101|H39E5D8
-39E5D8:lI111|H39E6EC
-39E6EC:lI47|H39E7F8
-39E7F8:lI109|H39E90C
-39E90C:lI112|H39EA18
-39EA18:lI101|H39EB04
-39EB04:lI103|N
-39E214:lI109|H39E2F0
-39E2F0:lI112|H39E3D4
-39E3D4:lI101|N
-39E164:lH39E224|H39E230
-39E224:t2:H39E300,H39E308
-39E308:lI116|H39E3EC
-39E3EC:lI101|H39E4E0
-39E4E0:lI120|H39E5E8
-39E5E8:lI116|H39E6F4
-39E6F4:lI47|H39E800
-39E800:lI120|H39E914
-39E914:lI45|H39EA20
-39EA20:lI115|H39EB0C
-39EB0C:lI103|H39EBF0
-39EBF0:lI109|H39ECD4
-39ECD4:lI108|N
-39E300:lI115|H39E3E4
-39E3E4:lI103|H39E4D8
-39E4D8:lI109|H39E5E0
-39E5E0:lI108|N
-39E230:lH39E310|H39E31C
-39E310:t2:H39E3F4,H39E3FC
-39E3FC:lI116|H39E4F0
-39E4F0:lI101|H39E5F8
-39E5F8:lI120|H39E6FC
-39E6FC:lI116|H39E808
-39E808:lI47|H39E91C
-39E91C:lI120|H39EA28
-39EA28:lI45|H39EB14
-39EB14:lI115|H39EBF8
-39EBF8:lI103|H39ECDC
-39ECDC:lI109|H39EDC0
-39EDC0:lI108|N
-39E3F4:lI115|H39E4E8
-39E4E8:lI103|H39E5F0
-39E5F0:lI109|N
-39E31C:lH39E404|H39E410
-39E404:t2:H39E4F8,H39E500
-39E500:lI116|H39E608
-39E608:lI101|H39E70C
-39E70C:lI120|H39E810
-39E810:lI116|H39E924
-39E924:lI47|H39EA30
-39EA30:lI120|H39EB1C
-39EB1C:lI45|H39EC00
-39EC00:lI115|H39ECE4
-39ECE4:lI101|H39EDC8
-39EDC8:lI116|H39EE94
-39EE94:lI101|H39EF68
-39EF68:lI120|H39F044
-39F044:lI116|N
-39E4F8:lI101|H39E600
-39E600:lI116|H39E704
-39E704:lI120|N
-39E410:lH39E508|H39E514
-39E508:t2:H39E610,H39E618
-39E618:lI116|H39E71C
-39E71C:lI101|H39E820
-39E820:lI120|H39E92C
-39E92C:lI116|H39EA38
-39EA38:lI47|H39EB24
-39EB24:lI116|H39EC08
-39EC08:lI97|H39ECEC
-39ECEC:lI98|H39EDD0
-39EDD0:lI45|H39EE9C
-39EE9C:lI115|H39EF70
-39EF70:lI101|H39F04C
-39F04C:lI112|H39F120
-39F120:lI97|H39F1F4
-39F1F4:lI114|H39F2C0
-39F2C0:lI97|H39F37C
-39F37C:lI116|H39F440
-39F440:lI101|H39F50C
-39F50C:lI100|H39F5D0
-39F5D0:lI45|H39F6A4
-39F6A4:lI118|H39F778
-39F778:lI97|H39F84C
-39F84C:lI108|H39F930
-39F930:lI117|H39FA0C
-39FA0C:lI101|H39FAE0
-39FAE0:lI115|N
-39E610:lI116|H39E714
-39E714:lI115|H39E818
-39E818:lI118|N
-39E514:lH39E620|H39E62C
-39E620:t2:H39E724,H39E72C
-39E72C:lI116|H39E830
-39E830:lI101|H39E93C
-39E93C:lI120|H39EA40
-39EA40:lI116|H39EB2C
-39EB2C:lI47|H39EC10
-39EC10:lI114|H39ECF4
-39ECF4:lI105|H39EDD8
-39EDD8:lI99|H39EEA4
-39EEA4:lI104|H39EF78
-39EF78:lI116|H39F054
-39F054:lI101|H39F128
-39F128:lI120|H39F1FC
-39F1FC:lI116|N
-39E724:lI114|H39E828
-39E828:lI116|H39E934
-39E934:lI120|N
-39E62C:lH39E734|H39E740
-39E734:t2:H39E838,H39E840
-39E840:lI116|H39E94C
-39E94C:lI101|H39EA50
-39EA50:lI120|H39EB34
-39EB34:lI116|H39EC18
-39EC18:lI47|H39ECFC
-39ECFC:lI112|H39EDE0
-39EDE0:lI108|H39EEAC
-39EEAC:lI97|H39EF80
-39EF80:lI105|H39F05C
-39F05C:lI110|N
-39E838:lI116|H39E944
-39E944:lI120|H39EA48
-39EA48:lI116|N
-39E740:lH39E848|H39E854
-39E848:t2:H39E954,H39E95C
-39E95C:lI116|H39EA60
-39EA60:lI101|H39EB44
-39EB44:lI120|H39EC28
-39EC28:lI116|H39ED0C
-39ED0C:lI47|H39EDE8
-39EDE8:lI120|H39EEB4
-39EEB4:lI45|H39EF88
-39EF88:lI115|H39F064
-39F064:lI101|H39F130
-39F130:lI114|H39F204
-39F204:lI118|H39F2C8
-39F2C8:lI101|H39F384
-39F384:lI114|H39F448
-39F448:lI45|H39F514
-39F514:lI112|H39F5D8
-39F5D8:lI97|H39F6AC
-39F6AC:lI114|H39F780
-39F780:lI115|H39F854
-39F854:lI101|H39F938
-39F938:lI100|H39FA14
-39FA14:lI45|H39FAE8
-39FAE8:lI104|H39FBBC
-39FBBC:lI116|H39FC88
-39FC88:lI109|H39FD4C
-39FD4C:lI108|N
-39E954:lI115|H39EA58
-39EA58:lI104|H39EB3C
-39EB3C:lI116|H39EC20
-39EC20:lI109|H39ED04
-39ED04:lI108|N
-39E854:lH39E964|H39E970
-39E964:t2:H39EA68,H39EA70
-39EA70:lI116|H39EB54
-39EB54:lI101|H39EC38
-39EC38:lI120|H39ED1C
-39ED1C:lI116|H39EDF0
-39EDF0:lI47|H39EEBC
-39EEBC:lI104|H39EF90
-39EF90:lI116|H39F06C
-39F06C:lI109|H39F138
-39F138:lI108|N
-39EA68:lI104|H39EB4C
-39EB4C:lI116|H39EC30
-39EC30:lI109|H39ED14
-39ED14:lI108|N
-39E970:lH39EA78|H39EA84
-39EA78:t2:H39EB5C,H39EB64
-39EB64:lI116|H39EC48
-39EC48:lI101|H39ED2C
-39ED2C:lI120|H39EDF8
-39EDF8:lI116|H39EEC4
-39EEC4:lI47|H39EF98
-39EF98:lI104|H39F074
-39F074:lI116|H39F140
-39F140:lI109|H39F20C
-39F20C:lI108|N
-39EB5C:lI104|H39EC40
-39EC40:lI116|H39ED24
-39ED24:lI109|N
-39EA84:lH39EB6C|H39EB78
-39EB6C:t2:H39EC50,H39EC58
-39EC58:lI105|H39ED3C
-39ED3C:lI109|H39EE08
-39EE08:lI97|H39EECC
-39EECC:lI103|H39EFA0
-39EFA0:lI101|H39F07C
-39F07C:lI47|H39F148
-39F148:lI120|H39F214
-39F214:lI45|H39F2D0
-39F2D0:lI120|H39F38C
-39F38C:lI119|H39F450
-39F450:lI105|H39F51C
-39F51C:lI110|H39F5E0
-39F5E0:lI100|H39F6B4
-39F6B4:lI111|H39F788
-39F788:lI119|H39F85C
-39F85C:lI100|H39F940
-39F940:lI117|H39FA1C
-39FA1C:lI109|H39FAF0
-39FAF0:lI112|N
-39EC50:lI120|H39ED34
-39ED34:lI119|H39EE00
-39EE00:lI100|N
-39EB78:lH39EC60|H39EC6C
-39EC60:t2:H39ED44,H39ED4C
-39ED4C:lI105|H39EE18
-39EE18:lI109|H39EEDC
-39EEDC:lI97|H39EFA8
-39EFA8:lI103|H39F084
-39F084:lI101|H39F150
-39F150:lI47|H39F21C
-39F21C:lI120|H39F2D8
-39F2D8:lI45|H39F394
-39F394:lI120|H39F458
-39F458:lI112|H39F524
-39F524:lI105|H39F5E8
-39F5E8:lI120|H39F6BC
-39F6BC:lI109|H39F790
-39F790:lI97|H39F864
-39F864:lI112|N
-39ED44:lI120|H39EE10
-39EE10:lI112|H39EED4
-39EED4:lI109|N
-39EC6C:lH39ED54|H39ED60
-39ED54:t2:H39EE20,H39EE28
-39EE28:lI105|H39EEEC
-39EEEC:lI109|H39EFB8
-39EFB8:lI97|H39F08C
-39F08C:lI103|H39F158
-39F158:lI101|H39F224
-39F224:lI47|H39F2E0
-39F2E0:lI120|H39F39C
-39F39C:lI45|H39F460
-39F460:lI120|H39F52C
-39F52C:lI98|H39F5F0
-39F5F0:lI105|H39F6C4
-39F6C4:lI116|H39F798
-39F798:lI109|H39F86C
-39F86C:lI97|H39F948
-39F948:lI112|N
-39EE20:lI120|H39EEE4
-39EEE4:lI98|H39EFB0
-39EFB0:lI109|N
-39ED60:lH39EE30|H39EE3C
-39EE30:t2:H39EEF4,H39EEFC
-39EEFC:lI105|H39EFC8
-39EFC8:lI109|H39F09C
-39F09C:lI97|H39F160
-39F160:lI103|H39F22C
-39F22C:lI101|H39F2E8
-39F2E8:lI47|H39F3A4
-39F3A4:lI120|H39F468
-39F468:lI45|H39F534
-39F534:lI114|H39F5F8
-39F5F8:lI103|H39F6CC
-39F6CC:lI98|N
-39EEF4:lI114|H39EFC0
-39EFC0:lI103|H39F094
-39F094:lI98|N
-39EE3C:lH39EF04|H39EF10
-39EF04:t2:H39EFD0,H39EFD8
-39EFD8:lI105|H39F0AC
-39F0AC:lI109|H39F170
-39F170:lI97|H39F234
-39F234:lI103|H39F2F0
-39F2F0:lI101|H39F3AC
-39F3AC:lI47|H39F470
-39F470:lI120|H39F53C
-39F53C:lI45|H39F600
-39F600:lI112|H39F6D4
-39F6D4:lI111|H39F7A0
-39F7A0:lI114|H39F874
-39F874:lI116|H39F950
-39F950:lI97|H39FA24
-39FA24:lI98|H39FAF8
-39FAF8:lI108|H39FBC4
-39FBC4:lI101|H39FC90
-39FC90:lI45|H39FD54
-39FD54:lI112|H39FE18
-39FE18:lI105|H39FECC
-39FECC:lI120|H39FF88
-39FF88:lI109|H3A003C
-3A003C:lI97|H3A00E8
-3A00E8:lI112|N
-39EFD0:lI112|H39F0A4
-39F0A4:lI112|H39F168
-39F168:lI109|N
-39EF10:lH39EFE0|H39EFEC
-39EFE0:t2:H39F0B4,H39F0BC
-39F0BC:lI105|H39F180
-39F180:lI109|H39F244
-39F244:lI97|H39F2F8
-39F2F8:lI103|H39F3B4
-39F3B4:lI101|H39F478
-39F478:lI47|H39F544
-39F544:lI120|H39F608
-39F608:lI45|H39F6DC
-39F6DC:lI112|H39F7A8
-39F7A8:lI111|H39F87C
-39F87C:lI114|H39F958
-39F958:lI116|H39FA2C
-39FA2C:lI97|H39FB00
-39FB00:lI98|H39FBCC
-39FBCC:lI108|H39FC98
-39FC98:lI101|H39FD5C
-39FD5C:lI45|H39FE20
-39FE20:lI103|H39FED4
-39FED4:lI114|H39FF90
-39FF90:lI97|H3A0044
-3A0044:lI121|H3A00F0
-3A00F0:lI109|H3A0194
-3A0194:lI97|H3A0248
-3A0248:lI112|N
-39F0B4:lI112|H39F178
-39F178:lI103|H39F23C
-39F23C:lI109|N
-39EFEC:lH39F0C4|H39F0D0
-39F0C4:t2:H39F188,H39F190
-39F190:lI105|H39F254
-39F254:lI109|H39F308
-39F308:lI97|H39F3BC
-39F3BC:lI103|H39F480
-39F480:lI101|H39F54C
-39F54C:lI47|H39F610
-39F610:lI120|H39F6E4
-39F6E4:lI45|H39F7B0
-39F7B0:lI112|H39F884
-39F884:lI111|H39F960
-39F960:lI114|H39FA34
-39FA34:lI116|H39FB08
-39FB08:lI97|H39FBD4
-39FBD4:lI98|H39FCA0
-39FCA0:lI108|H39FD64
-39FD64:lI101|H39FE28
-39FE28:lI45|H39FEDC
-39FEDC:lI98|H39FF98
-39FF98:lI105|H3A004C
-3A004C:lI116|H3A00F8
-3A00F8:lI109|H3A019C
-3A019C:lI97|H3A0250
-3A0250:lI112|N
-39F188:lI112|H39F24C
-39F24C:lI98|H39F300
-39F300:lI109|N
-39F0D0:lH39F198|H39F1A4
-39F198:t2:H39F25C,H39F264
-39F264:lI105|H39F318
-39F318:lI109|H39F3CC
-39F3CC:lI97|H39F488
-39F488:lI103|H39F554
-39F554:lI101|H39F618
-39F618:lI47|H39F6EC
-39F6EC:lI120|H39F7B8
-39F7B8:lI45|H39F88C
-39F88C:lI112|H39F968
-39F968:lI111|H39FA3C
-39FA3C:lI114|H39FB10
-39FB10:lI116|H39FBDC
-39FBDC:lI97|H39FCA8
-39FCA8:lI98|H39FD6C
-39FD6C:lI108|H39FE30
-39FE30:lI101|H39FEE4
-39FEE4:lI45|H39FFA0
-39FFA0:lI97|H3A0054
-3A0054:lI110|H3A0100
-3A0100:lI121|H3A01A4
-3A01A4:lI109|H3A0258
-3A0258:lI97|H3A0304
-3A0304:lI112|N
-39F25C:lI112|H39F310
-39F310:lI110|H39F3C4
-39F3C4:lI109|N
-39F1A4:lH39F26C|H39F278
-39F26C:t2:H39F320,H39F328
-39F328:lI105|H39F3DC
-39F3DC:lI109|H39F498
-39F498:lI97|H39F55C
-39F55C:lI103|H39F620
-39F620:lI101|H39F6F4
-39F6F4:lI47|H39F7C0
-39F7C0:lI120|H39F894
-39F894:lI45|H39F970
-39F970:lI99|H39FA44
-39FA44:lI109|H39FB18
-39FB18:lI117|H39FBE4
-39FBE4:lI45|H39FCB0
-39FCB0:lI114|H39FD74
-39FD74:lI97|H39FE38
-39FE38:lI115|H39FEEC
-39FEEC:lI116|H39FFA8
-39FFA8:lI101|H3A005C
-3A005C:lI114|N
-39F320:lI114|H39F3D4
-39F3D4:lI97|H39F490
-39F490:lI115|N
-39F278:lH39F330|H39F33C
-39F330:t2:H39F3E4,H39F3EC
-39F3EC:lI105|H39F4A8
-39F4A8:lI109|H39F56C
-39F56C:lI97|H39F630
-39F630:lI103|H39F6FC
-39F6FC:lI101|H39F7C8
-39F7C8:lI47|H39F89C
-39F89C:lI116|H39F978
-39F978:lI105|H39FA4C
-39FA4C:lI102|H39FB20
-39FB20:lI102|N
-39F3E4:lI116|H39F4A0
-39F4A0:lI105|H39F564
-39F564:lI102|H39F628
-39F628:lI102|N
-39F33C:lH39F3F4|H39F400
-39F3F4:t2:H39F4B0,H39F4B8
-39F4B8:lI105|H39F57C
-39F57C:lI109|H39F640
-39F640:lI97|H39F704
-39F704:lI103|H39F7D0
-39F7D0:lI101|H39F8A4
-39F8A4:lI47|H39F980
-39F980:lI116|H39FA54
-39FA54:lI105|H39FB28
-39FB28:lI102|H39FBEC
-39FBEC:lI102|N
-39F4B0:lI116|H39F574
-39F574:lI105|H39F638
-39F638:lI102|N
-39F400:lH39F4C0|H39F4CC
-39F4C0:t2:H39F584,H39F58C
-39F58C:lI105|H39F650
-39F650:lI109|H39F714
-39F714:lI97|H39F7D8
-39F7D8:lI103|H39F8AC
-39F8AC:lI101|H39F988
-39F988:lI47|H39FA5C
-39FA5C:lI112|H39FB30
-39FB30:lI110|H39FBF4
-39FBF4:lI103|N
-39F584:lI112|H39F648
-39F648:lI110|H39F70C
-39F70C:lI103|N
-39F4CC:lH39F594|H39F5A0
-39F594:t2:H39F658,H39F660
-39F660:lI105|H39F724
-39F724:lI109|H39F7E8
-39F7E8:lI97|H39F8BC
-39F8BC:lI103|H39F990
-39F990:lI101|H39FA64
-39FA64:lI47|H39FB38
-39FB38:lI106|H39FBFC
-39FBFC:lI112|H39FCB8
-39FCB8:lI101|H39FD7C
-39FD7C:lI103|N
-39F658:lI106|H39F71C
-39F71C:lI112|H39F7E0
-39F7E0:lI101|H39F8B4
-39F8B4:lI103|N
-39F5A0:lH39F668|H39F674
-39F668:t2:H39F72C,H39F734
-39F734:lI105|H39F7F8
-39F7F8:lI109|H39F8CC
-39F8CC:lI97|H39F998
-39F998:lI103|H39FA6C
-39FA6C:lI101|H39FB40
-39FB40:lI47|H39FC04
-39FC04:lI106|H39FCC0
-39FCC0:lI112|H39FD84
-39FD84:lI101|H39FE40
-39FE40:lI103|N
-39F72C:lI106|H39F7F0
-39F7F0:lI112|H39F8C4
-39F8C4:lI103|N
-39F674:lH39F73C|H39F748
-39F73C:t2:H39F800,H39F808
-39F808:lI105|H39F8DC
-39F8DC:lI109|H39F9A8
-39F9A8:lI97|H39FA74
-39FA74:lI103|H39FB48
-39FB48:lI101|H39FC0C
-39FC0C:lI47|H39FCC8
-39FCC8:lI106|H39FD8C
-39FD8C:lI112|H39FE48
-39FE48:lI101|H39FEF4
-39FEF4:lI103|N
-39F800:lI106|H39F8D4
-39F8D4:lI112|H39F9A0
-39F9A0:lI101|N
-39F748:lH39F810|H39F81C
-39F810:t2:H39F8E4,H39F8EC
-39F8EC:lI105|H39F9B8
-39F9B8:lI109|H39FA84
-39FA84:lI97|H39FB50
-39FB50:lI103|H39FC14
-39FC14:lI101|H39FCD0
-39FCD0:lI47|H39FD94
-39FD94:lI105|H39FE50
-39FE50:lI101|H39FEFC
-39FEFC:lI102|N
-39F8E4:lI105|H39F9B0
-39F9B0:lI101|H39FA7C
-39FA7C:lI102|N
-39F81C:lH39F8F4|H39F900
-39F8F4:t2:H39F9C0,H39F9C8
-39F9C8:lI105|H39FA94
-39FA94:lI109|H39FB60
-39FB60:lI97|H39FC1C
-39FC1C:lI103|H39FCD8
-39FCD8:lI101|H39FD9C
-39FD9C:lI47|H39FE58
-39FE58:lI103|H39FF04
-39FF04:lI105|H39FFB0
-39FFB0:lI102|N
-39F9C0:lI103|H39FA8C
-39FA8C:lI105|H39FB58
-39FB58:lI102|N
-39F900:lH39F9D0|H39F9DC
-39F9D0:t2:H39FA9C,H39FAA4
-39FAA4:lI99|H39FB70
-39FB70:lI104|H39FC2C
-39FC2C:lI101|H39FCE0
-39FCE0:lI109|H39FDA4
-39FDA4:lI105|H39FE60
-39FE60:lI99|H39FF0C
-39FF0C:lI97|H39FFB8
-39FFB8:lI108|H3A0064
-3A0064:lI47|H3A0108
-3A0108:lI120|H3A01AC
-3A01AC:lI45|H3A0260
-3A0260:lI112|H3A030C
-3A030C:lI100|H3A03B8
-3A03B8:lI98|N
-39FA9C:lI112|H39FB68
-39FB68:lI100|H39FC24
-39FC24:lI98|N
-39F9DC:lH39FAAC|H39FAB8
-39FAAC:t2:H39FB78,H39FB80
-39FB80:lI99|H39FC3C
-39FC3C:lI104|H39FCF0
-39FCF0:lI101|H39FDAC
-39FDAC:lI109|H39FE68
-39FE68:lI105|H39FF14
-39FF14:lI99|H39FFC0
-39FFC0:lI97|H3A006C
-3A006C:lI108|H3A0110
-3A0110:lI47|H3A01B4
-3A01B4:lI120|H3A0268
-3A0268:lI45|H3A0314
-3A0314:lI112|H3A03C0
-3A03C0:lI100|H3A0454
-3A0454:lI98|N
-39FB78:lI120|H39FC34
-39FC34:lI121|H39FCE8
-39FCE8:lI122|N
-39FAB8:lH39FB88|H39FB94
-39FB88:t2:H39FC44,H39FC4C
-39FC4C:lI97|H39FD00
-39FD00:lI117|H39FDBC
-39FDBC:lI100|H39FE70
-39FE70:lI105|H39FF1C
-39FF1C:lI111|H39FFC8
-39FFC8:lI47|H3A0074
-3A0074:lI120|H3A0118
-3A0118:lI45|H3A01BC
-3A01BC:lI119|H3A0270
-3A0270:lI97|H3A031C
-3A031C:lI118|N
-39FC44:lI119|H39FCF8
-39FCF8:lI97|H39FDB4
-39FDB4:lI118|N
-39FB94:lH39FC54|H39FC60
-39FC54:t2:H39FD08,H39FD10
-39FD10:lI97|H39FDCC
-39FDCC:lI117|H39FE78
-39FE78:lI100|H39FF24
-39FF24:lI105|H39FFD0
-39FFD0:lI111|H3A007C
-3A007C:lI47|H3A0120
-3A0120:lI120|H3A01C4
-3A01C4:lI45|H3A0278
-3A0278:lI114|H3A0324
-3A0324:lI101|H3A03C8
-3A03C8:lI97|H3A045C
-3A045C:lI108|H3A04F8
-3A04F8:lI97|H3A059C
-3A059C:lI117|H3A0648
-3A0648:lI100|H3A06F4
-3A06F4:lI105|H3A07A0
-3A07A0:lI111|N
-39FD08:lI114|H39FDC4
-39FDC4:lI97|N
-39FC60:lH39FD18|H39FD24
-39FD18:t2:H39FDD4,H39FDDC
-39FDDC:lI97|H39FE88
-39FE88:lI117|H39FF34
-39FF34:lI100|H39FFD8
-39FFD8:lI105|H3A0084
-3A0084:lI111|H3A0128
-3A0128:lI47|H3A01CC
-3A01CC:lI120|H3A0280
-3A0280:lI45|H3A032C
-3A032C:lI112|H3A03D0
-3A03D0:lI110|H3A0464
-3A0464:lI45|H3A0500
-3A0500:lI114|H3A05A4
-3A05A4:lI101|H3A0650
-3A0650:lI97|H3A06FC
-3A06FC:lI108|H3A07A8
-3A07A8:lI97|H3A0844
-3A0844:lI117|H3A08D0
-3A08D0:lI100|H3A0964
-3A0964:lI105|H3A09F8
-3A09F8:lI111|H3A0A94
-3A0A94:lI45|H3A0B40
-3A0B40:lI112|H3A0BEC
-3A0BEC:lI108|H3A0CA8
-3A0CA8:lI117|H3A0D64
-3A0D64:lI103|H3A0E18
-3A0E18:lI105|H3A0ECC
-3A0ECC:lI110|N
-39FDD4:lI114|H39FE80
-39FE80:lI112|H39FF2C
-39FF2C:lI109|N
-39FD24:lH39FDE4|H39FDF0
-39FDE4:t2:H39FE90,H39FE98
-39FE98:lI97|H39FF44
-39FF44:lI117|H39FFE8
-39FFE8:lI100|H3A008C
-3A008C:lI105|H3A0130
-3A0130:lI111|H3A01D4
-3A01D4:lI47|H3A0288
-3A0288:lI120|H3A0334
-3A0334:lI45|H3A03D8
-3A03D8:lI112|H3A046C
-3A046C:lI110|H3A0508
-3A0508:lI45|H3A05AC
-3A05AC:lI114|H3A0658
-3A0658:lI101|H3A0704
-3A0704:lI97|H3A07B0
-3A07B0:lI108|H3A084C
-3A084C:lI97|H3A08D8
-3A08D8:lI117|H3A096C
-3A096C:lI100|H3A0A00
-3A0A00:lI105|H3A0A9C
-3A0A9C:lI111|N
-39FE90:lI114|H39FF3C
-39FF3C:lI97|H39FFE0
-39FFE0:lI109|N
-39FDF0:lH39FEA0|H39FEAC
-39FEA0:t2:H39FF4C,H39FF54
-39FF54:lI97|H39FFF8
-39FFF8:lI117|H3A009C
-3A009C:lI100|H3A0138
-3A0138:lI105|H3A01DC
-3A01DC:lI111|H3A0290
-3A0290:lI47|H3A033C
-3A033C:lI120|H3A03E0
-3A03E0:lI45|H3A0474
-3A0474:lI97|H3A0510
-3A0510:lI105|H3A05B4
-3A05B4:lI102|H3A0660
-3A0660:lI102|N
-39FF4C:lI97|H39FFF0
-39FFF0:lI105|H3A0094
-3A0094:lI102|N
-39FEAC:lH39FF5C|H39FF68
-39FF5C:t2:H3A0000,H3A0008
-3A0008:lI97|H3A00AC
-3A00AC:lI117|H3A0148
-3A0148:lI100|H3A01EC
-3A01EC:lI105|H3A0298
-3A0298:lI111|H3A0344
-3A0344:lI47|H3A03E8
-3A03E8:lI120|H3A047C
-3A047C:lI45|H3A0518
-3A0518:lI97|H3A05BC
-3A05BC:lI105|H3A0668
-3A0668:lI102|H3A070C
-3A070C:lI102|N
-3A0000:lI97|H3A00A4
-3A00A4:lI105|H3A0140
-3A0140:lI102|H3A01E4
-3A01E4:lI102|N
-39FF68:lH3A0010|H3A001C
-3A0010:t2:H3A00B4,H3A00BC
-3A00BC:lI97|H3A0158
-3A0158:lI117|H3A01FC
-3A01FC:lI100|H3A02A8
-3A02A8:lI105|H3A034C
-3A034C:lI111|H3A03F0
-3A03F0:lI47|H3A0484
-3A0484:lI120|H3A0520
-3A0520:lI45|H3A05C4
-3A05C4:lI97|H3A0670
-3A0670:lI105|H3A0714
-3A0714:lI102|H3A07B8
-3A07B8:lI102|N
-3A00B4:lI97|H3A0150
-3A0150:lI105|H3A01F4
-3A01F4:lI102|H3A02A0
-3A02A0:lI99|N
-3A001C:lH3A00C4|H3A00D0
-3A00C4:t2:H3A0160,H3A0168
-3A0168:lI97|H3A020C
-3A020C:lI117|H3A02B8
-3A02B8:lI100|H3A035C
-3A035C:lI105|H3A03F8
-3A03F8:lI111|H3A048C
-3A048C:lI47|H3A0528
-3A0528:lI109|H3A05CC
-3A05CC:lI112|H3A0678
-3A0678:lI101|H3A071C
-3A071C:lI103|N
-3A0160:lI109|H3A0204
-3A0204:lI112|H3A02B0
-3A02B0:lI103|H3A0354
-3A0354:lI97|N
-3A00D0:lH3A0170|H3A017C
-3A0170:t2:H3A0214,H3A021C
-3A021C:lI97|H3A02C8
-3A02C8:lI117|H3A036C
-3A036C:lI100|H3A0400
-3A0400:lI105|H3A0494
-3A0494:lI111|H3A0530
-3A0530:lI47|H3A05D4
-3A05D4:lI109|H3A0680
-3A0680:lI112|H3A0724
-3A0724:lI101|H3A07C0
-3A07C0:lI103|N
-3A0214:lI109|H3A02C0
-3A02C0:lI112|H3A0364
-3A0364:lI50|N
-3A017C:lH3A0224|H3A0230
-3A0224:t2:H3A02D0,H3A02D8
-3A02D8:lI97|H3A037C
-3A037C:lI117|H3A0408
-3A0408:lI100|H3A049C
-3A049C:lI105|H3A0538
-3A0538:lI111|H3A05DC
-3A05DC:lI47|H3A0688
-3A0688:lI98|H3A072C
-3A072C:lI97|H3A07C8
-3A07C8:lI115|H3A0854
-3A0854:lI105|H3A08E0
-3A08E0:lI99|N
-3A02D0:lI97|H3A0374
-3A0374:lI117|N
-3A0230:lH3A02E0|H3A02EC
-3A02E0:t2:H3A0384,H3A038C
-3A038C:lI97|H3A0418
-3A0418:lI117|H3A04AC
-3A04AC:lI100|H3A0540
-3A0540:lI105|H3A05E4
-3A05E4:lI111|H3A0690
-3A0690:lI47|H3A0734
-3A0734:lI98|H3A07D0
-3A07D0:lI97|H3A085C
-3A085C:lI115|H3A08E8
-3A08E8:lI105|H3A0974
-3A0974:lI99|N
-3A0384:lI115|H3A0410
-3A0410:lI110|H3A04A4
-3A04A4:lI100|N
-3A02EC:lH3A0394|H3A03A0
-3A0394:t2:H3A0420,H3A0428
-3A0428:lI97|H3A04BC
-3A04BC:lI112|H3A0550
-3A0550:lI112|H3A05EC
-3A05EC:lI108|H3A0698
-3A0698:lI105|H3A073C
-3A073C:lI99|H3A07D8
-3A07D8:lI97|H3A0864
-3A0864:lI116|H3A08F0
-3A08F0:lI105|H3A097C
-3A097C:lI111|H3A0A08
-3A0A08:lI110|H3A0AA4
-3A0AA4:lI47|H3A0B48
-3A0B48:lI122|H3A0BF4
-3A0BF4:lI105|H3A0CB0
-3A0CB0:lI112|N
-3A0420:lI122|H3A04B4
-3A04B4:lI105|H3A0548
-3A0548:lI112|N
-3A03A0:lH3A0430|H3A043C
-3A0430:t2:H3A04C4,H3A04CC
-3A04CC:lI97|H3A0560
-3A0560:lI112|H3A05FC
-3A05FC:lI112|H3A06A0
-3A06A0:lI108|H3A0744
-3A0744:lI105|H3A07E0
-3A07E0:lI99|H3A086C
-3A086C:lI97|H3A08F8
-3A08F8:lI116|H3A0984
-3A0984:lI105|H3A0A10
-3A0A10:lI111|H3A0AAC
-3A0AAC:lI110|H3A0B50
-3A0B50:lI47|H3A0BFC
-3A0BFC:lI120|H3A0CB8
-3A0CB8:lI45|H3A0D6C
-3A0D6C:lI119|H3A0E20
-3A0E20:lI97|H3A0ED4
-3A0ED4:lI105|H3A0F90
-3A0F90:lI115|H3A105C
-3A105C:lI45|H3A1130
-3A1130:lI115|H3A1204
-3A1204:lI111|H3A12D0
-3A12D0:lI117|H3A13A4
-3A13A4:lI114|H3A1480
-3A1480:lI99|H3A1564
-3A1564:lI101|N
-3A04C4:lI115|H3A0558
-3A0558:lI114|H3A05F4
-3A05F4:lI99|N
-3A043C:lH3A04D4|H3A04E0
-3A04D4:t2:H3A0568,H3A0570
-3A0570:lI97|H3A060C
-3A060C:lI112|H3A06B0
-3A06B0:lI112|H3A0754
-3A0754:lI108|H3A07F0
-3A07F0:lI105|H3A0874
-3A0874:lI99|H3A0900
-3A0900:lI97|H3A098C
-3A098C:lI116|H3A0A18
-3A0A18:lI105|H3A0AB4
-3A0AB4:lI111|H3A0B58
-3A0B58:lI110|H3A0C04
-3A0C04:lI47|H3A0CC0
-3A0CC0:lI120|H3A0D74
-3A0D74:lI45|H3A0E28
-3A0E28:lI117|H3A0EDC
-3A0EDC:lI115|H3A0F98
-3A0F98:lI116|H3A1064
-3A1064:lI97|H3A1138
-3A1138:lI114|N
-3A0568:lI117|H3A0604
-3A0604:lI115|H3A06A8
-3A06A8:lI116|H3A074C
-3A074C:lI97|H3A07E8
-3A07E8:lI114|N
-3A04E0:lH3A0578|H3A0584
-3A0578:t2:H3A0614,H3A061C
-3A061C:lI97|H3A06C0
-3A06C0:lI112|H3A075C
-3A075C:lI112|H3A07F8
-3A07F8:lI108|H3A087C
-3A087C:lI105|H3A0908
-3A0908:lI99|H3A0994
-3A0994:lI97|H3A0A20
-3A0A20:lI116|H3A0ABC
-3A0ABC:lI105|H3A0B60
-3A0B60:lI111|H3A0C0C
-3A0C0C:lI110|H3A0CC8
-3A0CC8:lI47|H3A0D7C
-3A0D7C:lI120|H3A0E30
-3A0E30:lI45|H3A0EE4
-3A0EE4:lI116|H3A0FA0
-3A0FA0:lI114|H3A106C
-3A106C:lI111|H3A1140
-3A1140:lI102|H3A120C
-3A120C:lI102|H3A12D8
-3A12D8:lI45|H3A13AC
-3A13AC:lI109|H3A1488
-3A1488:lI115|N
-3A0614:lI109|H3A06B8
-3A06B8:lI115|N
-3A0584:lH3A0624|H3A0630
-3A0624:t2:H3A06C8,H3A06D0
-3A06D0:lI97|H3A076C
-3A076C:lI112|H3A0800
-3A0800:lI112|H3A0884
-3A0884:lI108|H3A0910
-3A0910:lI105|H3A099C
-3A099C:lI99|H3A0A28
-3A0A28:lI97|H3A0AC4
-3A0AC4:lI116|H3A0B68
-3A0B68:lI105|H3A0C14
-3A0C14:lI111|H3A0CD0
-3A0CD0:lI110|H3A0D84
-3A0D84:lI47|H3A0E38
-3A0E38:lI120|H3A0EEC
-3A0EEC:lI45|H3A0FA8
-3A0FA8:lI116|H3A1074
-3A1074:lI114|H3A1148
-3A1148:lI111|H3A1214
-3A1214:lI102|H3A12E0
-3A12E0:lI102|H3A13B4
-3A13B4:lI45|H3A1490
-3A1490:lI109|H3A156C
-3A156C:lI101|N
-3A06C8:lI109|H3A0764
-3A0764:lI101|N
-3A0630:lH3A06D8|H3A06E4
-3A06D8:t2:H3A0774,H3A077C
-3A077C:lI97|H3A0810
-3A0810:lI112|H3A0894
-3A0894:lI112|H3A0918
-3A0918:lI108|H3A09A4
-3A09A4:lI105|H3A0A30
-3A0A30:lI99|H3A0ACC
-3A0ACC:lI97|H3A0B70
-3A0B70:lI116|H3A0C1C
-3A0C1C:lI105|H3A0CD8
-3A0CD8:lI111|H3A0D8C
-3A0D8C:lI110|H3A0E40
-3A0E40:lI47|H3A0EF4
-3A0EF4:lI120|H3A0FB0
-3A0FB0:lI45|H3A107C
-3A107C:lI116|H3A1150
-3A1150:lI114|H3A121C
-3A121C:lI111|H3A12E8
-3A12E8:lI102|H3A13BC
-3A13BC:lI102|H3A1498
-3A1498:lI45|H3A1574
-3A1574:lI109|H3A1648
-3A1648:lI97|H3A171C
-3A171C:lI110|N
-3A0774:lI109|H3A0808
-3A0808:lI97|H3A088C
-3A088C:lI110|N
-3A06E4:lH3A0784|H3A0790
-3A0784:t2:H3A0818,H3A0820
-3A0820:lI97|H3A089C
-3A089C:lI112|H3A0920
-3A0920:lI112|H3A09AC
-3A09AC:lI108|H3A0A38
-3A0A38:lI105|H3A0AD4
-3A0AD4:lI99|H3A0B78
-3A0B78:lI97|H3A0C24
-3A0C24:lI116|H3A0CE0
-3A0CE0:lI105|H3A0D94
-3A0D94:lI111|H3A0E48
-3A0E48:lI110|H3A0EFC
-3A0EFC:lI47|H3A0FB8
-3A0FB8:lI120|H3A1084
-3A1084:lI45|H3A1158
-3A1158:lI116|H3A1224
-3A1224:lI114|H3A12F0
-3A12F0:lI111|H3A13C4
-3A13C4:lI102|H3A14A0
-3A14A0:lI102|N
-3A0818:lI116|N
-3A0790:lH3A0828|H3A0834
-3A0828:t2:H3A08A4,H3A08AC
-3A08AC:lI97|H3A0930
-3A0930:lI112|H3A09B4
-3A09B4:lI112|H3A0A40
-3A0A40:lI108|H3A0ADC
-3A0ADC:lI105|H3A0B80
-3A0B80:lI99|H3A0C2C
-3A0C2C:lI97|H3A0CE8
-3A0CE8:lI116|H3A0D9C
-3A0D9C:lI105|H3A0E50
-3A0E50:lI111|H3A0F04
-3A0F04:lI110|H3A0FC0
-3A0FC0:lI47|H3A108C
-3A108C:lI120|H3A1160
-3A1160:lI45|H3A122C
-3A122C:lI116|H3A12F8
-3A12F8:lI114|H3A13CC
-3A13CC:lI111|H3A14A8
-3A14A8:lI102|H3A157C
-3A157C:lI102|N
-3A08A4:lI116|H3A0928
-3A0928:lI114|N
-3A0834:lH3A08B4|H3A08C0
-3A08B4:t2:H3A0938,H3A0940
-3A0940:lI97|H3A09C4
-3A09C4:lI112|H3A0A50
-3A0A50:lI112|H3A0AEC
-3A0AEC:lI108|H3A0B88
-3A0B88:lI105|H3A0C34
-3A0C34:lI99|H3A0CF0
-3A0CF0:lI97|H3A0DA4
-3A0DA4:lI116|H3A0E58
-3A0E58:lI105|H3A0F0C
-3A0F0C:lI111|H3A0FC8
-3A0FC8:lI110|H3A1094
-3A1094:lI47|H3A1168
-3A1168:lI120|H3A1234
-3A1234:lI45|H3A1300
-3A1300:lI116|H3A13D4
-3A13D4:lI114|H3A14B0
-3A14B0:lI111|H3A1584
-3A1584:lI102|H3A1650
-3A1650:lI102|N
-3A0938:lI114|H3A09BC
-3A09BC:lI111|H3A0A48
-3A0A48:lI102|H3A0AE4
-3A0AE4:lI102|N
-3A08C0:lH3A0948|H3A0954
-3A0948:t2:H3A09CC,H3A09D4
-3A09D4:lI97|H3A0A60
-3A0A60:lI112|H3A0AFC
-3A0AFC:lI112|H3A0B98
-3A0B98:lI108|H3A0C44
-3A0C44:lI105|H3A0D00
-3A0D00:lI99|H3A0DB4
-3A0DB4:lI97|H3A0E60
-3A0E60:lI116|H3A0F14
-3A0F14:lI105|H3A0FD0
-3A0FD0:lI111|H3A109C
-3A109C:lI110|H3A1170
-3A1170:lI47|H3A123C
-3A123C:lI120|H3A1308
-3A1308:lI45|H3A13DC
-3A13DC:lI116|H3A14B8
-3A14B8:lI101|H3A158C
-3A158C:lI120|H3A1658
-3A1658:lI105|H3A1724
-3A1724:lI110|H3A17E8
-3A17E8:lI102|H3A18AC
-3A18AC:lI111|N
-3A09CC:lI116|H3A0A58
-3A0A58:lI101|H3A0AF4
-3A0AF4:lI120|H3A0B90
-3A0B90:lI105|H3A0C3C
-3A0C3C:lI110|H3A0CF8
-3A0CF8:lI102|H3A0DAC
-3A0DAC:lI111|N
-3A0954:lH3A09DC|H3A09E8
-3A09DC:t2:H3A0A68,H3A0A70
-3A0A70:lI97|H3A0B0C
-3A0B0C:lI112|H3A0BA8
-3A0BA8:lI112|H3A0C54
-3A0C54:lI108|H3A0D08
-3A0D08:lI105|H3A0DBC
-3A0DBC:lI99|H3A0E68
-3A0E68:lI97|H3A0F1C
-3A0F1C:lI116|H3A0FD8
-3A0FD8:lI105|H3A10A4
-3A10A4:lI111|H3A1178
-3A1178:lI110|H3A1244
-3A1244:lI47|H3A1310
-3A1310:lI120|H3A13E4
-3A13E4:lI45|H3A14C0
-3A14C0:lI116|H3A1594
-3A1594:lI101|H3A1660
-3A1660:lI120|H3A172C
-3A172C:lI105|H3A17F0
-3A17F0:lI110|H3A18B4
-3A18B4:lI102|H3A1970
-3A1970:lI111|N
-3A0A68:lI116|H3A0B04
-3A0B04:lI101|H3A0BA0
-3A0BA0:lI120|H3A0C4C
-3A0C4C:lI105|N
-3A09E8:lH3A0A78|H3A0A84
-3A0A78:t2:H3A0B14,H3A0B1C
-3A0B1C:lI97|H3A0BB8
-3A0BB8:lI112|H3A0C64
-3A0C64:lI112|H3A0D10
-3A0D10:lI108|H3A0DC4
-3A0DC4:lI105|H3A0E70
-3A0E70:lI99|H3A0F24
-3A0F24:lI97|H3A0FE0
-3A0FE0:lI116|H3A10AC
-3A10AC:lI105|H3A1180
-3A1180:lI111|H3A124C
-3A124C:lI110|H3A1318
-3A1318:lI47|H3A13EC
-3A13EC:lI120|H3A14C8
-3A14C8:lI45|H3A159C
-3A159C:lI116|H3A1668
-3A1668:lI101|H3A1734
-3A1734:lI120|N
-3A0B14:lI116|H3A0BB0
-3A0BB0:lI101|H3A0C5C
-3A0C5C:lI120|N
-3A0A84:lH3A0B24|H3A0B30
-3A0B24:t2:H3A0BC0,H3A0BC8
-3A0BC8:lI97|H3A0C74
-3A0C74:lI112|H3A0D20
-3A0D20:lI112|H3A0DCC
-3A0DCC:lI108|H3A0E78
-3A0E78:lI105|H3A0F2C
-3A0F2C:lI99|H3A0FE8
-3A0FE8:lI97|H3A10B4
-3A10B4:lI116|H3A1188
-3A1188:lI105|H3A1254
-3A1254:lI111|H3A1320
-3A1320:lI110|H3A13F4
-3A13F4:lI47|H3A14D0
-3A14D0:lI120|H3A15A4
-3A15A4:lI45|H3A1670
-3A1670:lI116|H3A173C
-3A173C:lI99|H3A17F8
-3A17F8:lI108|N
-3A0BC0:lI116|H3A0C6C
-3A0C6C:lI99|H3A0D18
-3A0D18:lI108|N
-3A0B30:lH3A0BD0|H3A0BDC
-3A0BD0:t2:H3A0C7C,H3A0C84
-3A0C84:lI97|H3A0D30
-3A0D30:lI112|H3A0DDC
-3A0DDC:lI112|H3A0E80
-3A0E80:lI108|H3A0F34
-3A0F34:lI105|H3A0FF0
-3A0FF0:lI99|H3A10BC
-3A10BC:lI97|H3A1190
-3A1190:lI116|H3A125C
-3A125C:lI105|H3A1328
-3A1328:lI111|H3A13FC
-3A13FC:lI110|H3A14D8
-3A14D8:lI47|H3A15AC
-3A15AC:lI120|H3A1678
-3A1678:lI45|H3A1744
-3A1744:lI116|H3A1800
-3A1800:lI97|H3A18BC
-3A18BC:lI114|N
-3A0C7C:lI116|H3A0D28
-3A0D28:lI97|H3A0DD4
-3A0DD4:lI114|N
-3A0BDC:lH3A0C8C|H3A0C98
-3A0C8C:t2:H3A0D38,H3A0D40
-3A0D40:lI97|H3A0DEC
-3A0DEC:lI112|H3A0E90
-3A0E90:lI112|H3A0F44
-3A0F44:lI108|H3A1000
-3A1000:lI105|H3A10CC
-3A10CC:lI99|H3A1198
-3A1198:lI97|H3A1264
-3A1264:lI116|H3A1330
-3A1330:lI105|H3A1404
-3A1404:lI111|H3A14E0
-3A14E0:lI110|H3A15B4
-3A15B4:lI47|H3A1680
-3A1680:lI120|H3A174C
-3A174C:lI45|H3A1808
-3A1808:lI115|H3A18C4
-3A18C4:lI118|H3A1978
-3A1978:lI52|H3A1A2C
-3A1A2C:lI99|H3A1AE0
-3A1AE0:lI114|H3A1BA4
-3A1BA4:lI99|N
-3A0D38:lI115|H3A0DE4
-3A0DE4:lI118|H3A0E88
-3A0E88:lI52|H3A0F3C
-3A0F3C:lI99|H3A0FF8
-3A0FF8:lI114|H3A10C4
-3A10C4:lI99|N
-3A0C98:lH3A0D48|H3A0D54
-3A0D48:t2:H3A0DF4,H3A0DFC
-3A0DFC:lI97|H3A0EA0
-3A0EA0:lI112|H3A0F54
-3A0F54:lI112|H3A1010
-3A1010:lI108|H3A10DC
-3A10DC:lI105|H3A11A8
-3A11A8:lI99|H3A1274
-3A1274:lI97|H3A1338
-3A1338:lI116|H3A140C
-3A140C:lI105|H3A14E8
-3A14E8:lI111|H3A15BC
-3A15BC:lI110|H3A1688
-3A1688:lI47|H3A1754
-3A1754:lI120|H3A1810
-3A1810:lI45|H3A18CC
-3A18CC:lI115|H3A1980
-3A1980:lI118|H3A1A34
-3A1A34:lI52|H3A1AE8
-3A1AE8:lI99|H3A1BAC
-3A1BAC:lI112|H3A1C78
-3A1C78:lI105|H3A1D3C
-3A1D3C:lI111|N
-3A0DF4:lI115|H3A0E98
-3A0E98:lI118|H3A0F4C
-3A0F4C:lI52|H3A1008
-3A1008:lI99|H3A10D4
-3A10D4:lI112|H3A11A0
-3A11A0:lI105|H3A126C
-3A126C:lI111|N
-3A0D54:lH3A0E04|H3A0E10
-3A0E04:t2:H3A0EA8,H3A0EB0
-3A0EB0:lI97|H3A0F64
-3A0F64:lI112|H3A1020
-3A1020:lI112|H3A10E4
-3A10E4:lI108|H3A11B0
-3A11B0:lI105|H3A127C
-3A127C:lI99|H3A1340
-3A1340:lI97|H3A1414
-3A1414:lI116|H3A14F0
-3A14F0:lI105|H3A15C4
-3A15C4:lI111|H3A1690
-3A1690:lI110|H3A175C
-3A175C:lI47|H3A1818
-3A1818:lI120|H3A18D4
-3A18D4:lI45|H3A1988
-3A1988:lI115|H3A1A3C
-3A1A3C:lI116|H3A1AF0
-3A1AF0:lI117|H3A1BB4
-3A1BB4:lI102|H3A1C80
-3A1C80:lI102|H3A1D44
-3A1D44:lI105|H3A1E00
-3A1E00:lI116|N
-3A0EA8:lI115|H3A0F5C
-3A0F5C:lI105|H3A1018
-3A1018:lI116|N
-3A0E10:lH3A0EB8|H3A0EC4
-3A0EB8:t2:H3A0F6C,H3A0F74
-3A0F74:lI97|H3A1030
-3A1030:lI112|H3A10F4
-3A10F4:lI112|H3A11C0
-3A11C0:lI108|H3A1284
-3A1284:lI105|H3A1348
-3A1348:lI99|H3A141C
-3A141C:lI97|H3A14F8
-3A14F8:lI116|H3A15CC
-3A15CC:lI105|H3A1698
-3A1698:lI111|H3A1764
-3A1764:lI110|H3A1820
-3A1820:lI47|H3A18DC
-3A18DC:lI120|H3A1990
-3A1990:lI45|H3A1A44
-3A1A44:lI115|H3A1AF8
-3A1AF8:lI104|H3A1BBC
-3A1BBC:lI97|H3A1C88
-3A1C88:lI114|N
-3A0F6C:lI115|H3A1028
-3A1028:lI104|H3A10EC
-3A10EC:lI97|H3A11B8
-3A11B8:lI114|N
-3A0EC4:lH3A0F7C|H3A0F88
-3A0F7C:t2:H3A1038,H3A1040
-3A1040:lI97|H3A1104
-3A1104:lI112|H3A11C8
-3A11C8:lI112|H3A128C
-3A128C:lI108|H3A1350
-3A1350:lI105|H3A1424
-3A1424:lI99|H3A1500
-3A1500:lI97|H3A15D4
-3A15D4:lI116|H3A16A0
-3A16A0:lI105|H3A176C
-3A176C:lI111|H3A1828
-3A1828:lI110|H3A18E4
-3A18E4:lI47|H3A1998
-3A1998:lI120|H3A1A4C
-3A1A4C:lI45|H3A1B00
-3A1B00:lI115|H3A1BC4
-3A1BC4:lI104|N
-3A1038:lI115|H3A10FC
-3A10FC:lI104|N
-3A0F88:lH3A1048|H3A1054
-3A1048:t2:H3A110C,H3A1114
-3A1114:lI97|H3A11D8
-3A11D8:lI112|H3A1294
-3A1294:lI112|H3A1358
-3A1358:lI108|H3A142C
-3A142C:lI105|H3A1508
-3A1508:lI99|H3A15DC
-3A15DC:lI97|H3A16A8
-3A16A8:lI116|H3A1774
-3A1774:lI105|H3A1830
-3A1830:lI111|H3A18EC
-3A18EC:lI110|H3A19A0
-3A19A0:lI47|H3A1A54
-3A1A54:lI120|H3A1B08
-3A1B08:lI45|H3A1BCC
-3A1BCC:lI110|H3A1C90
-3A1C90:lI101|H3A1D4C
-3A1D4C:lI116|H3A1E08
-3A1E08:lI99|H3A1EC4
-3A1EC4:lI100|H3A1F88
-3A1F88:lI102|N
-3A110C:lI110|H3A11D0
-3A11D0:lI99|N
-3A1054:lH3A111C|H3A1128
-3A111C:t2:H3A11E0,H3A11E8
-3A11E8:lI97|H3A12A4
-3A12A4:lI112|H3A1368
-3A1368:lI112|H3A1434
-3A1434:lI108|H3A1510
-3A1510:lI105|H3A15E4
-3A15E4:lI99|H3A16B0
-3A16B0:lI97|H3A177C
-3A177C:lI116|H3A1838
-3A1838:lI105|H3A18F4
-3A18F4:lI111|H3A19A8
-3A19A8:lI110|H3A1A5C
-3A1A5C:lI47|H3A1B10
-3A1B10:lI120|H3A1BD4
-3A1BD4:lI45|H3A1C98
-3A1C98:lI110|H3A1D54
-3A1D54:lI101|H3A1E10
-3A1E10:lI116|H3A1ECC
-3A1ECC:lI99|H3A1F90
-3A1F90:lI100|H3A2044
-3A2044:lI102|N
-3A11E0:lI99|H3A129C
-3A129C:lI100|H3A1360
-3A1360:lI102|N
-3A1128:lH3A11F0|H3A11FC
-3A11F0:t2:H3A12AC,H3A12B4
-3A12B4:lI97|H3A1378
-3A1378:lI112|H3A1444
-3A1444:lI112|H3A1518
-3A1518:lI108|H3A15EC
-3A15EC:lI105|H3A16B8
-3A16B8:lI99|H3A1784
-3A1784:lI97|H3A1840
-3A1840:lI116|H3A18FC
-3A18FC:lI105|H3A19B0
-3A19B0:lI111|H3A1A64
-3A1A64:lI110|H3A1B18
-3A1B18:lI47|H3A1BDC
-3A1BDC:lI120|H3A1CA0
-3A1CA0:lI45|H3A1D5C
-3A1D5C:lI109|H3A1E18
-3A1E18:lI105|H3A1ED4
-3A1ED4:lI102|N
-3A12AC:lI109|H3A1370
-3A1370:lI105|H3A143C
-3A143C:lI102|N
-3A11FC:lH3A12BC|H3A12C8
-3A12BC:t2:H3A1380,H3A1388
-3A1388:lI97|H3A1454
-3A1454:lI112|H3A1528
-3A1528:lI112|H3A15FC
-3A15FC:lI108|H3A16C8
-3A16C8:lI105|H3A178C
-3A178C:lI99|H3A1848
-3A1848:lI97|H3A1904
-3A1904:lI116|H3A19B8
-3A19B8:lI105|H3A1A6C
-3A1A6C:lI111|H3A1B20
-3A1B20:lI110|H3A1BE4
-3A1BE4:lI47|H3A1CA8
-3A1CA8:lI120|H3A1D64
-3A1D64:lI45|H3A1E20
-3A1E20:lI108|H3A1EDC
-3A1EDC:lI97|H3A1F98
-3A1F98:lI116|H3A204C
-3A204C:lI101|H3A2108
-3A2108:lI120|N
-3A1380:lI108|H3A144C
-3A144C:lI97|H3A1520
-3A1520:lI116|H3A15F4
-3A15F4:lI101|H3A16C0
-3A16C0:lI120|N
-3A12C8:lH3A1390|H3A139C
-3A1390:t2:H3A145C,H3A1464
-3A1464:lI97|H3A1538
-3A1538:lI112|H3A160C
-3A160C:lI112|H3A16D0
-3A16D0:lI108|H3A1794
-3A1794:lI105|H3A1850
-3A1850:lI99|H3A190C
-3A190C:lI97|H3A19C0
-3A19C0:lI116|H3A1A74
-3A1A74:lI105|H3A1B28
-3A1B28:lI111|H3A1BEC
-3A1BEC:lI110|H3A1CB0
-3A1CB0:lI47|H3A1D6C
-3A1D6C:lI120|H3A1E28
-3A1E28:lI45|H3A1EE4
-3A1EE4:lI107|H3A1FA0
-3A1FA0:lI111|H3A2054
-3A2054:lI97|H3A2110
-3A2110:lI110|N
-3A145C:lI115|H3A1530
-3A1530:lI107|H3A1604
-3A1604:lI112|N
-3A139C:lH3A146C|H3A1478
-3A146C:t2:H3A1540,H3A1548
-3A1548:lI97|H3A161C
-3A161C:lI112|H3A16E0
-3A16E0:lI112|H3A179C
-3A179C:lI108|H3A1858
-3A1858:lI105|H3A1914
-3A1914:lI99|H3A19C8
-3A19C8:lI97|H3A1A7C
-3A1A7C:lI116|H3A1B30
-3A1B30:lI105|H3A1BF4
-3A1BF4:lI111|H3A1CB8
-3A1CB8:lI110|H3A1D74
-3A1D74:lI47|H3A1E30
-3A1E30:lI120|H3A1EEC
-3A1EEC:lI45|H3A1FA8
-3A1FA8:lI107|H3A205C
-3A205C:lI111|H3A2118
-3A2118:lI97|H3A21CC
-3A21CC:lI110|N
-3A1540:lI115|H3A1614
-3A1614:lI107|H3A16D8
-3A16D8:lI100|N
-3A1478:lH3A1550|H3A155C
-3A1550:t2:H3A1624,H3A162C
-3A162C:lI97|H3A16F0
-3A16F0:lI112|H3A17AC
-3A17AC:lI112|H3A1860
-3A1860:lI108|H3A191C
-3A191C:lI105|H3A19D0
-3A19D0:lI99|H3A1A84
-3A1A84:lI97|H3A1B38
-3A1B38:lI116|H3A1BFC
-3A1BFC:lI105|H3A1CC0
-3A1CC0:lI111|H3A1D7C
-3A1D7C:lI110|H3A1E38
-3A1E38:lI47|H3A1EF4
-3A1EF4:lI120|H3A1FB0
-3A1FB0:lI45|H3A2064
-3A2064:lI107|H3A2120
-3A2120:lI111|H3A21D4
-3A21D4:lI97|H3A2288
-3A2288:lI110|N
-3A1624:lI115|H3A16E8
-3A16E8:lI107|H3A17A4
-3A17A4:lI116|N
-3A155C:lH3A1634|H3A1640
-3A1634:t2:H3A16F8,H3A1700
-3A1700:lI97|H3A17BC
-3A17BC:lI112|H3A1870
-3A1870:lI112|H3A1924
-3A1924:lI108|H3A19D8
-3A19D8:lI105|H3A1A8C
-3A1A8C:lI99|H3A1B40
-3A1B40:lI97|H3A1C04
-3A1C04:lI116|H3A1CC8
-3A1CC8:lI105|H3A1D84
-3A1D84:lI111|H3A1E40
-3A1E40:lI110|H3A1EFC
-3A1EFC:lI47|H3A1FB8
-3A1FB8:lI120|H3A206C
-3A206C:lI45|H3A2128
-3A2128:lI107|H3A21DC
-3A21DC:lI111|H3A2290
-3A2290:lI97|H3A234C
-3A234C:lI110|N
-3A16F8:lI115|H3A17B4
-3A17B4:lI107|H3A1868
-3A1868:lI109|N
-3A1640:lH3A1708|H3A1714
-3A1708:t2:H3A17C4,H3A17CC
-3A17CC:lI97|H3A1880
-3A1880:lI112|H3A1934
-3A1934:lI112|H3A19E0
-3A19E0:lI108|H3A1A94
-3A1A94:lI105|H3A1B48
-3A1B48:lI99|H3A1C0C
-3A1C0C:lI97|H3A1CD0
-3A1CD0:lI116|H3A1D8C
-3A1D8C:lI105|H3A1E48
-3A1E48:lI111|H3A1F04
-3A1F04:lI110|H3A1FC0
-3A1FC0:lI47|H3A2074
-3A2074:lI120|H3A2130
-3A2130:lI45|H3A21E4
-3A21E4:lI104|H3A2298
-3A2298:lI116|H3A2354
-3A2354:lI116|H3A2410
-3A2410:lI112|H3A24C4
-3A24C4:lI100|H3A2580
-3A2580:lI45|H3A263C
-3A263C:lI99|H3A2700
-3A2700:lI103|H3A27BC
-3A27BC:lI105|N
-3A17C4:lI99|H3A1878
-3A1878:lI103|H3A192C
-3A192C:lI105|N
-3A1714:lH3A17D4|H3A17E0
-3A17D4:t2:H3A1888,H3A1890
-3A1890:lI97|H3A1944
-3A1944:lI112|H3A19F0
-3A19F0:lI112|H3A1A9C
-3A1A9C:lI108|H3A1B50
-3A1B50:lI105|H3A1C14
-3A1C14:lI99|H3A1CD8
-3A1CD8:lI97|H3A1D94
-3A1D94:lI116|H3A1E50
-3A1E50:lI105|H3A1F0C
-3A1F0C:lI111|H3A1FC8
-3A1FC8:lI110|H3A207C
-3A207C:lI47|H3A2138
-3A2138:lI120|H3A21EC
-3A21EC:lI45|H3A22A0
-3A22A0:lI104|H3A235C
-3A235C:lI100|H3A2418
-3A2418:lI102|N
-3A1888:lI104|H3A193C
-3A193C:lI100|H3A19E8
-3A19E8:lI102|N
-3A17E0:lH3A1898|H3A18A4
-3A1898:t2:H3A194C,H3A1954
-3A1954:lI97|H3A1A00
-3A1A00:lI112|H3A1AA4
-3A1AA4:lI112|H3A1B58
-3A1B58:lI108|H3A1C1C
-3A1C1C:lI105|H3A1CE0
-3A1CE0:lI99|H3A1D9C
-3A1D9C:lI97|H3A1E58
-3A1E58:lI116|H3A1F14
-3A1F14:lI105|H3A1FD0
-3A1FD0:lI111|H3A2084
-3A2084:lI110|H3A2140
-3A2140:lI47|H3A21F4
-3A21F4:lI120|H3A22A8
-3A22A8:lI45|H3A2364
-3A2364:lI103|H3A2420
-3A2420:lI122|H3A24CC
-3A24CC:lI105|H3A2588
-3A2588:lI112|N
-3A194C:lI103|H3A19F8
-3A19F8:lI122|N
-3A18A4:lH3A195C|H3A1968
-3A195C:t2:H3A1A08,H3A1A10
-3A1A10:lI97|H3A1AB4
-3A1AB4:lI112|H3A1B68
-3A1B68:lI112|H3A1C2C
-3A1C2C:lI108|H3A1CE8
-3A1CE8:lI105|H3A1DA4
-3A1DA4:lI99|H3A1E60
-3A1E60:lI97|H3A1F1C
-3A1F1C:lI116|H3A1FD8
-3A1FD8:lI105|H3A208C
-3A208C:lI111|H3A2148
-3A2148:lI110|H3A21FC
-3A21FC:lI47|H3A22B0
-3A22B0:lI120|H3A236C
-3A236C:lI45|H3A2428
-3A2428:lI103|H3A24D4
-3A24D4:lI116|H3A2590
-3A2590:lI97|H3A2644
-3A2644:lI114|N
-3A1A08:lI103|H3A1AAC
-3A1AAC:lI116|H3A1B60
-3A1B60:lI97|H3A1C24
-3A1C24:lI114|N
-3A1968:lH3A1A18|H3A1A24
-3A1A18:t2:H3A1ABC,H3A1AC4
-3A1AC4:lI97|H3A1B78
-3A1B78:lI112|H3A1C3C
-3A1C3C:lI112|H3A1CF0
-3A1CF0:lI108|H3A1DAC
-3A1DAC:lI105|H3A1E68
-3A1E68:lI99|H3A1F24
-3A1F24:lI97|H3A1FE0
-3A1FE0:lI116|H3A2094
-3A2094:lI105|H3A2150
-3A2150:lI111|H3A2204
-3A2204:lI110|H3A22B8
-3A22B8:lI47|H3A2374
-3A2374:lI120|H3A2430
-3A2430:lI45|H3A24DC
-3A24DC:lI100|H3A2598
-3A2598:lI118|H3A264C
-3A264C:lI105|N
-3A1ABC:lI100|H3A1B70
-3A1B70:lI118|H3A1C34
-3A1C34:lI105|N
-3A1A24:lH3A1ACC|H3A1AD8
-3A1ACC:t2:H3A1B80,H3A1B88
-3A1B88:lI97|H3A1C4C
-3A1C4C:lI112|H3A1D00
-3A1D00:lI112|H3A1DB4
-3A1DB4:lI108|H3A1E70
-3A1E70:lI105|H3A1F2C
-3A1F2C:lI99|H3A1FE8
-3A1FE8:lI97|H3A209C
-3A209C:lI116|H3A2158
-3A2158:lI105|H3A220C
-3A220C:lI111|H3A22C0
-3A22C0:lI110|H3A237C
-3A237C:lI47|H3A2438
-3A2438:lI120|H3A24E4
-3A24E4:lI45|H3A25A0
-3A25A0:lI100|H3A2654
-3A2654:lI105|H3A2708
-3A2708:lI114|H3A27C4
-3A27C4:lI101|H3A2880
-3A2880:lI99|H3A2944
-3A2944:lI116|H3A2A10
-3A2A10:lI111|H3A2ADC
-3A2ADC:lI114|N
-3A1B80:lI100|H3A1C44
-3A1C44:lI99|H3A1CF8
-3A1CF8:lI114|N
-3A1AD8:lH3A1B90|H3A1B9C
-3A1B90:t2:H3A1C54,H3A1C5C
-3A1C5C:lI97|H3A1D10
-3A1D10:lI112|H3A1DC4
-3A1DC4:lI112|H3A1E78
-3A1E78:lI108|H3A1F34
-3A1F34:lI105|H3A1FF0
-3A1FF0:lI99|H3A20A4
-3A20A4:lI97|H3A2160
-3A2160:lI116|H3A2214
-3A2214:lI105|H3A22C8
-3A22C8:lI111|H3A2384
-3A2384:lI110|H3A2440
-3A2440:lI47|H3A24EC
-3A24EC:lI120|H3A25A8
-3A25A8:lI45|H3A265C
-3A265C:lI100|H3A2710
-3A2710:lI105|H3A27CC
-3A27CC:lI114|H3A2888
-3A2888:lI101|H3A294C
-3A294C:lI99|H3A2A18
-3A2A18:lI116|H3A2AE4
-3A2AE4:lI111|H3A2BB0
-3A2BB0:lI114|N
-3A1C54:lI100|H3A1D08
-3A1D08:lI105|H3A1DBC
-3A1DBC:lI114|N
-3A1B9C:lH3A1C64|H3A1C70
-3A1C64:t2:H3A1D18,H3A1D20
-3A1D20:lI97|H3A1DD4
-3A1DD4:lI112|H3A1E88
-3A1E88:lI112|H3A1F3C
-3A1F3C:lI108|H3A1FF8
-3A1FF8:lI105|H3A20AC
-3A20AC:lI99|H3A2168
-3A2168:lI97|H3A221C
-3A221C:lI116|H3A22D0
-3A22D0:lI105|H3A238C
-3A238C:lI111|H3A2448
-3A2448:lI110|H3A24F4
-3A24F4:lI47|H3A25B0
-3A25B0:lI120|H3A2664
-3A2664:lI45|H3A2718
-3A2718:lI100|H3A27D4
-3A27D4:lI105|H3A2890
-3A2890:lI114|H3A2954
-3A2954:lI101|H3A2A20
-3A2A20:lI99|H3A2AEC
-3A2AEC:lI116|H3A2BB8
-3A2BB8:lI111|H3A2C74
-3A2C74:lI114|N
-3A1D18:lI100|H3A1DCC
-3A1DCC:lI120|H3A1E80
-3A1E80:lI114|N
-3A1C70:lH3A1D28|H3A1D34
-3A1D28:t2:H3A1DDC,H3A1DE4
-3A1DE4:lI97|H3A1E98
-3A1E98:lI112|H3A1F4C
-3A1F4C:lI112|H3A2000
-3A2000:lI108|H3A20B4
-3A20B4:lI105|H3A2170
-3A2170:lI99|H3A2224
-3A2224:lI97|H3A22D8
-3A22D8:lI116|H3A2394
-3A2394:lI105|H3A2450
-3A2450:lI111|H3A24FC
-3A24FC:lI110|H3A25B8
-3A25B8:lI47|H3A266C
-3A266C:lI120|H3A2720
-3A2720:lI45|H3A27DC
-3A27DC:lI99|H3A2898
-3A2898:lI115|H3A295C
-3A295C:lI104|N
-3A1DDC:lI99|H3A1E90
-3A1E90:lI115|H3A1F44
-3A1F44:lI104|N
-3A1D34:lH3A1DEC|H3A1DF8
-3A1DEC:t2:H3A1EA0,H3A1EA8
-3A1EA8:lI97|H3A1F5C
-3A1F5C:lI112|H3A2010
-3A2010:lI112|H3A20C4
-3A20C4:lI108|H3A2178
-3A2178:lI105|H3A222C
-3A222C:lI99|H3A22E0
-3A22E0:lI97|H3A239C
-3A239C:lI116|H3A2458
-3A2458:lI105|H3A2504
-3A2504:lI111|H3A25C0
-3A25C0:lI110|H3A2674
-3A2674:lI47|H3A2728
-3A2728:lI120|H3A27E4
-3A27E4:lI45|H3A28A0
-3A28A0:lI99|H3A2964
-3A2964:lI112|H3A2A28
-3A2A28:lI105|H3A2AF4
-3A2AF4:lI111|N
-3A1EA0:lI99|H3A1F54
-3A1F54:lI112|H3A2008
-3A2008:lI105|H3A20BC
-3A20BC:lI111|N
-3A1DF8:lH3A1EB0|H3A1EBC
-3A1EB0:t2:H3A1F64,H3A1F6C
-3A1F6C:lI97|H3A2018
-3A2018:lI112|H3A20CC
-3A20CC:lI112|H3A2180
-3A2180:lI108|H3A2234
-3A2234:lI105|H3A22E8
-3A22E8:lI99|H3A23A4
-3A23A4:lI97|H3A2460
-3A2460:lI116|H3A250C
-3A250C:lI105|H3A25C8
-3A25C8:lI111|H3A267C
-3A267C:lI110|H3A2730
-3A2730:lI47|H3A27EC
-3A27EC:lI120|H3A28A8
-3A28A8:lI45|H3A296C
-3A296C:lI99|H3A2A30
-3A2A30:lI111|H3A2AFC
-3A2AFC:lI109|H3A2BC0
-3A2BC0:lI112|H3A2C7C
-3A2C7C:lI114|H3A2D2C
-3A2D2C:lI101|H3A2DD4
-3A2DD4:lI115|H3A2E6C
-3A2E6C:lI115|N
-3A1F64:lI90|N
-3A1EBC:lH3A1F74|H3A1F80
-3A1F74:t2:H3A2020,H3A2028
-3A2028:lI97|H3A20DC
-3A20DC:lI112|H3A2190
-3A2190:lI112|H3A223C
-3A223C:lI108|H3A22F0
-3A22F0:lI105|H3A23AC
-3A23AC:lI99|H3A2468
-3A2468:lI97|H3A2514
-3A2514:lI116|H3A25D0
-3A25D0:lI105|H3A2684
-3A2684:lI111|H3A2738
-3A2738:lI110|H3A27F4
-3A27F4:lI47|H3A28B0
-3A28B0:lI120|H3A2974
-3A2974:lI45|H3A2A38
-3A2A38:lI99|H3A2B04
-3A2B04:lI100|H3A2BC8
-3A2BC8:lI108|H3A2C84
-3A2C84:lI105|H3A2D34
-3A2D34:lI110|H3A2DDC
-3A2DDC:lI107|N
-3A2020:lI118|H3A20D4
-3A20D4:lI99|H3A2188
-3A2188:lI100|N
-3A1F80:lH3A2030|H3A203C
-3A2030:t2:H3A20E4,H3A20EC
-3A20EC:lI97|H3A21A0
-3A21A0:lI112|H3A224C
-3A224C:lI112|H3A2300
-3A2300:lI108|H3A23BC
-3A23BC:lI105|H3A2470
-3A2470:lI99|H3A251C
-3A251C:lI97|H3A25D8
-3A25D8:lI116|H3A268C
-3A268C:lI105|H3A2740
-3A2740:lI111|H3A27FC
-3A27FC:lI110|H3A28B8
-3A28B8:lI47|H3A297C
-3A297C:lI120|H3A2A40
-3A2A40:lI45|H3A2B0C
-3A2B0C:lI98|H3A2BD0
-3A2BD0:lI99|H3A2C8C
-3A2C8C:lI112|H3A2D3C
-3A2D3C:lI105|H3A2DE4
-3A2DE4:lI111|N
-3A20E4:lI98|H3A2198
-3A2198:lI99|H3A2244
-3A2244:lI112|H3A22F8
-3A22F8:lI105|H3A23B4
-3A23B4:lI111|N
-3A203C:lH3A20F4|H3A2100
-3A20F4:t2:H3A21A8,H3A21B0
-3A21B0:lI97|H3A225C
-3A225C:lI112|H3A2310
-3A2310:lI112|H3A23C4
-3A23C4:lI108|H3A2478
-3A2478:lI105|H3A2524
-3A2524:lI99|H3A25E0
-3A25E0:lI97|H3A2694
-3A2694:lI116|H3A2748
-3A2748:lI105|H3A2804
-3A2804:lI111|H3A28C0
-3A28C0:lI110|H3A2984
-3A2984:lI47|H3A2A48
-3A2A48:lI114|H3A2B14
-3A2B14:lI116|H3A2BD8
-3A2BD8:lI102|N
-3A21A8:lI114|H3A2254
-3A2254:lI116|H3A2308
-3A2308:lI102|N
-3A2100:lH3A21B8|H3A21C4
-3A21B8:t2:H3A2264,H3A226C
-3A226C:lI97|H3A2320
-3A2320:lI112|H3A23D4
-3A23D4:lI112|H3A2480
-3A2480:lI108|H3A252C
-3A252C:lI105|H3A25E8
-3A25E8:lI99|H3A269C
-3A269C:lI97|H3A2750
-3A2750:lI116|H3A280C
-3A280C:lI105|H3A28C8
-3A28C8:lI111|H3A298C
-3A298C:lI110|H3A2A50
-3A2A50:lI47|H3A2B1C
-3A2B1C:lI112|H3A2BE0
-3A2BE0:lI111|H3A2C94
-3A2C94:lI119|H3A2D44
-3A2D44:lI101|H3A2DEC
-3A2DEC:lI114|H3A2E74
-3A2E74:lI112|H3A2EEC
-3A2EEC:lI111|H3A2F64
-3A2F64:lI105|H3A2FD4
-3A2FD4:lI110|H3A303C
-3A303C:lI116|N
-3A2264:lI112|H3A2318
-3A2318:lI112|H3A23CC
-3A23CC:lI116|N
-3A21C4:lH3A2274|H3A2280
-3A2274:t2:H3A2328,H3A2330
-3A2330:lI97|H3A23E4
-3A23E4:lI112|H3A2488
-3A2488:lI112|H3A2534
-3A2534:lI108|H3A25F0
-3A25F0:lI105|H3A26A4
-3A26A4:lI99|H3A2758
-3A2758:lI97|H3A2814
-3A2814:lI116|H3A28D0
-3A28D0:lI105|H3A2994
-3A2994:lI111|H3A2A58
-3A2A58:lI110|H3A2B24
-3A2B24:lI47|H3A2BE8
-3A2BE8:lI112|H3A2C9C
-3A2C9C:lI111|H3A2D4C
-3A2D4C:lI115|H3A2DF4
-3A2DF4:lI116|H3A2E7C
-3A2E7C:lI115|H3A2EF4
-3A2EF4:lI99|H3A2F6C
-3A2F6C:lI114|H3A2FDC
-3A2FDC:lI105|H3A3044
-3A3044:lI112|H3A30A4
-3A30A4:lI116|N
-3A2328:lI97|H3A23DC
-3A23DC:lI105|N
-3A2280:lH3A2338|H3A2344
-3A2338:t2:H3A23EC,H3A23F4
-3A23F4:lI97|H3A2498
-3A2498:lI112|H3A2544
-3A2544:lI112|H3A25F8
-3A25F8:lI108|H3A26AC
-3A26AC:lI105|H3A2760
-3A2760:lI99|H3A281C
-3A281C:lI97|H3A28D8
-3A28D8:lI116|H3A299C
-3A299C:lI105|H3A2A60
-3A2A60:lI111|H3A2B2C
-3A2B2C:lI110|H3A2BF0
-3A2BF0:lI47|H3A2CA4
-3A2CA4:lI112|H3A2D54
-3A2D54:lI111|H3A2DFC
-3A2DFC:lI115|H3A2E84
-3A2E84:lI116|H3A2EFC
-3A2EFC:lI115|H3A2F74
-3A2F74:lI99|H3A2FE4
-3A2FE4:lI114|H3A304C
-3A304C:lI105|H3A30AC
-3A30AC:lI112|H3A3104
-3A3104:lI116|N
-3A23EC:lI101|H3A2490
-3A2490:lI112|H3A253C
-3A253C:lI115|N
-3A2344:lH3A23FC|H3A2408
-3A23FC:t2:H3A24A0,H3A24A8
-3A24A8:lI97|H3A2554
-3A2554:lI112|H3A2600
-3A2600:lI112|H3A26B4
-3A26B4:lI108|H3A2768
-3A2768:lI105|H3A2824
-3A2824:lI99|H3A28E0
-3A28E0:lI97|H3A29A4
-3A29A4:lI116|H3A2A68
-3A2A68:lI105|H3A2B34
-3A2B34:lI111|H3A2BF8
-3A2BF8:lI110|H3A2CAC
-3A2CAC:lI47|H3A2D5C
-3A2D5C:lI112|H3A2E04
-3A2E04:lI111|H3A2E8C
-3A2E8C:lI115|H3A2F04
-3A2F04:lI116|H3A2F7C
-3A2F7C:lI115|H3A2FEC
-3A2FEC:lI99|H3A3054
-3A3054:lI114|H3A30B4
-3A30B4:lI105|H3A310C
-3A310C:lI112|H3A315C
-3A315C:lI116|N
-3A24A0:lI112|H3A254C
-3A254C:lI115|N
-3A2408:lH3A24B0|H3A24BC
-3A24B0:t2:H3A255C,H3A2564
-3A2564:lI97|H3A2610
-3A2610:lI112|H3A26C4
-3A26C4:lI112|H3A2770
-3A2770:lI108|H3A282C
-3A282C:lI105|H3A28E8
-3A28E8:lI99|H3A29AC
-3A29AC:lI97|H3A2A70
-3A2A70:lI116|H3A2B3C
-3A2B3C:lI105|H3A2C00
-3A2C00:lI111|H3A2CB4
-3A2CB4:lI110|H3A2D64
-3A2D64:lI47|H3A2E0C
-3A2E0C:lI112|H3A2E94
-3A2E94:lI100|H3A2F0C
-3A2F0C:lI102|N
-3A255C:lI112|H3A2608
-3A2608:lI100|H3A26BC
-3A26BC:lI102|N
-3A24BC:lH3A256C|H3A2578
-3A256C:t2:H3A2618,H3A2620
-3A2620:lI97|H3A26D4
-3A26D4:lI112|H3A2780
-3A2780:lI112|H3A2834
-3A2834:lI108|H3A28F0
-3A28F0:lI105|H3A29B4
-3A29B4:lI99|H3A2A78
-3A2A78:lI97|H3A2B44
-3A2B44:lI116|H3A2C08
-3A2C08:lI105|H3A2CBC
-3A2CBC:lI111|H3A2D6C
-3A2D6C:lI110|H3A2E14
-3A2E14:lI47|H3A2E9C
-3A2E9C:lI111|H3A2F14
-3A2F14:lI100|H3A2F84
-3A2F84:lI97|N
-3A2618:lI111|H3A26CC
-3A26CC:lI100|H3A2778
-3A2778:lI97|N
-3A2578:lH3A2628|H3A2634
-3A2628:t2:H3A26DC,H3A26E4
-3A26E4:lI97|H3A2790
-3A2790:lI112|H3A2844
-3A2844:lI112|H3A28F8
-3A28F8:lI108|H3A29BC
-3A29BC:lI105|H3A2A80
-3A2A80:lI99|H3A2B4C
-3A2B4C:lI97|H3A2C10
-3A2C10:lI116|H3A2CC4
-3A2CC4:lI105|H3A2D74
-3A2D74:lI111|H3A2E1C
-3A2E1C:lI110|H3A2EA4
-3A2EA4:lI47|H3A2F1C
-3A2F1C:lI111|H3A2F8C
-3A2F8C:lI99|H3A2FF4
-3A2FF4:lI116|H3A305C
-3A305C:lI101|H3A30BC
-3A30BC:lI116|H3A3114
-3A3114:lI45|H3A3164
-3A3164:lI115|H3A31AC
-3A31AC:lI116|H3A31F4
-3A31F4:lI114|H3A323C
-3A323C:lI101|H3A3284
-3A3284:lI97|H3A32CC
-3A32CC:lI109|N
-3A26DC:lI98|H3A2788
-3A2788:lI105|H3A283C
-3A283C:lI110|N
-3A2634:lH3A26EC|H3A26F8
-3A26EC:t2:H3A2798,H3A27A0
-3A27A0:lI97|H3A2854
-3A2854:lI112|H3A2908
-3A2908:lI112|H3A29C4
-3A29C4:lI108|H3A2A88
-3A2A88:lI105|H3A2B54
-3A2B54:lI99|H3A2C18
-3A2C18:lI97|H3A2CCC
-3A2CCC:lI116|H3A2D7C
-3A2D7C:lI105|H3A2E24
-3A2E24:lI111|H3A2EAC
-3A2EAC:lI110|H3A2F24
-3A2F24:lI47|H3A2F94
-3A2F94:lI111|H3A2FFC
-3A2FFC:lI99|H3A3064
-3A3064:lI116|H3A30C4
-3A30C4:lI101|H3A311C
-3A311C:lI116|H3A316C
-3A316C:lI45|H3A31B4
-3A31B4:lI115|H3A31FC
-3A31FC:lI116|H3A3244
-3A3244:lI114|H3A328C
-3A328C:lI101|H3A32D4
-3A32D4:lI97|H3A3314
-3A3314:lI109|N
-3A2798:lI100|H3A284C
-3A284C:lI109|H3A2900
-3A2900:lI115|N
-3A26F8:lH3A27A8|H3A27B4
-3A27A8:t2:H3A285C,H3A2864
-3A2864:lI97|H3A2918
-3A2918:lI112|H3A29D4
-3A29D4:lI112|H3A2A90
-3A2A90:lI108|H3A2B5C
-3A2B5C:lI105|H3A2C20
-3A2C20:lI99|H3A2CD4
-3A2CD4:lI97|H3A2D84
-3A2D84:lI116|H3A2E2C
-3A2E2C:lI105|H3A2EB4
-3A2EB4:lI111|H3A2F2C
-3A2F2C:lI110|H3A2F9C
-3A2F9C:lI47|H3A3004
-3A3004:lI111|H3A306C
-3A306C:lI99|H3A30CC
-3A30CC:lI116|H3A3124
-3A3124:lI101|H3A3174
-3A3174:lI116|H3A31BC
-3A31BC:lI45|H3A3204
-3A3204:lI115|H3A324C
-3A324C:lI116|H3A3294
-3A3294:lI114|H3A32DC
-3A32DC:lI101|H3A331C
-3A331C:lI97|H3A334C
-3A334C:lI109|N
-3A285C:lI108|H3A2910
-3A2910:lI104|H3A29CC
-3A29CC:lI97|N
-3A27B4:lH3A286C|H3A2878
-3A286C:t2:H3A2920,H3A2928
-3A2928:lI97|H3A29E4
-3A29E4:lI112|H3A2AA0
-3A2AA0:lI112|H3A2B64
-3A2B64:lI108|H3A2C28
-3A2C28:lI105|H3A2CDC
-3A2CDC:lI99|H3A2D8C
-3A2D8C:lI97|H3A2E34
-3A2E34:lI116|H3A2EBC
-3A2EBC:lI105|H3A2F34
-3A2F34:lI111|H3A2FA4
-3A2FA4:lI110|H3A300C
-3A300C:lI47|H3A3074
-3A3074:lI111|H3A30D4
-3A30D4:lI99|H3A312C
-3A312C:lI116|H3A317C
-3A317C:lI101|H3A31C4
-3A31C4:lI116|H3A320C
-3A320C:lI45|H3A3254
-3A3254:lI115|H3A329C
-3A329C:lI116|H3A32E4
-3A32E4:lI114|H3A3324
-3A3324:lI101|H3A3354
-3A3354:lI97|H3A337C
-3A337C:lI109|N
-3A2920:lI108|H3A29DC
-3A29DC:lI122|H3A2A98
-3A2A98:lI104|N
-3A2878:lH3A2930|H3A293C
-3A2930:t2:H3A29EC,H3A29F4
-3A29F4:lI97|H3A2AB0
-3A2AB0:lI112|H3A2B74
-3A2B74:lI112|H3A2C30
-3A2C30:lI108|H3A2CE4
-3A2CE4:lI105|H3A2D94
-3A2D94:lI99|H3A2E3C
-3A2E3C:lI97|H3A2EC4
-3A2EC4:lI116|H3A2F3C
-3A2F3C:lI105|H3A2FAC
-3A2FAC:lI111|H3A3014
-3A3014:lI110|H3A307C
-3A307C:lI47|H3A30DC
-3A30DC:lI111|H3A3134
-3A3134:lI99|H3A3184
-3A3184:lI116|H3A31CC
-3A31CC:lI101|H3A3214
-3A3214:lI116|H3A325C
-3A325C:lI45|H3A32A4
-3A32A4:lI115|H3A32EC
-3A32EC:lI116|H3A332C
-3A332C:lI114|H3A335C
-3A335C:lI101|H3A3384
-3A3384:lI97|H3A33A4
-3A33A4:lI109|N
-3A29EC:lI101|H3A2AA8
-3A2AA8:lI120|H3A2B6C
-3A2B6C:lI101|N
-3A293C:lH3A29FC|H3A2A08
-3A29FC:t2:H3A2AB8,H3A2AC0
-3A2AC0:lI97|H3A2B84
-3A2B84:lI112|H3A2C40
-3A2C40:lI112|H3A2CF4
-3A2CF4:lI108|H3A2DA4
-3A2DA4:lI105|H3A2E44
-3A2E44:lI99|H3A2ECC
-3A2ECC:lI97|H3A2F44
-3A2F44:lI116|H3A2FB4
-3A2FB4:lI105|H3A301C
-3A301C:lI111|H3A3084
-3A3084:lI110|H3A30E4
-3A30E4:lI47|H3A313C
-3A313C:lI111|H3A318C
-3A318C:lI99|H3A31D4
-3A31D4:lI116|H3A321C
-3A321C:lI101|H3A3264
-3A3264:lI116|H3A32AC
-3A32AC:lI45|H3A32F4
-3A32F4:lI115|H3A3334
-3A3334:lI116|H3A3364
-3A3364:lI114|H3A338C
-3A338C:lI101|H3A33AC
-3A33AC:lI97|H3A33C4
-3A33C4:lI109|N
-3A2AB8:lI99|H3A2B7C
-3A2B7C:lI108|H3A2C38
-3A2C38:lI97|H3A2CEC
-3A2CEC:lI115|H3A2D9C
-3A2D9C:lI115|N
-3A2A08:lH3A2AC8|H3A2AD4
-3A2AC8:t2:H3A2B8C,H3A2B94
-3A2B94:lI97|H3A2C50
-3A2C50:lI112|H3A2D04
-3A2D04:lI112|H3A2DAC
-3A2DAC:lI108|H3A2E4C
-3A2E4C:lI105|H3A2ED4
-3A2ED4:lI99|H3A2F4C
-3A2F4C:lI97|H3A2FBC
-3A2FBC:lI116|H3A3024
-3A3024:lI105|H3A308C
-3A308C:lI111|H3A30EC
-3A30EC:lI110|H3A3144
-3A3144:lI47|H3A3194
-3A3194:lI109|H3A31DC
-3A31DC:lI115|H3A3224
-3A3224:lI119|H3A326C
-3A326C:lI111|H3A32B4
-3A32B4:lI114|H3A32FC
-3A32FC:lI100|N
-3A2B8C:lI100|H3A2C48
-3A2C48:lI111|H3A2CFC
-3A2CFC:lI99|N
-3A2AD4:lH3A2B9C|H3A2BA8
-3A2B9C:t2:H3A2C58,H3A2C60
-3A2C60:lI97|H3A2D14
-3A2D14:lI112|H3A2DBC
-3A2DBC:lI112|H3A2E54
-3A2E54:lI108|H3A2EDC
-3A2EDC:lI105|H3A2F54
-3A2F54:lI99|H3A2FC4
-3A2FC4:lI97|H3A302C
-3A302C:lI116|H3A3094
-3A3094:lI105|H3A30F4
-3A30F4:lI111|H3A314C
-3A314C:lI110|H3A319C
-3A319C:lI47|H3A31E4
-3A31E4:lI109|H3A322C
-3A322C:lI97|H3A3274
-3A3274:lI99|H3A32BC
-3A32BC:lI45|H3A3304
-3A3304:lI99|H3A333C
-3A333C:lI111|H3A336C
-3A336C:lI109|H3A3394
-3A3394:lI112|H3A33B4
-3A33B4:lI97|H3A33CC
-3A33CC:lI99|H3A33DC
-3A33DC:lI116|H3A33EC
-3A33EC:lI112|H3A33FC
-3A33FC:lI114|H3A340C
-3A340C:lI111|N
-3A2C58:lI99|H3A2D0C
-3A2D0C:lI112|H3A2DB4
-3A2DB4:lI116|N
-3A2BA8:lH3A2C68|N
-3A2C68:t2:H3A2D1C,H3A2D24
-3A2D24:lI97|H3A2DCC
-3A2DCC:lI112|H3A2E64
-3A2E64:lI112|H3A2EE4
-3A2EE4:lI108|H3A2F5C
-3A2F5C:lI105|H3A2FCC
-3A2FCC:lI99|H3A3034
-3A3034:lI97|H3A309C
-3A309C:lI116|H3A30FC
-3A30FC:lI105|H3A3154
-3A3154:lI111|H3A31A4
-3A31A4:lI110|H3A31EC
-3A31EC:lI47|H3A3234
-3A3234:lI109|H3A327C
-3A327C:lI97|H3A32C4
-3A32C4:lI99|H3A330C
-3A330C:lI45|H3A3344
-3A3344:lI98|H3A3374
-3A3374:lI105|H3A339C
-3A339C:lI110|H3A33BC
-3A33BC:lI104|H3A33D4
-3A33D4:lI101|H3A33E4
-3A33E4:lI120|H3A33F4
-3A33F4:lI52|H3A3404
-3A3404:lI48|N
-3A2D1C:lI104|H3A2DC4
-3A2DC4:lI113|H3A2E5C
-3A2E5C:lI120|N
-39DC28:lH39DC68|H39DC74
-39DC68:t2:A4:port,I8888
-39DC74:lH39DCA8|H39DCB4
-39DCA8:t2:AC:bind_address,H39DCF8
-39DCF8:t4:I127,I0,I0,I1
-39DCB4:lH39DD0C|H39DD18
-39DD0C:t2:AB:server_name,H39DD6C
-39DD6C:lI108|H39DDE4
-39DDE4:lI111|H39DE5C
-39DE5C:lI99|H39DEE4
-39DEE4:lI97|H39DF6C
-39DF6C:lI108|H39E00C
-39E00C:lI104|H39E0B4
-39E0B4:lI111|H39E16C
-39E16C:lI115|H39E238
-39E238:lI116|N
-39DD18:lH39DD74|H39DD80
-39DD74:t2:AE:max_header_siz,I1024
-39DD80:lH39DDEC|H39DDF8
-39DDEC:t2:A11:max_header_action,A8:reply414
-39DDF8:lH39DE64|H39DE70
-39DE64:t2:A8:com_type,A7:ip_comm
-39DE70:lH39DEEC|H39DEF8
-39DEEC:t2:A7:modules,H39DF74
-39DF74:lA9:mod_alias|H39E014
-39E014:lA8:mod_auth|H39E0BC
-39E0BC:lA7:mod_esi|H39E174
-39E174:lAB:mod_actions|H39E240
-39E240:lA7:mod_cgi|H39E324
-39E324:lAB:mod_include|H39E418
-39E418:lA7:mod_dir|H39E51C
-39E51C:lA7:mod_get|H39E634
-39E634:lA8:mod_head|H39E748
-39E748:lA7:mod_log|H39E85C
-39E85C:lAC:mod_disk_log|N
-39DEF8:lH39DF7C|H39DF88
-39DF7C:t2:AF:directory_index,H39E01C
-39E01C:lH39E0C4|N
-39E0C4:lI105|H39E17C
-39E17C:lI110|H39E248
-39E248:lI100|H39E32C
-39E32C:lI101|H39E420
-39E420:lI120|H39E524
-39E524:lI46|H39E63C
-39E63C:lI104|H39E750
-39E750:lI116|H39E864
-39E864:lI109|H39E978
-39E978:lI108|N
-39DF88:lH39E024|H39E030
-39E024:t2:AC:default_type,H39E0CC
-39E0CC:lI116|H39E184
-39E184:lI101|H39E250
-39E250:lI120|H39E334
-39E334:lI116|H39E428
-39E428:lI47|H39E52C
-39E52C:lI112|H39E644
-39E644:lI108|H39E758
-39E758:lI97|H39E86C
-39E86C:lI105|H39E980
-39E980:lI110|N
-39E030:lH39E0D4|H39E0E0
-39E0D4:t2:A10:erl_script_alias,H39E18C
-39E18C:t2:H39E258,H39E260
-39E260:lH39E344|N
-39E344:lI119|H39E438
-39E438:lI101|H39E53C
-39E53C:lI98|H39E654
-39E654:lI116|H39E768
-39E768:lI111|H39E87C
-39E87C:lI111|H39E990
-39E990:lI108|N
-39E258:lI47|H39E33C
-39E33C:lI119|H39E430
-39E430:lI101|H39E534
-39E534:lI98|H39E64C
-39E64C:lI116|H39E760
-39E760:lI111|H39E874
-39E874:lI111|H39E988
-39E988:lI108|N
-39E0E0:lH39E198|H39E1A4
-39E198:t2:A5:alias,H39E268
-39E268:t2:H39E34C,H39E354
-39E354:lI47|H39E448
-39E448:lI99|H39E54C
-39E54C:lI108|H39E664
-39E664:lI101|H39E778
-39E778:lI97|H39E88C
-39E88C:lI114|H39E9A0
-39E9A0:lI99|H39EA94
-39EA94:lI97|H39EB88
-39EB88:lI115|H39EC7C
-39EC7C:lI101|H39ED70
-39ED70:lI47|H39EE4C
-39EE4C:lI111|H39EF20
-39EF20:lI116|H39EFFC
-39EFFC:lI112|H39F0E0
-39F0E0:lI47|H39F1B4
-39F1B4:lI101|H39F288
-39F288:lI114|H39F344
-39F344:lI116|H39F408
-39F408:lI115|H39F4D4
-39F4D4:lI47|H39F5A8
-39F5A8:lI108|H39F67C
-39F67C:lI105|H39F750
-39F750:lI98|H39F824
-39F824:lI47|H39F908
-39F908:lI111|H39F9E4
-39F9E4:lI98|H39FAC0
-39FAC0:lI115|H39FB9C
-39FB9C:lI101|H39FC68
-39FC68:lI114|H39FD2C
-39FD2C:lI118|H39FDF8
-39FDF8:lI101|H39FEB4
-39FEB4:lI114|H39FF70
-39FF70:lI47|H3A0024
-3A0024:lI112|H3A00D8
-3A00D8:lI114|H3A0184
-3A0184:lI105|H3A0238
-3A0238:lI118|H3A02F4
-3A02F4:lI47|H3A03A8
-3A03A8:lI99|H3A0444
-3A0444:lI114|H3A04E8
-3A04E8:lI97|H3A058C
-3A058C:lI115|H3A0638
-3A0638:lI104|H3A06EC
-3A06EC:lI100|H3A0798
-3A0798:lI117|H3A083C
-3A083C:lI109|H3A08C8
-3A08C8:lI112|H3A095C
-3A095C:lI95|H3A09F0
-3A09F0:lI118|H3A0A8C
-3A0A8C:lI105|H3A0B38
-3A0B38:lI101|H3A0BE4
-3A0BE4:lI119|H3A0CA0
-3A0CA0:lI101|H3A0D5C
-3A0D5C:lI114|N
-39E34C:lI47|H39E440
-39E440:lI99|H39E544
-39E544:lI114|H39E65C
-39E65C:lI97|H39E770
-39E770:lI115|H39E884
-39E884:lI104|H39E998
-39E998:lI100|H39EA8C
-39EA8C:lI117|H39EB80
-39EB80:lI109|H39EC74
-39EC74:lI112|H39ED68
-39ED68:lI95|H39EE44
-39EE44:lI118|H39EF18
-39EF18:lI105|H39EFF4
-39EFF4:lI101|H39F0D8
-39F0D8:lI119|H39F1AC
-39F1AC:lI101|H39F280
-39F280:lI114|N
-39E1A4:lH39E274|H39E280
-39E274:t2:A5:alias,H39E35C
-39E35C:t2:H39E450,H39E458
-39E458:lI47|H39E55C
-39E55C:lI99|H39E674
-39E674:lI108|H39E788
-39E788:lI101|H39E89C
-39E89C:lI97|H39E9B0
-39E9B0:lI114|H39EAA4
-39EAA4:lI99|H39EB98
-39EB98:lI97|H39EC8C
-39EC8C:lI115|H39ED80
-39ED80:lI101|H39EE5C
-39EE5C:lI47|H39EF30
-39EF30:lI111|H39F00C
-39F00C:lI116|H39F0F0
-39F0F0:lI112|H39F1C4
-39F1C4:lI47|H39F298
-39F298:lI101|H39F354
-39F354:lI114|H39F418
-39F418:lI116|H39F4E4
-39F4E4:lI115|H39F5B0
-39F5B0:lI47|H39F684
-39F684:lI101|H39F758
-39F758:lI114|H39F82C
-39F82C:lI116|H39F910
-39F910:lI115|H39F9EC
-39F9EC:lI47|H39FAC8
-39FAC8:lI100|H39FBA4
-39FBA4:lI111|H39FC70
-39FC70:lI99|H39FD34
-39FD34:lI47|H39FE00
-39FE00:lI104|H39FEBC
-39FEBC:lI116|H39FF78
-39FF78:lI109|H3A002C
-3A002C:lI108|N
-39E450:lI47|H39E554
-39E554:lI99|H39E66C
-39E66C:lI114|H39E780
-39E780:lI97|H39E894
-39E894:lI115|H39E9A8
-39E9A8:lI104|H39EA9C
-39EA9C:lI100|H39EB90
-39EB90:lI117|H39EC84
-39EC84:lI109|H39ED78
-39ED78:lI112|H39EE54
-39EE54:lI95|H39EF28
-39EF28:lI101|H39F004
-39F004:lI114|H39F0E8
-39F0E8:lI116|H39F1BC
-39F1BC:lI115|H39F290
-39F290:lI95|H39F34C
-39F34C:lI100|H39F410
-39F410:lI111|H39F4DC
-39F4DC:lI99|N
-39E280:lH39E368|H39E374
-39E368:t2:A5:alias,H39E460
-39E460:t2:H39E564,H39E56C
-39E56C:lI47|H39E684
-39E684:lI99|H39E798
-39E798:lI108|H39E8AC
-39E8AC:lI101|H39E9C0
-39E9C0:lI97|H39EAB4
-39EAB4:lI114|H39EBA8
-39EBA8:lI99|H39EC9C
-39EC9C:lI97|H39ED90
-39ED90:lI115|H39EE6C
-39EE6C:lI101|H39EF40
-39EF40:lI47|H39F01C
-39F01C:lI111|H39F100
-39F100:lI116|H39F1D4
-39F1D4:lI112|H39F2A0
-39F2A0:lI47|H39F35C
-39F35C:lI101|H39F420
-39F420:lI114|H39F4EC
-39F4EC:lI116|H39F5B8
-39F5B8:lI115|H39F68C
-39F68C:lI47|H39F760
-39F760:lI108|H39F834
-39F834:lI105|H39F918
-39F918:lI98|H39F9F4
-39F9F4:lI47|H39FAD0
-39FAD0:lI111|H39FBAC
-39FBAC:lI98|H39FC78
-39FC78:lI115|H39FD3C
-39FD3C:lI101|H39FE08
-39FE08:lI114|H39FEC4
-39FEC4:lI118|H39FF80
-39FF80:lI101|H3A0034
-3A0034:lI114|H3A00E0
-3A00E0:lI47|H3A018C
-3A018C:lI100|H3A0240
-3A0240:lI111|H3A02FC
-3A02FC:lI99|H3A03B0
-3A03B0:lI47|H3A044C
-3A044C:lI104|H3A04F0
-3A04F0:lI116|H3A0594
-3A0594:lI109|H3A0640
-3A0640:lI108|N
-39E564:lI47|H39E67C
-39E67C:lI99|H39E790
-39E790:lI114|H39E8A4
-39E8A4:lI97|H39E9B8
-39E9B8:lI115|H39EAAC
-39EAAC:lI104|H39EBA0
-39EBA0:lI100|H39EC94
-39EC94:lI117|H39ED88
-39ED88:lI109|H39EE64
-39EE64:lI112|H39EF38
-39EF38:lI95|H39F014
-39F014:lI100|H39F0F8
-39F0F8:lI111|H39F1CC
-39F1CC:lI99|N
-39E374:lH39E46C|N
-39E46C:t2:A10:erl_script_alias,H39E574
-39E574:t2:H39E68C,H39E694
-39E694:lH39E7A8|N
-39E7A8:lI99|H39E8BC
-39E8BC:lI114|H39E9D0
-39E9D0:lI97|H39EAC4
-39EAC4:lI115|H39EBB8
-39EBB8:lI104|H39ECAC
-39ECAC:lI100|H39EDA0
-39EDA0:lI117|H39EE74
-39EE74:lI109|H39EF48
-39EF48:lI112|H39F024
-39F024:lI95|H39F108
-39F108:lI118|H39F1DC
-39F1DC:lI105|H39F2A8
-39F2A8:lI101|H39F364
-39F364:lI119|H39F428
-39F428:lI101|H39F4F4
-39F4F4:lI114|N
-39E68C:lI47|H39E7A0
-39E7A0:lI99|H39E8B4
-39E8B4:lI100|H39E9C8
-39E9C8:lI118|H39EABC
-39EABC:lI95|H39EBB0
-39EBB0:lI101|H39ECA4
-39ECA4:lI114|H39ED98
-39ED98:lI108|N
-39DB58:lN|H39DB9C
-39DB9C:lH39D9FC|H39DBEC
-39D9FC:t4:I127,I0,I0,I1
-39DBEC:lI8888|N
-3A3E20:lH3A3DFC|H3A3704
-3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
-39DAE8:lAD:httpd_manager|H39DB38
-39DB38:lAA:gen_server|N
-39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
-39DB30:lA9:undefined|H39DB78
-39DB78:lH39DB50|H39DBC0
-39DBC0:lN|N
-39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
-3A3704:lH3A36E0|H39D998
-3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
-39DA38:lAE:httpd_misc_sup|H39DAC0
-39DAC0:lAA:supervisor|N
-39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
-39D958:lH39D9FC|H39DA10
-39DA10:lI8888|H39DAB8
-39DAB8:lA7:silence|N
-39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
-39D998:lH39DA64|N
-39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
-39DB10:lA12:httpd_acceptor_sup|H39DB48
-39DB48:lAA:supervisor|N
-39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
-39DB40:lH39D9FC|H39DB80
-39DB80:lI8888|H39DBC8
-39DBC8:lA7:silence|N
-39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
-39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39D9CC:lAA:gen_server|H39DA90
-39DA90:lP<0.33.0>|H39DB20
-39DB20:lP<0.33.0>|H39DB60
-39DB60:lH39DBA4|H39DBB0
-39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39DBB0:lAA:supervisor|H39DBF4
-39DBF4:lH39DC30|H39DC40
-39DC30:t3:H39D960,A9:httpd_sup,H39DA88
-39DC40:lN|N
-39D940:t2:AD:$initial_call,H39D9E4
-39D9E4:t3:A3:gen,A7:init_it,H39D9CC
-39D94C:t2:AA:$ancestors,H39D9F4
-39D9F4:lA8:web_tool|H39DAB0
-39DAB0:lP<0.27.0>|N
-=proc_dictionary:<0.44.0>
-H3756A8
-H3756B4
-H3756C0
-H3756CC
-=proc_stack:<0.44.0>
-36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36C030
-y4:A1E:httpd_acc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H375710
-=proc_heap:<0.44.0>
-36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
-375730:lA7:silence|N
-36C028:lH36C004|N
-36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
-36BEA0:lAE:httpd_acceptor|N
-36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
-36BEE8:lP<0.46.0>|H36BEF0
-36BEF0:lA7:ip_comm|H36BEF8
-36BEF8:lH36BF00|H36BF14
-36BF00:t4:I127,I0,I0,I1
-36BF14:lI8888|H36BF1C
-36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
-36BF24:lA7:silence|N
-36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
-36BED4:t4:I127,I0,I0,I1
-3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-375710:lAA:gen_server|H375738
-375738:lP<0.43.0>|H375748
-375748:lP<0.43.0>|H375758
-375758:lH375760|H37576C
-375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-37576C:lAA:supervisor|H375774
-375774:lH37577C|H37578C
-37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
-37578C:lN|N
-3756A8:t2:AD:$initial_call,H375718
-375718:t3:A3:gen,A7:init_it,H375710
-3756B4:t2:A9:verbosity,A7:silence
-3756C0:t2:AA:$ancestors,H375728
-375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
-375740:lA8:web_tool|H375750
-375750:lP<0.27.0>|N
-3756CC:t2:A5:sname,A7:acc_sup
-=proc_dictionary:<0.45.0>
-H36F484
-H36F4F4
-H36F468
-H36F500
-=proc_stack:<0.45.0>
-36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F5D0
-y4:A1F:httpd_misc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36f750:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36F430
-=proc_heap:<0.45.0>
-36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
-36F408:lA7:silence|N
-36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F430:lAA:gen_server|H36F428
-36F428:lP<0.43.0>|H36F420
-36F420:lP<0.43.0>|H36F3D0
-36F3D0:lH36F3E0|H36F418
-36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F418:lAA:supervisor|H36F3D8
-36F3D8:lH36F3EC|H36F410
-36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
-36F410:lN|N
-36F484:t2:AD:$initial_call,H36F474
-36F474:t3:A3:gen,A7:init_it,H36F430
-36F4F4:t2:A9:verbosity,A7:silence
-36F468:t2:AA:$ancestors,H36F460
-36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
-36F440:lA8:web_tool|H36F438
-36F438:lP<0.27.0>|N
-36F500:t2:A5:sname,A8:misc_sup
-=proc_dictionary:<0.46.0>
-H3BDA50
-H3BDA5C
-H3BDAC8
-H3BDB28
-H3BDB9C
-H3BDC00
-H3BDADC
-H3BDB3C
-=proc_stack:<0.46.0>
-39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:httpd_manager
-y3:H39D5A4
-y4:A16:httpd__127_0_0_1__8888
-y5:P<0.43.0>
-39d910:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3BDAB0
-=proc_heap:<0.46.0>
-39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
-39D430:lH39BF40|H39D428
-39BF40:t2:A8:max_conn,I1
-39D428:lH39BC80|H39D420
-39BC80:t2:AF:last_heavy_load,A5:never
-39D420:lH39D414|N
-39D414:t2:AF:last_connection,H39D408
-39D408:t2:H39D3E8,H39D3F8
-39D3F8:t3:I11,I22,I34
-39D3E8:t3:I2004,I4,I21
-3BDAB0:lAA:gen_server|H3BDB20
-3BDB20:lP<0.43.0>|H3BDB94
-3BDB94:lP<0.43.0>|H3BDBF8
-3BDBF8:lH3BDC48|H3BDC54
-3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
-3BDC54:lAD:httpd_manager|H3BDCAC
-3BDCAC:lH3BDD14|H3BDD1C
-3BDD14:lA9:undefined|H3BDD9C
-3BDD9C:lH3BDA84|H3BDE2C
-3BDA84:lH3BDAF0|H3BDAFC
-3BDAF0:t2:AB:server_root,H3BDB48
-3BDB48:lI47|H3BDBB0
-3BDBB0:lI99|H3BDC0C
-3BDC0C:lI108|H3BDC64
-3BDC64:lI101|H3BDCBC
-3BDCBC:lI97|H3BDD2C
-3BDD2C:lI114|H3BDDA4
-3BDDA4:lI99|H3BDE34
-3BDE34:lI97|H3BDED4
-3BDED4:lI115|H3BDF90
-3BDF90:lI101|H3BE054
-3BE054:lI47|H3BE128
-3BE128:lI111|H3BE204
-3BE204:lI116|H3BE2EC
-3BE2EC:lI112|H3BE3E0
-3BE3E0:lI47|H3BE4E4
-3BE4E4:lI101|H3BE5E8
-3BE5E8:lI114|H3BE6EC
-3BE6EC:lI116|H3BE7E0
-3BE7E0:lI115|H3BE8CC
-3BE8CC:lI47|H3BE9B8
-3BE9B8:lI108|H3BEAAC
-3BEAAC:lI105|H3BEB98
-3BEB98:lI98|H3BEC84
-3BEC84:lI47|H3BED70
-3BED70:lI119|H3BEE5C
-3BEE5C:lI101|H3BEF30
-3BEF30:lI98|H3BEFFC
-3BEFFC:lI116|H3BF0C8
-3BF0C8:lI111|H3BF19C
-3BF19C:lI111|H3BF260
-3BF260:lI108|H3BF314
-3BF314:lI47|H3BF3C0
-3BF3C0:lI112|H3BF474
-3BF474:lI114|H3BF530
-3BF530:lI105|H3BF5F4
-3BF5F4:lI118|H3BF6C8
-3BF6C8:lI47|H3BF79C
-3BF79C:lI114|H3BF870
-3BF870:lI111|H3BF954
-3BF954:lI111|H3BFA30
-3BFA30:lI116|N
-3BDAFC:lH3BDB50|H3BDB5C
-3BDB50:t2:AD:document_root,H3BDBB8
-3BDBB8:lI47|H3BDC14
-3BDC14:lI99|H3BDC6C
-3BDC6C:lI108|H3BDCC4
-3BDCC4:lI101|H3BDD34
-3BDD34:lI97|H3BDDAC
-3BDDAC:lI114|H3BDE3C
-3BDE3C:lI99|H3BDEDC
-3BDEDC:lI97|H3BDF98
-3BDF98:lI115|H3BE05C
-3BE05C:lI101|H3BE130
-3BE130:lI47|H3BE20C
-3BE20C:lI111|H3BE2F4
-3BE2F4:lI116|H3BE3E8
-3BE3E8:lI112|H3BE4EC
-3BE4EC:lI47|H3BE5F0
-3BE5F0:lI101|H3BE6F4
-3BE6F4:lI114|H3BE7E8
-3BE7E8:lI116|H3BE8D4
-3BE8D4:lI115|H3BE9C0
-3BE9C0:lI47|H3BEAB4
-3BEAB4:lI108|H3BEBA0
-3BEBA0:lI105|H3BEC8C
-3BEC8C:lI98|H3BED78
-3BED78:lI47|H3BEE64
-3BEE64:lI119|H3BEF38
-3BEF38:lI101|H3BF004
-3BF004:lI98|H3BF0D0
-3BF0D0:lI116|H3BF1A4
-3BF1A4:lI111|H3BF268
-3BF268:lI111|H3BF31C
-3BF31C:lI108|H3BF3C8
-3BF3C8:lI47|H3BF47C
-3BF47C:lI112|H3BF538
-3BF538:lI114|H3BF5FC
-3BF5FC:lI105|H3BF6D0
-3BF6D0:lI118|H3BF7A4
-3BF7A4:lI47|H3BF878
-3BF878:lI114|H3BF95C
-3BF95C:lI111|H3BFA38
-3BFA38:lI111|H3BFB0C
-3BFB0C:lI116|H3BFBE8
-3BFBE8:lI47|H3BFCB4
-3BFCB4:lI100|H3BFD78
-3BFD78:lI111|H3BFE3C
-3BFE3C:lI99|N
-3BDB5C:lH3BDBC0|H3BDBCC
-3BDBC0:t2:AA:mime_types,H3BDC1C
-3BDC1C:lH3BDC74|H3BDC80
-3BDC74:t2:H3BDCCC,H3BDCD4
-3BDCD4:lI120|H3BDD44
-3BDD44:lI45|H3BDDBC
-3BDDBC:lI119|H3BDE44
-3BDE44:lI111|H3BDEE4
-3BDEE4:lI114|H3BDFA0
-3BDFA0:lI108|H3BE064
-3BE064:lI100|H3BE138
-3BE138:lI47|H3BE214
-3BE214:lI120|H3BE2FC
-3BE2FC:lI45|H3BE3F0
-3BE3F0:lI118|H3BE4F4
-3BE4F4:lI114|H3BE5F8
-3BE5F8:lI109|H3BE6FC
-3BE6FC:lI108|N
-3BDCCC:lI119|H3BDD3C
-3BDD3C:lI114|H3BDDB4
-3BDDB4:lI108|N
-3BDC80:lH3BDCDC|H3BDCE8
-3BDCDC:t2:H3BDD4C,H3BDD54
-3BDD54:lI120|H3BDDCC
-3BDDCC:lI45|H3BDE54
-3BDE54:lI119|H3BDEF4
-3BDEF4:lI111|H3BDFA8
-3BDFA8:lI114|H3BE06C
-3BE06C:lI108|H3BE140
-3BE140:lI100|H3BE21C
-3BE21C:lI47|H3BE304
-3BE304:lI120|H3BE3F8
-3BE3F8:lI45|H3BE4FC
-3BE4FC:lI118|H3BE600
-3BE600:lI114|H3BE704
-3BE704:lI109|H3BE7F0
-3BE7F0:lI108|N
-3BDD4C:lI118|H3BDDC4
-3BDDC4:lI114|H3BDE4C
-3BDE4C:lI109|H3BDEEC
-3BDEEC:lI108|N
-3BDCE8:lH3BDD5C|H3BDD68
-3BDD5C:t2:H3BDDD4,H3BDDDC
-3BDDDC:lI120|H3BDE64
-3BDE64:lI45|H3BDF04
-3BDF04:lI99|H3BDFB0
-3BDFB0:lI111|H3BE074
-3BE074:lI110|H3BE148
-3BE148:lI102|H3BE224
-3BE224:lI101|H3BE30C
-3BE30C:lI114|H3BE400
-3BE400:lI101|H3BE504
-3BE504:lI110|H3BE608
-3BE608:lI99|H3BE70C
-3BE70C:lI101|H3BE7F8
-3BE7F8:lI47|H3BE8DC
-3BE8DC:lI120|H3BE9C8
-3BE9C8:lI45|H3BEABC
-3BEABC:lI99|H3BEBA8
-3BEBA8:lI111|H3BEC94
-3BEC94:lI111|H3BED80
-3BED80:lI108|H3BEE6C
-3BEE6C:lI116|H3BEF40
-3BEF40:lI97|H3BF00C
-3BF00C:lI108|H3BF0D8
-3BF0D8:lI107|N
-3BDDD4:lI105|H3BDE5C
-3BDE5C:lI99|H3BDEFC
-3BDEFC:lI101|N
-3BDD68:lH3BDDE4|H3BDDF0
-3BDDE4:t2:H3BDE6C,H3BDE74
-3BDE74:lI118|H3BDF14
-3BDF14:lI105|H3BDFC0
-3BDFC0:lI100|H3BE084
-3BE084:lI101|H3BE158
-3BE158:lI111|H3BE22C
-3BE22C:lI47|H3BE314
-3BE314:lI120|H3BE408
-3BE408:lI45|H3BE50C
-3BE50C:lI115|H3BE610
-3BE610:lI103|H3BE714
-3BE714:lI105|H3BE800
-3BE800:lI45|H3BE8E4
-3BE8E4:lI109|H3BE9D0
-3BE9D0:lI111|H3BEAC4
-3BEAC4:lI118|H3BEBB0
-3BEBB0:lI105|H3BEC9C
-3BEC9C:lI101|N
-3BDE6C:lI109|H3BDF0C
-3BDF0C:lI111|H3BDFB8
-3BDFB8:lI118|H3BE07C
-3BE07C:lI105|H3BE150
-3BE150:lI101|N
-3BDDF0:lH3BDE7C|H3BDE88
-3BDE7C:t2:H3BDF1C,H3BDF24
-3BDF24:lI118|H3BDFD0
-3BDFD0:lI105|H3BE094
-3BE094:lI100|H3BE160
-3BE160:lI101|H3BE234
-3BE234:lI111|H3BE31C
-3BE31C:lI47|H3BE410
-3BE410:lI120|H3BE514
-3BE514:lI45|H3BE618
-3BE618:lI109|H3BE71C
-3BE71C:lI115|H3BE808
-3BE808:lI118|H3BE8EC
-3BE8EC:lI105|H3BE9D8
-3BE9D8:lI100|H3BEACC
-3BEACC:lI101|H3BEBB8
-3BEBB8:lI111|N
-3BDF1C:lI97|H3BDFC8
-3BDFC8:lI118|H3BE08C
-3BE08C:lI105|N
-3BDE88:lH3BDF2C|H3BDF38
-3BDF2C:t2:H3BDFD8,H3BDFE0
-3BDFE0:lI118|H3BE0A4
-3BE0A4:lI105|H3BE168
-3BE168:lI100|H3BE23C
-3BE23C:lI101|H3BE324
-3BE324:lI111|H3BE418
-3BE418:lI47|H3BE51C
-3BE51C:lI113|H3BE620
-3BE620:lI117|H3BE724
-3BE724:lI105|H3BE810
-3BE810:lI99|H3BE8F4
-3BE8F4:lI107|H3BE9E0
-3BE9E0:lI116|H3BEAD4
-3BEAD4:lI105|H3BEBC0
-3BEBC0:lI109|H3BECA4
-3BECA4:lI101|N
-3BDFD8:lI113|H3BE09C
-3BE09C:lI116|N
-3BDF38:lH3BDFE8|H3BDFF4
-3BDFE8:t2:H3BE0AC,H3BE0B4
-3BE0B4:lI118|H3BE178
-3BE178:lI105|H3BE24C
-3BE24C:lI100|H3BE32C
-3BE32C:lI101|H3BE420
-3BE420:lI111|H3BE524
-3BE524:lI47|H3BE628
-3BE628:lI113|H3BE72C
-3BE72C:lI117|H3BE818
-3BE818:lI105|H3BE8FC
-3BE8FC:lI99|H3BE9E8
-3BE9E8:lI107|H3BEADC
-3BEADC:lI116|H3BEBC8
-3BEBC8:lI105|H3BECAC
-3BECAC:lI109|H3BED88
-3BED88:lI101|N
-3BE0AC:lI109|H3BE170
-3BE170:lI111|H3BE244
-3BE244:lI118|N
-3BDFF4:lH3BE0BC|H3BE0C8
-3BE0BC:t2:H3BE180,H3BE188
-3BE188:lI118|H3BE25C
-3BE25C:lI105|H3BE33C
-3BE33C:lI100|H3BE430
-3BE430:lI101|H3BE52C
-3BE52C:lI111|H3BE630
-3BE630:lI47|H3BE734
-3BE734:lI109|H3BE820
-3BE820:lI112|H3BE904
-3BE904:lI101|H3BE9F0
-3BE9F0:lI103|N
-3BE180:lI109|H3BE254
-3BE254:lI112|H3BE334
-3BE334:lI101|H3BE428
-3BE428:lI103|N
-3BE0C8:lH3BE190|H3BE19C
-3BE190:t2:H3BE264,H3BE26C
-3BE26C:lI118|H3BE34C
-3BE34C:lI105|H3BE440
-3BE440:lI100|H3BE534
-3BE534:lI101|H3BE638
-3BE638:lI111|H3BE73C
-3BE73C:lI47|H3BE828
-3BE828:lI109|H3BE90C
-3BE90C:lI112|H3BE9F8
-3BE9F8:lI101|H3BEAE4
-3BEAE4:lI103|N
-3BE264:lI109|H3BE344
-3BE344:lI112|H3BE438
-3BE438:lI103|N
-3BE19C:lH3BE274|H3BE280
-3BE274:t2:H3BE354,H3BE35C
-3BE35C:lI118|H3BE450
-3BE450:lI105|H3BE544
-3BE544:lI100|H3BE640
-3BE640:lI101|H3BE744
-3BE744:lI111|H3BE830
-3BE830:lI47|H3BE914
-3BE914:lI109|H3BEA00
-3BEA00:lI112|H3BEAEC
-3BEAEC:lI101|H3BEBD0
-3BEBD0:lI103|N
-3BE354:lI109|H3BE448
-3BE448:lI112|H3BE53C
-3BE53C:lI101|N
-3BE280:lH3BE364|H3BE370
-3BE364:t2:H3BE458,H3BE460
-3BE460:lI116|H3BE554
-3BE554:lI101|H3BE650
-3BE650:lI120|H3BE754
-3BE754:lI116|H3BE838
-3BE838:lI47|H3BE91C
-3BE91C:lI120|H3BEA08
-3BEA08:lI45|H3BEAF4
-3BEAF4:lI115|H3BEBD8
-3BEBD8:lI103|H3BECB4
-3BECB4:lI109|H3BED90
-3BED90:lI108|N
-3BE458:lI115|H3BE54C
-3BE54C:lI103|H3BE648
-3BE648:lI109|H3BE74C
-3BE74C:lI108|N
-3BE370:lH3BE468|H3BE474
-3BE468:t2:H3BE55C,H3BE564
-3BE564:lI116|H3BE660
-3BE660:lI101|H3BE764
-3BE764:lI120|H3BE840
-3BE840:lI116|H3BE924
-3BE924:lI47|H3BEA10
-3BEA10:lI120|H3BEAFC
-3BEAFC:lI45|H3BEBE0
-3BEBE0:lI115|H3BECBC
-3BECBC:lI103|H3BED98
-3BED98:lI109|H3BEE74
-3BEE74:lI108|N
-3BE55C:lI115|H3BE658
-3BE658:lI103|H3BE75C
-3BE75C:lI109|N
-3BE474:lH3BE56C|H3BE578
-3BE56C:t2:H3BE668,H3BE670
-3BE670:lI116|H3BE774
-3BE774:lI101|H3BE850
-3BE850:lI120|H3BE92C
-3BE92C:lI116|H3BEA18
-3BEA18:lI47|H3BEB04
-3BEB04:lI120|H3BEBE8
-3BEBE8:lI45|H3BECC4
-3BECC4:lI115|H3BEDA0
-3BEDA0:lI101|H3BEE7C
-3BEE7C:lI116|H3BEF48
-3BEF48:lI101|H3BF014
-3BF014:lI120|H3BF0E0
-3BF0E0:lI116|N
-3BE668:lI101|H3BE76C
-3BE76C:lI116|H3BE848
-3BE848:lI120|N
-3BE578:lH3BE678|H3BE684
-3BE678:t2:H3BE77C,H3BE784
-3BE784:lI116|H3BE860
-3BE860:lI101|H3BE93C
-3BE93C:lI120|H3BEA20
-3BEA20:lI116|H3BEB0C
-3BEB0C:lI47|H3BEBF0
-3BEBF0:lI116|H3BECCC
-3BECCC:lI97|H3BEDA8
-3BEDA8:lI98|H3BEE84
-3BEE84:lI45|H3BEF50
-3BEF50:lI115|H3BF01C
-3BF01C:lI101|H3BF0E8
-3BF0E8:lI112|H3BF1AC
-3BF1AC:lI97|H3BF270
-3BF270:lI114|H3BF324
-3BF324:lI97|H3BF3D0
-3BF3D0:lI116|H3BF484
-3BF484:lI101|H3BF540
-3BF540:lI100|H3BF604
-3BF604:lI45|H3BF6D8
-3BF6D8:lI118|H3BF7AC
-3BF7AC:lI97|H3BF880
-3BF880:lI108|H3BF964
-3BF964:lI117|H3BFA40
-3BFA40:lI101|H3BFB14
-3BFB14:lI115|N
-3BE77C:lI116|H3BE858
-3BE858:lI115|H3BE934
-3BE934:lI118|N
-3BE684:lH3BE78C|H3BE798
-3BE78C:t2:H3BE868,H3BE870
-3BE870:lI116|H3BE94C
-3BE94C:lI101|H3BEA30
-3BEA30:lI120|H3BEB14
-3BEB14:lI116|H3BEBF8
-3BEBF8:lI47|H3BECD4
-3BECD4:lI114|H3BEDB0
-3BEDB0:lI105|H3BEE8C
-3BEE8C:lI99|H3BEF58
-3BEF58:lI104|H3BF024
-3BF024:lI116|H3BF0F0
-3BF0F0:lI101|H3BF1B4
-3BF1B4:lI120|H3BF278
-3BF278:lI116|N
-3BE868:lI114|H3BE944
-3BE944:lI116|H3BEA28
-3BEA28:lI120|N
-3BE798:lH3BE878|H3BE884
-3BE878:t2:H3BE954,H3BE95C
-3BE95C:lI116|H3BEA40
-3BEA40:lI101|H3BEB24
-3BEB24:lI120|H3BEC00
-3BEC00:lI116|H3BECDC
-3BECDC:lI47|H3BEDB8
-3BEDB8:lI112|H3BEE94
-3BEE94:lI108|H3BEF60
-3BEF60:lI97|H3BF02C
-3BF02C:lI105|H3BF0F8
-3BF0F8:lI110|N
-3BE954:lI116|H3BEA38
-3BEA38:lI120|H3BEB1C
-3BEB1C:lI116|N
-3BE884:lH3BE964|H3BE970
-3BE964:t2:H3BEA48,H3BEA50
-3BEA50:lI116|H3BEB34
-3BEB34:lI101|H3BEC10
-3BEC10:lI120|H3BECEC
-3BECEC:lI116|H3BEDC8
-3BEDC8:lI47|H3BEE9C
-3BEE9C:lI120|H3BEF68
-3BEF68:lI45|H3BF034
-3BF034:lI115|H3BF100
-3BF100:lI101|H3BF1BC
-3BF1BC:lI114|H3BF280
-3BF280:lI118|H3BF32C
-3BF32C:lI101|H3BF3D8
-3BF3D8:lI114|H3BF48C
-3BF48C:lI45|H3BF548
-3BF548:lI112|H3BF60C
-3BF60C:lI97|H3BF6E0
-3BF6E0:lI114|H3BF7B4
-3BF7B4:lI115|H3BF888
-3BF888:lI101|H3BF96C
-3BF96C:lI100|H3BFA48
-3BFA48:lI45|H3BFB1C
-3BFB1C:lI104|H3BFBF0
-3BFBF0:lI116|H3BFCBC
-3BFCBC:lI109|H3BFD80
-3BFD80:lI108|N
-3BEA48:lI115|H3BEB2C
-3BEB2C:lI104|H3BEC08
-3BEC08:lI116|H3BECE4
-3BECE4:lI109|H3BEDC0
-3BEDC0:lI108|N
-3BE970:lH3BEA58|H3BEA64
-3BEA58:t2:H3BEB3C,H3BEB44
-3BEB44:lI116|H3BEC20
-3BEC20:lI101|H3BECFC
-3BECFC:lI120|H3BEDD8
-3BEDD8:lI116|H3BEEA4
-3BEEA4:lI47|H3BEF70
-3BEF70:lI104|H3BF03C
-3BF03C:lI116|H3BF108
-3BF108:lI109|H3BF1C4
-3BF1C4:lI108|N
-3BEB3C:lI104|H3BEC18
-3BEC18:lI116|H3BECF4
-3BECF4:lI109|H3BEDD0
-3BEDD0:lI108|N
-3BEA64:lH3BEB4C|H3BEB58
-3BEB4C:t2:H3BEC28,H3BEC30
-3BEC30:lI116|H3BED0C
-3BED0C:lI101|H3BEDE8
-3BEDE8:lI120|H3BEEAC
-3BEEAC:lI116|H3BEF78
-3BEF78:lI47|H3BF044
-3BF044:lI104|H3BF110
-3BF110:lI116|H3BF1CC
-3BF1CC:lI109|H3BF288
-3BF288:lI108|N
-3BEC28:lI104|H3BED04
-3BED04:lI116|H3BEDE0
-3BEDE0:lI109|N
-3BEB58:lH3BEC38|H3BEC44
-3BEC38:t2:H3BED14,H3BED1C
-3BED1C:lI105|H3BEDF8
-3BEDF8:lI109|H3BEEBC
-3BEEBC:lI97|H3BEF80
-3BEF80:lI103|H3BF04C
-3BF04C:lI101|H3BF118
-3BF118:lI47|H3BF1D4
-3BF1D4:lI120|H3BF290
-3BF290:lI45|H3BF334
-3BF334:lI120|H3BF3E0
-3BF3E0:lI119|H3BF494
-3BF494:lI105|H3BF550
-3BF550:lI110|H3BF614
-3BF614:lI100|H3BF6E8
-3BF6E8:lI111|H3BF7BC
-3BF7BC:lI119|H3BF890
-3BF890:lI100|H3BF974
-3BF974:lI117|H3BFA50
-3BFA50:lI109|H3BFB24
-3BFB24:lI112|N
-3BED14:lI120|H3BEDF0
-3BEDF0:lI119|H3BEEB4
-3BEEB4:lI100|N
-3BEC44:lH3BED24|H3BED30
-3BED24:t2:H3BEE00,H3BEE08
-3BEE08:lI105|H3BEECC
-3BEECC:lI109|H3BEF90
-3BEF90:lI97|H3BF054
-3BF054:lI103|H3BF120
-3BF120:lI101|H3BF1DC
-3BF1DC:lI47|H3BF298
-3BF298:lI120|H3BF33C
-3BF33C:lI45|H3BF3E8
-3BF3E8:lI120|H3BF49C
-3BF49C:lI112|H3BF558
-3BF558:lI105|H3BF61C
-3BF61C:lI120|H3BF6F0
-3BF6F0:lI109|H3BF7C4
-3BF7C4:lI97|H3BF898
-3BF898:lI112|N
-3BEE00:lI120|H3BEEC4
-3BEEC4:lI112|H3BEF88
-3BEF88:lI109|N
-3BED30:lH3BEE10|H3BEE1C
-3BEE10:t2:H3BEED4,H3BEEDC
-3BEEDC:lI105|H3BEFA0
-3BEFA0:lI109|H3BF064
-3BF064:lI97|H3BF128
-3BF128:lI103|H3BF1E4
-3BF1E4:lI101|H3BF2A0
-3BF2A0:lI47|H3BF344
-3BF344:lI120|H3BF3F0
-3BF3F0:lI45|H3BF4A4
-3BF4A4:lI120|H3BF560
-3BF560:lI98|H3BF624
-3BF624:lI105|H3BF6F8
-3BF6F8:lI116|H3BF7CC
-3BF7CC:lI109|H3BF8A0
-3BF8A0:lI97|H3BF97C
-3BF97C:lI112|N
-3BEED4:lI120|H3BEF98
-3BEF98:lI98|H3BF05C
-3BF05C:lI109|N
-3BEE1C:lH3BEEE4|H3BEEF0
-3BEEE4:t2:H3BEFA8,H3BEFB0
-3BEFB0:lI105|H3BF074
-3BF074:lI109|H3BF138
-3BF138:lI97|H3BF1EC
-3BF1EC:lI103|H3BF2A8
-3BF2A8:lI101|H3BF34C
-3BF34C:lI47|H3BF3F8
-3BF3F8:lI120|H3BF4AC
-3BF4AC:lI45|H3BF568
-3BF568:lI114|H3BF62C
-3BF62C:lI103|H3BF700
-3BF700:lI98|N
-3BEFA8:lI114|H3BF06C
-3BF06C:lI103|H3BF130
-3BF130:lI98|N
-3BEEF0:lH3BEFB8|H3BEFC4
-3BEFB8:t2:H3BF07C,H3BF084
-3BF084:lI105|H3BF148
-3BF148:lI109|H3BF1FC
-3BF1FC:lI97|H3BF2B0
-3BF2B0:lI103|H3BF354
-3BF354:lI101|H3BF400
-3BF400:lI47|H3BF4B4
-3BF4B4:lI120|H3BF570
-3BF570:lI45|H3BF634
-3BF634:lI112|H3BF708
-3BF708:lI111|H3BF7D4
-3BF7D4:lI114|H3BF8A8
-3BF8A8:lI116|H3BF984
-3BF984:lI97|H3BFA58
-3BFA58:lI98|H3BFB2C
-3BFB2C:lI108|H3BFBF8
-3BFBF8:lI101|H3BFCC4
-3BFCC4:lI45|H3BFD88
-3BFD88:lI112|H3BFE44
-3BFE44:lI105|H3BFEF0
-3BFEF0:lI120|H3BFFA4
-3BFFA4:lI109|H3C0050
-3C0050:lI97|H3C00FC
-3C00FC:lI112|N
-3BF07C:lI112|H3BF140
-3BF140:lI112|H3BF1F4
-3BF1F4:lI109|N
-3BEFC4:lH3BF08C|H3BF098
-3BF08C:t2:H3BF150,H3BF158
-3BF158:lI105|H3BF20C
-3BF20C:lI109|H3BF2C0
-3BF2C0:lI97|H3BF35C
-3BF35C:lI103|H3BF408
-3BF408:lI101|H3BF4BC
-3BF4BC:lI47|H3BF578
-3BF578:lI120|H3BF63C
-3BF63C:lI45|H3BF710
-3BF710:lI112|H3BF7DC
-3BF7DC:lI111|H3BF8B0
-3BF8B0:lI114|H3BF98C
-3BF98C:lI116|H3BFA60
-3BFA60:lI97|H3BFB34
-3BFB34:lI98|H3BFC00
-3BFC00:lI108|H3BFCCC
-3BFCCC:lI101|H3BFD90
-3BFD90:lI45|H3BFE4C
-3BFE4C:lI103|H3BFEF8
-3BFEF8:lI114|H3BFFAC
-3BFFAC:lI97|H3C0058
-3C0058:lI121|H3C0104
-3C0104:lI109|H3C01A8
-3C01A8:lI97|H3C025C
-3C025C:lI112|N
-3BF150:lI112|H3BF204
-3BF204:lI103|H3BF2B8
-3BF2B8:lI109|N
-3BF098:lH3BF160|H3BF16C
-3BF160:t2:H3BF214,H3BF21C
-3BF21C:lI105|H3BF2D0
-3BF2D0:lI109|H3BF36C
-3BF36C:lI97|H3BF410
-3BF410:lI103|H3BF4C4
-3BF4C4:lI101|H3BF580
-3BF580:lI47|H3BF644
-3BF644:lI120|H3BF718
-3BF718:lI45|H3BF7E4
-3BF7E4:lI112|H3BF8B8
-3BF8B8:lI111|H3BF994
-3BF994:lI114|H3BFA68
-3BFA68:lI116|H3BFB3C
-3BFB3C:lI97|H3BFC08
-3BFC08:lI98|H3BFCD4
-3BFCD4:lI108|H3BFD98
-3BFD98:lI101|H3BFE54
-3BFE54:lI45|H3BFF00
-3BFF00:lI98|H3BFFB4
-3BFFB4:lI105|H3C0060
-3C0060:lI116|H3C010C
-3C010C:lI109|H3C01B0
-3C01B0:lI97|H3C0264
-3C0264:lI112|N
-3BF214:lI112|H3BF2C8
-3BF2C8:lI98|H3BF364
-3BF364:lI109|N
-3BF16C:lH3BF224|H3BF230
-3BF224:t2:H3BF2D8,H3BF2E0
-3BF2E0:lI105|H3BF37C
-3BF37C:lI109|H3BF420
-3BF420:lI97|H3BF4CC
-3BF4CC:lI103|H3BF588
-3BF588:lI101|H3BF64C
-3BF64C:lI47|H3BF720
-3BF720:lI120|H3BF7EC
-3BF7EC:lI45|H3BF8C0
-3BF8C0:lI112|H3BF99C
-3BF99C:lI111|H3BFA70
-3BFA70:lI114|H3BFB44
-3BFB44:lI116|H3BFC10
-3BFC10:lI97|H3BFCDC
-3BFCDC:lI98|H3BFDA0
-3BFDA0:lI108|H3BFE5C
-3BFE5C:lI101|H3BFF08
-3BFF08:lI45|H3BFFBC
-3BFFBC:lI97|H3C0068
-3C0068:lI110|H3C0114
-3C0114:lI121|H3C01B8
-3C01B8:lI109|H3C026C
-3C026C:lI97|H3C0318
-3C0318:lI112|N
-3BF2D8:lI112|H3BF374
-3BF374:lI110|H3BF418
-3BF418:lI109|N
-3BF230:lH3BF2E8|H3BF2F4
-3BF2E8:t2:H3BF384,H3BF38C
-3BF38C:lI105|H3BF430
-3BF430:lI109|H3BF4DC
-3BF4DC:lI97|H3BF590
-3BF590:lI103|H3BF654
-3BF654:lI101|H3BF728
-3BF728:lI47|H3BF7F4
-3BF7F4:lI120|H3BF8C8
-3BF8C8:lI45|H3BF9A4
-3BF9A4:lI99|H3BFA78
-3BFA78:lI109|H3BFB4C
-3BFB4C:lI117|H3BFC18
-3BFC18:lI45|H3BFCE4
-3BFCE4:lI114|H3BFDA8
-3BFDA8:lI97|H3BFE64
-3BFE64:lI115|H3BFF10
-3BFF10:lI116|H3BFFC4
-3BFFC4:lI101|H3C0070
-3C0070:lI114|N
-3BF384:lI114|H3BF428
-3BF428:lI97|H3BF4D4
-3BF4D4:lI115|N
-3BF2F4:lH3BF394|H3BF3A0
-3BF394:t2:H3BF438,H3BF440
-3BF440:lI105|H3BF4EC
-3BF4EC:lI109|H3BF5A0
-3BF5A0:lI97|H3BF664
-3BF664:lI103|H3BF730
-3BF730:lI101|H3BF7FC
-3BF7FC:lI47|H3BF8D0
-3BF8D0:lI116|H3BF9AC
-3BF9AC:lI105|H3BFA80
-3BFA80:lI102|H3BFB54
-3BFB54:lI102|N
-3BF438:lI116|H3BF4E4
-3BF4E4:lI105|H3BF598
-3BF598:lI102|H3BF65C
-3BF65C:lI102|N
-3BF3A0:lH3BF448|H3BF454
-3BF448:t2:H3BF4F4,H3BF4FC
-3BF4FC:lI105|H3BF5B0
-3BF5B0:lI109|H3BF674
-3BF674:lI97|H3BF738
-3BF738:lI103|H3BF804
-3BF804:lI101|H3BF8D8
-3BF8D8:lI47|H3BF9B4
-3BF9B4:lI116|H3BFA88
-3BFA88:lI105|H3BFB5C
-3BFB5C:lI102|H3BFC20
-3BFC20:lI102|N
-3BF4F4:lI116|H3BF5A8
-3BF5A8:lI105|H3BF66C
-3BF66C:lI102|N
-3BF454:lH3BF504|H3BF510
-3BF504:t2:H3BF5B8,H3BF5C0
-3BF5C0:lI105|H3BF684
-3BF684:lI109|H3BF748
-3BF748:lI97|H3BF80C
-3BF80C:lI103|H3BF8E0
-3BF8E0:lI101|H3BF9BC
-3BF9BC:lI47|H3BFA90
-3BFA90:lI112|H3BFB64
-3BFB64:lI110|H3BFC28
-3BFC28:lI103|N
-3BF5B8:lI112|H3BF67C
-3BF67C:lI110|H3BF740
-3BF740:lI103|N
-3BF510:lH3BF5C8|H3BF5D4
-3BF5C8:t2:H3BF68C,H3BF694
-3BF694:lI105|H3BF758
-3BF758:lI109|H3BF81C
-3BF81C:lI97|H3BF8F0
-3BF8F0:lI103|H3BF9C4
-3BF9C4:lI101|H3BFA98
-3BFA98:lI47|H3BFB6C
-3BFB6C:lI106|H3BFC30
-3BFC30:lI112|H3BFCEC
-3BFCEC:lI101|H3BFDB0
-3BFDB0:lI103|N
-3BF68C:lI106|H3BF750
-3BF750:lI112|H3BF814
-3BF814:lI101|H3BF8E8
-3BF8E8:lI103|N
-3BF5D4:lH3BF69C|H3BF6A8
-3BF69C:t2:H3BF760,H3BF768
-3BF768:lI105|H3BF82C
-3BF82C:lI109|H3BF900
-3BF900:lI97|H3BF9CC
-3BF9CC:lI103|H3BFAA0
-3BFAA0:lI101|H3BFB74
-3BFB74:lI47|H3BFC38
-3BFC38:lI106|H3BFCF4
-3BFCF4:lI112|H3BFDB8
-3BFDB8:lI101|H3BFE6C
-3BFE6C:lI103|N
-3BF760:lI106|H3BF824
-3BF824:lI112|H3BF8F8
-3BF8F8:lI103|N
-3BF6A8:lH3BF770|H3BF77C
-3BF770:t2:H3BF834,H3BF83C
-3BF83C:lI105|H3BF910
-3BF910:lI109|H3BF9DC
-3BF9DC:lI97|H3BFAA8
-3BFAA8:lI103|H3BFB7C
-3BFB7C:lI101|H3BFC40
-3BFC40:lI47|H3BFCFC
-3BFCFC:lI106|H3BFDC0
-3BFDC0:lI112|H3BFE74
-3BFE74:lI101|H3BFF18
-3BFF18:lI103|N
-3BF834:lI106|H3BF908
-3BF908:lI112|H3BF9D4
-3BF9D4:lI101|N
-3BF77C:lH3BF844|H3BF850
-3BF844:t2:H3BF918,H3BF920
-3BF920:lI105|H3BF9EC
-3BF9EC:lI109|H3BFAB8
-3BFAB8:lI97|H3BFB84
-3BFB84:lI103|H3BFC48
-3BFC48:lI101|H3BFD04
-3BFD04:lI47|H3BFDC8
-3BFDC8:lI105|H3BFE7C
-3BFE7C:lI101|H3BFF20
-3BFF20:lI102|N
-3BF918:lI105|H3BF9E4
-3BF9E4:lI101|H3BFAB0
-3BFAB0:lI102|N
-3BF850:lH3BF928|H3BF934
-3BF928:t2:H3BF9F4,H3BF9FC
-3BF9FC:lI105|H3BFAC8
-3BFAC8:lI109|H3BFB94
-3BFB94:lI97|H3BFC50
-3BFC50:lI103|H3BFD0C
-3BFD0C:lI101|H3BFDD0
-3BFDD0:lI47|H3BFE84
-3BFE84:lI103|H3BFF28
-3BFF28:lI105|H3BFFCC
-3BFFCC:lI102|N
-3BF9F4:lI103|H3BFAC0
-3BFAC0:lI105|H3BFB8C
-3BFB8C:lI102|N
-3BF934:lH3BFA04|H3BFA10
-3BFA04:t2:H3BFAD0,H3BFAD8
-3BFAD8:lI99|H3BFBA4
-3BFBA4:lI104|H3BFC60
-3BFC60:lI101|H3BFD14
-3BFD14:lI109|H3BFDD8
-3BFDD8:lI105|H3BFE8C
-3BFE8C:lI99|H3BFF30
-3BFF30:lI97|H3BFFD4
-3BFFD4:lI108|H3C0078
-3C0078:lI47|H3C011C
-3C011C:lI120|H3C01C0
-3C01C0:lI45|H3C0274
-3C0274:lI112|H3C0320
-3C0320:lI100|H3C03CC
-3C03CC:lI98|N
-3BFAD0:lI112|H3BFB9C
-3BFB9C:lI100|H3BFC58
-3BFC58:lI98|N
-3BFA10:lH3BFAE0|H3BFAEC
-3BFAE0:t2:H3BFBAC,H3BFBB4
-3BFBB4:lI99|H3BFC70
-3BFC70:lI104|H3BFD24
-3BFD24:lI101|H3BFDE0
-3BFDE0:lI109|H3BFE94
-3BFE94:lI105|H3BFF38
-3BFF38:lI99|H3BFFDC
-3BFFDC:lI97|H3C0080
-3C0080:lI108|H3C0124
-3C0124:lI47|H3C01C8
-3C01C8:lI120|H3C027C
-3C027C:lI45|H3C0328
-3C0328:lI112|H3C03D4
-3C03D4:lI100|H3C0460
-3C0460:lI98|N
-3BFBAC:lI120|H3BFC68
-3BFC68:lI121|H3BFD1C
-3BFD1C:lI122|N
-3BFAEC:lH3BFBBC|H3BFBC8
-3BFBBC:t2:H3BFC78,H3BFC80
-3BFC80:lI97|H3BFD34
-3BFD34:lI117|H3BFDF0
-3BFDF0:lI100|H3BFE9C
-3BFE9C:lI105|H3BFF40
-3BFF40:lI111|H3BFFE4
-3BFFE4:lI47|H3C0088
-3C0088:lI120|H3C012C
-3C012C:lI45|H3C01D0
-3C01D0:lI119|H3C0284
-3C0284:lI97|H3C0330
-3C0330:lI118|N
-3BFC78:lI119|H3BFD2C
-3BFD2C:lI97|H3BFDE8
-3BFDE8:lI118|N
-3BFBC8:lH3BFC88|H3BFC94
-3BFC88:t2:H3BFD3C,H3BFD44
-3BFD44:lI97|H3BFE00
-3BFE00:lI117|H3BFEA4
-3BFEA4:lI100|H3BFF48
-3BFF48:lI105|H3BFFEC
-3BFFEC:lI111|H3C0090
-3C0090:lI47|H3C0134
-3C0134:lI120|H3C01D8
-3C01D8:lI45|H3C028C
-3C028C:lI114|H3C0338
-3C0338:lI101|H3C03DC
-3C03DC:lI97|H3C0468
-3C0468:lI108|H3C04FC
-3C04FC:lI97|H3C0598
-3C0598:lI117|H3C063C
-3C063C:lI100|H3C06E8
-3C06E8:lI105|H3C0794
-3C0794:lI111|N
-3BFD3C:lI114|H3BFDF8
-3BFDF8:lI97|N
-3BFC94:lH3BFD4C|H3BFD58
-3BFD4C:t2:H3BFE08,H3BFE10
-3BFE10:lI97|H3BFEB4
-3BFEB4:lI117|H3BFF58
-3BFF58:lI100|H3BFFF4
-3BFFF4:lI105|H3C0098
-3C0098:lI111|H3C013C
-3C013C:lI47|H3C01E0
-3C01E0:lI120|H3C0294
-3C0294:lI45|H3C0340
-3C0340:lI112|H3C03E4
-3C03E4:lI110|H3C0470
-3C0470:lI45|H3C0504
-3C0504:lI114|H3C05A0
-3C05A0:lI101|H3C0644
-3C0644:lI97|H3C06F0
-3C06F0:lI108|H3C079C
-3C079C:lI97|H3C0838
-3C0838:lI117|H3C08C4
-3C08C4:lI100|H3C0958
-3C0958:lI105|H3C09EC
-3C09EC:lI111|H3C0A88
-3C0A88:lI45|H3C0B2C
-3C0B2C:lI112|H3C0BD0
-3C0BD0:lI108|H3C0C84
-3C0C84:lI117|H3C0D38
-3C0D38:lI103|H3C0DEC
-3C0DEC:lI105|H3C0EA0
-3C0EA0:lI110|N
-3BFE08:lI114|H3BFEAC
-3BFEAC:lI112|H3BFF50
-3BFF50:lI109|N
-3BFD58:lH3BFE18|H3BFE24
-3BFE18:t2:H3BFEBC,H3BFEC4
-3BFEC4:lI97|H3BFF68
-3BFF68:lI117|H3C0004
-3C0004:lI100|H3C00A0
-3C00A0:lI105|H3C0144
-3C0144:lI111|H3C01E8
-3C01E8:lI47|H3C029C
-3C029C:lI120|H3C0348
-3C0348:lI45|H3C03EC
-3C03EC:lI112|H3C0478
-3C0478:lI110|H3C050C
-3C050C:lI45|H3C05A8
-3C05A8:lI114|H3C064C
-3C064C:lI101|H3C06F8
-3C06F8:lI97|H3C07A4
-3C07A4:lI108|H3C0840
-3C0840:lI97|H3C08CC
-3C08CC:lI117|H3C0960
-3C0960:lI100|H3C09F4
-3C09F4:lI105|H3C0A90
-3C0A90:lI111|N
-3BFEBC:lI114|H3BFF60
-3BFF60:lI97|H3BFFFC
-3BFFFC:lI109|N
-3BFE24:lH3BFECC|H3BFED8
-3BFECC:t2:H3BFF70,H3BFF78
-3BFF78:lI97|H3C0014
-3C0014:lI117|H3C00B0
-3C00B0:lI100|H3C014C
-3C014C:lI105|H3C01F0
-3C01F0:lI111|H3C02A4
-3C02A4:lI47|H3C0350
-3C0350:lI120|H3C03F4
-3C03F4:lI45|H3C0480
-3C0480:lI97|H3C0514
-3C0514:lI105|H3C05B0
-3C05B0:lI102|H3C0654
-3C0654:lI102|N
-3BFF70:lI97|H3C000C
-3C000C:lI105|H3C00A8
-3C00A8:lI102|N
-3BFED8:lH3BFF80|H3BFF8C
-3BFF80:t2:H3C001C,H3C0024
-3C0024:lI97|H3C00C0
-3C00C0:lI117|H3C015C
-3C015C:lI100|H3C0200
-3C0200:lI105|H3C02AC
-3C02AC:lI111|H3C0358
-3C0358:lI47|H3C03FC
-3C03FC:lI120|H3C0488
-3C0488:lI45|H3C051C
-3C051C:lI97|H3C05B8
-3C05B8:lI105|H3C065C
-3C065C:lI102|H3C0700
-3C0700:lI102|N
-3C001C:lI97|H3C00B8
-3C00B8:lI105|H3C0154
-3C0154:lI102|H3C01F8
-3C01F8:lI102|N
-3BFF8C:lH3C002C|H3C0038
-3C002C:t2:H3C00C8,H3C00D0
-3C00D0:lI97|H3C016C
-3C016C:lI117|H3C0210
-3C0210:lI100|H3C02BC
-3C02BC:lI105|H3C0360
-3C0360:lI111|H3C0404
-3C0404:lI47|H3C0490
-3C0490:lI120|H3C0524
-3C0524:lI45|H3C05C0
-3C05C0:lI97|H3C0664
-3C0664:lI105|H3C0708
-3C0708:lI102|H3C07AC
-3C07AC:lI102|N
-3C00C8:lI97|H3C0164
-3C0164:lI105|H3C0208
-3C0208:lI102|H3C02B4
-3C02B4:lI99|N
-3C0038:lH3C00D8|H3C00E4
-3C00D8:t2:H3C0174,H3C017C
-3C017C:lI97|H3C0220
-3C0220:lI117|H3C02CC
-3C02CC:lI100|H3C0370
-3C0370:lI105|H3C040C
-3C040C:lI111|H3C0498
-3C0498:lI47|H3C052C
-3C052C:lI109|H3C05C8
-3C05C8:lI112|H3C066C
-3C066C:lI101|H3C0710
-3C0710:lI103|N
-3C0174:lI109|H3C0218
-3C0218:lI112|H3C02C4
-3C02C4:lI103|H3C0368
-3C0368:lI97|N
-3C00E4:lH3C0184|H3C0190
-3C0184:t2:H3C0228,H3C0230
-3C0230:lI97|H3C02DC
-3C02DC:lI117|H3C0380
-3C0380:lI100|H3C0414
-3C0414:lI105|H3C04A0
-3C04A0:lI111|H3C0534
-3C0534:lI47|H3C05D0
-3C05D0:lI109|H3C0674
-3C0674:lI112|H3C0718
-3C0718:lI101|H3C07B4
-3C07B4:lI103|N
-3C0228:lI109|H3C02D4
-3C02D4:lI112|H3C0378
-3C0378:lI50|N
-3C0190:lH3C0238|H3C0244
-3C0238:t2:H3C02E4,H3C02EC
-3C02EC:lI97|H3C0390
-3C0390:lI117|H3C041C
-3C041C:lI100|H3C04A8
-3C04A8:lI105|H3C053C
-3C053C:lI111|H3C05D8
-3C05D8:lI47|H3C067C
-3C067C:lI98|H3C0720
-3C0720:lI97|H3C07BC
-3C07BC:lI115|H3C0848
-3C0848:lI105|H3C08D4
-3C08D4:lI99|N
-3C02E4:lI97|H3C0388
-3C0388:lI117|N
-3C0244:lH3C02F4|H3C0300
-3C02F4:t2:H3C0398,H3C03A0
-3C03A0:lI97|H3C042C
-3C042C:lI117|H3C04B8
-3C04B8:lI100|H3C0544
-3C0544:lI105|H3C05E0
-3C05E0:lI111|H3C0684
-3C0684:lI47|H3C0728
-3C0728:lI98|H3C07C4
-3C07C4:lI97|H3C0850
-3C0850:lI115|H3C08DC
-3C08DC:lI105|H3C0968
-3C0968:lI99|N
-3C0398:lI115|H3C0424
-3C0424:lI110|H3C04B0
-3C04B0:lI100|N
-3C0300:lH3C03A8|H3C03B4
-3C03A8:t2:H3C0434,H3C043C
-3C043C:lI97|H3C04C8
-3C04C8:lI112|H3C0554
-3C0554:lI112|H3C05E8
-3C05E8:lI108|H3C068C
-3C068C:lI105|H3C0730
-3C0730:lI99|H3C07CC
-3C07CC:lI97|H3C0858
-3C0858:lI116|H3C08E4
-3C08E4:lI105|H3C0970
-3C0970:lI111|H3C09FC
-3C09FC:lI110|H3C0A98
-3C0A98:lI47|H3C0B34
-3C0B34:lI122|H3C0BD8
-3C0BD8:lI105|H3C0C8C
-3C0C8C:lI112|N
-3C0434:lI122|H3C04C0
-3C04C0:lI105|H3C054C
-3C054C:lI112|N
-3C03B4:lH3C0444|H3C0450
-3C0444:t2:H3C04D0,H3C04D8
-3C04D8:lI97|H3C0564
-3C0564:lI112|H3C05F8
-3C05F8:lI112|H3C0694
-3C0694:lI108|H3C0738
-3C0738:lI105|H3C07D4
-3C07D4:lI99|H3C0860
-3C0860:lI97|H3C08EC
-3C08EC:lI116|H3C0978
-3C0978:lI105|H3C0A04
-3C0A04:lI111|H3C0AA0
-3C0AA0:lI110|H3C0B3C
-3C0B3C:lI47|H3C0BE0
-3C0BE0:lI120|H3C0C94
-3C0C94:lI45|H3C0D40
-3C0D40:lI119|H3C0DF4
-3C0DF4:lI97|H3C0EA8
-3C0EA8:lI105|H3C0F64
-3C0F64:lI115|H3C1030
-3C1030:lI45|H3C1104
-3C1104:lI115|H3C11D8
-3C11D8:lI111|H3C12A4
-3C12A4:lI117|H3C1378
-3C1378:lI114|H3C1454
-3C1454:lI99|H3C1538
-3C1538:lI101|N
-3C04D0:lI115|H3C055C
-3C055C:lI114|H3C05F0
-3C05F0:lI99|N
-3C0450:lH3C04E0|H3C04EC
-3C04E0:t2:H3C056C,H3C0574
-3C0574:lI97|H3C0608
-3C0608:lI112|H3C06A4
-3C06A4:lI112|H3C0748
-3C0748:lI108|H3C07E4
-3C07E4:lI105|H3C0868
-3C0868:lI99|H3C08F4
-3C08F4:lI97|H3C0980
-3C0980:lI116|H3C0A0C
-3C0A0C:lI105|H3C0AA8
-3C0AA8:lI111|H3C0B44
-3C0B44:lI110|H3C0BE8
-3C0BE8:lI47|H3C0C9C
-3C0C9C:lI120|H3C0D48
-3C0D48:lI45|H3C0DFC
-3C0DFC:lI117|H3C0EB0
-3C0EB0:lI115|H3C0F6C
-3C0F6C:lI116|H3C1038
-3C1038:lI97|H3C110C
-3C110C:lI114|N
-3C056C:lI117|H3C0600
-3C0600:lI115|H3C069C
-3C069C:lI116|H3C0740
-3C0740:lI97|H3C07DC
-3C07DC:lI114|N
-3C04EC:lH3C057C|H3C0588
-3C057C:t2:H3C0610,H3C0618
-3C0618:lI97|H3C06B4
-3C06B4:lI112|H3C0750
-3C0750:lI112|H3C07EC
-3C07EC:lI108|H3C0870
-3C0870:lI105|H3C08FC
-3C08FC:lI99|H3C0988
-3C0988:lI97|H3C0A14
-3C0A14:lI116|H3C0AB0
-3C0AB0:lI105|H3C0B4C
-3C0B4C:lI111|H3C0BF0
-3C0BF0:lI110|H3C0CA4
-3C0CA4:lI47|H3C0D50
-3C0D50:lI120|H3C0E04
-3C0E04:lI45|H3C0EB8
-3C0EB8:lI116|H3C0F74
-3C0F74:lI114|H3C1040
-3C1040:lI111|H3C1114
-3C1114:lI102|H3C11E0
-3C11E0:lI102|H3C12AC
-3C12AC:lI45|H3C1380
-3C1380:lI109|H3C145C
-3C145C:lI115|N
-3C0610:lI109|H3C06AC
-3C06AC:lI115|N
-3C0588:lH3C0620|H3C062C
-3C0620:t2:H3C06BC,H3C06C4
-3C06C4:lI97|H3C0760
-3C0760:lI112|H3C07F4
-3C07F4:lI112|H3C0878
-3C0878:lI108|H3C0904
-3C0904:lI105|H3C0990
-3C0990:lI99|H3C0A1C
-3C0A1C:lI97|H3C0AB8
-3C0AB8:lI116|H3C0B54
-3C0B54:lI105|H3C0BF8
-3C0BF8:lI111|H3C0CAC
-3C0CAC:lI110|H3C0D58
-3C0D58:lI47|H3C0E0C
-3C0E0C:lI120|H3C0EC0
-3C0EC0:lI45|H3C0F7C
-3C0F7C:lI116|H3C1048
-3C1048:lI114|H3C111C
-3C111C:lI111|H3C11E8
-3C11E8:lI102|H3C12B4
-3C12B4:lI102|H3C1388
-3C1388:lI45|H3C1464
-3C1464:lI109|H3C1540
-3C1540:lI101|N
-3C06BC:lI109|H3C0758
-3C0758:lI101|N
-3C062C:lH3C06CC|H3C06D8
-3C06CC:t2:H3C0768,H3C0770
-3C0770:lI97|H3C0804
-3C0804:lI112|H3C0888
-3C0888:lI112|H3C090C
-3C090C:lI108|H3C0998
-3C0998:lI105|H3C0A24
-3C0A24:lI99|H3C0AC0
-3C0AC0:lI97|H3C0B5C
-3C0B5C:lI116|H3C0C00
-3C0C00:lI105|H3C0CB4
-3C0CB4:lI111|H3C0D60
-3C0D60:lI110|H3C0E14
-3C0E14:lI47|H3C0EC8
-3C0EC8:lI120|H3C0F84
-3C0F84:lI45|H3C1050
-3C1050:lI116|H3C1124
-3C1124:lI114|H3C11F0
-3C11F0:lI111|H3C12BC
-3C12BC:lI102|H3C1390
-3C1390:lI102|H3C146C
-3C146C:lI45|H3C1548
-3C1548:lI109|H3C161C
-3C161C:lI97|H3C16F0
-3C16F0:lI110|N
-3C0768:lI109|H3C07FC
-3C07FC:lI97|H3C0880
-3C0880:lI110|N
-3C06D8:lH3C0778|H3C0784
-3C0778:t2:H3C080C,H3C0814
-3C0814:lI97|H3C0890
-3C0890:lI112|H3C0914
-3C0914:lI112|H3C09A0
-3C09A0:lI108|H3C0A2C
-3C0A2C:lI105|H3C0AC8
-3C0AC8:lI99|H3C0B64
-3C0B64:lI97|H3C0C08
-3C0C08:lI116|H3C0CBC
-3C0CBC:lI105|H3C0D68
-3C0D68:lI111|H3C0E1C
-3C0E1C:lI110|H3C0ED0
-3C0ED0:lI47|H3C0F8C
-3C0F8C:lI120|H3C1058
-3C1058:lI45|H3C112C
-3C112C:lI116|H3C11F8
-3C11F8:lI114|H3C12C4
-3C12C4:lI111|H3C1398
-3C1398:lI102|H3C1474
-3C1474:lI102|N
-3C080C:lI116|N
-3C0784:lH3C081C|H3C0828
-3C081C:t2:H3C0898,H3C08A0
-3C08A0:lI97|H3C0924
-3C0924:lI112|H3C09A8
-3C09A8:lI112|H3C0A34
-3C0A34:lI108|H3C0AD0
-3C0AD0:lI105|H3C0B6C
-3C0B6C:lI99|H3C0C10
-3C0C10:lI97|H3C0CC4
-3C0CC4:lI116|H3C0D70
-3C0D70:lI105|H3C0E24
-3C0E24:lI111|H3C0ED8
-3C0ED8:lI110|H3C0F94
-3C0F94:lI47|H3C1060
-3C1060:lI120|H3C1134
-3C1134:lI45|H3C1200
-3C1200:lI116|H3C12CC
-3C12CC:lI114|H3C13A0
-3C13A0:lI111|H3C147C
-3C147C:lI102|H3C1550
-3C1550:lI102|N
-3C0898:lI116|H3C091C
-3C091C:lI114|N
-3C0828:lH3C08A8|H3C08B4
-3C08A8:t2:H3C092C,H3C0934
-3C0934:lI97|H3C09B8
-3C09B8:lI112|H3C0A44
-3C0A44:lI112|H3C0AE0
-3C0AE0:lI108|H3C0B74
-3C0B74:lI105|H3C0C18
-3C0C18:lI99|H3C0CCC
-3C0CCC:lI97|H3C0D78
-3C0D78:lI116|H3C0E2C
-3C0E2C:lI105|H3C0EE0
-3C0EE0:lI111|H3C0F9C
-3C0F9C:lI110|H3C1068
-3C1068:lI47|H3C113C
-3C113C:lI120|H3C1208
-3C1208:lI45|H3C12D4
-3C12D4:lI116|H3C13A8
-3C13A8:lI114|H3C1484
-3C1484:lI111|H3C1558
-3C1558:lI102|H3C1624
-3C1624:lI102|N
-3C092C:lI114|H3C09B0
-3C09B0:lI111|H3C0A3C
-3C0A3C:lI102|H3C0AD8
-3C0AD8:lI102|N
-3C08B4:lH3C093C|H3C0948
-3C093C:t2:H3C09C0,H3C09C8
-3C09C8:lI97|H3C0A54
-3C0A54:lI112|H3C0AF0
-3C0AF0:lI112|H3C0B84
-3C0B84:lI108|H3C0C28
-3C0C28:lI105|H3C0CDC
-3C0CDC:lI99|H3C0D88
-3C0D88:lI97|H3C0E34
-3C0E34:lI116|H3C0EE8
-3C0EE8:lI105|H3C0FA4
-3C0FA4:lI111|H3C1070
-3C1070:lI110|H3C1144
-3C1144:lI47|H3C1210
-3C1210:lI120|H3C12DC
-3C12DC:lI45|H3C13B0
-3C13B0:lI116|H3C148C
-3C148C:lI101|H3C1560
-3C1560:lI120|H3C162C
-3C162C:lI105|H3C16F8
-3C16F8:lI110|H3C17BC
-3C17BC:lI102|H3C1880
-3C1880:lI111|N
-3C09C0:lI116|H3C0A4C
-3C0A4C:lI101|H3C0AE8
-3C0AE8:lI120|H3C0B7C
-3C0B7C:lI105|H3C0C20
-3C0C20:lI110|H3C0CD4
-3C0CD4:lI102|H3C0D80
-3C0D80:lI111|N
-3C0948:lH3C09D0|H3C09DC
-3C09D0:t2:H3C0A5C,H3C0A64
-3C0A64:lI97|H3C0B00
-3C0B00:lI112|H3C0B94
-3C0B94:lI112|H3C0C38
-3C0C38:lI108|H3C0CE4
-3C0CE4:lI105|H3C0D90
-3C0D90:lI99|H3C0E3C
-3C0E3C:lI97|H3C0EF0
-3C0EF0:lI116|H3C0FAC
-3C0FAC:lI105|H3C1078
-3C1078:lI111|H3C114C
-3C114C:lI110|H3C1218
-3C1218:lI47|H3C12E4
-3C12E4:lI120|H3C13B8
-3C13B8:lI45|H3C1494
-3C1494:lI116|H3C1568
-3C1568:lI101|H3C1634
-3C1634:lI120|H3C1700
-3C1700:lI105|H3C17C4
-3C17C4:lI110|H3C1888
-3C1888:lI102|H3C1944
-3C1944:lI111|N
-3C0A5C:lI116|H3C0AF8
-3C0AF8:lI101|H3C0B8C
-3C0B8C:lI120|H3C0C30
-3C0C30:lI105|N
-3C09DC:lH3C0A6C|H3C0A78
-3C0A6C:t2:H3C0B08,H3C0B10
-3C0B10:lI97|H3C0BA4
-3C0BA4:lI112|H3C0C48
-3C0C48:lI112|H3C0CEC
-3C0CEC:lI108|H3C0D98
-3C0D98:lI105|H3C0E44
-3C0E44:lI99|H3C0EF8
-3C0EF8:lI97|H3C0FB4
-3C0FB4:lI116|H3C1080
-3C1080:lI105|H3C1154
-3C1154:lI111|H3C1220
-3C1220:lI110|H3C12EC
-3C12EC:lI47|H3C13C0
-3C13C0:lI120|H3C149C
-3C149C:lI45|H3C1570
-3C1570:lI116|H3C163C
-3C163C:lI101|H3C1708
-3C1708:lI120|N
-3C0B08:lI116|H3C0B9C
-3C0B9C:lI101|H3C0C40
-3C0C40:lI120|N
-3C0A78:lH3C0B18|H3C0B24
-3C0B18:t2:H3C0BAC,H3C0BB4
-3C0BB4:lI97|H3C0C58
-3C0C58:lI112|H3C0CFC
-3C0CFC:lI112|H3C0DA0
-3C0DA0:lI108|H3C0E4C
-3C0E4C:lI105|H3C0F00
-3C0F00:lI99|H3C0FBC
-3C0FBC:lI97|H3C1088
-3C1088:lI116|H3C115C
-3C115C:lI105|H3C1228
-3C1228:lI111|H3C12F4
-3C12F4:lI110|H3C13C8
-3C13C8:lI47|H3C14A4
-3C14A4:lI120|H3C1578
-3C1578:lI45|H3C1644
-3C1644:lI116|H3C1710
-3C1710:lI99|H3C17CC
-3C17CC:lI108|N
-3C0BAC:lI116|H3C0C50
-3C0C50:lI99|H3C0CF4
-3C0CF4:lI108|N
-3C0B24:lH3C0BBC|H3C0BC8
-3C0BBC:t2:H3C0C60,H3C0C68
-3C0C68:lI97|H3C0D0C
-3C0D0C:lI112|H3C0DB0
-3C0DB0:lI112|H3C0E54
-3C0E54:lI108|H3C0F08
-3C0F08:lI105|H3C0FC4
-3C0FC4:lI99|H3C1090
-3C1090:lI97|H3C1164
-3C1164:lI116|H3C1230
-3C1230:lI105|H3C12FC
-3C12FC:lI111|H3C13D0
-3C13D0:lI110|H3C14AC
-3C14AC:lI47|H3C1580
-3C1580:lI120|H3C164C
-3C164C:lI45|H3C1718
-3C1718:lI116|H3C17D4
-3C17D4:lI97|H3C1890
-3C1890:lI114|N
-3C0C60:lI116|H3C0D04
-3C0D04:lI97|H3C0DA8
-3C0DA8:lI114|N
-3C0BC8:lH3C0C70|H3C0C7C
-3C0C70:t2:H3C0D14,H3C0D1C
-3C0D1C:lI97|H3C0DC0
-3C0DC0:lI112|H3C0E64
-3C0E64:lI112|H3C0F18
-3C0F18:lI108|H3C0FD4
-3C0FD4:lI105|H3C10A0
-3C10A0:lI99|H3C116C
-3C116C:lI97|H3C1238
-3C1238:lI116|H3C1304
-3C1304:lI105|H3C13D8
-3C13D8:lI111|H3C14B4
-3C14B4:lI110|H3C1588
-3C1588:lI47|H3C1654
-3C1654:lI120|H3C1720
-3C1720:lI45|H3C17DC
-3C17DC:lI115|H3C1898
-3C1898:lI118|H3C194C
-3C194C:lI52|H3C1A00
-3C1A00:lI99|H3C1AB4
-3C1AB4:lI114|H3C1B78
-3C1B78:lI99|N
-3C0D14:lI115|H3C0DB8
-3C0DB8:lI118|H3C0E5C
-3C0E5C:lI52|H3C0F10
-3C0F10:lI99|H3C0FCC
-3C0FCC:lI114|H3C1098
-3C1098:lI99|N
-3C0C7C:lH3C0D24|H3C0D30
-3C0D24:t2:H3C0DC8,H3C0DD0
-3C0DD0:lI97|H3C0E74
-3C0E74:lI112|H3C0F28
-3C0F28:lI112|H3C0FE4
-3C0FE4:lI108|H3C10B0
-3C10B0:lI105|H3C117C
-3C117C:lI99|H3C1248
-3C1248:lI97|H3C130C
-3C130C:lI116|H3C13E0
-3C13E0:lI105|H3C14BC
-3C14BC:lI111|H3C1590
-3C1590:lI110|H3C165C
-3C165C:lI47|H3C1728
-3C1728:lI120|H3C17E4
-3C17E4:lI45|H3C18A0
-3C18A0:lI115|H3C1954
-3C1954:lI118|H3C1A08
-3C1A08:lI52|H3C1ABC
-3C1ABC:lI99|H3C1B80
-3C1B80:lI112|H3C1C4C
-3C1C4C:lI105|H3C1D10
-3C1D10:lI111|N
-3C0DC8:lI115|H3C0E6C
-3C0E6C:lI118|H3C0F20
-3C0F20:lI52|H3C0FDC
-3C0FDC:lI99|H3C10A8
-3C10A8:lI112|H3C1174
-3C1174:lI105|H3C1240
-3C1240:lI111|N
-3C0D30:lH3C0DD8|H3C0DE4
-3C0DD8:t2:H3C0E7C,H3C0E84
-3C0E84:lI97|H3C0F38
-3C0F38:lI112|H3C0FF4
-3C0FF4:lI112|H3C10B8
-3C10B8:lI108|H3C1184
-3C1184:lI105|H3C1250
-3C1250:lI99|H3C1314
-3C1314:lI97|H3C13E8
-3C13E8:lI116|H3C14C4
-3C14C4:lI105|H3C1598
-3C1598:lI111|H3C1664
-3C1664:lI110|H3C1730
-3C1730:lI47|H3C17EC
-3C17EC:lI120|H3C18A8
-3C18A8:lI45|H3C195C
-3C195C:lI115|H3C1A10
-3C1A10:lI116|H3C1AC4
-3C1AC4:lI117|H3C1B88
-3C1B88:lI102|H3C1C54
-3C1C54:lI102|H3C1D18
-3C1D18:lI105|H3C1DD4
-3C1DD4:lI116|N
-3C0E7C:lI115|H3C0F30
-3C0F30:lI105|H3C0FEC
-3C0FEC:lI116|N
-3C0DE4:lH3C0E8C|H3C0E98
-3C0E8C:t2:H3C0F40,H3C0F48
-3C0F48:lI97|H3C1004
-3C1004:lI112|H3C10C8
-3C10C8:lI112|H3C1194
-3C1194:lI108|H3C1258
-3C1258:lI105|H3C131C
-3C131C:lI99|H3C13F0
-3C13F0:lI97|H3C14CC
-3C14CC:lI116|H3C15A0
-3C15A0:lI105|H3C166C
-3C166C:lI111|H3C1738
-3C1738:lI110|H3C17F4
-3C17F4:lI47|H3C18B0
-3C18B0:lI120|H3C1964
-3C1964:lI45|H3C1A18
-3C1A18:lI115|H3C1ACC
-3C1ACC:lI104|H3C1B90
-3C1B90:lI97|H3C1C5C
-3C1C5C:lI114|N
-3C0F40:lI115|H3C0FFC
-3C0FFC:lI104|H3C10C0
-3C10C0:lI97|H3C118C
-3C118C:lI114|N
-3C0E98:lH3C0F50|H3C0F5C
-3C0F50:t2:H3C100C,H3C1014
-3C1014:lI97|H3C10D8
-3C10D8:lI112|H3C119C
-3C119C:lI112|H3C1260
-3C1260:lI108|H3C1324
-3C1324:lI105|H3C13F8
-3C13F8:lI99|H3C14D4
-3C14D4:lI97|H3C15A8
-3C15A8:lI116|H3C1674
-3C1674:lI105|H3C1740
-3C1740:lI111|H3C17FC
-3C17FC:lI110|H3C18B8
-3C18B8:lI47|H3C196C
-3C196C:lI120|H3C1A20
-3C1A20:lI45|H3C1AD4
-3C1AD4:lI115|H3C1B98
-3C1B98:lI104|N
-3C100C:lI115|H3C10D0
-3C10D0:lI104|N
-3C0F5C:lH3C101C|H3C1028
-3C101C:t2:H3C10E0,H3C10E8
-3C10E8:lI97|H3C11AC
-3C11AC:lI112|H3C1268
-3C1268:lI112|H3C132C
-3C132C:lI108|H3C1400
-3C1400:lI105|H3C14DC
-3C14DC:lI99|H3C15B0
-3C15B0:lI97|H3C167C
-3C167C:lI116|H3C1748
-3C1748:lI105|H3C1804
-3C1804:lI111|H3C18C0
-3C18C0:lI110|H3C1974
-3C1974:lI47|H3C1A28
-3C1A28:lI120|H3C1ADC
-3C1ADC:lI45|H3C1BA0
-3C1BA0:lI110|H3C1C64
-3C1C64:lI101|H3C1D20
-3C1D20:lI116|H3C1DDC
-3C1DDC:lI99|H3C1E98
-3C1E98:lI100|H3C1F5C
-3C1F5C:lI102|N
-3C10E0:lI110|H3C11A4
-3C11A4:lI99|N
-3C1028:lH3C10F0|H3C10FC
-3C10F0:t2:H3C11B4,H3C11BC
-3C11BC:lI97|H3C1278
-3C1278:lI112|H3C133C
-3C133C:lI112|H3C1408
-3C1408:lI108|H3C14E4
-3C14E4:lI105|H3C15B8
-3C15B8:lI99|H3C1684
-3C1684:lI97|H3C1750
-3C1750:lI116|H3C180C
-3C180C:lI105|H3C18C8
-3C18C8:lI111|H3C197C
-3C197C:lI110|H3C1A30
-3C1A30:lI47|H3C1AE4
-3C1AE4:lI120|H3C1BA8
-3C1BA8:lI45|H3C1C6C
-3C1C6C:lI110|H3C1D28
-3C1D28:lI101|H3C1DE4
-3C1DE4:lI116|H3C1EA0
-3C1EA0:lI99|H3C1F64
-3C1F64:lI100|H3C2018
-3C2018:lI102|N
-3C11B4:lI99|H3C1270
-3C1270:lI100|H3C1334
-3C1334:lI102|N
-3C10FC:lH3C11C4|H3C11D0
-3C11C4:t2:H3C1280,H3C1288
-3C1288:lI97|H3C134C
-3C134C:lI112|H3C1418
-3C1418:lI112|H3C14EC
-3C14EC:lI108|H3C15C0
-3C15C0:lI105|H3C168C
-3C168C:lI99|H3C1758
-3C1758:lI97|H3C1814
-3C1814:lI116|H3C18D0
-3C18D0:lI105|H3C1984
-3C1984:lI111|H3C1A38
-3C1A38:lI110|H3C1AEC
-3C1AEC:lI47|H3C1BB0
-3C1BB0:lI120|H3C1C74
-3C1C74:lI45|H3C1D30
-3C1D30:lI109|H3C1DEC
-3C1DEC:lI105|H3C1EA8
-3C1EA8:lI102|N
-3C1280:lI109|H3C1344
-3C1344:lI105|H3C1410
-3C1410:lI102|N
-3C11D0:lH3C1290|H3C129C
-3C1290:t2:H3C1354,H3C135C
-3C135C:lI97|H3C1428
-3C1428:lI112|H3C14FC
-3C14FC:lI112|H3C15D0
-3C15D0:lI108|H3C169C
-3C169C:lI105|H3C1760
-3C1760:lI99|H3C181C
-3C181C:lI97|H3C18D8
-3C18D8:lI116|H3C198C
-3C198C:lI105|H3C1A40
-3C1A40:lI111|H3C1AF4
-3C1AF4:lI110|H3C1BB8
-3C1BB8:lI47|H3C1C7C
-3C1C7C:lI120|H3C1D38
-3C1D38:lI45|H3C1DF4
-3C1DF4:lI108|H3C1EB0
-3C1EB0:lI97|H3C1F6C
-3C1F6C:lI116|H3C2020
-3C2020:lI101|H3C20DC
-3C20DC:lI120|N
-3C1354:lI108|H3C1420
-3C1420:lI97|H3C14F4
-3C14F4:lI116|H3C15C8
-3C15C8:lI101|H3C1694
-3C1694:lI120|N
-3C129C:lH3C1364|H3C1370
-3C1364:t2:H3C1430,H3C1438
-3C1438:lI97|H3C150C
-3C150C:lI112|H3C15E0
-3C15E0:lI112|H3C16A4
-3C16A4:lI108|H3C1768
-3C1768:lI105|H3C1824
-3C1824:lI99|H3C18E0
-3C18E0:lI97|H3C1994
-3C1994:lI116|H3C1A48
-3C1A48:lI105|H3C1AFC
-3C1AFC:lI111|H3C1BC0
-3C1BC0:lI110|H3C1C84
-3C1C84:lI47|H3C1D40
-3C1D40:lI120|H3C1DFC
-3C1DFC:lI45|H3C1EB8
-3C1EB8:lI107|H3C1F74
-3C1F74:lI111|H3C2028
-3C2028:lI97|H3C20E4
-3C20E4:lI110|N
-3C1430:lI115|H3C1504
-3C1504:lI107|H3C15D8
-3C15D8:lI112|N
-3C1370:lH3C1440|H3C144C
-3C1440:t2:H3C1514,H3C151C
-3C151C:lI97|H3C15F0
-3C15F0:lI112|H3C16B4
-3C16B4:lI112|H3C1770
-3C1770:lI108|H3C182C
-3C182C:lI105|H3C18E8
-3C18E8:lI99|H3C199C
-3C199C:lI97|H3C1A50
-3C1A50:lI116|H3C1B04
-3C1B04:lI105|H3C1BC8
-3C1BC8:lI111|H3C1C8C
-3C1C8C:lI110|H3C1D48
-3C1D48:lI47|H3C1E04
-3C1E04:lI120|H3C1EC0
-3C1EC0:lI45|H3C1F7C
-3C1F7C:lI107|H3C2030
-3C2030:lI111|H3C20EC
-3C20EC:lI97|H3C21A0
-3C21A0:lI110|N
-3C1514:lI115|H3C15E8
-3C15E8:lI107|H3C16AC
-3C16AC:lI100|N
-3C144C:lH3C1524|H3C1530
-3C1524:t2:H3C15F8,H3C1600
-3C1600:lI97|H3C16C4
-3C16C4:lI112|H3C1780
-3C1780:lI112|H3C1834
-3C1834:lI108|H3C18F0
-3C18F0:lI105|H3C19A4
-3C19A4:lI99|H3C1A58
-3C1A58:lI97|H3C1B0C
-3C1B0C:lI116|H3C1BD0
-3C1BD0:lI105|H3C1C94
-3C1C94:lI111|H3C1D50
-3C1D50:lI110|H3C1E0C
-3C1E0C:lI47|H3C1EC8
-3C1EC8:lI120|H3C1F84
-3C1F84:lI45|H3C2038
-3C2038:lI107|H3C20F4
-3C20F4:lI111|H3C21A8
-3C21A8:lI97|H3C225C
-3C225C:lI110|N
-3C15F8:lI115|H3C16BC
-3C16BC:lI107|H3C1778
-3C1778:lI116|N
-3C1530:lH3C1608|H3C1614
-3C1608:t2:H3C16CC,H3C16D4
-3C16D4:lI97|H3C1790
-3C1790:lI112|H3C1844
-3C1844:lI112|H3C18F8
-3C18F8:lI108|H3C19AC
-3C19AC:lI105|H3C1A60
-3C1A60:lI99|H3C1B14
-3C1B14:lI97|H3C1BD8
-3C1BD8:lI116|H3C1C9C
-3C1C9C:lI105|H3C1D58
-3C1D58:lI111|H3C1E14
-3C1E14:lI110|H3C1ED0
-3C1ED0:lI47|H3C1F8C
-3C1F8C:lI120|H3C2040
-3C2040:lI45|H3C20FC
-3C20FC:lI107|H3C21B0
-3C21B0:lI111|H3C2264
-3C2264:lI97|H3C2320
-3C2320:lI110|N
-3C16CC:lI115|H3C1788
-3C1788:lI107|H3C183C
-3C183C:lI109|N
-3C1614:lH3C16DC|H3C16E8
-3C16DC:t2:H3C1798,H3C17A0
-3C17A0:lI97|H3C1854
-3C1854:lI112|H3C1908
-3C1908:lI112|H3C19B4
-3C19B4:lI108|H3C1A68
-3C1A68:lI105|H3C1B1C
-3C1B1C:lI99|H3C1BE0
-3C1BE0:lI97|H3C1CA4
-3C1CA4:lI116|H3C1D60
-3C1D60:lI105|H3C1E1C
-3C1E1C:lI111|H3C1ED8
-3C1ED8:lI110|H3C1F94
-3C1F94:lI47|H3C2048
-3C2048:lI120|H3C2104
-3C2104:lI45|H3C21B8
-3C21B8:lI104|H3C226C
-3C226C:lI116|H3C2328
-3C2328:lI116|H3C23E4
-3C23E4:lI112|H3C2498
-3C2498:lI100|H3C2554
-3C2554:lI45|H3C2610
-3C2610:lI99|H3C26D4
-3C26D4:lI103|H3C2790
-3C2790:lI105|N
-3C1798:lI99|H3C184C
-3C184C:lI103|H3C1900
-3C1900:lI105|N
-3C16E8:lH3C17A8|H3C17B4
-3C17A8:t2:H3C185C,H3C1864
-3C1864:lI97|H3C1918
-3C1918:lI112|H3C19C4
-3C19C4:lI112|H3C1A70
-3C1A70:lI108|H3C1B24
-3C1B24:lI105|H3C1BE8
-3C1BE8:lI99|H3C1CAC
-3C1CAC:lI97|H3C1D68
-3C1D68:lI116|H3C1E24
-3C1E24:lI105|H3C1EE0
-3C1EE0:lI111|H3C1F9C
-3C1F9C:lI110|H3C2050
-3C2050:lI47|H3C210C
-3C210C:lI120|H3C21C0
-3C21C0:lI45|H3C2274
-3C2274:lI104|H3C2330
-3C2330:lI100|H3C23EC
-3C23EC:lI102|N
-3C185C:lI104|H3C1910
-3C1910:lI100|H3C19BC
-3C19BC:lI102|N
-3C17B4:lH3C186C|H3C1878
-3C186C:t2:H3C1920,H3C1928
-3C1928:lI97|H3C19D4
-3C19D4:lI112|H3C1A78
-3C1A78:lI112|H3C1B2C
-3C1B2C:lI108|H3C1BF0
-3C1BF0:lI105|H3C1CB4
-3C1CB4:lI99|H3C1D70
-3C1D70:lI97|H3C1E2C
-3C1E2C:lI116|H3C1EE8
-3C1EE8:lI105|H3C1FA4
-3C1FA4:lI111|H3C2058
-3C2058:lI110|H3C2114
-3C2114:lI47|H3C21C8
-3C21C8:lI120|H3C227C
-3C227C:lI45|H3C2338
-3C2338:lI103|H3C23F4
-3C23F4:lI122|H3C24A0
-3C24A0:lI105|H3C255C
-3C255C:lI112|N
-3C1920:lI103|H3C19CC
-3C19CC:lI122|N
-3C1878:lH3C1930|H3C193C
-3C1930:t2:H3C19DC,H3C19E4
-3C19E4:lI97|H3C1A88
-3C1A88:lI112|H3C1B3C
-3C1B3C:lI112|H3C1C00
-3C1C00:lI108|H3C1CBC
-3C1CBC:lI105|H3C1D78
-3C1D78:lI99|H3C1E34
-3C1E34:lI97|H3C1EF0
-3C1EF0:lI116|H3C1FAC
-3C1FAC:lI105|H3C2060
-3C2060:lI111|H3C211C
-3C211C:lI110|H3C21D0
-3C21D0:lI47|H3C2284
-3C2284:lI120|H3C2340
-3C2340:lI45|H3C23FC
-3C23FC:lI103|H3C24A8
-3C24A8:lI116|H3C2564
-3C2564:lI97|H3C2618
-3C2618:lI114|N
-3C19DC:lI103|H3C1A80
-3C1A80:lI116|H3C1B34
-3C1B34:lI97|H3C1BF8
-3C1BF8:lI114|N
-3C193C:lH3C19EC|H3C19F8
-3C19EC:t2:H3C1A90,H3C1A98
-3C1A98:lI97|H3C1B4C
-3C1B4C:lI112|H3C1C10
-3C1C10:lI112|H3C1CC4
-3C1CC4:lI108|H3C1D80
-3C1D80:lI105|H3C1E3C
-3C1E3C:lI99|H3C1EF8
-3C1EF8:lI97|H3C1FB4
-3C1FB4:lI116|H3C2068
-3C2068:lI105|H3C2124
-3C2124:lI111|H3C21D8
-3C21D8:lI110|H3C228C
-3C228C:lI47|H3C2348
-3C2348:lI120|H3C2404
-3C2404:lI45|H3C24B0
-3C24B0:lI100|H3C256C
-3C256C:lI118|H3C2620
-3C2620:lI105|N
-3C1A90:lI100|H3C1B44
-3C1B44:lI118|H3C1C08
-3C1C08:lI105|N
-3C19F8:lH3C1AA0|H3C1AAC
-3C1AA0:t2:H3C1B54,H3C1B5C
-3C1B5C:lI97|H3C1C20
-3C1C20:lI112|H3C1CD4
-3C1CD4:lI112|H3C1D88
-3C1D88:lI108|H3C1E44
-3C1E44:lI105|H3C1F00
-3C1F00:lI99|H3C1FBC
-3C1FBC:lI97|H3C2070
-3C2070:lI116|H3C212C
-3C212C:lI105|H3C21E0
-3C21E0:lI111|H3C2294
-3C2294:lI110|H3C2350
-3C2350:lI47|H3C240C
-3C240C:lI120|H3C24B8
-3C24B8:lI45|H3C2574
-3C2574:lI100|H3C2628
-3C2628:lI105|H3C26DC
-3C26DC:lI114|H3C2798
-3C2798:lI101|H3C2854
-3C2854:lI99|H3C2918
-3C2918:lI116|H3C29E4
-3C29E4:lI111|H3C2AB0
-3C2AB0:lI114|N
-3C1B54:lI100|H3C1C18
-3C1C18:lI99|H3C1CCC
-3C1CCC:lI114|N
-3C1AAC:lH3C1B64|H3C1B70
-3C1B64:t2:H3C1C28,H3C1C30
-3C1C30:lI97|H3C1CE4
-3C1CE4:lI112|H3C1D98
-3C1D98:lI112|H3C1E4C
-3C1E4C:lI108|H3C1F08
-3C1F08:lI105|H3C1FC4
-3C1FC4:lI99|H3C2078
-3C2078:lI97|H3C2134
-3C2134:lI116|H3C21E8
-3C21E8:lI105|H3C229C
-3C229C:lI111|H3C2358
-3C2358:lI110|H3C2414
-3C2414:lI47|H3C24C0
-3C24C0:lI120|H3C257C
-3C257C:lI45|H3C2630
-3C2630:lI100|H3C26E4
-3C26E4:lI105|H3C27A0
-3C27A0:lI114|H3C285C
-3C285C:lI101|H3C2920
-3C2920:lI99|H3C29EC
-3C29EC:lI116|H3C2AB8
-3C2AB8:lI111|H3C2B84
-3C2B84:lI114|N
-3C1C28:lI100|H3C1CDC
-3C1CDC:lI105|H3C1D90
-3C1D90:lI114|N
-3C1B70:lH3C1C38|H3C1C44
-3C1C38:t2:H3C1CEC,H3C1CF4
-3C1CF4:lI97|H3C1DA8
-3C1DA8:lI112|H3C1E5C
-3C1E5C:lI112|H3C1F10
-3C1F10:lI108|H3C1FCC
-3C1FCC:lI105|H3C2080
-3C2080:lI99|H3C213C
-3C213C:lI97|H3C21F0
-3C21F0:lI116|H3C22A4
-3C22A4:lI105|H3C2360
-3C2360:lI111|H3C241C
-3C241C:lI110|H3C24C8
-3C24C8:lI47|H3C2584
-3C2584:lI120|H3C2638
-3C2638:lI45|H3C26EC
-3C26EC:lI100|H3C27A8
-3C27A8:lI105|H3C2864
-3C2864:lI114|H3C2928
-3C2928:lI101|H3C29F4
-3C29F4:lI99|H3C2AC0
-3C2AC0:lI116|H3C2B8C
-3C2B8C:lI111|H3C2C48
-3C2C48:lI114|N
-3C1CEC:lI100|H3C1DA0
-3C1DA0:lI120|H3C1E54
-3C1E54:lI114|N
-3C1C44:lH3C1CFC|H3C1D08
-3C1CFC:t2:H3C1DB0,H3C1DB8
-3C1DB8:lI97|H3C1E6C
-3C1E6C:lI112|H3C1F20
-3C1F20:lI112|H3C1FD4
-3C1FD4:lI108|H3C2088
-3C2088:lI105|H3C2144
-3C2144:lI99|H3C21F8
-3C21F8:lI97|H3C22AC
-3C22AC:lI116|H3C2368
-3C2368:lI105|H3C2424
-3C2424:lI111|H3C24D0
-3C24D0:lI110|H3C258C
-3C258C:lI47|H3C2640
-3C2640:lI120|H3C26F4
-3C26F4:lI45|H3C27B0
-3C27B0:lI99|H3C286C
-3C286C:lI115|H3C2930
-3C2930:lI104|N
-3C1DB0:lI99|H3C1E64
-3C1E64:lI115|H3C1F18
-3C1F18:lI104|N
-3C1D08:lH3C1DC0|H3C1DCC
-3C1DC0:t2:H3C1E74,H3C1E7C
-3C1E7C:lI97|H3C1F30
-3C1F30:lI112|H3C1FE4
-3C1FE4:lI112|H3C2098
-3C2098:lI108|H3C214C
-3C214C:lI105|H3C2200
-3C2200:lI99|H3C22B4
-3C22B4:lI97|H3C2370
-3C2370:lI116|H3C242C
-3C242C:lI105|H3C24D8
-3C24D8:lI111|H3C2594
-3C2594:lI110|H3C2648
-3C2648:lI47|H3C26FC
-3C26FC:lI120|H3C27B8
-3C27B8:lI45|H3C2874
-3C2874:lI99|H3C2938
-3C2938:lI112|H3C29FC
-3C29FC:lI105|H3C2AC8
-3C2AC8:lI111|N
-3C1E74:lI99|H3C1F28
-3C1F28:lI112|H3C1FDC
-3C1FDC:lI105|H3C2090
-3C2090:lI111|N
-3C1DCC:lH3C1E84|H3C1E90
-3C1E84:t2:H3C1F38,H3C1F40
-3C1F40:lI97|H3C1FEC
-3C1FEC:lI112|H3C20A0
-3C20A0:lI112|H3C2154
-3C2154:lI108|H3C2208
-3C2208:lI105|H3C22BC
-3C22BC:lI99|H3C2378
-3C2378:lI97|H3C2434
-3C2434:lI116|H3C24E0
-3C24E0:lI105|H3C259C
-3C259C:lI111|H3C2650
-3C2650:lI110|H3C2704
-3C2704:lI47|H3C27C0
-3C27C0:lI120|H3C287C
-3C287C:lI45|H3C2940
-3C2940:lI99|H3C2A04
-3C2A04:lI111|H3C2AD0
-3C2AD0:lI109|H3C2B94
-3C2B94:lI112|H3C2C50
-3C2C50:lI114|H3C2D00
-3C2D00:lI101|H3C2DA8
-3C2DA8:lI115|H3C2E40
-3C2E40:lI115|N
-3C1F38:lI90|N
-3C1E90:lH3C1F48|H3C1F54
-3C1F48:t2:H3C1FF4,H3C1FFC
-3C1FFC:lI97|H3C20B0
-3C20B0:lI112|H3C2164
-3C2164:lI112|H3C2210
-3C2210:lI108|H3C22C4
-3C22C4:lI105|H3C2380
-3C2380:lI99|H3C243C
-3C243C:lI97|H3C24E8
-3C24E8:lI116|H3C25A4
-3C25A4:lI105|H3C2658
-3C2658:lI111|H3C270C
-3C270C:lI110|H3C27C8
-3C27C8:lI47|H3C2884
-3C2884:lI120|H3C2948
-3C2948:lI45|H3C2A0C
-3C2A0C:lI99|H3C2AD8
-3C2AD8:lI100|H3C2B9C
-3C2B9C:lI108|H3C2C58
-3C2C58:lI105|H3C2D08
-3C2D08:lI110|H3C2DB0
-3C2DB0:lI107|N
-3C1FF4:lI118|H3C20A8
-3C20A8:lI99|H3C215C
-3C215C:lI100|N
-3C1F54:lH3C2004|H3C2010
-3C2004:t2:H3C20B8,H3C20C0
-3C20C0:lI97|H3C2174
-3C2174:lI112|H3C2220
-3C2220:lI112|H3C22D4
-3C22D4:lI108|H3C2390
-3C2390:lI105|H3C2444
-3C2444:lI99|H3C24F0
-3C24F0:lI97|H3C25AC
-3C25AC:lI116|H3C2660
-3C2660:lI105|H3C2714
-3C2714:lI111|H3C27D0
-3C27D0:lI110|H3C288C
-3C288C:lI47|H3C2950
-3C2950:lI120|H3C2A14
-3C2A14:lI45|H3C2AE0
-3C2AE0:lI98|H3C2BA4
-3C2BA4:lI99|H3C2C60
-3C2C60:lI112|H3C2D10
-3C2D10:lI105|H3C2DB8
-3C2DB8:lI111|N
-3C20B8:lI98|H3C216C
-3C216C:lI99|H3C2218
-3C2218:lI112|H3C22CC
-3C22CC:lI105|H3C2388
-3C2388:lI111|N
-3C2010:lH3C20C8|H3C20D4
-3C20C8:t2:H3C217C,H3C2184
-3C2184:lI97|H3C2230
-3C2230:lI112|H3C22E4
-3C22E4:lI112|H3C2398
-3C2398:lI108|H3C244C
-3C244C:lI105|H3C24F8
-3C24F8:lI99|H3C25B4
-3C25B4:lI97|H3C2668
-3C2668:lI116|H3C271C
-3C271C:lI105|H3C27D8
-3C27D8:lI111|H3C2894
-3C2894:lI110|H3C2958
-3C2958:lI47|H3C2A1C
-3C2A1C:lI114|H3C2AE8
-3C2AE8:lI116|H3C2BAC
-3C2BAC:lI102|N
-3C217C:lI114|H3C2228
-3C2228:lI116|H3C22DC
-3C22DC:lI102|N
-3C20D4:lH3C218C|H3C2198
-3C218C:t2:H3C2238,H3C2240
-3C2240:lI97|H3C22F4
-3C22F4:lI112|H3C23A8
-3C23A8:lI112|H3C2454
-3C2454:lI108|H3C2500
-3C2500:lI105|H3C25BC
-3C25BC:lI99|H3C2670
-3C2670:lI97|H3C2724
-3C2724:lI116|H3C27E0
-3C27E0:lI105|H3C289C
-3C289C:lI111|H3C2960
-3C2960:lI110|H3C2A24
-3C2A24:lI47|H3C2AF0
-3C2AF0:lI112|H3C2BB4
-3C2BB4:lI111|H3C2C68
-3C2C68:lI119|H3C2D18
-3C2D18:lI101|H3C2DC0
-3C2DC0:lI114|H3C2E48
-3C2E48:lI112|H3C2EC0
-3C2EC0:lI111|H3C2F38
-3C2F38:lI105|H3C2FA8
-3C2FA8:lI110|H3C3010
-3C3010:lI116|N
-3C2238:lI112|H3C22EC
-3C22EC:lI112|H3C23A0
-3C23A0:lI116|N
-3C2198:lH3C2248|H3C2254
-3C2248:t2:H3C22FC,H3C2304
-3C2304:lI97|H3C23B8
-3C23B8:lI112|H3C245C
-3C245C:lI112|H3C2508
-3C2508:lI108|H3C25C4
-3C25C4:lI105|H3C2678
-3C2678:lI99|H3C272C
-3C272C:lI97|H3C27E8
-3C27E8:lI116|H3C28A4
-3C28A4:lI105|H3C2968
-3C2968:lI111|H3C2A2C
-3C2A2C:lI110|H3C2AF8
-3C2AF8:lI47|H3C2BBC
-3C2BBC:lI112|H3C2C70
-3C2C70:lI111|H3C2D20
-3C2D20:lI115|H3C2DC8
-3C2DC8:lI116|H3C2E50
-3C2E50:lI115|H3C2EC8
-3C2EC8:lI99|H3C2F40
-3C2F40:lI114|H3C2FB0
-3C2FB0:lI105|H3C3018
-3C3018:lI112|H3C3078
-3C3078:lI116|N
-3C22FC:lI97|H3C23B0
-3C23B0:lI105|N
-3C2254:lH3C230C|H3C2318
-3C230C:t2:H3C23C0,H3C23C8
-3C23C8:lI97|H3C246C
-3C246C:lI112|H3C2518
-3C2518:lI112|H3C25CC
-3C25CC:lI108|H3C2680
-3C2680:lI105|H3C2734
-3C2734:lI99|H3C27F0
-3C27F0:lI97|H3C28AC
-3C28AC:lI116|H3C2970
-3C2970:lI105|H3C2A34
-3C2A34:lI111|H3C2B00
-3C2B00:lI110|H3C2BC4
-3C2BC4:lI47|H3C2C78
-3C2C78:lI112|H3C2D28
-3C2D28:lI111|H3C2DD0
-3C2DD0:lI115|H3C2E58
-3C2E58:lI116|H3C2ED0
-3C2ED0:lI115|H3C2F48
-3C2F48:lI99|H3C2FB8
-3C2FB8:lI114|H3C3020
-3C3020:lI105|H3C3080
-3C3080:lI112|H3C30D8
-3C30D8:lI116|N
-3C23C0:lI101|H3C2464
-3C2464:lI112|H3C2510
-3C2510:lI115|N
-3C2318:lH3C23D0|H3C23DC
-3C23D0:t2:H3C2474,H3C247C
-3C247C:lI97|H3C2528
-3C2528:lI112|H3C25D4
-3C25D4:lI112|H3C2688
-3C2688:lI108|H3C273C
-3C273C:lI105|H3C27F8
-3C27F8:lI99|H3C28B4
-3C28B4:lI97|H3C2978
-3C2978:lI116|H3C2A3C
-3C2A3C:lI105|H3C2B08
-3C2B08:lI111|H3C2BCC
-3C2BCC:lI110|H3C2C80
-3C2C80:lI47|H3C2D30
-3C2D30:lI112|H3C2DD8
-3C2DD8:lI111|H3C2E60
-3C2E60:lI115|H3C2ED8
-3C2ED8:lI116|H3C2F50
-3C2F50:lI115|H3C2FC0
-3C2FC0:lI99|H3C3028
-3C3028:lI114|H3C3088
-3C3088:lI105|H3C30E0
-3C30E0:lI112|H3C3130
-3C3130:lI116|N
-3C2474:lI112|H3C2520
-3C2520:lI115|N
-3C23DC:lH3C2484|H3C2490
-3C2484:t2:H3C2530,H3C2538
-3C2538:lI97|H3C25E4
-3C25E4:lI112|H3C2698
-3C2698:lI112|H3C2744
-3C2744:lI108|H3C2800
-3C2800:lI105|H3C28BC
-3C28BC:lI99|H3C2980
-3C2980:lI97|H3C2A44
-3C2A44:lI116|H3C2B10
-3C2B10:lI105|H3C2BD4
-3C2BD4:lI111|H3C2C88
-3C2C88:lI110|H3C2D38
-3C2D38:lI47|H3C2DE0
-3C2DE0:lI112|H3C2E68
-3C2E68:lI100|H3C2EE0
-3C2EE0:lI102|N
-3C2530:lI112|H3C25DC
-3C25DC:lI100|H3C2690
-3C2690:lI102|N
-3C2490:lH3C2540|H3C254C
-3C2540:t2:H3C25EC,H3C25F4
-3C25F4:lI97|H3C26A8
-3C26A8:lI112|H3C2754
-3C2754:lI112|H3C2808
-3C2808:lI108|H3C28C4
-3C28C4:lI105|H3C2988
-3C2988:lI99|H3C2A4C
-3C2A4C:lI97|H3C2B18
-3C2B18:lI116|H3C2BDC
-3C2BDC:lI105|H3C2C90
-3C2C90:lI111|H3C2D40
-3C2D40:lI110|H3C2DE8
-3C2DE8:lI47|H3C2E70
-3C2E70:lI111|H3C2EE8
-3C2EE8:lI100|H3C2F58
-3C2F58:lI97|N
-3C25EC:lI111|H3C26A0
-3C26A0:lI100|H3C274C
-3C274C:lI97|N
-3C254C:lH3C25FC|H3C2608
-3C25FC:t2:H3C26B0,H3C26B8
-3C26B8:lI97|H3C2764
-3C2764:lI112|H3C2818
-3C2818:lI112|H3C28CC
-3C28CC:lI108|H3C2990
-3C2990:lI105|H3C2A54
-3C2A54:lI99|H3C2B20
-3C2B20:lI97|H3C2BE4
-3C2BE4:lI116|H3C2C98
-3C2C98:lI105|H3C2D48
-3C2D48:lI111|H3C2DF0
-3C2DF0:lI110|H3C2E78
-3C2E78:lI47|H3C2EF0
-3C2EF0:lI111|H3C2F60
-3C2F60:lI99|H3C2FC8
-3C2FC8:lI116|H3C3030
-3C3030:lI101|H3C3090
-3C3090:lI116|H3C30E8
-3C30E8:lI45|H3C3138
-3C3138:lI115|H3C3180
-3C3180:lI116|H3C31C8
-3C31C8:lI114|H3C3210
-3C3210:lI101|H3C3258
-3C3258:lI97|H3C32A0
-3C32A0:lI109|N
-3C26B0:lI98|H3C275C
-3C275C:lI105|H3C2810
-3C2810:lI110|N
-3C2608:lH3C26C0|H3C26CC
-3C26C0:t2:H3C276C,H3C2774
-3C2774:lI97|H3C2828
-3C2828:lI112|H3C28DC
-3C28DC:lI112|H3C2998
-3C2998:lI108|H3C2A5C
-3C2A5C:lI105|H3C2B28
-3C2B28:lI99|H3C2BEC
-3C2BEC:lI97|H3C2CA0
-3C2CA0:lI116|H3C2D50
-3C2D50:lI105|H3C2DF8
-3C2DF8:lI111|H3C2E80
-3C2E80:lI110|H3C2EF8
-3C2EF8:lI47|H3C2F68
-3C2F68:lI111|H3C2FD0
-3C2FD0:lI99|H3C3038
-3C3038:lI116|H3C3098
-3C3098:lI101|H3C30F0
-3C30F0:lI116|H3C3140
-3C3140:lI45|H3C3188
-3C3188:lI115|H3C31D0
-3C31D0:lI116|H3C3218
-3C3218:lI114|H3C3260
-3C3260:lI101|H3C32A8
-3C32A8:lI97|H3C32E8
-3C32E8:lI109|N
-3C276C:lI100|H3C2820
-3C2820:lI109|H3C28D4
-3C28D4:lI115|N
-3C26CC:lH3C277C|H3C2788
-3C277C:t2:H3C2830,H3C2838
-3C2838:lI97|H3C28EC
-3C28EC:lI112|H3C29A8
-3C29A8:lI112|H3C2A64
-3C2A64:lI108|H3C2B30
-3C2B30:lI105|H3C2BF4
-3C2BF4:lI99|H3C2CA8
-3C2CA8:lI97|H3C2D58
-3C2D58:lI116|H3C2E00
-3C2E00:lI105|H3C2E88
-3C2E88:lI111|H3C2F00
-3C2F00:lI110|H3C2F70
-3C2F70:lI47|H3C2FD8
-3C2FD8:lI111|H3C3040
-3C3040:lI99|H3C30A0
-3C30A0:lI116|H3C30F8
-3C30F8:lI101|H3C3148
-3C3148:lI116|H3C3190
-3C3190:lI45|H3C31D8
-3C31D8:lI115|H3C3220
-3C3220:lI116|H3C3268
-3C3268:lI114|H3C32B0
-3C32B0:lI101|H3C32F0
-3C32F0:lI97|H3C3320
-3C3320:lI109|N
-3C2830:lI108|H3C28E4
-3C28E4:lI104|H3C29A0
-3C29A0:lI97|N
-3C2788:lH3C2840|H3C284C
-3C2840:t2:H3C28F4,H3C28FC
-3C28FC:lI97|H3C29B8
-3C29B8:lI112|H3C2A74
-3C2A74:lI112|H3C2B38
-3C2B38:lI108|H3C2BFC
-3C2BFC:lI105|H3C2CB0
-3C2CB0:lI99|H3C2D60
-3C2D60:lI97|H3C2E08
-3C2E08:lI116|H3C2E90
-3C2E90:lI105|H3C2F08
-3C2F08:lI111|H3C2F78
-3C2F78:lI110|H3C2FE0
-3C2FE0:lI47|H3C3048
-3C3048:lI111|H3C30A8
-3C30A8:lI99|H3C3100
-3C3100:lI116|H3C3150
-3C3150:lI101|H3C3198
-3C3198:lI116|H3C31E0
-3C31E0:lI45|H3C3228
-3C3228:lI115|H3C3270
-3C3270:lI116|H3C32B8
-3C32B8:lI114|H3C32F8
-3C32F8:lI101|H3C3328
-3C3328:lI97|H3C3350
-3C3350:lI109|N
-3C28F4:lI108|H3C29B0
-3C29B0:lI122|H3C2A6C
-3C2A6C:lI104|N
-3C284C:lH3C2904|H3C2910
-3C2904:t2:H3C29C0,H3C29C8
-3C29C8:lI97|H3C2A84
-3C2A84:lI112|H3C2B48
-3C2B48:lI112|H3C2C04
-3C2C04:lI108|H3C2CB8
-3C2CB8:lI105|H3C2D68
-3C2D68:lI99|H3C2E10
-3C2E10:lI97|H3C2E98
-3C2E98:lI116|H3C2F10
-3C2F10:lI105|H3C2F80
-3C2F80:lI111|H3C2FE8
-3C2FE8:lI110|H3C3050
-3C3050:lI47|H3C30B0
-3C30B0:lI111|H3C3108
-3C3108:lI99|H3C3158
-3C3158:lI116|H3C31A0
-3C31A0:lI101|H3C31E8
-3C31E8:lI116|H3C3230
-3C3230:lI45|H3C3278
-3C3278:lI115|H3C32C0
-3C32C0:lI116|H3C3300
-3C3300:lI114|H3C3330
-3C3330:lI101|H3C3358
-3C3358:lI97|H3C3378
-3C3378:lI109|N
-3C29C0:lI101|H3C2A7C
-3C2A7C:lI120|H3C2B40
-3C2B40:lI101|N
-3C2910:lH3C29D0|H3C29DC
-3C29D0:t2:H3C2A8C,H3C2A94
-3C2A94:lI97|H3C2B58
-3C2B58:lI112|H3C2C14
-3C2C14:lI112|H3C2CC8
-3C2CC8:lI108|H3C2D78
-3C2D78:lI105|H3C2E18
-3C2E18:lI99|H3C2EA0
-3C2EA0:lI97|H3C2F18
-3C2F18:lI116|H3C2F88
-3C2F88:lI105|H3C2FF0
-3C2FF0:lI111|H3C3058
-3C3058:lI110|H3C30B8
-3C30B8:lI47|H3C3110
-3C3110:lI111|H3C3160
-3C3160:lI99|H3C31A8
-3C31A8:lI116|H3C31F0
-3C31F0:lI101|H3C3238
-3C3238:lI116|H3C3280
-3C3280:lI45|H3C32C8
-3C32C8:lI115|H3C3308
-3C3308:lI116|H3C3338
-3C3338:lI114|H3C3360
-3C3360:lI101|H3C3380
-3C3380:lI97|H3C3398
-3C3398:lI109|N
-3C2A8C:lI99|H3C2B50
-3C2B50:lI108|H3C2C0C
-3C2C0C:lI97|H3C2CC0
-3C2CC0:lI115|H3C2D70
-3C2D70:lI115|N
-3C29DC:lH3C2A9C|H3C2AA8
-3C2A9C:t2:H3C2B60,H3C2B68
-3C2B68:lI97|H3C2C24
-3C2C24:lI112|H3C2CD8
-3C2CD8:lI112|H3C2D80
-3C2D80:lI108|H3C2E20
-3C2E20:lI105|H3C2EA8
-3C2EA8:lI99|H3C2F20
-3C2F20:lI97|H3C2F90
-3C2F90:lI116|H3C2FF8
-3C2FF8:lI105|H3C3060
-3C3060:lI111|H3C30C0
-3C30C0:lI110|H3C3118
-3C3118:lI47|H3C3168
-3C3168:lI109|H3C31B0
-3C31B0:lI115|H3C31F8
-3C31F8:lI119|H3C3240
-3C3240:lI111|H3C3288
-3C3288:lI114|H3C32D0
-3C32D0:lI100|N
-3C2B60:lI100|H3C2C1C
-3C2C1C:lI111|H3C2CD0
-3C2CD0:lI99|N
-3C2AA8:lH3C2B70|H3C2B7C
-3C2B70:t2:H3C2C2C,H3C2C34
-3C2C34:lI97|H3C2CE8
-3C2CE8:lI112|H3C2D90
-3C2D90:lI112|H3C2E28
-3C2E28:lI108|H3C2EB0
-3C2EB0:lI105|H3C2F28
-3C2F28:lI99|H3C2F98
-3C2F98:lI97|H3C3000
-3C3000:lI116|H3C3068
-3C3068:lI105|H3C30C8
-3C30C8:lI111|H3C3120
-3C3120:lI110|H3C3170
-3C3170:lI47|H3C31B8
-3C31B8:lI109|H3C3200
-3C3200:lI97|H3C3248
-3C3248:lI99|H3C3290
-3C3290:lI45|H3C32D8
-3C32D8:lI99|H3C3310
-3C3310:lI111|H3C3340
-3C3340:lI109|H3C3368
-3C3368:lI112|H3C3388
-3C3388:lI97|H3C33A0
-3C33A0:lI99|H3C33B0
-3C33B0:lI116|H3C33C0
-3C33C0:lI112|H3C33D0
-3C33D0:lI114|H3C33E0
-3C33E0:lI111|N
-3C2C2C:lI99|H3C2CE0
-3C2CE0:lI112|H3C2D88
-3C2D88:lI116|N
-3C2B7C:lH3C2C3C|N
-3C2C3C:t2:H3C2CF0,H3C2CF8
-3C2CF8:lI97|H3C2DA0
-3C2DA0:lI112|H3C2E38
-3C2E38:lI112|H3C2EB8
-3C2EB8:lI108|H3C2F30
-3C2F30:lI105|H3C2FA0
-3C2FA0:lI99|H3C3008
-3C3008:lI97|H3C3070
-3C3070:lI116|H3C30D0
-3C30D0:lI105|H3C3128
-3C3128:lI111|H3C3178
-3C3178:lI110|H3C31C0
-3C31C0:lI47|H3C3208
-3C3208:lI109|H3C3250
-3C3250:lI97|H3C3298
-3C3298:lI99|H3C32E0
-3C32E0:lI45|H3C3318
-3C3318:lI98|H3C3348
-3C3348:lI105|H3C3370
-3C3370:lI110|H3C3390
-3C3390:lI104|H3C33A8
-3C33A8:lI101|H3C33B8
-3C33B8:lI120|H3C33C8
-3C33C8:lI52|H3C33D8
-3C33D8:lI48|N
-3C2CF0:lI104|H3C2D98
-3C2D98:lI113|H3C2E30
-3C2E30:lI120|N
-3BDBCC:lH3BDA78|H3BDA8C
-3BDA78:t2:A4:port,I8888
-3BDA8C:lH3BDB04|H3BDB10
-3BDB04:t2:AC:bind_address,H3BDB64
-3BDB64:t4:I127,I0,I0,I1
-3BDB10:lH3BDB78|H3BDB84
-3BDB78:t2:AB:server_name,H3BDBD4
-3BDBD4:lI108|H3BDC24
-3BDC24:lI111|H3BDC88
-3BDC88:lI99|H3BDCF0
-3BDCF0:lI97|H3BDD70
-3BDD70:lI108|H3BDDF8
-3BDDF8:lI104|H3BDE90
-3BDE90:lI111|H3BDF40
-3BDF40:lI115|H3BDFFC
-3BDFFC:lI116|N
-3BDB84:lH3BDBDC|H3BDBE8
-3BDBDC:t2:AE:max_header_siz,I1024
-3BDBE8:lH3BDC2C|H3BDC38
-3BDC2C:t2:A11:max_header_action,A8:reply414
-3BDC38:lH3BDC90|H3BDC9C
-3BDC90:t2:A8:com_type,A7:ip_comm
-3BDC9C:lH3BDCF8|H3BDD04
-3BDCF8:t2:A7:modules,H3BDD78
-3BDD78:lA9:mod_alias|H3BDE00
-3BDE00:lA8:mod_auth|H3BDE98
-3BDE98:lA7:mod_esi|H3BDF48
-3BDF48:lAB:mod_actions|H3BE004
-3BE004:lA7:mod_cgi|H3BE0D0
-3BE0D0:lAB:mod_include|H3BE1A4
-3BE1A4:lA7:mod_dir|H3BE288
-3BE288:lA7:mod_get|H3BE378
-3BE378:lA8:mod_head|H3BE47C
-3BE47C:lA7:mod_log|H3BE580
-3BE580:lAC:mod_disk_log|N
-3BDD04:lH3BDD80|H3BDD8C
-3BDD80:t2:AF:directory_index,H3BDE08
-3BDE08:lH3BDEA0|N
-3BDEA0:lI105|H3BDF50
-3BDF50:lI110|H3BE00C
-3BE00C:lI100|H3BE0D8
-3BE0D8:lI101|H3BE1AC
-3BE1AC:lI120|H3BE290
-3BE290:lI46|H3BE380
-3BE380:lI104|H3BE484
-3BE484:lI116|H3BE588
-3BE588:lI109|H3BE68C
-3BE68C:lI108|N
-3BDD8C:lH3BDE10|H3BDE1C
-3BDE10:t2:AC:default_type,H3BDEA8
-3BDEA8:lI116|H3BDF58
-3BDF58:lI101|H3BE014
-3BE014:lI120|H3BE0E0
-3BE0E0:lI116|H3BE1B4
-3BE1B4:lI47|H3BE298
-3BE298:lI112|H3BE388
-3BE388:lI108|H3BE48C
-3BE48C:lI97|H3BE590
-3BE590:lI105|H3BE694
-3BE694:lI110|N
-3BDE1C:lH3BDEB0|H3BDEBC
-3BDEB0:t2:A10:erl_script_alias,H3BDF60
-3BDF60:t2:H3BE01C,H3BE024
-3BE024:lH3BE0F0|N
-3BE0F0:lI119|H3BE1C4
-3BE1C4:lI101|H3BE2A8
-3BE2A8:lI98|H3BE398
-3BE398:lI116|H3BE49C
-3BE49C:lI111|H3BE5A0
-3BE5A0:lI111|H3BE6A4
-3BE6A4:lI108|N
-3BE01C:lI47|H3BE0E8
-3BE0E8:lI119|H3BE1BC
-3BE1BC:lI101|H3BE2A0
-3BE2A0:lI98|H3BE390
-3BE390:lI116|H3BE494
-3BE494:lI111|H3BE598
-3BE598:lI111|H3BE69C
-3BE69C:lI108|N
-3BDEBC:lH3BDF6C|H3BDF78
-3BDF6C:t2:A5:alias,H3BE02C
-3BE02C:t2:H3BE0F8,H3BE100
-3BE100:lI47|H3BE1D4
-3BE1D4:lI99|H3BE2B8
-3BE2B8:lI108|H3BE3A8
-3BE3A8:lI101|H3BE4AC
-3BE4AC:lI97|H3BE5B0
-3BE5B0:lI114|H3BE6B4
-3BE6B4:lI99|H3BE7A8
-3BE7A8:lI97|H3BE894
-3BE894:lI115|H3BE980
-3BE980:lI101|H3BEA74
-3BEA74:lI47|H3BEB68
-3BEB68:lI111|H3BEC54
-3BEC54:lI116|H3BED40
-3BED40:lI112|H3BEE2C
-3BEE2C:lI47|H3BEF00
-3BEF00:lI101|H3BEFD4
-3BEFD4:lI114|H3BF0A0
-3BF0A0:lI116|H3BF174
-3BF174:lI115|H3BF238
-3BF238:lI47|H3BF2FC
-3BF2FC:lI108|H3BF3A8
-3BF3A8:lI105|H3BF45C
-3BF45C:lI98|H3BF518
-3BF518:lI47|H3BF5DC
-3BF5DC:lI111|H3BF6B0
-3BF6B0:lI98|H3BF784
-3BF784:lI115|H3BF858
-3BF858:lI101|H3BF93C
-3BF93C:lI114|H3BFA18
-3BFA18:lI118|H3BFAF4
-3BFAF4:lI101|H3BFBD0
-3BFBD0:lI114|H3BFC9C
-3BFC9C:lI47|H3BFD60
-3BFD60:lI112|H3BFE2C
-3BFE2C:lI114|H3BFEE0
-3BFEE0:lI105|H3BFF94
-3BFF94:lI118|H3C0040
-3C0040:lI47|H3C00EC
-3C00EC:lI99|H3C0198
-3C0198:lI114|H3C024C
-3C024C:lI97|H3C0308
-3C0308:lI115|H3C03BC
-3C03BC:lI104|H3C0458
-3C0458:lI100|H3C04F4
-3C04F4:lI117|H3C0590
-3C0590:lI109|H3C0634
-3C0634:lI112|H3C06E0
-3C06E0:lI95|H3C078C
-3C078C:lI118|H3C0830
-3C0830:lI105|H3C08BC
-3C08BC:lI101|H3C0950
-3C0950:lI119|H3C09E4
-3C09E4:lI101|H3C0A80
-3C0A80:lI114|N
-3BE0F8:lI47|H3BE1CC
-3BE1CC:lI99|H3BE2B0
-3BE2B0:lI114|H3BE3A0
-3BE3A0:lI97|H3BE4A4
-3BE4A4:lI115|H3BE5A8
-3BE5A8:lI104|H3BE6AC
-3BE6AC:lI100|H3BE7A0
-3BE7A0:lI117|H3BE88C
-3BE88C:lI109|H3BE978
-3BE978:lI112|H3BEA6C
-3BEA6C:lI95|H3BEB60
-3BEB60:lI118|H3BEC4C
-3BEC4C:lI105|H3BED38
-3BED38:lI101|H3BEE24
-3BEE24:lI119|H3BEEF8
-3BEEF8:lI101|H3BEFCC
-3BEFCC:lI114|N
-3BDF78:lH3BE038|H3BE044
-3BE038:t2:A5:alias,H3BE108
-3BE108:t2:H3BE1DC,H3BE1E4
-3BE1E4:lI47|H3BE2C8
-3BE2C8:lI99|H3BE3B8
-3BE3B8:lI108|H3BE4BC
-3BE4BC:lI101|H3BE5C0
-3BE5C0:lI97|H3BE6C4
-3BE6C4:lI114|H3BE7B8
-3BE7B8:lI99|H3BE8A4
-3BE8A4:lI97|H3BE990
-3BE990:lI115|H3BEA84
-3BEA84:lI101|H3BEB78
-3BEB78:lI47|H3BEC64
-3BEC64:lI111|H3BED50
-3BED50:lI116|H3BEE3C
-3BEE3C:lI112|H3BEF10
-3BEF10:lI47|H3BEFE4
-3BEFE4:lI101|H3BF0B0
-3BF0B0:lI114|H3BF184
-3BF184:lI116|H3BF248
-3BF248:lI115|H3BF304
-3BF304:lI47|H3BF3B0
-3BF3B0:lI101|H3BF464
-3BF464:lI114|H3BF520
-3BF520:lI116|H3BF5E4
-3BF5E4:lI115|H3BF6B8
-3BF6B8:lI47|H3BF78C
-3BF78C:lI100|H3BF860
-3BF860:lI111|H3BF944
-3BF944:lI99|H3BFA20
-3BFA20:lI47|H3BFAFC
-3BFAFC:lI104|H3BFBD8
-3BFBD8:lI116|H3BFCA4
-3BFCA4:lI109|H3BFD68
-3BFD68:lI108|N
-3BE1DC:lI47|H3BE2C0
-3BE2C0:lI99|H3BE3B0
-3BE3B0:lI114|H3BE4B4
-3BE4B4:lI97|H3BE5B8
-3BE5B8:lI115|H3BE6BC
-3BE6BC:lI104|H3BE7B0
-3BE7B0:lI100|H3BE89C
-3BE89C:lI117|H3BE988
-3BE988:lI109|H3BEA7C
-3BEA7C:lI112|H3BEB70
-3BEB70:lI95|H3BEC5C
-3BEC5C:lI101|H3BED48
-3BED48:lI114|H3BEE34
-3BEE34:lI116|H3BEF08
-3BEF08:lI115|H3BEFDC
-3BEFDC:lI95|H3BF0A8
-3BF0A8:lI100|H3BF17C
-3BF17C:lI111|H3BF240
-3BF240:lI99|N
-3BE044:lH3BE114|H3BE120
-3BE114:t2:A5:alias,H3BE1EC
-3BE1EC:t2:H3BE2D0,H3BE2D8
-3BE2D8:lI47|H3BE3C8
-3BE3C8:lI99|H3BE4CC
-3BE4CC:lI108|H3BE5D0
-3BE5D0:lI101|H3BE6D4
-3BE6D4:lI97|H3BE7C8
-3BE7C8:lI114|H3BE8B4
-3BE8B4:lI99|H3BE9A0
-3BE9A0:lI97|H3BEA94
-3BEA94:lI115|H3BEB88
-3BEB88:lI101|H3BEC74
-3BEC74:lI47|H3BED60
-3BED60:lI111|H3BEE4C
-3BEE4C:lI116|H3BEF20
-3BEF20:lI112|H3BEFEC
-3BEFEC:lI47|H3BF0B8
-3BF0B8:lI101|H3BF18C
-3BF18C:lI114|H3BF250
-3BF250:lI116|H3BF30C
-3BF30C:lI115|H3BF3B8
-3BF3B8:lI47|H3BF46C
-3BF46C:lI108|H3BF528
-3BF528:lI105|H3BF5EC
-3BF5EC:lI98|H3BF6C0
-3BF6C0:lI47|H3BF794
-3BF794:lI111|H3BF868
-3BF868:lI98|H3BF94C
-3BF94C:lI115|H3BFA28
-3BFA28:lI101|H3BFB04
-3BFB04:lI114|H3BFBE0
-3BFBE0:lI118|H3BFCAC
-3BFCAC:lI101|H3BFD70
-3BFD70:lI114|H3BFE34
-3BFE34:lI47|H3BFEE8
-3BFEE8:lI100|H3BFF9C
-3BFF9C:lI111|H3C0048
-3C0048:lI99|H3C00F4
-3C00F4:lI47|H3C01A0
-3C01A0:lI104|H3C0254
-3C0254:lI116|H3C0310
-3C0310:lI109|H3C03C4
-3C03C4:lI108|N
-3BE2D0:lI47|H3BE3C0
-3BE3C0:lI99|H3BE4C4
-3BE4C4:lI114|H3BE5C8
-3BE5C8:lI97|H3BE6CC
-3BE6CC:lI115|H3BE7C0
-3BE7C0:lI104|H3BE8AC
-3BE8AC:lI100|H3BE998
-3BE998:lI117|H3BEA8C
-3BEA8C:lI109|H3BEB80
-3BEB80:lI112|H3BEC6C
-3BEC6C:lI95|H3BED58
-3BED58:lI100|H3BEE44
-3BEE44:lI111|H3BEF18
-3BEF18:lI99|N
-3BE120:lH3BE1F8|N
-3BE1F8:t2:A10:erl_script_alias,H3BE2E0
-3BE2E0:t2:H3BE3D0,H3BE3D8
-3BE3D8:lH3BE4DC|N
-3BE4DC:lI99|H3BE5E0
-3BE5E0:lI114|H3BE6E4
-3BE6E4:lI97|H3BE7D8
-3BE7D8:lI115|H3BE8C4
-3BE8C4:lI104|H3BE9B0
-3BE9B0:lI100|H3BEAA4
-3BEAA4:lI117|H3BEB90
-3BEB90:lI109|H3BEC7C
-3BEC7C:lI112|H3BED68
-3BED68:lI95|H3BEE54
-3BEE54:lI118|H3BEF28
-3BEF28:lI105|H3BEFF4
-3BEFF4:lI101|H3BF0C0
-3BF0C0:lI119|H3BF194
-3BF194:lI101|H3BF258
-3BF258:lI114|N
-3BE3D0:lI47|H3BE4D4
-3BE4D4:lI99|H3BE5D8
-3BE5D8:lI100|H3BE6DC
-3BE6DC:lI118|H3BE7D0
-3BE7D0:lI95|H3BE8BC
-3BE8BC:lI101|H3BE9A8
-3BE9A8:lI114|H3BEA9C
-3BEA9C:lI108|N
-3BDE2C:lH3BDA9C|H3BDECC
-3BDA9C:t4:I127,I0,I0,I1
-3BDECC:lI8888|H3BDF88
-3BDF88:lN|N
-3BDD1C:lN|N
-3BDA50:t2:AD:$initial_call,H3BDAB8
-3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
-3BDA5C:t2:A9:verbosity,A7:silence
-3BDAC8:t2:AE:auth_verbosity,A7:silence
-3BDB28:t2:A12:security_verbosity,A7:silence
-3BDB9C:t2:A12:acceptor_verbosity,A7:silence
-3BDC00:t2:AA:$ancestors,H3BDC5C
-3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
-3BDCB4:lA8:web_tool|H3BDD24
-3BDD24:lP<0.27.0>|N
-3BDADC:t2:A19:request_handler_verbosity,A7:silence
-3BDB3C:t2:A5:sname,A3:man
-=proc_dictionary:<0.47.0>
-H36E688
-H36E694
-H36E6A0
-H36E6AC
-=proc_stack:<0.47.0>
-36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
-y0:I5
-y1:p<0.161>
-y2:p<0.141>
-36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
-y0:N
-36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y0:N
-36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y1:P<0.46.0>
-y2:A7:ip_comm
-y3:p<0.141>
-y4:A1B:httpd_conf__127_0_0_1__8888
-36c558:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:AE:httpd_acceptor
-y2:A8:acceptor
-y3:H36E6C8
-=proc_heap:<0.47.0>
-36E6C8:lP<0.44.0>|H36E724
-36E724:lP<0.46.0>|H36E748
-36E748:lA7:ip_comm|H36E760
-36E760:lH36E6D0|H36E778
-36E6D0:t4:I127,I0,I0,I1
-36E778:lI8888|H36E788
-36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
-36E798:lA7:silence|N
-36E688:t2:AD:$initial_call,H36E6F0
-36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
-36E694:t2:A9:verbosity,A7:silence
-36E6A0:t2:AA:$ancestors,H36E700
-36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
-36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
-36E750:lA8:web_tool|H36E768
-36E768:lP<0.27.0>|N
-36E6AC:t2:A5:sname,A3:acc
-=proc_dictionary:<0.48.0>
-H385E48
-H385E54
-=proc_stack:<0.48.0>
-3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A10:crashdump_viewer
-y3:H3AB280
-y4:A17:crashdump_viewer_server
-y5:P<0.41.0>
-3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H385E90
-=proc_heap:<0.48.0>
-3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
-385E90:lAA:gen_server|H385ED8
-385ED8:lP<0.41.0>|H385F10
-385F10:lP<0.41.0>|H385F58
-385F58:lH385FA8|H385FB4
-385FA8:t2:A5:local,A17:crashdump_viewer_server
-385FB4:lA10:crashdump_viewer|H386014
-386014:lN|H38606C
-38606C:lN|N
-385E48:t2:AD:$initial_call,H385EB0
-385EB0:t3:A3:gen,A7:init_it,H385E90
-385E54:t2:AA:$ancestors,H385EC0
-385EC0:lA6:websup|H385F08
-385F08:lA8:web_tool|H385F50
-385F50:lP<0.27.0>|N
-=proc_stack:<0.49.0>
-36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
-y0:H369E10
-y1:P<0.22.0>
-36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
-y0:N
-36a128:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.49.0>
-369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
-=atoms
-http_cache_control
-copy_word
-drop_line
-copy_line
-write_rest_of_line
-drop_to_empty_line
-read_to_empty_line_reverse
-set_pos
-read_line_backwards
-jumped
-jump_to_empty_line_or_eof
-get_pos
-translate_atoms
-translate_fun
-translate_funs
-translate_loaded_modules2
-translate_loaded_modules_totals
-translate_loaded_modules
-translate_links
-get_all_creations
-translate_node_info2
-translate_node_info
-translate_dist_info2
-translate_dist_info
-get_msg
-translate_timers
-translate_ets
-translate_ets_tables
-do_translate_sl_alloc_r7_r8
-translate_sl_alloc_r7_r8
-translate_sl_alloc_line
-do_translate_sl_alloc
-translate_sl_alloc
-translate_memory_and_allocated_area_r9b
-translate_allocated_areas
-translate_internal_table_line
-translate_index_table
-translate_hash_table
-translate_internal_tables
-translate_ports
-write_last_calls
-write_msg_q_stuff
-translate_process
-translate_processes
-erts_vsn
-translate_summary
-'Send'
-erl_crash_dump
-internal_tables
-mods
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms
deleted file mode 100644
index 9f20ef3e44..0000000000
--- a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms
+++ /dev/null
@@ -1,13035 +0,0 @@
-=erl_crash_dump:0.1
-Wed Apr 21 13:22:44 2004
-Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
-System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
-Compiled: Thu Dec 18 14:07:45 2003
-Atoms: 5614
-=memory
-total: 653336887
-processes: 1768396
-processes_used: 1765460
-system: 651568491
-atom: 244837
-atom_used: 237116
-binary: 648618369
-code: 2158413
-ets: 225620
-=hash_table:atom_tab
-size: 4813
-used: 3304
-objs: 5614
-depth: 7
-=index_table:atom_tab
-size: 5700
-limit: 1048576
-used: 5614
-rate: 100
-=hash_table:module_code
-size: 97
-used: 69
-objs: 107
-depth: 5
-=index_table:module_code
-size: 110
-limit: 65536
-used: 107
-rate: 10
-=hash_table:export_list
-size: 2411
-used: 1674
-objs: 2843
-depth: 6
-=index_table:export_list
-size: 2900
-limit: 65536
-used: 2843
-rate: 100
-=hash_table:process_reg
-size: 47
-used: 16
-objs: 23
-depth: 3
-=hash_table:fun_table
-size: 397
-used: 261
-objs: 400
-depth: 4
-=hash_table:node_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=hash_table:dist_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=allocated_areas
-processes: 1765460 1768396
-ets: 225620
-sys_misc: 24634
-static: 295033
-atom_space: 65544 57967
-binary: 648618369
-atom_table: 42141
-module_table: 920
-export_table: 21336
-register_table: 252
-fun_table: 1650
-module_refs: 1024
-loaded_code: 1968915
-dist_table: 159
-node_table: 131
-bits_bufs_size: 19
-bif_timer: 13392
-link_lh: 0
-dist_buf: 0
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:sys_alloc
-option e: true
-option m: libc
-=allocator:temp_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 90
-option rsbcmt: 80
-option mmbcs: 65536
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: af
-mbcs blocks: 0 9 9
-mbcs blocks size: 0 35376 35376
-mbcs carriers: 1 1 1
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 65568 65568 65568
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 65568
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-temp_alloc calls: 6155
-temp_free calls: 6155
-temp_realloc calls: 29
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 1
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:sl_alloc
-option e: false
-=allocator:std_alloc
-option e: false
-=allocator:ll_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 4294967295
-option asbcst: 0
-option rsbcst: 0
-option rsbcmt: 0
-option mmbcs: 2097152
-option mmsbc: 0
-option mmmbc: 0
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: aobf
-mbcs blocks: 592 592 592
-mbcs blocks size: 2838520 2863304 2863304
-mbcs carriers: 2 2 2
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 2
-mbcs carriers size: 3145760 3145760 3145760
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 3145760
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-ll_alloc calls: 592
-ll_free calls: 0
-ll_realloc calls: 235
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 2
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:eheap_alloc
-versions: 2.1 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 50
-option rsbcmt: 80
-option mmbcs: 524288
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option mbsd: 3
-option as: gf
-mbcs blocks: 56 102 102
-mbcs blocks size: 833280 1638920 1638920
-mbcs carriers: 2 3 3
-mbcs mseg carriers: 1
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 1998880 3047456 3047456
-mbcs mseg carriers size: 1474560
-mbcs sys_alloc carriers size: 524320
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-eheap_alloc calls: 6971
-eheap_free calls: 6914
-eheap_realloc calls: 461
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-sys_alloc calls: 3
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:binary_alloc
-option e: false
-=allocator:ets_alloc
-option e: false
-=allocator:fix_alloc
-option e: true
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:mseg_alloc
-version: 0.9
-option amcbf: 4194304
-option rmcbf: 20
-option mcs: 5
-option cci: 1000
-cached_segments: 0
-cache_hits: 13
-segments: 2
-segments_watermark: 2
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-mseg_create calls: 4
-mseg_destroy calls: 1
-mseg_clear_cache calls: 6
-mseg_check_cache calls: 2
-=allocator:alloc_util
-option mmc: 1024
-option ycs: 1048576
-=allocator:instr
-option m: false
-option s: false
-option t: false
-=proc:<0.0.0>
-State: Waiting
-Name: init
-Spawned as: otp_ring0:start/2
-Spawned by: []
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
-Reductions: 3851
-Stack+heap: 377
-OldHeap: 610
-Heap unused: 53
-OldHeap unused: 610
-Program counter: 0x1f496c (init:loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.2.0>
-State: Waiting
-Name: erl_prim_loader
-Spawned as: erlang:apply/2
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.0.0>,#Port<0.2>]
-Reductions: 201036
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 923
-OldHeap unused: 987
-Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.4.0>
-State: Waiting
-Name: error_logger
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.0.0>]
-Reductions: 296
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 851
-OldHeap unused: 0
-Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.5.0>
-State: Waiting
-Name: application_controller
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.7.0>,<0.0.0>]
-Reductions: 1508
-Stack+heap: 1597
-OldHeap: 0
-Heap unused: 835
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.7.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.6.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.8.0>,<0.5.0>]
-Reductions: 23
-Stack+heap: 377
-OldHeap: 0
-Heap unused: 79
-OldHeap unused: 0
-Program counter: 0x248d04 (application_master:main_loop/2 + 28)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.8.0>
-State: Waiting
-Spawned as: application_master:start_it/4
-Spawned by: <0.7.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>,<0.7.0>]
-Reductions: 91
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 177
-OldHeap unused: 0
-Program counter: 0x24a26c (application_master:loop_it/4 + 40)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.9.0>
-State: Waiting
-Name: kernel_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.8.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
-Reductions: 7402
-Stack+heap: 610
-OldHeap: 987
-Heap unused: 311
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.10.0>
-State: Waiting
-Name: rex
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 44
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 144
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.11.0>
-State: Waiting
-Name: global_name_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
-Reductions: 47
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 98
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.12.0>
-State: Waiting
-Spawned as: global:init_the_locker/1
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 3
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 227
-OldHeap unused: 0
-Program counter: 0x261340 (global:loop_the_locker/2 + 92)
-CP: 0x261184 (global:init_the_locker/1 + 112)
-arity = 0
-=proc:<0.13.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 4
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 221
-OldHeap unused: 0
-Program counter: 0x265288 (global:collect_deletions/2 + 76)
-CP: 0x2651ac (global:loop_the_deleter/1 + 36)
-arity = 0
-=proc:<0.14.0>
-State: Waiting
-Name: inet_db
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 376
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 30
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.15.0>
-State: Waiting
-Name: global_group
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 71
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 92
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.16.0>
-State: Waiting
-Name: file_server_2
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 119
-Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
-Reductions: 83605
-Stack+heap: 4181
-OldHeap: 4181
-Heap unused: 1720
-OldHeap unused: 4181
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.17.0>
-State: Waiting
-Name: file_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
-Reductions: 12
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 207
-OldHeap unused: 0
-Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.18.0>
-State: Waiting
-Name: code_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 108900
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 4389
-OldHeap unused: 6765
-Program counter: 0x2a6e64 (code_server:loop/1 + 64)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.19.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.9.0>]
-Reductions: 74
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 180
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.20.0>
-State: Waiting
-Spawned as: user_drv:server/2
-Spawned by: <0.19.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
-Reductions: 596
-Stack+heap: 233
-OldHeap: 377
-Heap unused: 214
-OldHeap unused: 377
-Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.21.0>
-State: Waiting
-Name: user
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
-Reductions: 26
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 202
-OldHeap unused: 0
-Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.22.0>
-State: Waiting
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
-Reductions: 1244
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 40
-OldHeap unused: 233
-Program counter: 0x2cf238 (group:get_line1/3 + 1652)
-CP: 0x2cf230 (group:get_line1/3 + 1644)
-arity = 0
-=proc:<0.23.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 45
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 63
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.24.0>
-State: Waiting
-Name: kernel_safe_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.31.0>,<0.9.0>]
-Reductions: 133
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 198
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.25.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.22.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
-Reductions: 161
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 169
-OldHeap unused: 0
-Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
-CP: 0x2e06fc (shell:server_loop/6 + 140)
-arity = 0
-=proc:<0.27.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.25.0>]
-Reductions: 506
-Stack+heap: 4181
-OldHeap: 0
-Heap unused: 1131
-OldHeap unused: 0
-Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.31.0>
-State: Waiting
-Name: inet_gethost_native_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.24.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.32.0>,<0.24.0>]
-Reductions: 49
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 87
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.32.0>
-State: Waiting
-Name: inet_gethost_native
-Spawned as: inet_gethost_native:server_init/2
-Spawned by: <0.31.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 118
-Link list: [#Port<0.105>,<0.31.0>]
-Reductions: 65
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 13
-OldHeap unused: 0
-Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.33.0>
-State: Waiting
-Name: web_tool
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.27.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.41.0>]
-Reductions: 131773
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 2941
-OldHeap unused: 6765
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.41.0>
-State: Waiting
-Name: websup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.48.0>,<0.33.0>]
-Reductions: 118
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 205
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.43.0>
-State: Waiting
-Name: httpd_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
-Reductions: 1220
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 277
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.44.0>
-State: Waiting
-Name: httpd_acc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.47.0>,<0.43.0>]
-Reductions: 147
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 77
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.45.0>
-State: Waiting
-Name: httpd_misc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 52
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 80
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.46.0>
-State: Waiting
-Name: httpd__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 2905
-Stack+heap: 6765
-OldHeap: 10946
-Heap unused: 138
-OldHeap unused: 10946
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.47.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.44.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
-Reductions: 874
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 190
-OldHeap unused: 233
-Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
-CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
-arity = 0
-=proc:<0.48.0>
-State: Waiting
-Name: crashdump_viewer_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.41.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.56.0>,<0.41.0>]
-Reductions: 1913
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 524
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.49.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
-Reductions: 15
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 190
-OldHeap unused: 0
-Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
-CP: 0x30174c (io:parse_erl_exprs/3 + 92)
-arity = 0
-=proc:<0.56.0>
-State: Garbing
-Spawned as: erlang:apply/2
-Last scheduled in for: erlang:garbage_collect/0
-Spawned by: <0.48.0>
-Started: Wed Apr 21 13:22:27 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 121
-Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
-Reductions: 2420470
-Stack+heap: 121393
-OldHeap: 0
-Heap unused: 22172
-OldHeap unused: 0
-New heap start: FE5768E0
-New heap top: FE5D7734
-Stack top: FE5ED130
-Stack end: FE5ED1A4
-Old heap start: 0
-Old heap top: 0
-Old heap end: 0
-Program counter: 0x1a4980 (unknown function)
-CP: 0x20710c (prim_file:read/2 + 436)
-=port:#Port<0.1>
-Slot: 1
-Connected: #Port<0.0>
-Port controls linked-in driver: async
-=port:#Port<0.2>
-Slot: 2
-Connected: <0.2.0>
-Links: <0.2.0>
-Port controls linked-in driver: efile
-=port:#Port<0.4>
-Slot: 4
-Connected: <0.16.0>
-Links: <0.16.0>
-Port controls linked-in driver: efile
-=port:#Port<0.72>
-Slot: 72
-Connected: <0.20.0>
-Links: <0.20.0>
-Port controls linked-in driver: tty_sl -c -e
-=port:#Port<0.105>
-Slot: 105
-Connected: <0.32.0>
-Links: <0.32.0>
-Port controls external process: inet_gethost 4
-=port:#Port<0.141>
-Slot: 141
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=port:#Port<0.157>
-Slot: 157
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.158>
-Slot: 158
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.161>
-Slot: 161
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=ets:<0.18.0>
-Slot: 9
-Table: 9
-Name: code
-Buckets: 256
-Objects: 289
-Words: 14108
-=ets:<0.18.0>
-Slot: 10
-Table: 10
-Name: code_names
-Buckets: 256
-Objects: 47
-Words: 4334
-=ets:<0.32.0>
-Slot: 11
-Table: 11
-Name: ign_requests
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.32.0>
-Slot: 12
-Table: 12
-Name: ign_req_index
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.33.0>
-Slot: 13
-Table: 13
-Name: app_data
-Buckets: 256
-Objects: 7
-Words: 952
-=ets:<0.46.0>
-Slot: 15
-Table: 15
-Name: httpd_mime__127_0_0_1__8888
-Buckets: 256
-Objects: 105
-Words: 5742
-=ets:<0.11.0>
-Slot: 84
-Table: global_names
-Name: global_names
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 95
-Table: global_locks
-Name: global_locks
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 96
-Table: global_names_ext
-Name: global_names_ext
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.14.0>
-Slot: 316
-Table: inet_cache
-Name: inet_cache
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 340
-Table: cdv_menu_table
-Name: cdv_menu_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 341
-Table: cdv_dump_index_table
-Name: cdv_dump_index_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 342
-Table: cdv_decode_heap_table
-Name: cdv_decode_heap_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.16.0>
-Slot: 780
-Table: file_io_servers
-Name: file_io_servers
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.46.0>
-Slot: 984
-Table: httpd_conf__127_0_0_1__8888
-Name: httpd_conf__127_0_0_1__8888
-Buckets: 256
-Objects: 17
-Words: 1176
-=ets:<0.14.0>
-Slot: 1342
-Table: inet_hosts
-Name: inet_hosts
-Buckets: 256
-Objects: 4
-Words: 421
-=ets:<0.14.0>
-Slot: 1362
-Table: inet_db
-Name: inet_db
-Buckets: 256
-Objects: 20
-Words: 671
-=ets:<0.5.0>
-Slot: 1655
-Table: ac_tab
-Name: ac_tab
-Buckets: 256
-Objects: 6
-Words: 843
-=timer:<0.14.0>
-Message: refresh_timeout
-Time left: 3565692 ms
-=node:'nonode@nohost'
-=no_distribution
-=loaded_modules
-Current code: 1968915
-Old code: 0
-=mod:otp_ring0
-Current size: 489
-=mod:init
-Current size: 30110
-=mod:prim_inet
-Current size: 35532
-=mod:prim_file
-Current size: 24965
-=mod:erl_prim_loader
-Current size: 19607
-=mod:erlang
-Current size: 11137
-=mod:error_handler
-Current size: 2389
-Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
-=mod:heart
-Current size: 6687
-Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
-=mod:error_logger
-Current size: 7051
-Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
-=mod:gen_event
-Current size: 18288
-Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
-=mod:gen
-Current size: 7129
-Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
-=mod:proc_lib
-Current size: 11658
-Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
-=mod:application_controller
-Current size: 55249
-Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
-=mod:gen_server
-Current size: 18728
-Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
-=mod:sys
-Current size: 11589
-Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
-=mod:lists
-Current size: 18638
-Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
-=mod:application
-Current size: 2666
-Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
-=mod:application_master
-Current size: 10912
-Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
-=mod:kernel
-Current size: 7639
-Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
-=mod:supervisor
-Current size: 24469
-Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
-=mod:rpc
-Current size: 14539
-Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
-=mod:gb_trees
-Current size: 8274
-Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
-=mod:global
-Current size: 40753
-Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
-=mod:inet_db
-Current size: 34555
-Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
-=mod:inet_config
-Current size: 13575
-Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
-=mod:os
-Current size: 5997
-Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
-=mod:inet_udp
-Current size: 2451
-Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
-=mod:inet
-Current size: 28288
-Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
-=mod:inet_parse
-Current size: 21928
-Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
-=mod:filename
-Current size: 17411
-Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
-=mod:inet_hosts
-Current size: 3745
-Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
-=mod:erl_distribution
-Current size: 2512
-Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
-=mod:global_group
-Current size: 30960
-Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
-=mod:net_kernel
-Current size: 37648
-Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
-=mod:file_server
-Current size: 8372
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
-=mod:old_file_server
-Current size: 3074
-Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
-=mod:code
-Current size: 7419
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
-=mod:code_server
-Current size: 30811
-Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
-=mod:code_aux
-Current size: 1736
-Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
-=mod:packages
-Current size: 3119
-Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
-=mod:hipe_unified_loader
-Current size: 37330
-Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
-=mod:hipe_sparc_loader
-Current size: 1821
-Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
-=mod:ets
-Current size: 16577
-Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
-=mod:lists_sort
-Current size: 38692
-Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
-=mod:user_sup
-Current size: 2355
-Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
-=mod:supervisor_bridge
-Current size: 2944
-Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
-=mod:user_drv
-Current size: 14630
-Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
-=mod:group
-Current size: 10165
-Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
-=mod:io_lib
-Current size: 12601
-Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
-=mod:edlin
-Current size: 18178
-Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
-=mod:io_lib_format
-Current size: 16189
-Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
-=mod:kernel_config
-Current size: 3295
-Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
-=mod:shell
-Current size: 22571
-Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
-=mod:error_logger_tty_h
-Current size: 7773
-Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
-=mod:erl_eval
-Current size: 33481
-Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
-=mod:orddict
-Current size: 4872
-Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
-=mod:c
-Current size: 19555
-Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
-=mod:io
-Current size: 7417
-Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
-=mod:file
-Current size: 20795
-Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
-=mod:file_io_server
-Current size: 12071
-Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
-=mod:erl_scan
-Current size: 21891
-Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
-=mod:erl_parse
-Current size: 161233
-Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
-=mod:erl_lint
-Current size: 73159
-Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
-=mod:ordsets
-Current size: 3257
-Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
-=mod:dict
-Current size: 15637
-Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
-=mod:otp_internal
-Current size: 7133
-Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
-=mod:user_default
-Current size: 1261
-Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
-=mod:tt
-Current size: 2959
-Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
-=mod:distel
-Current size: 18214
-Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
-Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
-=mod:crashdump_viewer
-Current size: 125756
-Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
-=mod:webtool
-Current size: 29229
-Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
-=mod:gen_tcp
-Current size: 3574
-Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
-=mod:inet_tcp
-Current size: 2743
-Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
-=mod:inet_gethost_native
-Current size: 15611
-Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
-=mod:filelib
-Current size: 7202
-Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
-=mod:httpd_util
-Current size: 24068
-Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
-=mod:webtool_sup
-Current size: 695
-Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
-=mod:httpd_conf
-Current size: 33659
-Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
-=mod:regexp
-Current size: 13698
-Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
-=mod:string
-Current size: 7740
-Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
-=mod:httpd
-Current size: 7563
-Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
-=mod:httpd_sup
-Current size: 4068
-Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
-=mod:httpd_acceptor_sup
-Current size: 2161
-Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
-=mod:httpd_verbosity
-Current size: 2672
-Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
-=mod:timer
-Current size: 8223
-Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
-=mod:httpd_misc_sup
-Current size: 2066
-Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
-=mod:httpd_manager
-Current size: 28916
-Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
-=mod:mod_alias
-Current size: 6720
-Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
-=mod:mod_auth
-Current size: 25168
-Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
-=mod:mod_esi
-Current size: 22534
-Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
-=mod:mod_actions
-Current size: 3625
-Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
-=mod:mod_cgi
-Current size: 25891
-Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
-=mod:mod_include
-Current size: 34923
-Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
-=mod:mod_dir
-Current size: 13488
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
-=mod:mod_get
-Current size: 4672
-Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
-=mod:mod_head
-Current size: 3074
-Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
-=mod:mod_log
-Current size: 8546
-Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
-=mod:mod_disk_log
-Current size: 15160
-Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
-=mod:httpd_socket
-Current size: 7426
-Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
-=mod:httpd_acceptor
-Current size: 4472
-Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
-=mod:io_lib_pretty
-Current size: 8171
-Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
-=mod:httpd_request_handler
-Current size: 26393
-Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
-=mod:calendar
-Current size: 7158
-Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
-=mod:httpd_parse
-Current size: 9977
-Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
-=mod:httpd_response
-Current size: 13535
-Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
-=mod:crashdump_viewer_html
-Current size: 68343
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
-=mod:crashdump_translate
-Current size: 89840
-Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
-=fun
-Module: crashdump_viewer_html
-Uniq: 9122590
-Index: 0
-Address: 526308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 77168418
-Index: 14
-Address: 26541c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 88083515
-Index: 9
-Address: 284c30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 36747896
-Index: 4
-Address: 26df84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 80395734
-Index: 8
-Address: 265838
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 103184573
-Index: 5
-Address: 2fa59c
-Native_address: bce80
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 88265811
-Index: 24
-Address: 34f6a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 9644262
-Index: 2
-Address: 292cec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 100885585
-Index: 0
-Address: 29eb2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 128335479
-Index: 6
-Address: 26de84
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 42988083
-Index: 1
-Address: 210c14
-Native_address: bcf04
-Refc: 1
-=fun
-Module: dict
-Uniq: 7105125
-Index: 7
-Address: 354f84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 29030584
-Index: 8
-Address: 234978
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 29214351
-Index: 2
-Address: 285660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 5158633
-Index: 4
-Address: 274034
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 74624950
-Index: 25
-Address: 34f63c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 6477018
-Index: 3
-Address: 2adb6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 117885138
-Index: 7
-Address: 2ffff8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 47566924
-Index: 6
-Address: 354fb8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 114637756
-Index: 12
-Address: 313c60
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121316204
-Index: 31
-Address: 313a68
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61363639
-Index: 12
-Address: 2ad6a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 116208699
-Index: 3
-Address: 274094
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 113750737
-Index: 0
-Address: 292d54
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 12853672
-Index: 0
-Address: 222e74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108046357
-Index: 12
-Address: 4ab0b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 111569299
-Index: 47
-Address: 34e80c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 20108653
-Index: 15
-Address: 2f9f94
-Native_address: bcea4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 45252965
-Index: 15
-Address: 313c0c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 12437425
-Index: 9
-Address: 4ab3e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 30942993
-Index: 22
-Address: 34f6ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 93430337
-Index: 3
-Address: 33b100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 6604883
-Index: 2
-Address: 33b16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 36867745
-Index: 5
-Address: 255e28
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 90563105
-Index: 1
-Address: 285708
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 18519297
-Index: 7
-Address: 26ddfc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8058975
-Index: 16
-Address: 4a36b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 30694569
-Index: 7
-Address: 27d018
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 76933943
-Index: 0
-Address: 2741b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 9033258
-Index: 6
-Address: 4a4690
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 74851752
-Index: 5
-Address: 4a4798
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 50855382
-Index: 4
-Address: 2659a8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39211582
-Index: 52
-Address: 34e504
-Native_address: bceec
-Refc: 1
-=fun
-Module: file_server
-Uniq: 77665472
-Index: 0
-Address: 2a0dec
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 57487277
-Index: 8
-Address: 2fa3c4
-Native_address: bce94
-Refc: 1
-=fun
-Module: webtool
-Uniq: 87386575
-Index: 11
-Address: 4ab1c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 58991950
-Index: 8
-Address: 4a4338
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 118859163
-Index: 17
-Address: 4a34d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 38265609
-Index: 12
-Address: 354dec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 56903339
-Index: 1
-Address: 2527c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 129504763
-Index: 0
-Address: 28aae8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 44817307
-Index: 10
-Address: 354e3c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 52856894
-Index: 41
-Address: 34eb70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22623360
-Index: 23
-Address: 34f5d4
-Native_address: bceec
-Refc: 1
-=fun
-Module: orddict
-Uniq: 34963136
-Index: 0
-Address: 2fbbbc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erlang
-Uniq: 24496633
-Index: 0
-Address: 213744
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 99313855
-Index: 27
-Address: 2f9914
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 99137703
-Index: 3
-Address: 4b5dfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 124043500
-Index: 3
-Address: 222b84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 102650878
-Index: 22
-Address: 313b48
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 13333720
-Index: 12
-Address: 34fb2c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 133457
-Index: 5
-Address: 292a80
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 64640983
-Index: 4
-Address: 29e944
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 7580218
-Index: 2
-Address: 255f08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 131850870
-Index: 59
-Address: 34e6b8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 56617403
-Index: 10
-Address: 284b40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108680306
-Index: 4
-Address: 4ab5e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 90880071
-Index: 2
-Address: 26e150
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_io_server
-Uniq: 23980778
-Index: 0
-Address: 30ac30
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 12006418
-Index: 19
-Address: 2f9d54
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 81701030
-Index: 8
-Address: 526228
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 71013875
-Index: 1
-Address: 4a4ddc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: distel
-Uniq: 87740845
-Index: 2
-Address: 35c0e0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 90782401
-Index: 17
-Address: 2f9e8c
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 133882676
-Index: 6
-Address: 2e52ac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 105698088
-Index: 3
-Address: 2855b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 58370899
-Index: 0
-Address: 27d370
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 15274536
-Index: 25
-Address: 2f9a94
-Native_address: bcef4
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 94349557
-Index: 0
-Address: 252844
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 33328185
-Index: 1
-Address: 33b1d8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86971387
-Index: 16
-Address: 313db0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 53364473
-Index: 38
-Address: 34ee84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 128145687
-Index: 0
-Address: 4ab944
-Native_address: bcee4
-Refc: 1
-=fun
-Module: c
-Uniq: 98651404
-Index: 10
-Address: 2fff20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 78224618
-Index: 0
-Address: 313dcc
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 40779085
-Index: 11
-Address: 2e50c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 93517350
-Index: 4
-Address: 300090
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 58551291
-Index: 0
-Address: 234f14
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 10055518
-Index: 17
-Address: 526170
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 15795706
-Index: 19
-Address: 313bd4
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 31129467
-Index: 13
-Address: 313c44
-Native_address: bced4
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 115635393
-Index: 0
-Address: 2a1a4c
-Native_address: bcf04
-Refc: 2
-=fun
-Module: erl_eval
-Uniq: 65839696
-Index: 22
-Address: 2f9c00
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 69275064
-Index: 28
-Address: 313aa0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 55938066
-Index: 11
-Address: 354d6c
-Native_address: bceec
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 22323433
-Index: 3
-Address: 252688
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 129726129
-Index: 29
-Address: 313abc
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 84346832
-Index: 0
-Address: 3550fc
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 102096820
-Index: 7
-Address: 2e5290
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 70385762
-Index: 11
-Address: 27cf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_cgi
-Uniq: 1483038
-Index: 0
-Address: 4ec2e8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 3664813
-Index: 1
-Address: 3550b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 131143671
-Index: 6
-Address: 27d08c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 46286977
-Index: 2
-Address: 2740b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_esi
-Uniq: 49099432
-Index: 0
-Address: 4e522c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 95764905
-Index: 2
-Address: 24aaa8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: packages
-Uniq: 62890926
-Index: 0
-Address: 2ae814
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 41564771
-Index: 35
-Address: 3139f8
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 95490768
-Index: 0
-Address: 4a4dc0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121559432
-Index: 3
-Address: 313d78
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_conf
-Uniq: 21152662
-Index: 0
-Address: 4be5a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 41630916
-Index: 5
-Address: 29e914
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 19747201
-Index: 5
-Address: 313d24
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 100584837
-Index: 36
-Address: 34f0f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 64635712
-Index: 15
-Address: 34f94c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 46398361
-Index: 3
-Address: 29e9a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86699817
-Index: 27
-Address: 313b2c
-Native_address: bced4
-Refc: 1
-=fun
-Module: distel
-Uniq: 40869731
-Index: 0
-Address: 35c12c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 83701641
-Index: 1
-Address: 27d33c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_auth
-Uniq: 85845790
-Index: 0
-Address: 4dfd84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 101292714
-Index: 9
-Address: 2e519c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 134173702
-Index: 1
-Address: 265b68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 92433687
-Index: 6
-Address: 2ad9f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 62315241
-Index: 8
-Address: 354f38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 11615541
-Index: 12
-Address: 265530
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 11160090
-Index: 2
-Address: 2b6bb4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 12116524
-Index: 15
-Address: 2342c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 61620901
-Index: 2
-Address: 4fc670
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 23665189
-Index: 12
-Address: 4a3b94
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 43844413
-Index: 0
-Address: 300100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 100514258
-Index: 6
-Address: 313d08
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 54271286
-Index: 17
-Address: 34f8a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 47017252
-Index: 3
-Address: 26dfa0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 1228304
-Index: 7
-Address: 4a45a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 127131470
-Index: 10
-Address: 2655a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_server
-Uniq: 22638227
-Index: 1
-Address: 2a0e20
-Native_address: bcf04
-Refc: 1
-=fun
-Module: code_server
-Uniq: 112704920
-Index: 15
-Address: 2ad488
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88302875
-Index: 2
-Address: 2fa76c
-Native_address: bceb4
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 85808984
-Index: 1
-Address: 28ab18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 106391799
-Index: 0
-Address: 33b22c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25830519
-Index: 5
-Address: 27d0c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 110491036
-Index: 1
-Address: 2e5398
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 13128736
-Index: 5
-Address: 52627c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 84644982
-Index: 21
-Address: 313b9c
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 120577486
-Index: 3
-Address: 34fffc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 4504456
-Index: 44
-Address: 34e938
-Native_address: bceec
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 28754183
-Index: 0
-Address: 500140
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 88043334
-Index: 14
-Address: 313c28
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61592373
-Index: 0
-Address: 2adc28
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74468346
-Index: 26
-Address: 313ad8
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69896253
-Index: 21
-Address: 2f9c40
-Native_address: bce80
-Refc: 1
-=fun
-Module: global_group
-Uniq: 59656873
-Index: 4
-Address: 292ac0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 103891261
-Index: 2
-Address: 4a4d70
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 89619733
-Index: 0
-Address: 4b5e64
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 133201466
-Index: 10
-Address: 2e5180
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 32159369
-Index: 2
-Address: 4ab820
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 76861396
-Index: 2
-Address: 2adbb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 48206487
-Index: 0
-Address: 4fc6f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 118996551
-Index: 28
-Address: 34f384
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 12593774
-Index: 50
-Address: 34e60c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 48542841
-Index: 1
-Address: 50e88c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56178490
-Index: 9
-Address: 4a420c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 88212576
-Index: 4
-Address: 35bf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 79562132
-Index: 29
-Address: 34f368
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 129524917
-Index: 32
-Address: 34f2c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54029891
-Index: 23
-Address: 2f9af0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 108872092
-Index: 4
-Address: 27d0f0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 40905124
-Index: 6
-Address: 234ac0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 50124876
-Index: 10
-Address: 2ad760
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 791358
-Index: 48
-Address: 34e7b0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 18404828
-Index: 24
-Address: 313af4
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 13278653
-Index: 1
-Address: 4b5e48
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 110307423
-Index: 13
-Address: 284a7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 99592247
-Index: 0
-Address: 256118
-Native_address: bcf04
-Refc: 1
-=fun
-Module: global
-Uniq: 99918211
-Index: 2
-Address: 265af4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 71442319
-Index: 27
-Address: 34f510
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 7612785
-Index: 13
-Address: 2fa0fc
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56095795
-Index: 15
-Address: 4a38a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 23626796
-Index: 25
-Address: 313b10
-Native_address: bced4
-Refc: 1
-=fun
-Module: file_server
-Uniq: 126074974
-Index: 2
-Address: 2a0cac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 104278122
-Index: 1
-Address: 274154
-Native_address: bcefc
-Refc: 1
-=fun
-Module: sys
-Uniq: 90854051
-Index: 0
-Address: 240344
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 113334594
-Index: 2
-Address: 313d5c
-Native_address: bced4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 8832142
-Index: 7
-Address: 284e30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9159706
-Index: 42
-Address: 34eb54
-Native_address: bceec
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 123946665
-Index: 8
-Address: 26e494
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3149789
-Index: 1
-Address: 5262d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 48288621
-Index: 11
-Address: 2ffed8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8953292
-Index: 20
-Address: 4a4d54
-Native_address: bcee4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9632158
-Index: 4
-Address: 34ff88
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 31111567
-Index: 7
-Address: 29e8c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 85307443
-Index: 10
-Address: 2fa29c
-Native_address: bcec4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 104417191
-Index: 7
-Address: 313cd0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 43625777
-Index: 5
-Address: 354fec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 92698798
-Index: 3
-Address: 4ab780
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 39074546
-Index: 6
-Address: 2fa54c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 71451126
-Index: 5
-Address: 234b98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 122084387
-Index: 6
-Address: 300038
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 9625924
-Index: 14
-Address: 284a60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 128777368
-Index: 11
-Address: 313c7c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 10203723
-Index: 7
-Address: 4ab4f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 35032400
-Index: 10
-Address: 313c98
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 17252586
-Index: 34
-Address: 313a14
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 7177165
-Index: 11
-Address: 2ad734
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 115778175
-Index: 3
-Address: 4a4930
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 96440880
-Index: 51
-Address: 34e590
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 68275407
-Index: 0
-Address: 2b7340
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88854488
-Index: 16
-Address: 2f9f04
-Native_address: bcebc
-Refc: 1
-=fun
-Module: global
-Uniq: 26353848
-Index: 13
-Address: 2654e8
-Native_address: bcf04
-Refc: 3
-=fun
-Module: global
-Uniq: 93414722
-Index: 11
-Address: 265568
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 11194189
-Index: 60
-Address: 34fe0c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 125189992
-Index: 8
-Address: 2fffdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 112472016
-Index: 2
-Address: 355088
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 104426442
-Index: 5
-Address: 2e52e0
-Native_address: bceec
-Refc: 1
-=fun
-Module: global
-Uniq: 17426458
-Index: 0
-Address: 265bc4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 81191039
-Index: 5
-Address: 2ada48
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 71765042
-Index: 5
-Address: 284f74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 85855821
-Index: 2
-Address: 1fa298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 70586122
-Index: 10
-Address: 4a3fe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 87067911
-Index: 49
-Address: 34e708
-Native_address: bcef4
-Refc: 1
-=fun
-Module: distel
-Uniq: 63126735
-Index: 1
-Address: 35c0fc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: c
-Uniq: 58270309
-Index: 1
-Address: 3000e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: ets
-Uniq: 80538457
-Index: 1
-Address: 2bc1a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 69827241
-Index: 9
-Address: 34fd70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 103968752
-Index: 3
-Address: 355054
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 117175573
-Index: 21
-Address: 34f728
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 57865450
-Index: 2
-Address: 2e537c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 14705965
-Index: 20
-Address: 313b80
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 85360931
-Index: 6
-Address: 4ab56c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: kernel_config
-Uniq: 41755598
-Index: 0
-Address: 2d9e20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 7110547
-Index: 37
-Address: 34ef14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 28091577
-Index: 16
-Address: 234244
-Native_address: bcef4
-Refc: 2
-=fun
-Module: code_server
-Uniq: 96448152
-Index: 14
-Address: 2ad4e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 40177568
-Index: 13
-Address: 4a39a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 31948320
-Index: 58
-Address: 34dfdc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 54153760
-Index: 7
-Address: 265854
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 60156260
-Index: 3
-Address: 5262b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 1010616
-Index: 2
-Address: 350064
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 96784459
-Index: 1
-Address: 1fa2b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 48691771
-Index: 18
-Address: 313bb8
-Native_address: bced4
-Refc: 1
-=fun
-Module: global
-Uniq: 26895060
-Index: 9
-Address: 265710
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 109625093
-Index: 7
-Address: 2ad8fc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 59436171
-Index: 1
-Address: 3500dc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 92768306
-Index: 9
-Address: 354f04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 106430008
-Index: 3
-Address: 292b38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 79749196
-Index: 6
-Address: 1fa01c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 6014929
-Index: 9
-Address: 2fa324
-Native_address: bceac
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 57051922
-Index: 7
-Address: 234a28
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 77043468
-Index: 6
-Address: 29e8e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 36176045
-Index: 9
-Address: 52620c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 35862809
-Index: 3
-Address: 255edc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113649451
-Index: 4
-Address: 2850a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 67943969
-Index: 5
-Address: 2658f4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 109003032
-Index: 16
-Address: 5260d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 104711447
-Index: 13
-Address: 525f5c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 107666872
-Index: 9
-Address: 27cfb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 89410000
-Index: 10
-Address: 5261f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 47356870
-Index: 11
-Address: 284ab4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17873449
-Index: 56
-Address: 34e1e8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 8839441
-Index: 33
-Address: 34f25c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 82513204
-Index: 2
-Address: 222c18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 5973059
-Index: 0
-Address: 24ab7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 127832132
-Index: 0
-Address: 4b065c
-Native_address: bcefc
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 39322658
-Index: 14
-Address: 525f40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_server
-Uniq: 100284021
-Index: 0
-Address: 23d288
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 17430070
-Index: 12
-Address: 284a98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 97509773
-Index: 3
-Address: 1fa27c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 32364818
-Index: 3
-Address: 35c050
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 58576084
-Index: 32
-Address: 313a4c
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 38384851
-Index: 14
-Address: 4a3988
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 14139883
-Index: 4
-Address: 234d78
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 122590256
-Index: 0
-Address: 2fa8b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 14705629
-Index: 11
-Address: 2fa22c
-Native_address: bcedc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 9273769
-Index: 4
-Address: 2fa684
-Native_address: bcee4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 87950142
-Index: 11
-Address: 5261d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 54913678
-Index: 1
-Address: 4fc6b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 28370334
-Index: 0
-Address: 26e4b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 24927227
-Index: 40
-Address: 34ed4c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 105437500
-Index: 33
-Address: 313a30
-Native_address: bced4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 10921695
-Index: 1
-Address: 234eac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 112431564
-Index: 55
-Address: 34e22c
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 129460863
-Index: 5
-Address: 4ab5c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 89001648
-Index: 3
-Address: 27d2ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 36199507
-Index: 8
-Address: 27cfe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 35620771
-Index: 2
-Address: 5262ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 83214871
-Index: 18
-Address: 2f9e34
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 122455383
-Index: 1
-Address: 2adc0c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22389488
-Index: 31
-Address: 34f1b8
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 41869059
-Index: 12
-Address: 2fa1d4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 18130505
-Index: 45
-Address: 34e904
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 107414126
-Index: 1
-Address: 2b706c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 116638945
-Index: 28
-Address: 2f98f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 48465762
-Index: 9
-Address: 2348c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 87633852
-Index: 0
-Address: 50e97c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 28213098
-Index: 8
-Address: 4ab42c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 123630574
-Index: 4
-Address: 222b58
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 127425508
-Index: 13
-Address: 354eb4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 95048118
-Index: 16
-Address: 2ad46c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 108661978
-Index: 19
-Address: 34f75c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 21272619
-Index: 13
-Address: 34fad8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29943747
-Index: 17
-Address: 313bf0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 120240397
-Index: 4
-Address: 313d94
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 124060676
-Index: 0
-Address: 350124
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 100975346
-Index: 6
-Address: 526260
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61421476
-Index: 4
-Address: 2ada9c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45197232
-Index: 7
-Address: 34fe5c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3151900
-Index: 15
-Address: 525f24
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 77509245
-Index: 2
-Address: 4b5e2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 94110229
-Index: 8
-Address: 2ad7e4
-Native_address: bcef4
-Refc: 3
-=fun
-Module: rpc
-Uniq: 101217130
-Index: 1
-Address: 2560c4
-Native_address: bcf04
-Refc: 1
-=fun
-Module: lists
-Uniq: 103647452
-Index: 0
-Address: 244b7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 37841211
-Index: 9
-Address: 2ad77c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 40109251
-Index: 54
-Address: 34e2b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 98012300
-Index: 0
-Address: 1fa2d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 73604759
-Index: 10
-Address: 4ab270
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 12042434
-Index: 1
-Address: 313d40
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 127137775
-Index: 4
-Address: 2e531c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 45498037
-Index: 12
-Address: 27cec0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 122441107
-Index: 34
-Address: 34f1d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70933889
-Index: 46
-Address: 34e8d0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 69850797
-Index: 2
-Address: 27d308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 103965539
-Index: 13
-Address: 234684
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29979659
-Index: 30
-Address: 313a84
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17148721
-Index: 20
-Address: 34f778
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_response
-Uniq: 100673049
-Index: 0
-Address: 5165dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 10508176
-Index: 1
-Address: 4b04dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32476064
-Index: 57
-Address: 34e1c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74835078
-Index: 9
-Address: 313cec
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 60689814
-Index: 19
-Address: 4a3b78
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39269715
-Index: 5
-Address: 34ff14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 112923172
-Index: 0
-Address: 2e5404
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43010824
-Index: 14
-Address: 2fa03c
-Native_address: bce8c
-Refc: 1
-=fun
-Module: global
-Uniq: 82495254
-Index: 3
-Address: 265ac8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 48568081
-Index: 8
-Address: 2e5220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 77236637
-Index: 7
-Address: 1fa000
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 109386574
-Index: 1
-Address: 2fa804
-Native_address: bce9c
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 42613220
-Index: 14
-Address: 34f980
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 67093144
-Index: 23
-Address: 313b64
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 86833790
-Index: 11
-Address: 34fbe8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 6344855
-Index: 1
-Address: 29eabc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 5149749
-Index: 35
-Address: 34f220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 93451769
-Index: 5
-Address: 1fa120
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 117428568
-Index: 11
-Address: 234758
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 15225890
-Index: 4
-Address: 526298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 120760477
-Index: 2
-Address: 234cdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 88561919
-Index: 3
-Address: 3000ac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 108931174
-Index: 8
-Address: 313cb4
-Native_address: bced4
-Refc: 1
-=fun
-Module: rpc
-Uniq: 122901192
-Index: 4
-Address: 255e44
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32985930
-Index: 10
-Address: 34fc40
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 97968498
-Index: 1
-Address: 292b7c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 45671671
-Index: 18
-Address: 4a32d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 117968056
-Index: 3
-Address: 2fa6ec
-Native_address: bcecc
-Refc: 1
-=fun
-Module: init
-Uniq: 108717591
-Index: 4
-Address: 1fa194
-Native_address: bcf04
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 15091954
-Index: 2
-Address: 2526dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 65707495
-Index: 6
-Address: 2658a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 34473969
-Index: 17
-Address: 2ad450
-Native_address: bcef4
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 124296602
-Index: 7
-Address: 526244
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 23074707
-Index: 15
-Address: 265460
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25972856
-Index: 10
-Address: 27cf74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43110452
-Index: 24
-Address: 2f9ad4
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 106445918
-Index: 13
-Address: 2ad660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 116071286
-Index: 12
-Address: 5261b8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 130814477
-Index: 8
-Address: 284cfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 121017037
-Index: 39
-Address: 34ed80
-Native_address: bcef4
-Refc: 1
-=fun
-Module: ets
-Uniq: 104895267
-Index: 0
-Address: 2bc1bc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 104682437
-Index: 11
-Address: 4a3de0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70248777
-Index: 30
-Address: 34f30c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 13274975
-Index: 5
-Address: 300074
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 98442771
-Index: 53
-Address: 34e2d0
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69829006
-Index: 7
-Address: 2fa47c
-Native_address: bce80
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 36444943
-Index: 1
-Address: 2a1a80
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 58719455
-Index: 26
-Address: 34f5f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: timer
-Uniq: 42505885
-Index: 0
-Address: 4cd62c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54682479
-Index: 20
-Address: 2f9d08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 86070332
-Index: 1
-Address: 222d7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 54728136
-Index: 9
-Address: 2fff68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 16474219
-Index: 3
-Address: 234c60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 108831556
-Index: 10
-Address: 234810
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 72053761
-Index: 16
-Address: 34f8ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 65127616
-Index: 2
-Address: 29ea04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 126167637
-Index: 14
-Address: 234640
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113704917
-Index: 0
-Address: 285788
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 75279647
-Index: 1
-Address: 500100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 119218247
-Index: 5
-Address: 26df68
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 85690044
-Index: 4
-Address: 4b5d6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 53075592
-Index: 1
-Address: 26e16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 39490182
-Index: 2
-Address: 3000c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 75189006
-Index: 12
-Address: 234714
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 14980808
-Index: 43
-Address: 34eb38
-Native_address: bceec
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 16463468
-Index: 4
-Address: 4a4914
-Native_address: bcee4
-Refc: 1
-=fun
-Module: dict
-Uniq: 99965326
-Index: 4
-Address: 355020
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 36900786
-Index: 6
-Address: 284f3c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45447147
-Index: 18
-Address: 34f794
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32353825
-Index: 6
-Address: 34fe78
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 134052338
-Index: 8
-Address: 34fdc0
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_master
-Uniq: 23840924
-Index: 1
-Address: 24aae0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108282500
-Index: 1
-Address: 4ab918
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 31081110
-Index: 0
-Address: 210c68
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54275742
-Index: 26
-Address: 2f9a4c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 45083091
-Index: 3
-Address: 2e5350
-Native_address: bcf04
-Refc: 3
-=proc_stack:<0.0.0>
-3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H371264
-=proc_heap:<0.0.0>
-371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
-3710FC:t2:H371138,H371140
-371140:lI80|H371194
-371194:lI49|H3711E0
-3711E0:lI48|H371204
-371204:lI66|N
-371138:lI79|H37118C
-37118C:lI84|H3711D8
-3711D8:lI80|H3711FC
-3711FC:lI32|H37120C
-37120C:lI32|H371214
-371214:lI65|H37121C
-37121C:lI80|H371224
-371224:lI78|H37122C
-37122C:lI32|H371234
-371234:lI49|H37123C
-37123C:lI56|H371244
-371244:lI49|H37124C
-37124C:lI32|H371254
-371254:lI48|H37125C
-37125C:lI49|N
-37128C:t2:A7:started,A7:started
-3710F4:lH371124|H371130
-371124:t2:A16:application_controller,P<0.5.0>
-371130:lH371178|H371184
-371178:t2:AC:error_logger,P<0.4.0>
-371184:lH3711CC|N
-3711CC:t2:AF:erl_prim_loader,P<0.2.0>
-3710D8:lH3710E0|H3710EC
-3710E0:t2:A5:-root,H371108
-371108:lH371148|N
-371148:Yh13:2F636C656172636173652F6F74702F65727473
-3710EC:lH371110|H37111C
-371110:t2:A9:-progname,H371164
-371164:lH37119C|N
-37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
-37111C:lH37116C|N
-37116C:t2:A5:-home,H3711C4
-3711C4:lH3711E8|N
-3711E8:YhA:2F686F6D652F73697269
-=proc_stack:<0.2.0>
-38eca8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H367D20
-y1:P<0.1.0>
-y2:H367D28
-y3:A8:infinity
-=proc_heap:<0.2.0>
-367D20:lH367D48|H367D50
-367D48:lI47|H367D58
-367D58:lI99|H367D68
-367D68:lI108|H367D78
-367D78:lI101|H367D88
-367D88:lI97|H367D98
-367D98:lI114|H367DA8
-367DA8:lI99|H367DB8
-367DB8:lI97|H367DC8
-367DC8:lI115|H367DD8
-367DD8:lI101|H367DE8
-367DE8:lI47|H367DF8
-367DF8:lI111|H367E08
-367E08:lI116|H367E18
-367E18:lI112|H367E28
-367E28:lI47|H367E38
-367E38:lI101|H367E48
-367E48:lI114|H367E58
-367E58:lI116|H367E68
-367E68:lI115|H367E78
-367E78:lI47|H367E88
-367E88:lI108|H367E98
-367E98:lI105|H367EA8
-367EA8:lI98|H367EB8
-367EB8:lI47|H367EC8
-367EC8:lI107|H367ED8
-367ED8:lI101|H367EE8
-367EE8:lI114|H367EF8
-367EF8:lI110|H367F08
-367F08:lI101|H367F18
-367F18:lI108|H367F28
-367F28:lI47|H367F38
-367F38:lI101|H367F48
-367F48:lI98|H367F58
-367F58:lI105|H367F68
-367F68:lI110|N
-367D50:lH367D60|N
-367D60:lI47|H367D70
-367D70:lI99|H367D80
-367D80:lI108|H367D90
-367D90:lI101|H367DA0
-367DA0:lI97|H367DB0
-367DB0:lI114|H367DC0
-367DC0:lI99|H367DD0
-367DD0:lI97|H367DE0
-367DE0:lI115|H367DF0
-367DF0:lI101|H367E00
-367E00:lI47|H367E10
-367E10:lI111|H367E20
-367E20:lI116|H367E30
-367E30:lI112|H367E40
-367E40:lI47|H367E50
-367E50:lI101|H367E60
-367E60:lI114|H367E70
-367E70:lI116|H367E80
-367E80:lI115|H367E90
-367E90:lI47|H367EA0
-367EA0:lI108|H367EB0
-367EB0:lI105|H367EC0
-367EC0:lI98|H367ED0
-367ED0:lI47|H367EE0
-367EE0:lI115|H367EF0
-367EF0:lI116|H367F00
-367F00:lI100|H367F10
-367F10:lI108|H367F20
-367F20:lI105|H367F30
-367F30:lI98|H367F40
-367F40:lI47|H367F50
-367F50:lI101|H367F60
-367F60:lI98|H367F70
-367F70:lI105|H367F78
-367F78:lI110|N
-367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
-=proc_dictionary:<0.4.0>
-H3AC588
-H3AC594
-=proc_stack:<0.4.0>
-3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:H3B21E8
-y2:AC:error_logger
-y3:P<0.1.0>
-3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3AC5A8
-=proc_heap:<0.4.0>
-3B21E8:lH3B2144|H3B21E0
-3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
-3B21E0:lH3B21BC|N
-3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
-3AC610:t2:P<0.21.0>,AC:error_logger
-3AC5A8:lA9:gen_event|H3AC5E8
-3AC5E8:lP<0.1.0>|H3AC608
-3AC608:lP<0.1.0>|H3AC61C
-3AC61C:lH3AC624|H3AC630
-3AC624:t2:A5:local,AC:error_logger
-3AC630:lN|H3AC638
-3AC638:lN|H3AC640
-3AC640:lN|N
-3AC588:t2:AD:$initial_call,H3AC5B0
-3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
-3AC594:t2:AA:$ancestors,H3AC5C0
-3AC5C0:lP<0.1.0>|N
-=proc_dictionary:<0.5.0>
-H372E4C
-H372E58
-=proc_stack:<0.5.0>
-374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A16:application_controller
-y3:H3739F4
-y4:A16:application_controller
-y5:P<0.1.0>
-374720:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H372ED0
-=proc_heap:<0.5.0>
-3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
-373928:lH37391C|H372F54
-37391C:t2:A6:stdlib,A9:permanent
-372F54:lH372F90|N
-372F90:t2:A6:kernel,A9:permanent
-373914:lH373908|H372F4C
-373908:t2:A6:stdlib,A9:undefined
-372F4C:lH372F84|N
-372F84:t2:A6:kernel,P<0.7.0>
-372ED0:lAA:gen_server|H372F5C
-372F5C:lP<0.1.0>|H372F9C
-372F9C:lP<0.1.0>|H372FC4
-372FC4:lH372FEC|H372FF8
-372FEC:t2:A5:local,A16:application_controller
-372FF8:lA16:application_controller|H373018
-373018:lH373038|H373048
-373038:t3:AB:application,A6:kernel,H373060
-373060:lH373078|H373084
-373078:t2:AB:description,H37309C
-37309C:lI69|H3730C8
-3730C8:lI82|H3730FC
-3730FC:lI84|H373130
-373130:lI83|H37316C
-37316C:lI32|H3731A8
-3731A8:lI32|H3731E4
-3731E4:lI67|H373220
-373220:lI88|H37325C
-37325C:lI67|H37329C
-37329C:lI32|H3732D0
-3732D0:lI49|H3732FC
-3732FC:lI51|H373328
-373328:lI56|H373348
-373348:lI32|H373368
-373368:lI49|H373388
-373388:lI48|N
-373084:lH3730A4|H3730B0
-3730A4:t2:A3:vsn,H3730D0
-3730D0:lI50|H373104
-373104:lI46|H373138
-373138:lI57|N
-3730B0:lH3730D8|H3730E4
-3730D8:t2:A2:id,N
-3730E4:lH37310C|H373118
-37310C:t2:A7:modules,H373140
-373140:lAB:application|H373174
-373174:lA16:application_controller|H3731B0
-3731B0:lA12:application_master|H3731EC
-3731EC:lA13:application_starter|H373228
-373228:lA4:auth|H373264
-373264:lA4:code|H3732A4
-3732A4:lA8:code_aux|H3732D8
-3732D8:lA8:packages|H373304
-373304:lAB:code_server|H373330
-373330:lA9:dist_util|H373350
-373350:lAF:erl_boot_server|H373370
-373370:lA10:erl_distribution|H373390
-373390:lAF:erl_prim_loader|H3733A8
-3733A8:lA9:erl_reply|H3733C0
-3733C0:lA6:erlang|H3733D8
-3733D8:lAD:error_handler|H3733F0
-3733F0:lAC:error_logger|H373408
-373408:lA4:file|H373420
-373420:lAB:file_server|H373438
-373438:lAF:old_file_server|H373450
-373450:lAE:file_io_server|H373468
-373468:lA9:prim_file|H373480
-373480:lA6:global|H373498
-373498:lAC:global_group|H3734B0
-3734B0:lAD:global_search|H3734C8
-3734C8:lA5:group|H3734E0
-3734E0:lA5:heart|H3734F8
-3734F8:lA13:hipe_unified_loader|H373510
-373510:lA11:hipe_sparc_loader|H373520
-373520:lAF:hipe_x86_loader|H373530
-373530:lA9:inet6_tcp|H373540
-373540:lAE:inet6_tcp_dist|H373550
-373550:lA9:inet6_udp|H373560
-373560:lAB:inet_config|H373570
-373570:lAA:inet_hosts|H373580
-373580:lA13:inet_gethost_native|H373590
-373590:lAD:inet_tcp_dist|H3735A0
-3735A0:lA4:init|H3735B0
-3735B0:lA6:kernel|H3735C0
-3735C0:lAD:kernel_config|H3735D0
-3735D0:lA3:net|H3735E0
-3735E0:lA7:net_adm|H3735F0
-3735F0:lAA:net_kernel|H373600
-373600:lA2:os|H373610
-373610:lA8:ram_file|H373620
-373620:lA3:rpc|H373630
-373630:lA4:user|H373640
-373640:lA8:user_drv|H373650
-373650:lA8:user_sup|H373660
-373660:lA8:disk_log|H373670
-373670:lAA:disk_log_1|H373680
-373680:lAF:disk_log_server|H373690
-373690:lAC:disk_log_sup|H3736A0
-3736A0:lA7:dist_ac|H3736B0
-3736B0:lA8:erl_ddll|H3736C0
-3736C0:lA8:erl_epmd|H3736D0
-3736D0:lAA:erts_debug|H3736E0
-3736E0:lA7:gen_tcp|H3736F0
-3736F0:lA7:gen_udp|H373700
-373700:lA9:prim_inet|H373708
-373708:lA4:inet|H373710
-373710:lA7:inet_db|H373718
-373718:lA8:inet_dns|H373720
-373720:lAA:inet_parse|H373728
-373728:lA8:inet_res|H373730
-373730:lA8:inet_tcp|H373738
-373738:lA8:inet_udp|H373740
-373740:lA3:pg2|H373748
-373748:lA9:seq_trace|H373750
-373750:lA6:socks5|H373758
-373758:lAB:socks5_auth|H373760
-373760:lAA:socks5_tcp|H373768
-373768:lAA:socks5_udp|H373770
-373770:lAF:wrap_log_reader|H373778
-373778:lA4:zlib|H373780
-373780:lA9:otp_ring0|N
-373118:lH373148|H373154
-373148:t2:AA:registered,H37317C
-37317C:lA16:application_controller|H3731B8
-3731B8:lA9:erl_reply|H3731F4
-3731F4:lA4:auth|H373230
-373230:lAB:boot_server|H37326C
-37326C:lAB:code_server|H3732AC
-3732AC:lAF:disk_log_server|H3732E0
-3732E0:lAC:disk_log_sup|H37330C
-37330C:lAF:erl_prim_loader|H373338
-373338:lAC:error_logger|H373358
-373358:lAB:file_server|H373378
-373378:lAD:file_server_2|H373398
-373398:lAF:fixtable_server|H3733B0
-3733B0:lAC:global_group|H3733C8
-3733C8:lA12:global_name_server|H3733E0
-3733E0:lA5:heart|H3733F8
-3733F8:lA4:init|H373410
-373410:lAD:kernel_config|H373428
-373428:lAA:kernel_sup|H373440
-373440:lAA:net_kernel|H373458
-373458:lA7:net_sup|H373470
-373470:lA3:rex|H373488
-373488:lA4:user|H3734A0
-3734A0:lA9:os_server|H3734B8
-3734B8:lAB:ddll_server|H3734D0
-3734D0:lA8:erl_epmd|H3734E8
-3734E8:lA7:inet_db|H373500
-373500:lA3:pg2|N
-373154:lH373184|H373190
-373184:t2:AC:applications,N
-373190:lH3731C0|H3731CC
-3731C0:t2:A15:included_applications,N
-3731CC:lH3731FC|H373208
-3731FC:t2:A3:env,H373238
-373238:lH373274|N
-373274:t2:AC:error_logger,A3:tty
-373208:lH373240|H37324C
-373240:t2:AC:start_phases,A9:undefined
-37324C:lH373280|H37328C
-373280:t2:A4:maxT,A8:infinity
-37328C:lH3732B4|H3732C0
-3732B4:t2:A4:maxP,A8:infinity
-3732C0:lH3732E8|N
-3732E8:t2:A3:mod,H373314
-373314:t2:A6:kernel,N
-373048:lN|N
-372E4C:t2:AD:$initial_call,H372EE4
-372EE4:t3:A3:gen,A7:init_it,H372ED0
-372E58:t2:AA:$ancestors,H372EF4
-372EF4:lP<0.1.0>|N
-=proc_dictionary:<0.7.0>
-H369B78
-H369B5C
-=proc_stack:<0.7.0>
-369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:H369C2C
-y1:P<0.5.0>
-369d70:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A12:application_master
-y2:A4:init
-y3:H369B2C
-=proc_heap:<0.7.0>
-369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
-3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
-369A3C:lAB:application|H369A34
-369A34:lA16:application_controller|H369A2C
-369A2C:lA12:application_master|H369A24
-369A24:lA13:application_starter|H369A1C
-369A1C:lA4:auth|H369A14
-369A14:lA4:code|H369A0C
-369A0C:lA8:code_aux|H369A04
-369A04:lA8:packages|H3699FC
-3699FC:lAB:code_server|H3699F4
-3699F4:lA9:dist_util|H3699EC
-3699EC:lAF:erl_boot_server|H3699E4
-3699E4:lA10:erl_distribution|H3699DC
-3699DC:lAF:erl_prim_loader|H3699D4
-3699D4:lA9:erl_reply|H3699CC
-3699CC:lA6:erlang|H3699C4
-3699C4:lAD:error_handler|H3699BC
-3699BC:lAC:error_logger|H3699B4
-3699B4:lA4:file|H3699AC
-3699AC:lAB:file_server|H3699A4
-3699A4:lAF:old_file_server|H36999C
-36999C:lAE:file_io_server|H369994
-369994:lA9:prim_file|H36998C
-36998C:lA6:global|H369984
-369984:lAC:global_group|H36997C
-36997C:lAD:global_search|H369974
-369974:lA5:group|H36996C
-36996C:lA5:heart|H369964
-369964:lA13:hipe_unified_loader|H36995C
-36995C:lA11:hipe_sparc_loader|H369954
-369954:lAF:hipe_x86_loader|H36994C
-36994C:lA9:inet6_tcp|H369944
-369944:lAE:inet6_tcp_dist|H36993C
-36993C:lA9:inet6_udp|H369934
-369934:lAB:inet_config|H36992C
-36992C:lAA:inet_hosts|H369924
-369924:lA13:inet_gethost_native|H36991C
-36991C:lAD:inet_tcp_dist|H369914
-369914:lA4:init|H36990C
-36990C:lA6:kernel|H369904
-369904:lAD:kernel_config|H3698FC
-3698FC:lA3:net|H3698F4
-3698F4:lA7:net_adm|H3698EC
-3698EC:lAA:net_kernel|H3698E4
-3698E4:lA2:os|H3698DC
-3698DC:lA8:ram_file|H3698D4
-3698D4:lA3:rpc|H3698CC
-3698CC:lA4:user|H3698C4
-3698C4:lA8:user_drv|H3698BC
-3698BC:lA8:user_sup|H3698B4
-3698B4:lA8:disk_log|H3698AC
-3698AC:lAA:disk_log_1|H3698A4
-3698A4:lAF:disk_log_server|H36989C
-36989C:lAC:disk_log_sup|H369894
-369894:lA7:dist_ac|H36988C
-36988C:lA8:erl_ddll|H369884
-369884:lA8:erl_epmd|H36987C
-36987C:lAA:erts_debug|H369874
-369874:lA7:gen_tcp|H36986C
-36986C:lA7:gen_udp|H369864
-369864:lA9:prim_inet|H36985C
-36985C:lA4:inet|H369854
-369854:lA7:inet_db|H36984C
-36984C:lA8:inet_dns|H369844
-369844:lAA:inet_parse|H36983C
-36983C:lA8:inet_res|H369834
-369834:lA8:inet_tcp|H36982C
-36982C:lA8:inet_udp|H369824
-369824:lA3:pg2|H36981C
-36981C:lA9:seq_trace|H369814
-369814:lA6:socks5|H36980C
-36980C:lAB:socks5_auth|H369804
-369804:lAA:socks5_tcp|H3697FC
-3697FC:lAA:socks5_udp|H3697F4
-3697F4:lAF:wrap_log_reader|H3697EC
-3697EC:lA4:zlib|H3697E4
-3697E4:lA9:otp_ring0|N
-3697D8:t2:A6:kernel,N
-369B14:lA16:application_controller|H369B0C
-369B0C:lA9:erl_reply|H369B04
-369B04:lA4:auth|H369AFC
-369AFC:lAB:boot_server|H369AF4
-369AF4:lAB:code_server|H369AEC
-369AEC:lAF:disk_log_server|H369AE4
-369AE4:lAC:disk_log_sup|H369ADC
-369ADC:lAF:erl_prim_loader|H369AD4
-369AD4:lAC:error_logger|H369ACC
-369ACC:lAB:file_server|H369AC4
-369AC4:lAD:file_server_2|H369ABC
-369ABC:lAF:fixtable_server|H369AB4
-369AB4:lAC:global_group|H369AAC
-369AAC:lA12:global_name_server|H369AA4
-369AA4:lA5:heart|H369A9C
-369A9C:lA4:init|H369A94
-369A94:lAD:kernel_config|H369A8C
-369A8C:lAA:kernel_sup|H369A84
-369A84:lAA:net_kernel|H369A7C
-369A7C:lA7:net_sup|H369A74
-369A74:lA3:rex|H369A6C
-369A6C:lA4:user|H369A64
-369A64:lA9:os_server|H369A5C
-369A5C:lAB:ddll_server|H369A54
-369A54:lA8:erl_epmd|H369A4C
-369A4C:lA7:inet_db|H369A44
-369A44:lA3:pg2|N
-369B2C:lP<0.5.0>|H369B24
-369B24:lP<0.6.0>|H3697A8
-3697A8:lH3697B0|H369B1C
-369B1C:lA6:normal|N
-369B78:t2:AD:$initial_call,H369B68
-369B68:t3:A12:application_master,A4:init,H369B2C
-369B5C:t2:AA:$ancestors,H369B54
-369B54:lP<0.6.0>|N
-=proc_stack:<0.8.0>
-384ec0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H384BDC
-y1:A6:kernel
-y2:P<0.9.0>
-y3:P<0.7.0>
-=proc_heap:<0.8.0>
-384BDC:t2:A5:state,A3:tty
-=proc_dictionary:<0.9.0>
-H376850
-H37685C
-=proc_stack:<0.9.0>
-36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36B8E8
-y4:AA:kernel_sup
-y5:P<0.8.0>
-36be04:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3768D4
-=proc_heap:<0.9.0>
-36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
-36B8D4:lH36B8B0|H36B6E8
-36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
-376C00:lA6:kernel|N
-376BF0:t3:AA:supervisor,AA:start_link,H376C08
-376C08:lH376C10|H376C1C
-376C10:t2:A5:local,AF:kernel_safe_sup
-376C1C:lA6:kernel|H376C24
-376C24:lA4:safe|N
-36B6E8:lH36B6C4|H36B490
-36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
-376BC4:lAD:kernel_config|N
-376BB4:t3:AD:kernel_config,AA:start_link,N
-36B490:lH36B498|H36B4BC
-36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
-376B80:lA8:user_sup|N
-376B70:t3:A8:user_sup,A5:start,N
-36B4BC:lH36B4C4|H376CB0
-36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
-376B1C:lA4:code|N
-376B0C:t3:A4:code,AA:start_link,N
-376CB0:lH376CB8|H376CDC
-376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
-376AC8:lAF:old_file_server|N
-376AB8:t3:AF:old_file_server,AA:start_link,N
-376CDC:lH376CE4|H376C2C
-376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
-376A68:lA4:file|H376AB0
-376AB0:lAB:file_server|H376B04
-376B04:lAE:file_io_server|H376B68
-376B68:lA9:prim_file|N
-376A58:t3:AB:file_server,AA:start_link,N
-376C2C:lH376C34|H376C58
-376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
-376A04:lAC:global_group|N
-3769F4:t3:AC:global_group,AA:start_link,N
-376C58:lH376C60|H376C84
-376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
-37697C:lA10:erl_distribution|N
-37696C:t3:A10:erl_distribution,AA:start_link,N
-376C84:lH376C8C|H3768A0
-376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
-376904:lA7:inet_db|N
-3768F4:t3:A7:inet_db,AA:start_link,N
-3768A0:lH376938|H37695C
-376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
-3769C0:lA6:global|N
-3769B0:t3:A6:global,AA:start_link,N
-37695C:lH3769C8|N
-3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
-376A48:lA3:rpc|N
-376A38:t3:A3:rpc,AA:start_link,N
-376868:t2:A5:local,AA:kernel_sup
-3768D4:lAA:gen_server|H376964
-376964:lP<0.8.0>|H3769EC
-3769EC:lP<0.8.0>|H376A50
-376A50:lH376A9C|H376AA8
-376A9C:t2:A5:local,AA:kernel_sup
-376AA8:lAA:supervisor|H376AFC
-376AFC:lH376B50|H376B60
-376B50:t3:H376868,A6:kernel,N
-376B60:lN|N
-376850:t2:AD:$initial_call,H3768DC
-3768DC:t3:A3:gen,A7:init_it,H3768D4
-37685C:t2:AA:$ancestors,H3768EC
-3768EC:lP<0.8.0>|N
-=proc_dictionary:<0.10.0>
-H367A10
-H3679F4
-=proc_stack:<0.10.0>
-367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A3:rpc
-y3:H367AA8
-y4:A3:rex
-y5:P<0.9.0>
-367d08:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3679C4
-=proc_heap:<0.10.0>
-367AA8:t2:I0,A3:nil
-3679C4:lAA:gen_server|H3679BC
-3679BC:lP<0.9.0>|H3679B4
-3679B4:lP<0.9.0>|H367988
-367988:lH367990|H3679AC
-367990:t2:A5:local,A3:rex
-3679AC:lA3:rpc|H3679A4
-3679A4:lN|H36799C
-36799C:lN|N
-367A10:t2:AD:$initial_call,H367A00
-367A00:t3:A3:gen,A7:init_it,H3679C4
-3679F4:t2:AA:$ancestors,H3679EC
-3679EC:lAA:kernel_sup|H3679CC
-3679CC:lP<0.8.0>|N
-=proc_dictionary:<0.11.0>
-H36ADD8
-H36ADBC
-=proc_stack:<0.11.0>
-36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A6:global
-y3:H36AF0C
-y4:A12:global_name_server
-y5:P<0.9.0>
-36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36AD8C
-=proc_heap:<0.11.0>
-36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
-36AD8C:lAA:gen_server|H36AD84
-36AD84:lP<0.9.0>|H36AD7C
-36AD7C:lP<0.9.0>|H36AD50
-36AD50:lH36AD58|H36AD74
-36AD58:t2:A5:local,A12:global_name_server
-36AD74:lA6:global|H36AD6C
-36AD6C:lN|H36AD64
-36AD64:lN|N
-36ADD8:t2:AD:$initial_call,H36ADC8
-36ADC8:t3:A3:gen,A7:init_it,H36AD8C
-36ADBC:t2:AA:$ancestors,H36ADB4
-36ADB4:lAA:kernel_sup|H36AD94
-36AD94:lP<0.8.0>|N
-=proc_stack:<0.12.0>
-36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
-y0:N
-y1:N
-y2:N
-y3:N
-y4:N
-y5:N
-y6:A8:infinity
-y7:H368EB0
-y8:P<0.11.0>
-369244:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-=proc_heap:<0.12.0>
-368EB0:t3:A5:multi,A9:undefined,N
-=proc_stack:<0.13.0>
-3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
-y0:A8:infinity
-y1:N
-y2:P<0.11.0>
-3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
-y0:N
-y1:N
-y2:P<0.11.0>
-3695f0:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.13.0>
-=proc_dictionary:<0.14.0>
-H36A998
-H36A9A4
-=proc_stack:<0.14.0>
-372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:inet_db
-y3:H36A9B0
-y4:A7:inet_db
-y5:P<0.9.0>
-372e28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36A9C8
-=proc_heap:<0.14.0>
-36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
-36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
-36A9C8:lAA:gen_server|H36A9F8
-36A9F8:lP<0.9.0>|H36AA08
-36AA08:lP<0.9.0>|H36AA10
-36AA10:lH36AA18|H36AA24
-36AA18:t2:A5:local,A7:inet_db
-36AA24:lA7:inet_db|H36AA2C
-36AA2C:lN|H36AA34
-36AA34:lN|N
-36A998:t2:AD:$initial_call,H36A9D0
-36A9D0:t3:A3:gen,A7:init_it,H36A9C8
-36A9A4:t2:AA:$ancestors,H36A9E0
-36A9E0:lAA:kernel_sup|H36AA00
-36AA00:lP<0.8.0>|N
-=proc_dictionary:<0.15.0>
-H372788
-H3727F8
-H37276C
-H37280C
-H372820
-=proc_stack:<0.15.0>
-372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AC:global_group
-y3:H3728C8
-y4:AC:global_group
-y5:P<0.9.0>
-372a80:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37273C
-=proc_heap:<0.15.0>
-3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
-37273C:lAA:gen_server|H372734
-372734:lP<0.9.0>|H37272C
-37272C:lP<0.9.0>|H372700
-372700:lH372708|H372724
-372708:t2:A5:local,AC:global_group
-372724:lAC:global_group|H37271C
-37271C:lN|H372714
-372714:lN|N
-372788:t2:AD:$initial_call,H372778
-372778:t3:A3:gen,A7:init_it,H37273C
-3727F8:t2:A10:registered_names,H3727F0
-3727F0:lA9:undefined|N
-37276C:t2:AA:$ancestors,H372764
-372764:lAA:kernel_sup|H372744
-372744:lP<0.8.0>|N
-37280C:t2:A4:send,H372804
-372804:lA9:undefined|N
-372820:t2:AC:whereis_name,H372818
-372818:lA9:undefined|N
-=proc_dictionary:<0.16.0>
-H37B918
-H37B924
-=proc_stack:<0.16.0>
-3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AB:file_server
-y3:p<0.4>
-y4:AD:file_server_2
-y5:P<0.9.0>
-3d3058:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37B930
-=proc_heap:<0.16.0>
-37B930:lAA:gen_server|H37B950
-37B950:lP<0.9.0>|H37B960
-37B960:lP<0.9.0>|H37B968
-37B968:lH37B970|H37B97C
-37B970:t2:A5:local,AD:file_server_2
-37B97C:lAB:file_server|H37B984
-37B984:lN|H37B98C
-37B98C:lN|N
-37B918:t2:AD:$initial_call,H37B938
-37B938:t3:A3:gen,A7:init_it,H37B930
-37B924:t2:AA:$ancestors,H37B948
-37B948:lAA:kernel_sup|H37B958
-37B958:lP<0.8.0>|N
-=proc_stack:<0.17.0>
-3763cc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H376084
-y1:P<0.16.0>
-y2:P<0.9.0>
-=proc_heap:<0.17.0>
-376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
-=proc_stack:<0.18.0>
-3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H38AE84
-y1:P<0.9.0>
-=proc_heap:<0.18.0>
-38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
-38AEB8:lH3873D4|H38AEE0
-3873D4:lI46|N
-38AEE0:lH3873EC|H38AF10
-3873EC:lI47|H387404
-387404:lI99|H387424
-387424:lI108|H38744C
-38744C:lI101|H38747C
-38747C:lI97|H3874B4
-3874B4:lI114|H3874F4
-3874F4:lI99|H38753C
-38753C:lI97|H38758C
-38758C:lI115|H3875E4
-3875E4:lI101|H387644
-387644:lI47|H3876AC
-3876AC:lI111|H38771C
-38771C:lI116|H387794
-387794:lI112|H387814
-387814:lI47|H38789C
-38789C:lI101|H38792C
-38792C:lI114|H3879BC
-3879BC:lI116|H387A54
-387A54:lI115|H387AF4
-387AF4:lI47|H387B9C
-387B9C:lI108|H387C4C
-387C4C:lI105|H387D04
-387D04:lI98|H387DC4
-387DC4:lI47|H387E8C
-387E8C:lI107|H387F5C
-387F5C:lI101|H388034
-388034:lI114|H388114
-388114:lI110|H3881FC
-3881FC:lI101|H3882EC
-3882EC:lI108|H3883E4
-3883E4:lI47|H3884E4
-3884E4:lI101|H3885EC
-3885EC:lI98|H3886FC
-3886FC:lI105|H388814
-388814:lI110|N
-38AF10:lH38740C|H38AF48
-38740C:lI47|H38742C
-38742C:lI99|H387454
-387454:lI108|H387484
-387484:lI101|H3874BC
-3874BC:lI97|H3874FC
-3874FC:lI114|H387544
-387544:lI99|H387594
-387594:lI97|H3875EC
-3875EC:lI115|H38764C
-38764C:lI101|H3876B4
-3876B4:lI47|H387724
-387724:lI111|H38779C
-38779C:lI116|H38781C
-38781C:lI112|H3878A4
-3878A4:lI47|H387934
-387934:lI101|H3879C4
-3879C4:lI114|H387A5C
-387A5C:lI116|H387AFC
-387AFC:lI115|H387BA4
-387BA4:lI47|H387C54
-387C54:lI108|H387D0C
-387D0C:lI105|H387DCC
-387DCC:lI98|H387E94
-387E94:lI47|H387F64
-387F64:lI115|H38803C
-38803C:lI116|H38811C
-38811C:lI100|H388204
-388204:lI108|H3882F4
-3882F4:lI105|H3883EC
-3883EC:lI98|H3884EC
-3884EC:lI47|H3885F4
-3885F4:lI101|H388704
-388704:lI98|H38881C
-38881C:lI105|H38892C
-38892C:lI110|N
-38AF48:lH387434|H38AF70
-387434:lI47|H38745C
-38745C:lI99|H38748C
-38748C:lI108|H3874C4
-3874C4:lI101|H387504
-387504:lI97|H38754C
-38754C:lI114|H38759C
-38759C:lI99|H3875F4
-3875F4:lI97|H387654
-387654:lI115|H3876BC
-3876BC:lI101|H38772C
-38772C:lI47|H3877A4
-3877A4:lI111|H387824
-387824:lI116|H3878AC
-3878AC:lI112|H38793C
-38793C:lI47|H3879CC
-3879CC:lI101|H387A64
-387A64:lI114|H387B04
-387B04:lI116|H387BAC
-387BAC:lI115|H387C5C
-387C5C:lI47|H387D14
-387D14:lI108|H387DD4
-387DD4:lI105|H387E9C
-387E9C:lI98|H387F6C
-387F6C:lI47|H388044
-388044:lI119|H388124
-388124:lI101|H38820C
-38820C:lI98|H3882FC
-3882FC:lI116|H3883F4
-3883F4:lI111|H3884F4
-3884F4:lI111|H3885FC
-3885FC:lI108|H38870C
-38870C:lI47|H388824
-388824:lI101|H388934
-388934:lI98|H388A44
-388A44:lI105|H388B54
-388B54:lI110|N
-38AF70:lH387464|H38AF98
-387464:lI47|H387494
-387494:lI99|H3874CC
-3874CC:lI108|H38750C
-38750C:lI101|H387554
-387554:lI97|H3875A4
-3875A4:lI114|H3875FC
-3875FC:lI99|H38765C
-38765C:lI97|H3876C4
-3876C4:lI115|H387734
-387734:lI101|H3877AC
-3877AC:lI47|H38782C
-38782C:lI111|H3878B4
-3878B4:lI116|H387944
-387944:lI112|H3879D4
-3879D4:lI47|H387A6C
-387A6C:lI101|H387B0C
-387B0C:lI114|H387BB4
-387BB4:lI116|H387C64
-387C64:lI115|H387D1C
-387D1C:lI47|H387DDC
-387DDC:lI108|H387EA4
-387EA4:lI105|H387F74
-387F74:lI98|H38804C
-38804C:lI47|H38812C
-38812C:lI116|H388214
-388214:lI118|H388304
-388304:lI47|H3883FC
-3883FC:lI101|H3884FC
-3884FC:lI98|H388604
-388604:lI105|H388714
-388714:lI110|N
-38AF98:lH38749C|H38AFC0
-38749C:lI47|H3874D4
-3874D4:lI99|H387514
-387514:lI108|H38755C
-38755C:lI101|H3875AC
-3875AC:lI97|H387604
-387604:lI114|H387664
-387664:lI99|H3876CC
-3876CC:lI97|H38773C
-38773C:lI115|H3877B4
-3877B4:lI101|H387834
-387834:lI47|H3878BC
-3878BC:lI111|H38794C
-38794C:lI116|H3879DC
-3879DC:lI112|H387A74
-387A74:lI47|H387B14
-387B14:lI101|H387BBC
-387BBC:lI114|H387C6C
-387C6C:lI116|H387D24
-387D24:lI115|H387DE4
-387DE4:lI47|H387EAC
-387EAC:lI108|H387F7C
-387F7C:lI105|H388054
-388054:lI98|H388134
-388134:lI47|H38821C
-38821C:lI116|H38830C
-38830C:lI115|H388404
-388404:lI112|H388504
-388504:lI47|H38860C
-38860C:lI101|H38871C
-38871C:lI98|H38882C
-38882C:lI105|H38893C
-38893C:lI110|N
-38AFC0:lH3874DC|H38AFE8
-3874DC:lI47|H38751C
-38751C:lI99|H387564
-387564:lI108|H3875B4
-3875B4:lI101|H38760C
-38760C:lI97|H38766C
-38766C:lI114|H3876D4
-3876D4:lI99|H387744
-387744:lI97|H3877BC
-3877BC:lI115|H38783C
-38783C:lI101|H3878C4
-3878C4:lI47|H387954
-387954:lI111|H3879E4
-3879E4:lI116|H387A7C
-387A7C:lI112|H387B1C
-387B1C:lI47|H387BC4
-387BC4:lI101|H387C74
-387C74:lI114|H387D2C
-387D2C:lI116|H387DEC
-387DEC:lI115|H387EB4
-387EB4:lI47|H387F84
-387F84:lI108|H38805C
-38805C:lI105|H38813C
-38813C:lI98|H388224
-388224:lI47|H388314
-388314:lI116|H38840C
-38840C:lI111|H38850C
-38850C:lI111|H388614
-388614:lI108|H388724
-388724:lI115|H388834
-388834:lI47|H388944
-388944:lI101|H388A4C
-388A4C:lI98|H388B5C
-388B5C:lI105|H388C6C
-388C6C:lI110|N
-38AFE8:lH387524|H38B008
-387524:lI47|H38756C
-38756C:lI99|H3875BC
-3875BC:lI108|H387614
-387614:lI101|H387674
-387674:lI97|H3876DC
-3876DC:lI114|H38774C
-38774C:lI99|H3877C4
-3877C4:lI97|H387844
-387844:lI115|H3878CC
-3878CC:lI101|H38795C
-38795C:lI47|H3879EC
-3879EC:lI111|H387A84
-387A84:lI116|H387B24
-387B24:lI112|H387BCC
-387BCC:lI47|H387C7C
-387C7C:lI101|H387D34
-387D34:lI114|H387DF4
-387DF4:lI116|H387EBC
-387EBC:lI115|H387F8C
-387F8C:lI47|H388064
-388064:lI108|H388144
-388144:lI105|H38822C
-38822C:lI98|H38831C
-38831C:lI47|H388414
-388414:lI116|H388514
-388514:lI111|H38861C
-38861C:lI111|H38872C
-38872C:lI108|H38883C
-38883C:lI98|H38894C
-38894C:lI97|H388A54
-388A54:lI114|H388B64
-388B64:lI47|H388C74
-388C74:lI101|H388D84
-388D84:lI98|H388E9C
-388E9C:lI105|H388FB4
-388FB4:lI110|N
-38B008:lH387574|H38B018
-387574:lI47|H3875C4
-3875C4:lI99|H38761C
-38761C:lI108|H38767C
-38767C:lI101|H3876E4
-3876E4:lI97|H387754
-387754:lI114|H3877CC
-3877CC:lI99|H38784C
-38784C:lI97|H3878D4
-3878D4:lI115|H387964
-387964:lI101|H3879F4
-3879F4:lI47|H387A8C
-387A8C:lI111|H387B2C
-387B2C:lI116|H387BD4
-387BD4:lI112|H387C84
-387C84:lI47|H387D3C
-387D3C:lI101|H387DFC
-387DFC:lI114|H387EC4
-387EC4:lI116|H387F94
-387F94:lI115|H38806C
-38806C:lI47|H38814C
-38814C:lI108|H388234
-388234:lI105|H388324
-388324:lI98|H38841C
-38841C:lI47|H38851C
-38851C:lI116|H388624
-388624:lI101|H388734
-388734:lI115|H388844
-388844:lI116|H388954
-388954:lI95|H388A5C
-388A5C:lI115|H388B6C
-388B6C:lI101|H388C7C
-388C7C:lI114|H388D8C
-388D8C:lI118|H388EA4
-388EA4:lI101|H388FBC
-388FBC:lI114|H3890D4
-3890D4:lI47|H3891EC
-3891EC:lI101|H3892FC
-3892FC:lI98|H38940C
-38940C:lI105|H38951C
-38951C:lI110|N
-38B018:lH3875CC|H38AE7C
-3875CC:lI47|H387624
-387624:lI99|H387684
-387684:lI108|H3876EC
-3876EC:lI101|H38775C
-38775C:lI97|H3877D4
-3877D4:lI114|H387854
-387854:lI99|H3878DC
-3878DC:lI97|H38796C
-38796C:lI115|H3879FC
-3879FC:lI101|H387A94
-387A94:lI47|H387B34
-387B34:lI111|H387BDC
-387BDC:lI116|H387C8C
-387C8C:lI112|H387D44
-387D44:lI47|H387E04
-387E04:lI101|H387ECC
-387ECC:lI114|H387F9C
-387F9C:lI116|H388074
-388074:lI115|H388154
-388154:lI47|H38823C
-38823C:lI108|H38832C
-38832C:lI105|H388424
-388424:lI98|H388524
-388524:lI47|H38862C
-38862C:lI115|H38873C
-38873C:lI115|H38884C
-38884C:lI108|H38895C
-38895C:lI47|H388A64
-388A64:lI101|H388B74
-388B74:lI98|H388C84
-388C84:lI105|H388D94
-388D94:lI110|N
-38AE7C:lH38762C|H38AEB0
-38762C:lI47|H38768C
-38768C:lI99|H3876F4
-3876F4:lI108|H387764
-387764:lI101|H3877DC
-3877DC:lI97|H38785C
-38785C:lI114|H3878E4
-3878E4:lI99|H387974
-387974:lI97|H387A04
-387A04:lI115|H387A9C
-387A9C:lI101|H387B3C
-387B3C:lI47|H387BE4
-387BE4:lI111|H387C94
-387C94:lI116|H387D4C
-387D4C:lI112|H387E0C
-387E0C:lI47|H387ED4
-387ED4:lI101|H387FA4
-387FA4:lI114|H38807C
-38807C:lI116|H38815C
-38815C:lI115|H388244
-388244:lI47|H388334
-388334:lI108|H38842C
-38842C:lI105|H38852C
-38852C:lI98|H388634
-388634:lI47|H388744
-388744:lI115|H388854
-388854:lI110|H388964
-388964:lI109|H388A6C
-388A6C:lI112|H388B7C
-388B7C:lI47|H388C8C
-388C8C:lI101|H388D9C
-388D9C:lI98|H388EAC
-388EAC:lI105|H388FC4
-388FC4:lI110|N
-38AEB0:lH387694|H38AED8
-387694:lI47|H3876FC
-3876FC:lI99|H38776C
-38776C:lI108|H3877E4
-3877E4:lI101|H387864
-387864:lI97|H3878EC
-3878EC:lI114|H38797C
-38797C:lI99|H387A0C
-387A0C:lI97|H387AA4
-387AA4:lI115|H387B44
-387B44:lI101|H387BEC
-387BEC:lI47|H387C9C
-387C9C:lI111|H387D54
-387D54:lI116|H387E14
-387E14:lI112|H387EDC
-387EDC:lI47|H387FAC
-387FAC:lI101|H388084
-388084:lI114|H388164
-388164:lI116|H38824C
-38824C:lI115|H38833C
-38833C:lI47|H388434
-388434:lI108|H388534
-388534:lI105|H38863C
-38863C:lI98|H38874C
-38874C:lI47|H38885C
-38885C:lI115|H38896C
-38896C:lI97|H388A74
-388A74:lI115|H388B84
-388B84:lI108|H388C94
-388C94:lI47|H388DA4
-388DA4:lI101|H388EB4
-388EB4:lI98|H388FCC
-388FCC:lI105|H3890DC
-3890DC:lI110|N
-38AED8:lH387704|H38AF08
-387704:lI47|H387774
-387774:lI99|H3877EC
-3877EC:lI108|H38786C
-38786C:lI101|H3878F4
-3878F4:lI97|H387984
-387984:lI114|H387A14
-387A14:lI99|H387AAC
-387AAC:lI97|H387B4C
-387B4C:lI115|H387BF4
-387BF4:lI101|H387CA4
-387CA4:lI47|H387D5C
-387D5C:lI111|H387E1C
-387E1C:lI116|H387EE4
-387EE4:lI112|H387FB4
-387FB4:lI47|H38808C
-38808C:lI101|H38816C
-38816C:lI114|H388254
-388254:lI116|H388344
-388344:lI115|H38843C
-38843C:lI47|H38853C
-38853C:lI108|H388644
-388644:lI105|H388754
-388754:lI98|H388864
-388864:lI47|H388974
-388974:lI114|H388A7C
-388A7C:lI117|H388B8C
-388B8C:lI110|H388C9C
-388C9C:lI116|H388DAC
-388DAC:lI105|H388EBC
-388EBC:lI109|H388FD4
-388FD4:lI101|H3890E4
-3890E4:lI95|H3891F4
-3891F4:lI116|H389304
-389304:lI111|H389414
-389414:lI111|H389524
-389524:lI108|H389624
-389624:lI115|H38971C
-38971C:lI47|H389814
-389814:lI101|H38990C
-38990C:lI98|H389A04
-389A04:lI105|H389AE4
-389AE4:lI110|N
-38AF08:lH38777C|H38AF40
-38777C:lI47|H3877F4
-3877F4:lI99|H387874
-387874:lI108|H3878FC
-3878FC:lI101|H38798C
-38798C:lI97|H387A1C
-387A1C:lI114|H387AB4
-387AB4:lI99|H387B54
-387B54:lI97|H387BFC
-387BFC:lI115|H387CAC
-387CAC:lI101|H387D64
-387D64:lI47|H387E24
-387E24:lI111|H387EEC
-387EEC:lI116|H387FBC
-387FBC:lI112|H388094
-388094:lI47|H388174
-388174:lI101|H38825C
-38825C:lI114|H38834C
-38834C:lI116|H388444
-388444:lI115|H388544
-388544:lI47|H38864C
-38864C:lI108|H38875C
-38875C:lI105|H38886C
-38886C:lI98|H38897C
-38897C:lI47|H388A84
-388A84:lI114|H388B94
-388B94:lI115|H388CA4
-388CA4:lI104|H388DB4
-388DB4:lI101|H388EC4
-388EC4:lI108|H388FDC
-388FDC:lI108|H3890EC
-3890EC:lI47|H3891FC
-3891FC:lI101|H38930C
-38930C:lI98|H38941C
-38941C:lI105|H38952C
-38952C:lI110|N
-38AF40:lH3877FC|H38AF68
-3877FC:lI47|H38787C
-38787C:lI99|H387904
-387904:lI108|H387994
-387994:lI101|H387A24
-387A24:lI97|H387ABC
-387ABC:lI114|H387B5C
-387B5C:lI99|H387C04
-387C04:lI97|H387CB4
-387CB4:lI115|H387D6C
-387D6C:lI101|H387E2C
-387E2C:lI47|H387EF4
-387EF4:lI111|H387FC4
-387FC4:lI116|H38809C
-38809C:lI112|H38817C
-38817C:lI47|H388264
-388264:lI101|H388354
-388354:lI114|H38844C
-38844C:lI116|H38854C
-38854C:lI115|H388654
-388654:lI47|H388764
-388764:lI108|H388874
-388874:lI105|H388984
-388984:lI98|H388A8C
-388A8C:lI47|H388B9C
-388B9C:lI112|H388CAC
-388CAC:lI109|H388DBC
-388DBC:lI97|H388ECC
-388ECC:lI110|H388FE4
-388FE4:lI47|H3890F4
-3890F4:lI101|H389204
-389204:lI98|H389314
-389314:lI105|H389424
-389424:lI110|N
-38AF68:lH387884|H38AF90
-387884:lI47|H38790C
-38790C:lI99|H38799C
-38799C:lI108|H387A2C
-387A2C:lI101|H387AC4
-387AC4:lI97|H387B64
-387B64:lI114|H387C0C
-387C0C:lI99|H387CBC
-387CBC:lI97|H387D74
-387D74:lI115|H387E34
-387E34:lI101|H387EFC
-387EFC:lI47|H387FCC
-387FCC:lI111|H3880A4
-3880A4:lI116|H388184
-388184:lI112|H38826C
-38826C:lI47|H38835C
-38835C:lI101|H388454
-388454:lI114|H388554
-388554:lI116|H38865C
-38865C:lI115|H38876C
-38876C:lI47|H38887C
-38887C:lI108|H38898C
-38898C:lI105|H388A94
-388A94:lI98|H388BA4
-388BA4:lI47|H388CB4
-388CB4:lI112|H388DC4
-388DC4:lI97|H388ED4
-388ED4:lI114|H388FEC
-388FEC:lI115|H3890FC
-3890FC:lI101|H38920C
-38920C:lI116|H38931C
-38931C:lI111|H38942C
-38942C:lI111|H389534
-389534:lI108|H38962C
-38962C:lI115|H389724
-389724:lI47|H38981C
-38981C:lI101|H389914
-389914:lI98|H389A0C
-389A0C:lI105|H389AEC
-389AEC:lI110|N
-38AF90:lH387914|H38AFB8
-387914:lI47|H3879A4
-3879A4:lI99|H387A34
-387A34:lI108|H387ACC
-387ACC:lI101|H387B6C
-387B6C:lI97|H387C14
-387C14:lI114|H387CC4
-387CC4:lI99|H387D7C
-387D7C:lI97|H387E3C
-387E3C:lI115|H387F04
-387F04:lI101|H387FD4
-387FD4:lI47|H3880AC
-3880AC:lI111|H38818C
-38818C:lI116|H388274
-388274:lI112|H388364
-388364:lI47|H38845C
-38845C:lI101|H38855C
-38855C:lI114|H388664
-388664:lI116|H388774
-388774:lI115|H388884
-388884:lI47|H388994
-388994:lI108|H388A9C
-388A9C:lI105|H388BAC
-388BAC:lI98|H388CBC
-388CBC:lI47|H388DCC
-388DCC:lI111|H388EDC
-388EDC:lI116|H388FF4
-388FF4:lI112|H389104
-389104:lI95|H389214
-389214:lI109|H389324
-389324:lI105|H389434
-389434:lI98|H38953C
-38953C:lI115|H389634
-389634:lI47|H38972C
-38972C:lI101|H389824
-389824:lI98|H38991C
-38991C:lI105|H389A14
-389A14:lI110|N
-38AFB8:lH3879AC|H38AFE0
-3879AC:lI47|H387A3C
-387A3C:lI99|H387AD4
-387AD4:lI108|H387B74
-387B74:lI101|H387C1C
-387C1C:lI97|H387CCC
-387CCC:lI114|H387D84
-387D84:lI99|H387E44
-387E44:lI97|H387F0C
-387F0C:lI115|H387FDC
-387FDC:lI101|H3880B4
-3880B4:lI47|H388194
-388194:lI111|H38827C
-38827C:lI116|H38836C
-38836C:lI112|H388464
-388464:lI47|H388564
-388564:lI101|H38866C
-38866C:lI114|H38877C
-38877C:lI116|H38888C
-38888C:lI115|H38899C
-38899C:lI47|H388AA4
-388AA4:lI108|H388BB4
-388BB4:lI105|H388CC4
-388CC4:lI98|H388DD4
-388DD4:lI47|H388EE4
-388EE4:lI111|H388FFC
-388FFC:lI115|H38910C
-38910C:lI95|H38921C
-38921C:lI109|H38932C
-38932C:lI111|H38943C
-38943C:lI110|H389544
-389544:lI47|H38963C
-38963C:lI101|H389734
-389734:lI98|H38982C
-38982C:lI105|H389924
-389924:lI110|N
-38AFE0:lH387A44|H38B000
-387A44:lI47|H387ADC
-387ADC:lI99|H387B7C
-387B7C:lI108|H387C24
-387C24:lI101|H387CD4
-387CD4:lI97|H387D8C
-387D8C:lI114|H387E4C
-387E4C:lI99|H387F14
-387F14:lI97|H387FE4
-387FE4:lI115|H3880BC
-3880BC:lI101|H38819C
-38819C:lI47|H388284
-388284:lI111|H388374
-388374:lI116|H38846C
-38846C:lI112|H38856C
-38856C:lI47|H388674
-388674:lI101|H388784
-388784:lI114|H388894
-388894:lI116|H3889A4
-3889A4:lI115|H388AAC
-388AAC:lI47|H388BBC
-388BBC:lI108|H388CCC
-388CCC:lI105|H388DDC
-388DDC:lI98|H388EEC
-388EEC:lI47|H389004
-389004:lI111|H389114
-389114:lI114|H389224
-389224:lI98|H389334
-389334:lI101|H389444
-389444:lI114|H38954C
-38954C:lI47|H389644
-389644:lI101|H38973C
-38973C:lI98|H389834
-389834:lI105|H38992C
-38992C:lI110|N
-38B000:lH387AE4|H38B010
-387AE4:lI47|H387B84
-387B84:lI99|H387C2C
-387C2C:lI108|H387CDC
-387CDC:lI101|H387D94
-387D94:lI97|H387E54
-387E54:lI114|H387F1C
-387F1C:lI99|H387FEC
-387FEC:lI97|H3880C4
-3880C4:lI115|H3881A4
-3881A4:lI101|H38828C
-38828C:lI47|H38837C
-38837C:lI111|H388474
-388474:lI116|H388574
-388574:lI112|H38867C
-38867C:lI47|H38878C
-38878C:lI101|H38889C
-38889C:lI114|H3889AC
-3889AC:lI116|H388AB4
-388AB4:lI115|H388BC4
-388BC4:lI47|H388CD4
-388CD4:lI108|H388DE4
-388DE4:lI105|H388EF4
-388EF4:lI98|H38900C
-38900C:lI47|H38911C
-38911C:lI111|H38922C
-38922C:lI100|H38933C
-38933C:lI98|H38944C
-38944C:lI99|H389554
-389554:lI47|H38964C
-38964C:lI101|H389744
-389744:lI98|H38983C
-38983C:lI105|H389934
-389934:lI110|N
-38B010:lH387B8C|H38B020
-387B8C:lI47|H387C34
-387C34:lI99|H387CE4
-387CE4:lI108|H387D9C
-387D9C:lI101|H387E5C
-387E5C:lI97|H387F24
-387F24:lI114|H387FF4
-387FF4:lI99|H3880CC
-3880CC:lI97|H3881AC
-3881AC:lI115|H388294
-388294:lI101|H388384
-388384:lI47|H38847C
-38847C:lI111|H38857C
-38857C:lI116|H388684
-388684:lI112|H388794
-388794:lI47|H3888A4
-3888A4:lI101|H3889B4
-3889B4:lI114|H388ABC
-388ABC:lI116|H388BCC
-388BCC:lI115|H388CDC
-388CDC:lI47|H388DEC
-388DEC:lI108|H388EFC
-388EFC:lI105|H389014
-389014:lI98|H389124
-389124:lI47|H389234
-389234:lI111|H389344
-389344:lI98|H389454
-389454:lI115|H38955C
-38955C:lI101|H389654
-389654:lI114|H38974C
-38974C:lI118|H389844
-389844:lI101|H38993C
-38993C:lI114|H389A1C
-389A1C:lI47|H389AF4
-389AF4:lI101|H389BBC
-389BBC:lI98|H389C84
-389C84:lI105|H389D4C
-389D4C:lI110|N
-38B020:lH387C3C|H38B028
-387C3C:lI47|H387CEC
-387CEC:lI99|H387DA4
-387DA4:lI108|H387E64
-387E64:lI101|H387F2C
-387F2C:lI97|H387FFC
-387FFC:lI114|H3880D4
-3880D4:lI99|H3881B4
-3881B4:lI97|H38829C
-38829C:lI115|H38838C
-38838C:lI101|H388484
-388484:lI47|H388584
-388584:lI111|H38868C
-38868C:lI116|H38879C
-38879C:lI112|H3888AC
-3888AC:lI47|H3889BC
-3889BC:lI101|H388AC4
-388AC4:lI114|H388BD4
-388BD4:lI116|H388CE4
-388CE4:lI115|H388DF4
-388DF4:lI47|H388F04
-388F04:lI108|H38901C
-38901C:lI105|H38912C
-38912C:lI98|H38923C
-38923C:lI47|H38934C
-38934C:lI109|H38945C
-38945C:lI110|H389564
-389564:lI101|H38965C
-38965C:lI115|H389754
-389754:lI105|H38984C
-38984C:lI97|H389944
-389944:lI95|H389A24
-389A24:lI115|H389AFC
-389AFC:lI101|H389BC4
-389BC4:lI115|H389C8C
-389C8C:lI115|H389D54
-389D54:lI105|H389E14
-389E14:lI111|H389ECC
-389ECC:lI110|H389F7C
-389F7C:lI47|H38A01C
-38A01C:lI101|H38A0AC
-38A0AC:lI98|H38A12C
-38A12C:lI105|H38A19C
-38A19C:lI110|N
-38B028:lH387CF4|H38B030
-387CF4:lI47|H387DAC
-387DAC:lI99|H387E6C
-387E6C:lI108|H387F34
-387F34:lI101|H388004
-388004:lI97|H3880DC
-3880DC:lI114|H3881BC
-3881BC:lI99|H3882A4
-3882A4:lI97|H388394
-388394:lI115|H38848C
-38848C:lI101|H38858C
-38858C:lI47|H388694
-388694:lI111|H3887A4
-3887A4:lI116|H3888B4
-3888B4:lI112|H3889C4
-3889C4:lI47|H388ACC
-388ACC:lI101|H388BDC
-388BDC:lI114|H388CEC
-388CEC:lI116|H388DFC
-388DFC:lI115|H388F0C
-388F0C:lI47|H389024
-389024:lI108|H389134
-389134:lI105|H389244
-389244:lI98|H389354
-389354:lI47|H389464
-389464:lI109|H38956C
-38956C:lI110|H389664
-389664:lI101|H38975C
-38975C:lI115|H389854
-389854:lI105|H38994C
-38994C:lI97|H389A2C
-389A2C:lI47|H389B04
-389B04:lI101|H389BCC
-389BCC:lI98|H389C94
-389C94:lI105|H389D5C
-389D5C:lI110|N
-38B030:lH387DB4|H38B038
-387DB4:lI47|H387E74
-387E74:lI99|H387F3C
-387F3C:lI108|H38800C
-38800C:lI101|H3880E4
-3880E4:lI97|H3881C4
-3881C4:lI114|H3882AC
-3882AC:lI99|H38839C
-38839C:lI97|H388494
-388494:lI115|H388594
-388594:lI101|H38869C
-38869C:lI47|H3887AC
-3887AC:lI111|H3888BC
-3888BC:lI116|H3889CC
-3889CC:lI112|H388AD4
-388AD4:lI47|H388BE4
-388BE4:lI101|H388CF4
-388CF4:lI114|H388E04
-388E04:lI116|H388F14
-388F14:lI115|H38902C
-38902C:lI47|H38913C
-38913C:lI108|H38924C
-38924C:lI105|H38935C
-38935C:lI98|H38946C
-38946C:lI47|H389574
-389574:lI109|H38966C
-38966C:lI110|H389764
-389764:lI101|H38985C
-38985C:lI109|H389954
-389954:lI111|H389A34
-389A34:lI115|H389B0C
-389B0C:lI121|H389BD4
-389BD4:lI110|H389C9C
-389C9C:lI101|H389D64
-389D64:lI47|H389E1C
-389E1C:lI101|H389ED4
-389ED4:lI98|H389F84
-389F84:lI105|H38A024
-38A024:lI110|N
-38B038:lH387E7C|H38B040
-387E7C:lI47|H387F44
-387F44:lI99|H388014
-388014:lI108|H3880EC
-3880EC:lI101|H3881CC
-3881CC:lI97|H3882B4
-3882B4:lI114|H3883A4
-3883A4:lI99|H38849C
-38849C:lI97|H38859C
-38859C:lI115|H3886A4
-3886A4:lI101|H3887B4
-3887B4:lI47|H3888C4
-3888C4:lI111|H3889D4
-3889D4:lI116|H388ADC
-388ADC:lI112|H388BEC
-388BEC:lI47|H388CFC
-388CFC:lI101|H388E0C
-388E0C:lI114|H388F1C
-388F1C:lI116|H389034
-389034:lI115|H389144
-389144:lI47|H389254
-389254:lI108|H389364
-389364:lI105|H389474
-389474:lI98|H38957C
-38957C:lI47|H389674
-389674:lI109|H38976C
-38976C:lI101|H389864
-389864:lI103|H38995C
-38995C:lI97|H389A3C
-389A3C:lI99|H389B14
-389B14:lI111|H389BDC
-389BDC:lI47|H389CA4
-389CA4:lI101|H389D6C
-389D6C:lI98|H389E24
-389E24:lI105|H389EDC
-389EDC:lI110|N
-38B040:lH387F4C|H38B048
-387F4C:lI47|H38801C
-38801C:lI99|H3880F4
-3880F4:lI108|H3881D4
-3881D4:lI101|H3882BC
-3882BC:lI97|H3883AC
-3883AC:lI114|H3884A4
-3884A4:lI99|H3885A4
-3885A4:lI97|H3886AC
-3886AC:lI115|H3887BC
-3887BC:lI101|H3888CC
-3888CC:lI47|H3889DC
-3889DC:lI111|H388AE4
-388AE4:lI116|H388BF4
-388BF4:lI112|H388D04
-388D04:lI47|H388E14
-388E14:lI101|H388F24
-388F24:lI114|H38903C
-38903C:lI116|H38914C
-38914C:lI115|H38925C
-38925C:lI47|H38936C
-38936C:lI108|H38947C
-38947C:lI105|H389584
-389584:lI98|H38967C
-38967C:lI47|H389774
-389774:lI106|H38986C
-38986C:lI105|H389964
-389964:lI110|H389A44
-389A44:lI116|H389B1C
-389B1C:lI101|H389BE4
-389BE4:lI114|H389CAC
-389CAC:lI102|H389D74
-389D74:lI97|H389E2C
-389E2C:lI99|H389EE4
-389EE4:lI101|N
-38B048:lH388024|H38B050
-388024:lI47|H3880FC
-3880FC:lI99|H3881DC
-3881DC:lI108|H3882C4
-3882C4:lI101|H3883B4
-3883B4:lI97|H3884AC
-3884AC:lI114|H3885AC
-3885AC:lI99|H3886B4
-3886B4:lI97|H3887C4
-3887C4:lI115|H3888D4
-3888D4:lI101|H3889E4
-3889E4:lI47|H388AEC
-388AEC:lI111|H388BFC
-388BFC:lI116|H388D0C
-388D0C:lI112|H388E1C
-388E1C:lI47|H388F2C
-388F2C:lI101|H389044
-389044:lI114|H389154
-389154:lI116|H389264
-389264:lI115|H389374
-389374:lI47|H389484
-389484:lI108|H38958C
-38958C:lI105|H389684
-389684:lI98|H38977C
-38977C:lI47|H389874
-389874:lI105|H38996C
-38996C:lI110|H389A4C
-389A4C:lI101|H389B24
-389B24:lI116|H389BEC
-389BEC:lI115|H389CB4
-389CB4:lI47|H389D7C
-389D7C:lI101|H389E34
-389E34:lI98|H389EEC
-389EEC:lI105|H389F8C
-389F8C:lI110|N
-38B050:lH388104|H38B058
-388104:lI47|H3881E4
-3881E4:lI99|H3882CC
-3882CC:lI108|H3883BC
-3883BC:lI101|H3884B4
-3884B4:lI97|H3885B4
-3885B4:lI114|H3886BC
-3886BC:lI99|H3887CC
-3887CC:lI97|H3888DC
-3888DC:lI115|H3889EC
-3889EC:lI101|H388AF4
-388AF4:lI47|H388C04
-388C04:lI111|H388D14
-388D14:lI116|H388E24
-388E24:lI112|H388F34
-388F34:lI47|H38904C
-38904C:lI101|H38915C
-38915C:lI114|H38926C
-38926C:lI116|H38937C
-38937C:lI115|H38948C
-38948C:lI47|H389594
-389594:lI108|H38968C
-38968C:lI105|H389784
-389784:lI98|H38987C
-38987C:lI47|H389974
-389974:lI105|H389A54
-389A54:lI99|H389B2C
-389B2C:lI47|H389BF4
-389BF4:lI101|H389CBC
-389CBC:lI98|H389D84
-389D84:lI105|H389E3C
-389E3C:lI110|N
-38B058:lH3881EC|H38B060
-3881EC:lI47|H3882D4
-3882D4:lI99|H3883C4
-3883C4:lI108|H3884BC
-3884BC:lI101|H3885BC
-3885BC:lI97|H3886C4
-3886C4:lI114|H3887D4
-3887D4:lI99|H3888E4
-3888E4:lI97|H3889F4
-3889F4:lI115|H388AFC
-388AFC:lI101|H388C0C
-388C0C:lI47|H388D1C
-388D1C:lI111|H388E2C
-388E2C:lI116|H388F3C
-388F3C:lI112|H389054
-389054:lI47|H389164
-389164:lI101|H389274
-389274:lI114|H389384
-389384:lI116|H389494
-389494:lI115|H38959C
-38959C:lI47|H389694
-389694:lI108|H38978C
-38978C:lI105|H389884
-389884:lI98|H38997C
-38997C:lI47|H389A5C
-389A5C:lI104|H389B34
-389B34:lI105|H389BFC
-389BFC:lI112|H389CC4
-389CC4:lI101|H389D8C
-389D8C:lI47|H389E44
-389E44:lI101|H389EF4
-389EF4:lI98|H389F94
-389F94:lI105|H38A02C
-38A02C:lI110|N
-38B060:lH3882DC|H38B068
-3882DC:lI47|H3883CC
-3883CC:lI99|H3884C4
-3884C4:lI108|H3885C4
-3885C4:lI101|H3886CC
-3886CC:lI97|H3887DC
-3887DC:lI114|H3888EC
-3888EC:lI99|H3889FC
-3889FC:lI97|H388B04
-388B04:lI115|H388C14
-388C14:lI101|H388D24
-388D24:lI47|H388E34
-388E34:lI111|H388F44
-388F44:lI116|H38905C
-38905C:lI112|H38916C
-38916C:lI47|H38927C
-38927C:lI101|H38938C
-38938C:lI114|H38949C
-38949C:lI116|H3895A4
-3895A4:lI115|H38969C
-38969C:lI47|H389794
-389794:lI108|H38988C
-38988C:lI105|H389984
-389984:lI98|H389A64
-389A64:lI47|H389B3C
-389B3C:lI103|H389C04
-389C04:lI115|H389CCC
-389CCC:lI47|H389D94
-389D94:lI101|H389E4C
-389E4C:lI98|H389EFC
-389EFC:lI105|H389F9C
-389F9C:lI110|N
-38B068:lH3883D4|H38B070
-3883D4:lI47|H3884CC
-3884CC:lI99|H3885CC
-3885CC:lI108|H3886D4
-3886D4:lI101|H3887E4
-3887E4:lI97|H3888F4
-3888F4:lI114|H388A04
-388A04:lI99|H388B0C
-388B0C:lI97|H388C1C
-388C1C:lI115|H388D2C
-388D2C:lI101|H388E3C
-388E3C:lI47|H388F4C
-388F4C:lI111|H389064
-389064:lI116|H389174
-389174:lI112|H389284
-389284:lI47|H389394
-389394:lI101|H3894A4
-3894A4:lI114|H3895AC
-3895AC:lI116|H3896A4
-3896A4:lI115|H38979C
-38979C:lI47|H389894
-389894:lI108|H38998C
-38998C:lI105|H389A6C
-389A6C:lI98|H389B44
-389B44:lI47|H389C0C
-389C0C:lI101|H389CD4
-389CD4:lI118|H389D9C
-389D9C:lI97|H389E54
-389E54:lI47|H389F04
-389F04:lI101|H389FA4
-389FA4:lI98|H38A034
-38A034:lI105|H38A0B4
-38A0B4:lI110|N
-38B070:lH3884D4|H38B078
-3884D4:lI47|H3885D4
-3885D4:lI99|H3886DC
-3886DC:lI108|H3887EC
-3887EC:lI101|H3888FC
-3888FC:lI97|H388A0C
-388A0C:lI114|H388B14
-388B14:lI99|H388C24
-388C24:lI97|H388D34
-388D34:lI115|H388E44
-388E44:lI101|H388F54
-388F54:lI47|H38906C
-38906C:lI111|H38917C
-38917C:lI116|H38928C
-38928C:lI112|H38939C
-38939C:lI47|H3894AC
-3894AC:lI101|H3895B4
-3895B4:lI114|H3896AC
-3896AC:lI116|H3897A4
-3897A4:lI115|H38989C
-38989C:lI47|H389994
-389994:lI108|H389A74
-389A74:lI105|H389B4C
-389B4C:lI98|H389C14
-389C14:lI47|H389CDC
-389CDC:lI101|H389DA4
-389DA4:lI116|H389E5C
-389E5C:lI47|H389F0C
-389F0C:lI101|H389FAC
-389FAC:lI98|H38A03C
-38A03C:lI105|H38A0BC
-38A0BC:lI110|N
-38B078:lH3885DC|H38B080
-3885DC:lI47|H3886E4
-3886E4:lI99|H3887F4
-3887F4:lI108|H388904
-388904:lI101|H388A14
-388A14:lI97|H388B1C
-388B1C:lI114|H388C2C
-388C2C:lI99|H388D3C
-388D3C:lI97|H388E4C
-388E4C:lI115|H388F5C
-388F5C:lI101|H389074
-389074:lI47|H389184
-389184:lI111|H389294
-389294:lI116|H3893A4
-3893A4:lI112|H3894B4
-3894B4:lI47|H3895BC
-3895BC:lI101|H3896B4
-3896B4:lI114|H3897AC
-3897AC:lI116|H3898A4
-3898A4:lI115|H38999C
-38999C:lI47|H389A7C
-389A7C:lI108|H389B54
-389B54:lI105|H389C1C
-389C1C:lI98|H389CE4
-389CE4:lI47|H389DAC
-389DAC:lI101|H389E64
-389E64:lI114|H389F14
-389F14:lI108|H389FB4
-389FB4:lI95|H38A044
-38A044:lI105|H38A0C4
-38A0C4:lI110|H38A134
-38A134:lI116|H38A1A4
-38A1A4:lI101|H38A20C
-38A20C:lI114|H38A274
-38A274:lI102|H38A2DC
-38A2DC:lI97|H38A344
-38A344:lI99|H38A3AC
-38A3AC:lI101|N
-38B080:lH3886EC|H38B088
-3886EC:lI47|H3887FC
-3887FC:lI99|H38890C
-38890C:lI108|H388A1C
-388A1C:lI101|H388B24
-388B24:lI97|H388C34
-388C34:lI114|H388D44
-388D44:lI99|H388E54
-388E54:lI97|H388F64
-388F64:lI115|H38907C
-38907C:lI101|H38918C
-38918C:lI47|H38929C
-38929C:lI111|H3893AC
-3893AC:lI116|H3894BC
-3894BC:lI112|H3895C4
-3895C4:lI47|H3896BC
-3896BC:lI101|H3897B4
-3897B4:lI114|H3898AC
-3898AC:lI116|H3899A4
-3899A4:lI115|H389A84
-389A84:lI47|H389B5C
-389B5C:lI108|H389C24
-389C24:lI105|H389CEC
-389CEC:lI98|H389DB4
-389DB4:lI47|H389E6C
-389E6C:lI100|H389F1C
-389F1C:lI101|H389FBC
-389FBC:lI98|H38A04C
-38A04C:lI117|H38A0CC
-38A0CC:lI103|H38A13C
-38A13C:lI103|H38A1AC
-38A1AC:lI101|H38A214
-38A214:lI114|H38A27C
-38A27C:lI47|H38A2E4
-38A2E4:lI101|H38A34C
-38A34C:lI98|H38A3B4
-38A3B4:lI105|H38A414
-38A414:lI110|N
-38B088:lH388804|H38B090
-388804:lI47|H388914
-388914:lI99|H388A24
-388A24:lI108|H388B2C
-388B2C:lI101|H388C3C
-388C3C:lI97|H388D4C
-388D4C:lI114|H388E5C
-388E5C:lI99|H388F6C
-388F6C:lI97|H389084
-389084:lI115|H389194
-389194:lI101|H3892A4
-3892A4:lI47|H3893B4
-3893B4:lI111|H3894C4
-3894C4:lI116|H3895CC
-3895CC:lI112|H3896C4
-3896C4:lI47|H3897BC
-3897BC:lI101|H3898B4
-3898B4:lI114|H3899AC
-3899AC:lI116|H389A8C
-389A8C:lI115|H389B64
-389B64:lI47|H389C2C
-389C2C:lI108|H389CF4
-389CF4:lI105|H389DBC
-389DBC:lI98|H389E74
-389E74:lI47|H389F24
-389F24:lI99|H389FC4
-389FC4:lI114|H38A054
-38A054:lI121|H38A0D4
-38A0D4:lI112|H38A144
-38A144:lI116|H38A1B4
-38A1B4:lI111|H38A21C
-38A21C:lI47|H38A284
-38A284:lI101|H38A2EC
-38A2EC:lI98|H38A354
-38A354:lI105|H38A3BC
-38A3BC:lI110|N
-38B090:lH38891C|H38B098
-38891C:lI47|H388A2C
-388A2C:lI99|H388B34
-388B34:lI108|H388C44
-388C44:lI101|H388D54
-388D54:lI97|H388E64
-388E64:lI114|H388F74
-388F74:lI99|H38908C
-38908C:lI97|H38919C
-38919C:lI115|H3892AC
-3892AC:lI101|H3893BC
-3893BC:lI47|H3894CC
-3894CC:lI111|H3895D4
-3895D4:lI116|H3896CC
-3896CC:lI112|H3897C4
-3897C4:lI47|H3898BC
-3898BC:lI101|H3899B4
-3899B4:lI114|H389A94
-389A94:lI116|H389B6C
-389B6C:lI115|H389C34
-389C34:lI47|H389CFC
-389CFC:lI108|H389DC4
-389DC4:lI105|H389E7C
-389E7C:lI98|H389F2C
-389F2C:lI47|H389FCC
-389FCC:lI99|H38A05C
-38A05C:lI111|H38A0DC
-38A0DC:lI115|H38A14C
-38A14C:lI84|H38A1BC
-38A1BC:lI114|H38A224
-38A224:lI97|H38A28C
-38A28C:lI110|H38A2F4
-38A2F4:lI115|H38A35C
-38A35C:lI97|H38A3C4
-38A3C4:lI99|H38A41C
-38A41C:lI116|H38A46C
-38A46C:lI105|H38A4BC
-38A4BC:lI111|H38A50C
-38A50C:lI110|H38A554
-38A554:lI115|H38A59C
-38A59C:lI47|H38A5E4
-38A5E4:lI101|H38A62C
-38A62C:lI98|H38A66C
-38A66C:lI105|H38A6A4
-38A6A4:lI110|N
-38B098:lH388A34|H38B0A0
-388A34:lI47|H388B3C
-388B3C:lI99|H388C4C
-388C4C:lI108|H388D5C
-388D5C:lI101|H388E6C
-388E6C:lI97|H388F7C
-388F7C:lI114|H389094
-389094:lI99|H3891A4
-3891A4:lI97|H3892B4
-3892B4:lI115|H3893C4
-3893C4:lI101|H3894D4
-3894D4:lI47|H3895DC
-3895DC:lI111|H3896D4
-3896D4:lI116|H3897CC
-3897CC:lI112|H3898C4
-3898C4:lI47|H3899BC
-3899BC:lI101|H389A9C
-389A9C:lI114|H389B74
-389B74:lI116|H389C3C
-389C3C:lI115|H389D04
-389D04:lI47|H389DCC
-389DCC:lI108|H389E84
-389E84:lI105|H389F34
-389F34:lI98|H389FD4
-389FD4:lI47|H38A064
-38A064:lI99|H38A0E4
-38A0E4:lI111|H38A154
-38A154:lI115|H38A1C4
-38A1C4:lI84|H38A22C
-38A22C:lI105|H38A294
-38A294:lI109|H38A2FC
-38A2FC:lI101|H38A364
-38A364:lI47|H38A3CC
-38A3CC:lI101|H38A424
-38A424:lI98|H38A474
-38A474:lI105|H38A4C4
-38A4C4:lI110|N
-38B0A0:lH388B44|H38B0A8
-388B44:lI47|H388C54
-388C54:lI99|H388D64
-388D64:lI108|H388E74
-388E74:lI101|H388F84
-388F84:lI97|H38909C
-38909C:lI114|H3891AC
-3891AC:lI99|H3892BC
-3892BC:lI97|H3893CC
-3893CC:lI115|H3894DC
-3894DC:lI101|H3895E4
-3895E4:lI47|H3896DC
-3896DC:lI111|H3897D4
-3897D4:lI116|H3898CC
-3898CC:lI112|H3899C4
-3899C4:lI47|H389AA4
-389AA4:lI101|H389B7C
-389B7C:lI114|H389C44
-389C44:lI116|H389D0C
-389D0C:lI115|H389DD4
-389DD4:lI47|H389E8C
-389E8C:lI108|H389F3C
-389F3C:lI105|H389FDC
-389FDC:lI98|H38A06C
-38A06C:lI47|H38A0EC
-38A0EC:lI99|H38A15C
-38A15C:lI111|H38A1CC
-38A1CC:lI115|H38A234
-38A234:lI80|H38A29C
-38A29C:lI114|H38A304
-38A304:lI111|H38A36C
-38A36C:lI112|H38A3D4
-38A3D4:lI101|H38A42C
-38A42C:lI114|H38A47C
-38A47C:lI116|H38A4CC
-38A4CC:lI121|H38A514
-38A514:lI47|H38A55C
-38A55C:lI101|H38A5A4
-38A5A4:lI98|H38A5EC
-38A5EC:lI105|H38A634
-38A634:lI110|N
-38B0A8:lH388C5C|H38B0B0
-388C5C:lI47|H388D6C
-388D6C:lI99|H388E7C
-388E7C:lI108|H388F8C
-388F8C:lI101|H3890A4
-3890A4:lI97|H3891B4
-3891B4:lI114|H3892C4
-3892C4:lI99|H3893D4
-3893D4:lI97|H3894E4
-3894E4:lI115|H3895EC
-3895EC:lI101|H3896E4
-3896E4:lI47|H3897DC
-3897DC:lI111|H3898D4
-3898D4:lI116|H3899CC
-3899CC:lI112|H389AAC
-389AAC:lI47|H389B84
-389B84:lI101|H389C4C
-389C4C:lI114|H389D14
-389D14:lI116|H389DDC
-389DDC:lI115|H389E94
-389E94:lI47|H389F44
-389F44:lI108|H389FE4
-389FE4:lI105|H38A074
-38A074:lI98|H38A0F4
-38A0F4:lI47|H38A164
-38A164:lI99|H38A1D4
-38A1D4:lI111|H38A23C
-38A23C:lI115|H38A2A4
-38A2A4:lI78|H38A30C
-38A30C:lI111|H38A374
-38A374:lI116|H38A3DC
-38A3DC:lI105|H38A434
-38A434:lI102|H38A484
-38A484:lI105|H38A4D4
-38A4D4:lI99|H38A51C
-38A51C:lI97|H38A564
-38A564:lI116|H38A5AC
-38A5AC:lI105|H38A5F4
-38A5F4:lI111|H38A63C
-38A63C:lI110|H38A674
-38A674:lI47|H38A6AC
-38A6AC:lI101|H38A6D4
-38A6D4:lI98|H38A6EC
-38A6EC:lI105|H38A704
-38A704:lI110|N
-38B0B0:lH388D74|H38B0B8
-388D74:lI47|H388E84
-388E84:lI99|H388F94
-388F94:lI108|H3890AC
-3890AC:lI101|H3891BC
-3891BC:lI97|H3892CC
-3892CC:lI114|H3893DC
-3893DC:lI99|H3894EC
-3894EC:lI97|H3895F4
-3895F4:lI115|H3896EC
-3896EC:lI101|H3897E4
-3897E4:lI47|H3898DC
-3898DC:lI111|H3899D4
-3899D4:lI116|H389AB4
-389AB4:lI112|H389B8C
-389B8C:lI47|H389C54
-389C54:lI101|H389D1C
-389D1C:lI114|H389DE4
-389DE4:lI116|H389E9C
-389E9C:lI115|H389F4C
-389F4C:lI47|H389FEC
-389FEC:lI108|H38A07C
-38A07C:lI105|H38A0FC
-38A0FC:lI98|H38A16C
-38A16C:lI47|H38A1DC
-38A1DC:lI99|H38A244
-38A244:lI111|H38A2AC
-38A2AC:lI115|H38A314
-38A314:lI70|H38A37C
-38A37C:lI105|H38A3E4
-38A3E4:lI108|H38A43C
-38A43C:lI101|H38A48C
-38A48C:lI84|H38A4DC
-38A4DC:lI114|H38A524
-38A524:lI97|H38A56C
-38A56C:lI110|H38A5B4
-38A5B4:lI115|H38A5FC
-38A5FC:lI102|H38A644
-38A644:lI101|H38A67C
-38A67C:lI114|H38A6B4
-38A6B4:lI47|H38A6DC
-38A6DC:lI101|H38A6F4
-38A6F4:lI98|H38A70C
-38A70C:lI105|H38A71C
-38A71C:lI110|N
-38B0B8:lH388E8C|H38B0C0
-388E8C:lI47|H388F9C
-388F9C:lI99|H3890B4
-3890B4:lI108|H3891C4
-3891C4:lI101|H3892D4
-3892D4:lI97|H3893E4
-3893E4:lI114|H3894F4
-3894F4:lI99|H3895FC
-3895FC:lI97|H3896F4
-3896F4:lI115|H3897EC
-3897EC:lI101|H3898E4
-3898E4:lI47|H3899DC
-3899DC:lI111|H389ABC
-389ABC:lI116|H389B94
-389B94:lI112|H389C5C
-389C5C:lI47|H389D24
-389D24:lI101|H389DEC
-389DEC:lI114|H389EA4
-389EA4:lI116|H389F54
-389F54:lI115|H389FF4
-389FF4:lI47|H38A084
-38A084:lI108|H38A104
-38A104:lI105|H38A174
-38A174:lI98|H38A1E4
-38A1E4:lI47|H38A24C
-38A24C:lI99|H38A2B4
-38A2B4:lI111|H38A31C
-38A31C:lI115|H38A384
-38A384:lI69|H38A3EC
-38A3EC:lI118|H38A444
-38A444:lI101|H38A494
-38A494:lI110|H38A4E4
-38A4E4:lI116|H38A52C
-38A52C:lI68|H38A574
-38A574:lI111|H38A5BC
-38A5BC:lI109|H38A604
-38A604:lI97|H38A64C
-38A64C:lI105|H38A684
-38A684:lI110|H38A6BC
-38A6BC:lI47|H38A6E4
-38A6E4:lI101|H38A6FC
-38A6FC:lI98|H38A714
-38A714:lI105|H38A724
-38A724:lI110|N
-38B0C0:lH388FA4|H38B0C8
-388FA4:lI47|H3890BC
-3890BC:lI99|H3891CC
-3891CC:lI108|H3892DC
-3892DC:lI101|H3893EC
-3893EC:lI97|H3894FC
-3894FC:lI114|H389604
-389604:lI99|H3896FC
-3896FC:lI97|H3897F4
-3897F4:lI115|H3898EC
-3898EC:lI101|H3899E4
-3899E4:lI47|H389AC4
-389AC4:lI111|H389B9C
-389B9C:lI116|H389C64
-389C64:lI112|H389D2C
-389D2C:lI47|H389DF4
-389DF4:lI101|H389EAC
-389EAC:lI114|H389F5C
-389F5C:lI116|H389FFC
-389FFC:lI115|H38A08C
-38A08C:lI47|H38A10C
-38A10C:lI108|H38A17C
-38A17C:lI105|H38A1EC
-38A1EC:lI98|H38A254
-38A254:lI47|H38A2BC
-38A2BC:lI99|H38A324
-38A324:lI111|H38A38C
-38A38C:lI115|H38A3F4
-38A3F4:lI69|H38A44C
-38A44C:lI118|H38A49C
-38A49C:lI101|H38A4EC
-38A4EC:lI110|H38A534
-38A534:lI116|H38A57C
-38A57C:lI47|H38A5C4
-38A5C4:lI101|H38A60C
-38A60C:lI98|H38A654
-38A654:lI105|H38A68C
-38A68C:lI110|N
-38B0C8:lH3890C4|H38B0D0
-3890C4:lI47|H3891D4
-3891D4:lI99|H3892E4
-3892E4:lI108|H3893F4
-3893F4:lI101|H389504
-389504:lI97|H38960C
-38960C:lI114|H389704
-389704:lI99|H3897FC
-3897FC:lI97|H3898F4
-3898F4:lI115|H3899EC
-3899EC:lI101|H389ACC
-389ACC:lI47|H389BA4
-389BA4:lI111|H389C6C
-389C6C:lI116|H389D34
-389D34:lI112|H389DFC
-389DFC:lI47|H389EB4
-389EB4:lI101|H389F64
-389F64:lI114|H38A004
-38A004:lI116|H38A094
-38A094:lI115|H38A114
-38A114:lI47|H38A184
-38A184:lI108|H38A1F4
-38A1F4:lI105|H38A25C
-38A25C:lI98|H38A2C4
-38A2C4:lI47|H38A32C
-38A32C:lI99|H38A394
-38A394:lI111|H38A3FC
-38A3FC:lI109|H38A454
-38A454:lI112|H38A4A4
-38A4A4:lI105|H38A4F4
-38A4F4:lI108|H38A53C
-38A53C:lI101|H38A584
-38A584:lI114|H38A5CC
-38A5CC:lI47|H38A614
-38A614:lI101|H38A65C
-38A65C:lI98|H38A694
-38A694:lI105|H38A6C4
-38A6C4:lI110|N
-38B0D0:lH3891DC|H38B0D8
-3891DC:lI47|H3892EC
-3892EC:lI99|H3893FC
-3893FC:lI108|H38950C
-38950C:lI101|H389614
-389614:lI97|H38970C
-38970C:lI114|H389804
-389804:lI99|H3898FC
-3898FC:lI97|H3899F4
-3899F4:lI115|H389AD4
-389AD4:lI101|H389BAC
-389BAC:lI47|H389C74
-389C74:lI111|H389D3C
-389D3C:lI116|H389E04
-389E04:lI112|H389EBC
-389EBC:lI47|H389F6C
-389F6C:lI101|H38A00C
-38A00C:lI114|H38A09C
-38A09C:lI116|H38A11C
-38A11C:lI115|H38A18C
-38A18C:lI47|H38A1FC
-38A1FC:lI108|H38A264
-38A264:lI105|H38A2CC
-38A2CC:lI98|H38A334
-38A334:lI47|H38A39C
-38A39C:lI97|H38A404
-38A404:lI115|H38A45C
-38A45C:lI110|H38A4AC
-38A4AC:lI49|H38A4FC
-38A4FC:lI47|H38A544
-38A544:lI101|H38A58C
-38A58C:lI98|H38A5D4
-38A5D4:lI105|H38A61C
-38A61C:lI110|N
-38B0D8:lH3892F4|H38B0E0
-3892F4:lI47|H389404
-389404:lI99|H389514
-389514:lI108|H38961C
-38961C:lI101|H389714
-389714:lI97|H38980C
-38980C:lI114|H389904
-389904:lI99|H3899FC
-3899FC:lI97|H389ADC
-389ADC:lI115|H389BB4
-389BB4:lI101|H389C7C
-389C7C:lI47|H389D44
-389D44:lI111|H389E0C
-389E0C:lI116|H389EC4
-389EC4:lI112|H389F74
-389F74:lI47|H38A014
-38A014:lI101|H38A0A4
-38A0A4:lI114|H38A124
-38A124:lI116|H38A194
-38A194:lI115|H38A204
-38A204:lI47|H38A26C
-38A26C:lI108|H38A2D4
-38A2D4:lI105|H38A33C
-38A33C:lI98|H38A3A4
-38A3A4:lI47|H38A40C
-38A40C:lI97|H38A464
-38A464:lI112|H38A4B4
-38A4B4:lI112|H38A504
-38A504:lI109|H38A54C
-38A54C:lI111|H38A594
-38A594:lI110|H38A5DC
-38A5DC:lI47|H38A624
-38A624:lI101|H38A664
-38A664:lI98|H38A69C
-38A69C:lI105|H38A6CC
-38A6CC:lI110|N
-38B0E0:lH38AA88|H38B0E8
-38AA88:lI47|H38AA90
-38AA90:lI104|H38AA98
-38AA98:lI111|H38AAA0
-38AAA0:lI109|H38AAA8
-38AAA8:lI101|H38AAB0
-38AAB0:lI47|H38AAB8
-38AAB8:lI115|H38AAC0
-38AAC0:lI105|H38AAC8
-38AAC8:lI114|H38AAD0
-38AAD0:lI105|H38AAD8
-38AAD8:lI47|H38AAE0
-38AAE0:lI101|H38AAE8
-38AAE8:lI114|H38AAF0
-38AAF0:lI108|H38AAF8
-38AAF8:lI97|H38AB00
-38AB00:lI110|H38AB08
-38AB08:lI103|N
-38B0E8:lH38AB1C|H38B0F0
-38AB1C:lI47|H38AB2C
-38AB2C:lI104|H38AB4C
-38AB4C:lI111|H38AB74
-38AB74:lI109|H38ABA4
-38ABA4:lI101|H38ABC4
-38ABC4:lI47|H38ABE4
-38ABE4:lI115|H38AC04
-38AC04:lI105|H38AC24
-38AC24:lI114|H38AC3C
-38AC3C:lI105|H38AC44
-38AC44:lI47|H38AC4C
-38AC4C:lI116|H38AC54
-38AC54:lI111|H38AC5C
-38AC5C:lI111|H38AC64
-38AC64:lI108|H38AC6C
-38AC6C:lI115|H38AC74
-38AC74:lI47|H38AC7C
-38AC7C:lI100|H38AC84
-38AC84:lI105|H38AC8C
-38AC8C:lI115|H38AC94
-38AC94:lI116|H38AC9C
-38AC9C:lI101|H38ACA4
-38ACA4:lI108|H38ACAC
-38ACAC:lI47|H38ACB4
-38ACB4:lI101|H38ACBC
-38ACBC:lI98|H38ACC4
-38ACC4:lI105|H38ACCC
-38ACCC:lI110|N
-38B0F0:lH38B0F8|N
-38B0F8:lI47|H38B100
-38B100:lI104|H38B108
-38B108:lI111|H38B110
-38B110:lI109|H38B118
-38B118:lI101|H38B120
-38B120:lI47|H38B128
-38B128:lI115|H38B130
-38B130:lI105|H38B138
-38B138:lI114|H38B140
-38B140:lI105|H38B148
-38B148:lI47|H38B150
-38B150:lI79|H38B158
-38B158:lI84|H38B160
-38B160:lI80|H38B168
-38B168:lI47|H38B170
-38B170:lI103|H38B178
-38B178:lI112|H38B180
-38B180:lI114|H38B188
-38B188:lI115|H38B190
-38B190:lI95|H38B198
-38B198:lI116|H38B1A0
-38B1A0:lI114|H38B1A8
-38B1A8:lI97|H38B1B0
-38B1B0:lI99|H38B1B8
-38B1B8:lI101|H38B1C0
-38B1C0:lI47|H38B1C8
-38B1C8:lI106|H38B1D0
-38B1D0:lI97|H38B1D8
-38B1D8:lI110|N
-3873BC:lI47|H3873CC
-3873CC:lI99|H3873E4
-3873E4:lI108|H3873FC
-3873FC:lI101|H38741C
-38741C:lI97|H387444
-387444:lI114|H387474
-387474:lI99|H3874AC
-3874AC:lI97|H3874EC
-3874EC:lI115|H387534
-387534:lI101|H387584
-387584:lI47|H3875DC
-3875DC:lI111|H38763C
-38763C:lI116|H3876A4
-3876A4:lI112|H387714
-387714:lI47|H38778C
-38778C:lI101|H38780C
-38780C:lI114|H387894
-387894:lI116|H387924
-387924:lI115|N
-=proc_dictionary:<0.19.0>
-H370244
-H370250
-=proc_stack:<0.19.0>
-36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36B17C
-y4:P<0.19.0>
-y5:P<0.9.0>
-36b478:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37025C
-=proc_heap:<0.19.0>
-36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
-370238:t2:P<0.19.0>,A8:user_sup
-37025C:lAA:gen_server|H37027C
-37027C:lP<0.9.0>|H37028C
-37028C:lP<0.9.0>|H370294
-370294:lA11:supervisor_bridge|H37029C
-37029C:lH3702A4|H3702AC
-3702A4:lA8:user_sup|H3702B4
-3702B4:lN|H3702BC
-3702BC:lA4:self|N
-3702AC:lN|N
-370244:t2:AD:$initial_call,H370264
-370264:t3:A3:gen,A7:init_it,H37025C
-370250:t2:AA:$ancestors,H370274
-370274:lAA:kernel_sup|H370284
-370284:lP<0.8.0>|N
-=proc_dictionary:<0.20.0>
-H36F8A8
-=proc_stack:<0.20.0>
-36a714:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:H36F8C4
-y3:P<0.21.0>
-y4:P<0.22.0>
-y5:p<0.72>
-y6:p<0.72>
-=proc_heap:<0.20.0>
-36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
-36F8F0:lH36F900|H36F910
-36F900:t3:I1,P<0.21.0>,H36F920
-36F920:t0:
-36F910:lH36F924|N
-36F924:t3:I2,P<0.22.0>,H36F93C
-36F93C:t3:A5:shell,A5:start,N
-36F8A8:t2:A3:eof,A5:false
-=proc_dictionary:<0.21.0>
-H3709DC
-H3709D0
-H3709F8
-=proc_stack:<0.21.0>
-370d1c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:A9:undefined
-y2:P<0.20.0>
-=proc_heap:<0.21.0>
-3709DC:t2:AB:line_buffer,N
-3709D0:t2:AB:kill_buffer,N
-3709F8:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.22.0>
-H370D44
-H370D60
-H370D7C
-H370D38
-=proc_stack:<0.22.0>
-374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
-y0:N
-y1:N
-y2:A8:infinity
-y3:H374A00
-y4:P<0.20.0>
-y5:H374A28
-374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
-y0:H37499C
-y1:A6:io_lib
-y2:A9:get_until
-y3:H3748B8
-y4:P<0.20.0>
-y5:A5:start
-374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
-y0:P<0.49.0>
-y1:P<0.22.0>
-374acc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:P<0.25.0>
-y2:P<0.20.0>
-=proc_heap:<0.22.0>
-374A00:t4:A4:line,H37499C,H3749A4,A4:none
-3749A4:t2:N,N
-37499C:lI50|H374994
-374994:lI62|H37498C
-37498C:lI32|N
-374A28:t4:A5:stack,H370D58,H374A24,N
-374A24:t0:
-370D58:lH370D74|N
-370D74:lI99|H370D88
-370D88:lI114|H370D90
-370D90:lI97|H370D98
-370D98:lI115|H370DA0
-370DA0:lI104|H370DA8
-370DA8:lI100|H370DB0
-370DB0:lI117|H370DB8
-370DB8:lI109|H370DC0
-370DC0:lI112|H370DC8
-370DC8:lI95|H370DD0
-370DD0:lI118|H370DD8
-370DD8:lI105|H370DE0
-370DE0:lI101|H370DE8
-370DE8:lI119|H370DF0
-370DF0:lI101|H370DF8
-370DF8:lI114|H370E00
-370E00:lI58|H370E08
-370E08:lI115|H370E10
-370E10:lI116|H370E18
-370E18:lI97|H370E20
-370E20:lI114|H370E28
-370E28:lI116|H370E30
-370E30:lI40|H370E38
-370E38:lI41|H370E40
-370E40:lI46|H370E48
-370E48:lI10|N
-3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
-3748B0:lI1|N
-370D44:t2:AB:line_buffer,H370D58
-370D60:t2:A5:shell,P<0.25.0>
-370D7C:t2:AB:kill_buffer,N
-370D38:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.23.0>
-H376464
-H376448
-=proc_stack:<0.23.0>
-376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:kernel_config
-y3:N
-y4:P<0.23.0>
-y5:P<0.9.0>
-376770:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H376418
-=proc_heap:<0.23.0>
-376418:lAA:gen_server|H376410
-376410:lP<0.9.0>|H376408
-376408:lP<0.9.0>|H376400
-376400:lAD:kernel_config|H3763F8
-3763F8:lN|H3763F0
-3763F0:lN|N
-376464:t2:AD:$initial_call,H376454
-376454:t3:A3:gen,A7:init_it,H376418
-376448:t2:AA:$ancestors,H376440
-376440:lAA:kernel_sup|H376420
-376420:lP<0.8.0>|N
-=proc_dictionary:<0.24.0>
-H3705E0
-H3705EC
-=proc_stack:<0.24.0>
-36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F018
-y4:AF:kernel_safe_sup
-y5:P<0.9.0>
-36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37063C
-=proc_heap:<0.24.0>
-36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
-36F044:lH36F04C|N
-36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
-370660:lA13:inet_gethost_native|N
-370650:t3:A13:inet_gethost_native,AA:start_link,N
-370644:t2:A5:local,AF:kernel_safe_sup
-37063C:lAA:gen_server|H3706AC
-3706AC:lP<0.9.0>|H3706BC
-3706BC:lP<0.9.0>|H3706C4
-3706C4:lH3706CC|H3706D8
-3706CC:t2:A5:local,AF:kernel_safe_sup
-3706D8:lAA:supervisor|H3706E0
-3706E0:lH3706E8|H3706F8
-3706E8:t3:H370644,A6:kernel,A4:safe
-3706F8:lN|N
-3705E0:t2:AD:$initial_call,H370668
-370668:t3:A3:gen,A7:init_it,H37063C
-3705EC:t2:AA:$ancestors,H370678
-370678:lAA:kernel_sup|H3706B4
-3706B4:lP<0.8.0>|N
-=proc_dictionary:<0.25.0>
-H36E304
-H36E31C
-=proc_stack:<0.25.0>
-36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
-y0:N
-y1:N
-y2:P<0.27.0>
-y3:P<0.49.0>
-36e624:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:I2
-y3:I1
-y4:N
-y5:N
-y6:N
-y7:I20
-y8:I20
-=proc_heap:<0.25.0>
-36E304:t2:H36E2F8,H36E2A8
-36E2A8:lH36E2B0|N
-36E2B0:t4:A4:call,I1,H36E2C4,N
-36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
-36E2E8:t3:A4:atom,I1,A5:start
-36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
-36E2F8:t2:A7:command,I1
-36E31C:t2:H36E310,A2:ok
-36E310:t2:A6:result,I1
-=proc_stack:<0.27.0>
-3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:P<0.25.0>
-=proc_heap:<0.27.0>
-=proc_dictionary:<0.31.0>
-H36DA24
-H36DA08
-=proc_stack:<0.31.0>
-36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36DB68
-y4:A17:inet_gethost_native_sup
-y5:P<0.24.0>
-36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36D9D0
-=proc_heap:<0.31.0>
-36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
-36D994:t2:A5:local,A17:inet_gethost_native_sup
-36D9D0:lAA:gen_server|H36D9C8
-36D9C8:lP<0.24.0>|H36D9C0
-36D9C0:lP<0.24.0>|H36D970
-36D970:lH36D980|H36D9B8
-36D980:t2:A5:local,A17:inet_gethost_native_sup
-36D9B8:lA11:supervisor_bridge|H36D978
-36D978:lH36D9A8|H36D9B0
-36D9A8:lA13:inet_gethost_native|H36D9A0
-36D9A0:lN|H36D98C
-36D98C:lH36D994|N
-36D9B0:lN|N
-36DA24:t2:AD:$initial_call,H36DA14
-36DA14:t3:A3:gen,A7:init_it,H36D9D0
-36DA08:t2:AA:$ancestors,H36DA00
-36DA00:lAF:kernel_safe_sup|H36D9E0
-36D9E0:lAA:kernel_sup|H36D9D8
-36D9D8:lP<0.8.0>|N
-=proc_dictionary:<0.32.0>
-H36CFD4
-H36D0BC
-=proc_stack:<0.32.0>
-36d12c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H36CF18
-=proc_heap:<0.32.0>
-36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
-36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
-36CFD4:t2:A3:rid,I1
-36D0BC:t2:AC:num_requests,I0
-=proc_dictionary:<0.33.0>
-H3905C4
-H3905D0
-=proc_stack:<0.33.0>
-3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:webtool
-y3:H3C8570
-y4:A8:web_tool
-y5:P<0.33.0>
-3cef00:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3905FC
-=proc_heap:<0.33.0>
-3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
-3C85D4:lA10:crashdump_viewer|N
-3905F4:lH390650|H39065C
-390650:t2:A4:port,I8888
-39065C:lH3906C8|H3906D4
-3906C8:t2:AC:bind_address,H390760
-390760:t4:I127,I0,I0,I1
-3906D4:lH390774|H390780
-390774:t2:AB:server_name,H39082C
-39082C:lI108|H390908
-390908:lI111|H3909DC
-3909DC:lI99|H390AC0
-390AC0:lI97|H390B98
-390B98:lI108|H390C78
-390C78:lI104|H390D58
-390D58:lI111|H390E2C
-390E2C:lI115|H390F10
-390F10:lI116|N
-390780:lH390834|H390840
-390834:t2:AE:max_header_siz,I1024
-390840:lH390910|H39091C
-390910:t2:A11:max_header_action,A8:reply414
-39091C:lH3909E4|H3909F0
-3909E4:t2:A8:com_type,A7:ip_comm
-3909F0:lH390AC8|H390AD4
-390AC8:t2:A7:modules,H390BA0
-390BA0:lA9:mod_alias|H390C80
-390C80:lA8:mod_auth|H390D60
-390D60:lA7:mod_esi|H390E34
-390E34:lAB:mod_actions|H390F18
-390F18:lA7:mod_cgi|H390FF4
-390FF4:lAB:mod_include|H3910D8
-3910D8:lA7:mod_dir|H3911B4
-3911B4:lA7:mod_get|H3912A0
-3912A0:lA8:mod_head|H39139C
-39139C:lA7:mod_log|H3914A0
-3914A0:lAC:mod_disk_log|N
-390AD4:lH390BA8|H390BB4
-390BA8:t2:AF:directory_index,H390C88
-390C88:lH390D68|N
-390D68:lI105|H390E3C
-390E3C:lI110|H390F20
-390F20:lI100|H390FFC
-390FFC:lI101|H3910E0
-3910E0:lI120|H3911BC
-3911BC:lI46|H3912A8
-3912A8:lI104|H3913A4
-3913A4:lI116|H3914A8
-3914A8:lI109|H39159C
-39159C:lI108|N
-390BB4:lH390C90|N
-390C90:t2:AC:default_type,H390D70
-390D70:lI116|H390E44
-390E44:lI101|H390F28
-390F28:lI120|H391004
-391004:lI116|H3910E8
-3910E8:lI47|H3911C4
-3911C4:lI112|H3912B0
-3912B0:lI108|H3913AC
-3913AC:lI97|H3914B0
-3914B0:lI105|H3915A4
-3915A4:lI110|N
-3905EC:lI47|H390648
-390648:lI99|H3906C0
-3906C0:lI108|H390758
-390758:lI101|H390824
-390824:lI97|H390900
-390900:lI114|H3909D4
-3909D4:lI99|H390AB8
-390AB8:lI97|H390B90
-390B90:lI115|H390C70
-390C70:lI101|H390D50
-390D50:lI47|H390E24
-390E24:lI111|H390F08
-390F08:lI116|H390FEC
-390FEC:lI112|H3910D0
-3910D0:lI47|H3911AC
-3911AC:lI101|H391298
-391298:lI114|H391394
-391394:lI116|H391498
-391498:lI115|H391594
-391594:lI47|H391680
-391680:lI108|H39175C
-39175C:lI105|H391840
-391840:lI98|H391924
-391924:lI47|H3919F8
-3919F8:lI119|H391AC4
-391AC4:lI101|H391B90
-391B90:lI98|H391C54
-391C54:lI116|H391D18
-391D18:lI111|H391DD4
-391DD4:lI111|H391E90
-391E90:lI108|H391F5C
-391F5C:lI47|H392030
-392030:lI112|H3920EC
-3920EC:lI114|H3921A8
-3921A8:lI105|H392264
-392264:lI118|N
-3905FC:lAA:gen_server|H390664
-390664:lP<0.27.0>|H3906DC
-3906DC:lA4:self|H390788
-390788:lH390848|H390854
-390848:t2:A5:local,A8:web_tool
-390854:lA7:webtool|H390924
-390924:lH3909F8|H390A04
-3909F8:t2:H3905EC,H3905F4
-390A04:lN|N
-3905C4:t2:AD:$initial_call,H390614
-390614:t3:A3:gen,A7:init_it,H3905FC
-3905D0:t2:AA:$ancestors,H390624
-390624:lP<0.27.0>|N
-=proc_dictionary:<0.41.0>
-H36DF0C
-H36DF18
-=proc_stack:<0.41.0>
-36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36EA3C
-y4:A6:websup
-y5:P<0.33.0>
-36edc0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36DF24
-=proc_heap:<0.41.0>
-36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
-36EA68:lH36EA70|N
-36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
-36DF54:lA10:crashdump_viewer|N
-36DF44:t3:A10:crashdump_viewer,AA:start_link,N
-36DF38:t2:A5:local,A17:crashdump_viewer_server
-36DF2C:t2:A5:local,A6:websup
-36DF24:lAA:gen_server|H36DF84
-36DF84:lP<0.33.0>|H36DF94
-36DF94:lP<0.33.0>|H36DF9C
-36DF9C:lH36DFA4|H36DFB0
-36DFA4:t2:A5:local,A6:websup
-36DFB0:lAA:supervisor|H36DFB8
-36DFB8:lH36DFC0|H36DFD0
-36DFC0:t3:H36DF2C,AB:webtool_sup,N
-36DFD0:lN|N
-36DF0C:t2:AD:$initial_call,H36DF6C
-36DF6C:t3:A3:gen,A7:init_it,H36DF24
-36DF18:t2:AA:$ancestors,H36DF7C
-36DF7C:lA8:web_tool|H36DF8C
-36DF8C:lP<0.27.0>|N
-=proc_dictionary:<0.43.0>
-H39D940
-H39D94C
-=proc_stack:<0.43.0>
-3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H3A3E34
-y4:A1A:httpd_sup__127_0_0_1__8888
-y5:P<0.33.0>
-3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H39D9CC
-=proc_heap:<0.43.0>
-3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
-39DA88:lA9:undefined|H39DB18
-39DB18:lH39DB50|H39DB58
-39DB50:lH39DB88|H39DB94
-39DB88:t2:AB:server_root,H39DBD0
-39DBD0:lI47|H39DC0C
-39DC0C:lI99|H39DC50
-39DC50:lI108|H39DC84
-39DC84:lI101|H39DCC4
-39DCC4:lI97|H39DD28
-39DD28:lI114|H39DD90
-39DD90:lI99|H39DE00
-39DE00:lI97|H39DE78
-39DE78:lI115|H39DF00
-39DF00:lI101|H39DF90
-39DF90:lI47|H39E038
-39E038:lI111|H39E0E8
-39E0E8:lI116|H39E1AC
-39E1AC:lI112|H39E288
-39E288:lI47|H39E37C
-39E37C:lI101|H39E478
-39E478:lI114|H39E580
-39E580:lI116|H39E69C
-39E69C:lI115|H39E7B0
-39E7B0:lI47|H39E8C4
-39E8C4:lI108|H39E9D8
-39E9D8:lI105|H39EACC
-39EACC:lI98|H39EBC0
-39EBC0:lI47|H39ECB4
-39ECB4:lI119|H39EDA8
-39EDA8:lI101|H39EE7C
-39EE7C:lI98|H39EF50
-39EF50:lI116|H39F02C
-39F02C:lI111|H39F110
-39F110:lI111|H39F1E4
-39F1E4:lI108|H39F2B0
-39F2B0:lI47|H39F36C
-39F36C:lI112|H39F430
-39F430:lI114|H39F4FC
-39F4FC:lI105|H39F5C0
-39F5C0:lI118|H39F694
-39F694:lI47|H39F768
-39F768:lI114|H39F83C
-39F83C:lI111|H39F920
-39F920:lI111|H39F9FC
-39F9FC:lI116|N
-39DB94:lH39DBD8|H39DBE4
-39DBD8:t2:AD:document_root,H39DC14
-39DC14:lI47|H39DC58
-39DC58:lI99|H39DC8C
-39DC8C:lI108|H39DCCC
-39DCCC:lI101|H39DD30
-39DD30:lI97|H39DD98
-39DD98:lI114|H39DE08
-39DE08:lI99|H39DE80
-39DE80:lI97|H39DF08
-39DF08:lI115|H39DF98
-39DF98:lI101|H39E040
-39E040:lI47|H39E0F0
-39E0F0:lI111|H39E1B4
-39E1B4:lI116|H39E290
-39E290:lI112|H39E384
-39E384:lI47|H39E480
-39E480:lI101|H39E588
-39E588:lI114|H39E6A4
-39E6A4:lI116|H39E7B8
-39E7B8:lI115|H39E8CC
-39E8CC:lI47|H39E9E0
-39E9E0:lI108|H39EAD4
-39EAD4:lI105|H39EBC8
-39EBC8:lI98|H39ECBC
-39ECBC:lI47|H39EDB0
-39EDB0:lI119|H39EE84
-39EE84:lI101|H39EF58
-39EF58:lI98|H39F034
-39F034:lI116|H39F118
-39F118:lI111|H39F1EC
-39F1EC:lI111|H39F2B8
-39F2B8:lI108|H39F374
-39F374:lI47|H39F438
-39F438:lI112|H39F504
-39F504:lI114|H39F5C8
-39F5C8:lI105|H39F69C
-39F69C:lI118|H39F770
-39F770:lI47|H39F844
-39F844:lI114|H39F928
-39F928:lI111|H39FA04
-39FA04:lI111|H39FAD8
-39FAD8:lI116|H39FBB4
-39FBB4:lI47|H39FC80
-39FC80:lI100|H39FD44
-39FD44:lI111|H39FE10
-39FE10:lI99|N
-39DBE4:lH39DC1C|H39DC28
-39DC1C:t2:AA:mime_types,H39DC60
-39DC60:lH39DC94|H39DCA0
-39DC94:t2:H39DCD4,H39DCDC
-39DCDC:lI120|H39DD40
-39DD40:lI45|H39DDA8
-39DDA8:lI119|H39DE10
-39DE10:lI111|H39DE88
-39DE88:lI114|H39DF10
-39DF10:lI108|H39DFA0
-39DFA0:lI100|H39E048
-39E048:lI47|H39E0F8
-39E0F8:lI120|H39E1BC
-39E1BC:lI45|H39E298
-39E298:lI118|H39E38C
-39E38C:lI114|H39E488
-39E488:lI109|H39E590
-39E590:lI108|N
-39DCD4:lI119|H39DD38
-39DD38:lI114|H39DDA0
-39DDA0:lI108|N
-39DCA0:lH39DCE4|H39DCF0
-39DCE4:t2:H39DD48,H39DD50
-39DD50:lI120|H39DDB8
-39DDB8:lI45|H39DE20
-39DE20:lI119|H39DE98
-39DE98:lI111|H39DF18
-39DF18:lI114|H39DFA8
-39DFA8:lI108|H39E050
-39E050:lI100|H39E100
-39E100:lI47|H39E1C4
-39E1C4:lI120|H39E2A0
-39E2A0:lI45|H39E394
-39E394:lI118|H39E490
-39E490:lI114|H39E598
-39E598:lI109|H39E6AC
-39E6AC:lI108|N
-39DD48:lI118|H39DDB0
-39DDB0:lI114|H39DE18
-39DE18:lI109|H39DE90
-39DE90:lI108|N
-39DCF0:lH39DD58|H39DD64
-39DD58:t2:H39DDC0,H39DDC8
-39DDC8:lI120|H39DE30
-39DE30:lI45|H39DEA8
-39DEA8:lI99|H39DF20
-39DF20:lI111|H39DFB0
-39DFB0:lI110|H39E058
-39E058:lI102|H39E108
-39E108:lI101|H39E1CC
-39E1CC:lI114|H39E2A8
-39E2A8:lI101|H39E39C
-39E39C:lI110|H39E498
-39E498:lI99|H39E5A0
-39E5A0:lI101|H39E6B4
-39E6B4:lI47|H39E7C0
-39E7C0:lI120|H39E8D4
-39E8D4:lI45|H39E9E8
-39E9E8:lI99|H39EADC
-39EADC:lI111|H39EBD0
-39EBD0:lI111|H39ECC4
-39ECC4:lI108|H39EDB8
-39EDB8:lI116|H39EE8C
-39EE8C:lI97|H39EF60
-39EF60:lI108|H39F03C
-39F03C:lI107|N
-39DDC0:lI105|H39DE28
-39DE28:lI99|H39DEA0
-39DEA0:lI101|N
-39DD64:lH39DDD0|H39DDDC
-39DDD0:t2:H39DE38,H39DE40
-39DE40:lI118|H39DEB8
-39DEB8:lI105|H39DF30
-39DF30:lI100|H39DFC0
-39DFC0:lI101|H39E068
-39E068:lI111|H39E110
-39E110:lI47|H39E1D4
-39E1D4:lI120|H39E2B0
-39E2B0:lI45|H39E3A4
-39E3A4:lI115|H39E4A0
-39E4A0:lI103|H39E5A8
-39E5A8:lI105|H39E6BC
-39E6BC:lI45|H39E7C8
-39E7C8:lI109|H39E8DC
-39E8DC:lI111|H39E9F0
-39E9F0:lI118|H39EAE4
-39EAE4:lI105|H39EBD8
-39EBD8:lI101|N
-39DE38:lI109|H39DEB0
-39DEB0:lI111|H39DF28
-39DF28:lI118|H39DFB8
-39DFB8:lI105|H39E060
-39E060:lI101|N
-39DDDC:lH39DE48|H39DE54
-39DE48:t2:H39DEC0,H39DEC8
-39DEC8:lI118|H39DF40
-39DF40:lI105|H39DFD0
-39DFD0:lI100|H39E070
-39E070:lI101|H39E118
-39E118:lI111|H39E1DC
-39E1DC:lI47|H39E2B8
-39E2B8:lI120|H39E3AC
-39E3AC:lI45|H39E4A8
-39E4A8:lI109|H39E5B0
-39E5B0:lI115|H39E6C4
-39E6C4:lI118|H39E7D0
-39E7D0:lI105|H39E8E4
-39E8E4:lI100|H39E9F8
-39E9F8:lI101|H39EAEC
-39EAEC:lI111|N
-39DEC0:lI97|H39DF38
-39DF38:lI118|H39DFC8
-39DFC8:lI105|N
-39DE54:lH39DED0|H39DEDC
-39DED0:t2:H39DF48,H39DF50
-39DF50:lI118|H39DFE0
-39DFE0:lI105|H39E078
-39E078:lI100|H39E120
-39E120:lI101|H39E1E4
-39E1E4:lI111|H39E2C0
-39E2C0:lI47|H39E3B4
-39E3B4:lI113|H39E4B0
-39E4B0:lI117|H39E5B8
-39E5B8:lI105|H39E6CC
-39E6CC:lI99|H39E7D8
-39E7D8:lI107|H39E8EC
-39E8EC:lI116|H39EA00
-39EA00:lI105|H39EAF4
-39EAF4:lI109|H39EBE0
-39EBE0:lI101|N
-39DF48:lI113|H39DFD8
-39DFD8:lI116|N
-39DEDC:lH39DF58|H39DF64
-39DF58:t2:H39DFE8,H39DFF0
-39DFF0:lI118|H39E088
-39E088:lI105|H39E130
-39E130:lI100|H39E1EC
-39E1EC:lI101|H39E2C8
-39E2C8:lI111|H39E3BC
-39E3BC:lI47|H39E4B8
-39E4B8:lI113|H39E5C0
-39E5C0:lI117|H39E6D4
-39E6D4:lI105|H39E7E0
-39E7E0:lI99|H39E8F4
-39E8F4:lI107|H39EA08
-39EA08:lI116|H39EAFC
-39EAFC:lI105|H39EBE8
-39EBE8:lI109|H39ECCC
-39ECCC:lI101|N
-39DFE8:lI109|H39E080
-39E080:lI111|H39E128
-39E128:lI118|N
-39DF64:lH39DFF8|H39E004
-39DFF8:t2:H39E090,H39E098
-39E098:lI118|H39E140
-39E140:lI105|H39E1FC
-39E1FC:lI100|H39E2D8
-39E2D8:lI101|H39E3C4
-39E3C4:lI111|H39E4C0
-39E4C0:lI47|H39E5C8
-39E5C8:lI109|H39E6DC
-39E6DC:lI112|H39E7E8
-39E7E8:lI101|H39E8FC
-39E8FC:lI103|N
-39E090:lI109|H39E138
-39E138:lI112|H39E1F4
-39E1F4:lI101|H39E2D0
-39E2D0:lI103|N
-39E004:lH39E0A0|H39E0AC
-39E0A0:t2:H39E148,H39E150
-39E150:lI118|H39E20C
-39E20C:lI105|H39E2E8
-39E2E8:lI100|H39E3CC
-39E3CC:lI101|H39E4C8
-39E4C8:lI111|H39E5D0
-39E5D0:lI47|H39E6E4
-39E6E4:lI109|H39E7F0
-39E7F0:lI112|H39E904
-39E904:lI101|H39EA10
-39EA10:lI103|N
-39E148:lI109|H39E204
-39E204:lI112|H39E2E0
-39E2E0:lI103|N
-39E0AC:lH39E158|H39E164
-39E158:t2:H39E214,H39E21C
-39E21C:lI118|H39E2F8
-39E2F8:lI105|H39E3DC
-39E3DC:lI100|H39E4D0
-39E4D0:lI101|H39E5D8
-39E5D8:lI111|H39E6EC
-39E6EC:lI47|H39E7F8
-39E7F8:lI109|H39E90C
-39E90C:lI112|H39EA18
-39EA18:lI101|H39EB04
-39EB04:lI103|N
-39E214:lI109|H39E2F0
-39E2F0:lI112|H39E3D4
-39E3D4:lI101|N
-39E164:lH39E224|H39E230
-39E224:t2:H39E300,H39E308
-39E308:lI116|H39E3EC
-39E3EC:lI101|H39E4E0
-39E4E0:lI120|H39E5E8
-39E5E8:lI116|H39E6F4
-39E6F4:lI47|H39E800
-39E800:lI120|H39E914
-39E914:lI45|H39EA20
-39EA20:lI115|H39EB0C
-39EB0C:lI103|H39EBF0
-39EBF0:lI109|H39ECD4
-39ECD4:lI108|N
-39E300:lI115|H39E3E4
-39E3E4:lI103|H39E4D8
-39E4D8:lI109|H39E5E0
-39E5E0:lI108|N
-39E230:lH39E310|H39E31C
-39E310:t2:H39E3F4,H39E3FC
-39E3FC:lI116|H39E4F0
-39E4F0:lI101|H39E5F8
-39E5F8:lI120|H39E6FC
-39E6FC:lI116|H39E808
-39E808:lI47|H39E91C
-39E91C:lI120|H39EA28
-39EA28:lI45|H39EB14
-39EB14:lI115|H39EBF8
-39EBF8:lI103|H39ECDC
-39ECDC:lI109|H39EDC0
-39EDC0:lI108|N
-39E3F4:lI115|H39E4E8
-39E4E8:lI103|H39E5F0
-39E5F0:lI109|N
-39E31C:lH39E404|H39E410
-39E404:t2:H39E4F8,H39E500
-39E500:lI116|H39E608
-39E608:lI101|H39E70C
-39E70C:lI120|H39E810
-39E810:lI116|H39E924
-39E924:lI47|H39EA30
-39EA30:lI120|H39EB1C
-39EB1C:lI45|H39EC00
-39EC00:lI115|H39ECE4
-39ECE4:lI101|H39EDC8
-39EDC8:lI116|H39EE94
-39EE94:lI101|H39EF68
-39EF68:lI120|H39F044
-39F044:lI116|N
-39E4F8:lI101|H39E600
-39E600:lI116|H39E704
-39E704:lI120|N
-39E410:lH39E508|H39E514
-39E508:t2:H39E610,H39E618
-39E618:lI116|H39E71C
-39E71C:lI101|H39E820
-39E820:lI120|H39E92C
-39E92C:lI116|H39EA38
-39EA38:lI47|H39EB24
-39EB24:lI116|H39EC08
-39EC08:lI97|H39ECEC
-39ECEC:lI98|H39EDD0
-39EDD0:lI45|H39EE9C
-39EE9C:lI115|H39EF70
-39EF70:lI101|H39F04C
-39F04C:lI112|H39F120
-39F120:lI97|H39F1F4
-39F1F4:lI114|H39F2C0
-39F2C0:lI97|H39F37C
-39F37C:lI116|H39F440
-39F440:lI101|H39F50C
-39F50C:lI100|H39F5D0
-39F5D0:lI45|H39F6A4
-39F6A4:lI118|H39F778
-39F778:lI97|H39F84C
-39F84C:lI108|H39F930
-39F930:lI117|H39FA0C
-39FA0C:lI101|H39FAE0
-39FAE0:lI115|N
-39E610:lI116|H39E714
-39E714:lI115|H39E818
-39E818:lI118|N
-39E514:lH39E620|H39E62C
-39E620:t2:H39E724,H39E72C
-39E72C:lI116|H39E830
-39E830:lI101|H39E93C
-39E93C:lI120|H39EA40
-39EA40:lI116|H39EB2C
-39EB2C:lI47|H39EC10
-39EC10:lI114|H39ECF4
-39ECF4:lI105|H39EDD8
-39EDD8:lI99|H39EEA4
-39EEA4:lI104|H39EF78
-39EF78:lI116|H39F054
-39F054:lI101|H39F128
-39F128:lI120|H39F1FC
-39F1FC:lI116|N
-39E724:lI114|H39E828
-39E828:lI116|H39E934
-39E934:lI120|N
-39E62C:lH39E734|H39E740
-39E734:t2:H39E838,H39E840
-39E840:lI116|H39E94C
-39E94C:lI101|H39EA50
-39EA50:lI120|H39EB34
-39EB34:lI116|H39EC18
-39EC18:lI47|H39ECFC
-39ECFC:lI112|H39EDE0
-39EDE0:lI108|H39EEAC
-39EEAC:lI97|H39EF80
-39EF80:lI105|H39F05C
-39F05C:lI110|N
-39E838:lI116|H39E944
-39E944:lI120|H39EA48
-39EA48:lI116|N
-39E740:lH39E848|H39E854
-39E848:t2:H39E954,H39E95C
-39E95C:lI116|H39EA60
-39EA60:lI101|H39EB44
-39EB44:lI120|H39EC28
-39EC28:lI116|H39ED0C
-39ED0C:lI47|H39EDE8
-39EDE8:lI120|H39EEB4
-39EEB4:lI45|H39EF88
-39EF88:lI115|H39F064
-39F064:lI101|H39F130
-39F130:lI114|H39F204
-39F204:lI118|H39F2C8
-39F2C8:lI101|H39F384
-39F384:lI114|H39F448
-39F448:lI45|H39F514
-39F514:lI112|H39F5D8
-39F5D8:lI97|H39F6AC
-39F6AC:lI114|H39F780
-39F780:lI115|H39F854
-39F854:lI101|H39F938
-39F938:lI100|H39FA14
-39FA14:lI45|H39FAE8
-39FAE8:lI104|H39FBBC
-39FBBC:lI116|H39FC88
-39FC88:lI109|H39FD4C
-39FD4C:lI108|N
-39E954:lI115|H39EA58
-39EA58:lI104|H39EB3C
-39EB3C:lI116|H39EC20
-39EC20:lI109|H39ED04
-39ED04:lI108|N
-39E854:lH39E964|H39E970
-39E964:t2:H39EA68,H39EA70
-39EA70:lI116|H39EB54
-39EB54:lI101|H39EC38
-39EC38:lI120|H39ED1C
-39ED1C:lI116|H39EDF0
-39EDF0:lI47|H39EEBC
-39EEBC:lI104|H39EF90
-39EF90:lI116|H39F06C
-39F06C:lI109|H39F138
-39F138:lI108|N
-39EA68:lI104|H39EB4C
-39EB4C:lI116|H39EC30
-39EC30:lI109|H39ED14
-39ED14:lI108|N
-39E970:lH39EA78|H39EA84
-39EA78:t2:H39EB5C,H39EB64
-39EB64:lI116|H39EC48
-39EC48:lI101|H39ED2C
-39ED2C:lI120|H39EDF8
-39EDF8:lI116|H39EEC4
-39EEC4:lI47|H39EF98
-39EF98:lI104|H39F074
-39F074:lI116|H39F140
-39F140:lI109|H39F20C
-39F20C:lI108|N
-39EB5C:lI104|H39EC40
-39EC40:lI116|H39ED24
-39ED24:lI109|N
-39EA84:lH39EB6C|H39EB78
-39EB6C:t2:H39EC50,H39EC58
-39EC58:lI105|H39ED3C
-39ED3C:lI109|H39EE08
-39EE08:lI97|H39EECC
-39EECC:lI103|H39EFA0
-39EFA0:lI101|H39F07C
-39F07C:lI47|H39F148
-39F148:lI120|H39F214
-39F214:lI45|H39F2D0
-39F2D0:lI120|H39F38C
-39F38C:lI119|H39F450
-39F450:lI105|H39F51C
-39F51C:lI110|H39F5E0
-39F5E0:lI100|H39F6B4
-39F6B4:lI111|H39F788
-39F788:lI119|H39F85C
-39F85C:lI100|H39F940
-39F940:lI117|H39FA1C
-39FA1C:lI109|H39FAF0
-39FAF0:lI112|N
-39EC50:lI120|H39ED34
-39ED34:lI119|H39EE00
-39EE00:lI100|N
-39EB78:lH39EC60|H39EC6C
-39EC60:t2:H39ED44,H39ED4C
-39ED4C:lI105|H39EE18
-39EE18:lI109|H39EEDC
-39EEDC:lI97|H39EFA8
-39EFA8:lI103|H39F084
-39F084:lI101|H39F150
-39F150:lI47|H39F21C
-39F21C:lI120|H39F2D8
-39F2D8:lI45|H39F394
-39F394:lI120|H39F458
-39F458:lI112|H39F524
-39F524:lI105|H39F5E8
-39F5E8:lI120|H39F6BC
-39F6BC:lI109|H39F790
-39F790:lI97|H39F864
-39F864:lI112|N
-39ED44:lI120|H39EE10
-39EE10:lI112|H39EED4
-39EED4:lI109|N
-39EC6C:lH39ED54|H39ED60
-39ED54:t2:H39EE20,H39EE28
-39EE28:lI105|H39EEEC
-39EEEC:lI109|H39EFB8
-39EFB8:lI97|H39F08C
-39F08C:lI103|H39F158
-39F158:lI101|H39F224
-39F224:lI47|H39F2E0
-39F2E0:lI120|H39F39C
-39F39C:lI45|H39F460
-39F460:lI120|H39F52C
-39F52C:lI98|H39F5F0
-39F5F0:lI105|H39F6C4
-39F6C4:lI116|H39F798
-39F798:lI109|H39F86C
-39F86C:lI97|H39F948
-39F948:lI112|N
-39EE20:lI120|H39EEE4
-39EEE4:lI98|H39EFB0
-39EFB0:lI109|N
-39ED60:lH39EE30|H39EE3C
-39EE30:t2:H39EEF4,H39EEFC
-39EEFC:lI105|H39EFC8
-39EFC8:lI109|H39F09C
-39F09C:lI97|H39F160
-39F160:lI103|H39F22C
-39F22C:lI101|H39F2E8
-39F2E8:lI47|H39F3A4
-39F3A4:lI120|H39F468
-39F468:lI45|H39F534
-39F534:lI114|H39F5F8
-39F5F8:lI103|H39F6CC
-39F6CC:lI98|N
-39EEF4:lI114|H39EFC0
-39EFC0:lI103|H39F094
-39F094:lI98|N
-39EE3C:lH39EF04|H39EF10
-39EF04:t2:H39EFD0,H39EFD8
-39EFD8:lI105|H39F0AC
-39F0AC:lI109|H39F170
-39F170:lI97|H39F234
-39F234:lI103|H39F2F0
-39F2F0:lI101|H39F3AC
-39F3AC:lI47|H39F470
-39F470:lI120|H39F53C
-39F53C:lI45|H39F600
-39F600:lI112|H39F6D4
-39F6D4:lI111|H39F7A0
-39F7A0:lI114|H39F874
-39F874:lI116|H39F950
-39F950:lI97|H39FA24
-39FA24:lI98|H39FAF8
-39FAF8:lI108|H39FBC4
-39FBC4:lI101|H39FC90
-39FC90:lI45|H39FD54
-39FD54:lI112|H39FE18
-39FE18:lI105|H39FECC
-39FECC:lI120|H39FF88
-39FF88:lI109|H3A003C
-3A003C:lI97|H3A00E8
-3A00E8:lI112|N
-39EFD0:lI112|H39F0A4
-39F0A4:lI112|H39F168
-39F168:lI109|N
-39EF10:lH39EFE0|H39EFEC
-39EFE0:t2:H39F0B4,H39F0BC
-39F0BC:lI105|H39F180
-39F180:lI109|H39F244
-39F244:lI97|H39F2F8
-39F2F8:lI103|H39F3B4
-39F3B4:lI101|H39F478
-39F478:lI47|H39F544
-39F544:lI120|H39F608
-39F608:lI45|H39F6DC
-39F6DC:lI112|H39F7A8
-39F7A8:lI111|H39F87C
-39F87C:lI114|H39F958
-39F958:lI116|H39FA2C
-39FA2C:lI97|H39FB00
-39FB00:lI98|H39FBCC
-39FBCC:lI108|H39FC98
-39FC98:lI101|H39FD5C
-39FD5C:lI45|H39FE20
-39FE20:lI103|H39FED4
-39FED4:lI114|H39FF90
-39FF90:lI97|H3A0044
-3A0044:lI121|H3A00F0
-3A00F0:lI109|H3A0194
-3A0194:lI97|H3A0248
-3A0248:lI112|N
-39F0B4:lI112|H39F178
-39F178:lI103|H39F23C
-39F23C:lI109|N
-39EFEC:lH39F0C4|H39F0D0
-39F0C4:t2:H39F188,H39F190
-39F190:lI105|H39F254
-39F254:lI109|H39F308
-39F308:lI97|H39F3BC
-39F3BC:lI103|H39F480
-39F480:lI101|H39F54C
-39F54C:lI47|H39F610
-39F610:lI120|H39F6E4
-39F6E4:lI45|H39F7B0
-39F7B0:lI112|H39F884
-39F884:lI111|H39F960
-39F960:lI114|H39FA34
-39FA34:lI116|H39FB08
-39FB08:lI97|H39FBD4
-39FBD4:lI98|H39FCA0
-39FCA0:lI108|H39FD64
-39FD64:lI101|H39FE28
-39FE28:lI45|H39FEDC
-39FEDC:lI98|H39FF98
-39FF98:lI105|H3A004C
-3A004C:lI116|H3A00F8
-3A00F8:lI109|H3A019C
-3A019C:lI97|H3A0250
-3A0250:lI112|N
-39F188:lI112|H39F24C
-39F24C:lI98|H39F300
-39F300:lI109|N
-39F0D0:lH39F198|H39F1A4
-39F198:t2:H39F25C,H39F264
-39F264:lI105|H39F318
-39F318:lI109|H39F3CC
-39F3CC:lI97|H39F488
-39F488:lI103|H39F554
-39F554:lI101|H39F618
-39F618:lI47|H39F6EC
-39F6EC:lI120|H39F7B8
-39F7B8:lI45|H39F88C
-39F88C:lI112|H39F968
-39F968:lI111|H39FA3C
-39FA3C:lI114|H39FB10
-39FB10:lI116|H39FBDC
-39FBDC:lI97|H39FCA8
-39FCA8:lI98|H39FD6C
-39FD6C:lI108|H39FE30
-39FE30:lI101|H39FEE4
-39FEE4:lI45|H39FFA0
-39FFA0:lI97|H3A0054
-3A0054:lI110|H3A0100
-3A0100:lI121|H3A01A4
-3A01A4:lI109|H3A0258
-3A0258:lI97|H3A0304
-3A0304:lI112|N
-39F25C:lI112|H39F310
-39F310:lI110|H39F3C4
-39F3C4:lI109|N
-39F1A4:lH39F26C|H39F278
-39F26C:t2:H39F320,H39F328
-39F328:lI105|H39F3DC
-39F3DC:lI109|H39F498
-39F498:lI97|H39F55C
-39F55C:lI103|H39F620
-39F620:lI101|H39F6F4
-39F6F4:lI47|H39F7C0
-39F7C0:lI120|H39F894
-39F894:lI45|H39F970
-39F970:lI99|H39FA44
-39FA44:lI109|H39FB18
-39FB18:lI117|H39FBE4
-39FBE4:lI45|H39FCB0
-39FCB0:lI114|H39FD74
-39FD74:lI97|H39FE38
-39FE38:lI115|H39FEEC
-39FEEC:lI116|H39FFA8
-39FFA8:lI101|H3A005C
-3A005C:lI114|N
-39F320:lI114|H39F3D4
-39F3D4:lI97|H39F490
-39F490:lI115|N
-39F278:lH39F330|H39F33C
-39F330:t2:H39F3E4,H39F3EC
-39F3EC:lI105|H39F4A8
-39F4A8:lI109|H39F56C
-39F56C:lI97|H39F630
-39F630:lI103|H39F6FC
-39F6FC:lI101|H39F7C8
-39F7C8:lI47|H39F89C
-39F89C:lI116|H39F978
-39F978:lI105|H39FA4C
-39FA4C:lI102|H39FB20
-39FB20:lI102|N
-39F3E4:lI116|H39F4A0
-39F4A0:lI105|H39F564
-39F564:lI102|H39F628
-39F628:lI102|N
-39F33C:lH39F3F4|H39F400
-39F3F4:t2:H39F4B0,H39F4B8
-39F4B8:lI105|H39F57C
-39F57C:lI109|H39F640
-39F640:lI97|H39F704
-39F704:lI103|H39F7D0
-39F7D0:lI101|H39F8A4
-39F8A4:lI47|H39F980
-39F980:lI116|H39FA54
-39FA54:lI105|H39FB28
-39FB28:lI102|H39FBEC
-39FBEC:lI102|N
-39F4B0:lI116|H39F574
-39F574:lI105|H39F638
-39F638:lI102|N
-39F400:lH39F4C0|H39F4CC
-39F4C0:t2:H39F584,H39F58C
-39F58C:lI105|H39F650
-39F650:lI109|H39F714
-39F714:lI97|H39F7D8
-39F7D8:lI103|H39F8AC
-39F8AC:lI101|H39F988
-39F988:lI47|H39FA5C
-39FA5C:lI112|H39FB30
-39FB30:lI110|H39FBF4
-39FBF4:lI103|N
-39F584:lI112|H39F648
-39F648:lI110|H39F70C
-39F70C:lI103|N
-39F4CC:lH39F594|H39F5A0
-39F594:t2:H39F658,H39F660
-39F660:lI105|H39F724
-39F724:lI109|H39F7E8
-39F7E8:lI97|H39F8BC
-39F8BC:lI103|H39F990
-39F990:lI101|H39FA64
-39FA64:lI47|H39FB38
-39FB38:lI106|H39FBFC
-39FBFC:lI112|H39FCB8
-39FCB8:lI101|H39FD7C
-39FD7C:lI103|N
-39F658:lI106|H39F71C
-39F71C:lI112|H39F7E0
-39F7E0:lI101|H39F8B4
-39F8B4:lI103|N
-39F5A0:lH39F668|H39F674
-39F668:t2:H39F72C,H39F734
-39F734:lI105|H39F7F8
-39F7F8:lI109|H39F8CC
-39F8CC:lI97|H39F998
-39F998:lI103|H39FA6C
-39FA6C:lI101|H39FB40
-39FB40:lI47|H39FC04
-39FC04:lI106|H39FCC0
-39FCC0:lI112|H39FD84
-39FD84:lI101|H39FE40
-39FE40:lI103|N
-39F72C:lI106|H39F7F0
-39F7F0:lI112|H39F8C4
-39F8C4:lI103|N
-39F674:lH39F73C|H39F748
-39F73C:t2:H39F800,H39F808
-39F808:lI105|H39F8DC
-39F8DC:lI109|H39F9A8
-39F9A8:lI97|H39FA74
-39FA74:lI103|H39FB48
-39FB48:lI101|H39FC0C
-39FC0C:lI47|H39FCC8
-39FCC8:lI106|H39FD8C
-39FD8C:lI112|H39FE48
-39FE48:lI101|H39FEF4
-39FEF4:lI103|N
-39F800:lI106|H39F8D4
-39F8D4:lI112|H39F9A0
-39F9A0:lI101|N
-39F748:lH39F810|H39F81C
-39F810:t2:H39F8E4,H39F8EC
-39F8EC:lI105|H39F9B8
-39F9B8:lI109|H39FA84
-39FA84:lI97|H39FB50
-39FB50:lI103|H39FC14
-39FC14:lI101|H39FCD0
-39FCD0:lI47|H39FD94
-39FD94:lI105|H39FE50
-39FE50:lI101|H39FEFC
-39FEFC:lI102|N
-39F8E4:lI105|H39F9B0
-39F9B0:lI101|H39FA7C
-39FA7C:lI102|N
-39F81C:lH39F8F4|H39F900
-39F8F4:t2:H39F9C0,H39F9C8
-39F9C8:lI105|H39FA94
-39FA94:lI109|H39FB60
-39FB60:lI97|H39FC1C
-39FC1C:lI103|H39FCD8
-39FCD8:lI101|H39FD9C
-39FD9C:lI47|H39FE58
-39FE58:lI103|H39FF04
-39FF04:lI105|H39FFB0
-39FFB0:lI102|N
-39F9C0:lI103|H39FA8C
-39FA8C:lI105|H39FB58
-39FB58:lI102|N
-39F900:lH39F9D0|H39F9DC
-39F9D0:t2:H39FA9C,H39FAA4
-39FAA4:lI99|H39FB70
-39FB70:lI104|H39FC2C
-39FC2C:lI101|H39FCE0
-39FCE0:lI109|H39FDA4
-39FDA4:lI105|H39FE60
-39FE60:lI99|H39FF0C
-39FF0C:lI97|H39FFB8
-39FFB8:lI108|H3A0064
-3A0064:lI47|H3A0108
-3A0108:lI120|H3A01AC
-3A01AC:lI45|H3A0260
-3A0260:lI112|H3A030C
-3A030C:lI100|H3A03B8
-3A03B8:lI98|N
-39FA9C:lI112|H39FB68
-39FB68:lI100|H39FC24
-39FC24:lI98|N
-39F9DC:lH39FAAC|H39FAB8
-39FAAC:t2:H39FB78,H39FB80
-39FB80:lI99|H39FC3C
-39FC3C:lI104|H39FCF0
-39FCF0:lI101|H39FDAC
-39FDAC:lI109|H39FE68
-39FE68:lI105|H39FF14
-39FF14:lI99|H39FFC0
-39FFC0:lI97|H3A006C
-3A006C:lI108|H3A0110
-3A0110:lI47|H3A01B4
-3A01B4:lI120|H3A0268
-3A0268:lI45|H3A0314
-3A0314:lI112|H3A03C0
-3A03C0:lI100|H3A0454
-3A0454:lI98|N
-39FB78:lI120|H39FC34
-39FC34:lI121|H39FCE8
-39FCE8:lI122|N
-39FAB8:lH39FB88|H39FB94
-39FB88:t2:H39FC44,H39FC4C
-39FC4C:lI97|H39FD00
-39FD00:lI117|H39FDBC
-39FDBC:lI100|H39FE70
-39FE70:lI105|H39FF1C
-39FF1C:lI111|H39FFC8
-39FFC8:lI47|H3A0074
-3A0074:lI120|H3A0118
-3A0118:lI45|H3A01BC
-3A01BC:lI119|H3A0270
-3A0270:lI97|H3A031C
-3A031C:lI118|N
-39FC44:lI119|H39FCF8
-39FCF8:lI97|H39FDB4
-39FDB4:lI118|N
-39FB94:lH39FC54|H39FC60
-39FC54:t2:H39FD08,H39FD10
-39FD10:lI97|H39FDCC
-39FDCC:lI117|H39FE78
-39FE78:lI100|H39FF24
-39FF24:lI105|H39FFD0
-39FFD0:lI111|H3A007C
-3A007C:lI47|H3A0120
-3A0120:lI120|H3A01C4
-3A01C4:lI45|H3A0278
-3A0278:lI114|H3A0324
-3A0324:lI101|H3A03C8
-3A03C8:lI97|H3A045C
-3A045C:lI108|H3A04F8
-3A04F8:lI97|H3A059C
-3A059C:lI117|H3A0648
-3A0648:lI100|H3A06F4
-3A06F4:lI105|H3A07A0
-3A07A0:lI111|N
-39FD08:lI114|H39FDC4
-39FDC4:lI97|N
-39FC60:lH39FD18|H39FD24
-39FD18:t2:H39FDD4,H39FDDC
-39FDDC:lI97|H39FE88
-39FE88:lI117|H39FF34
-39FF34:lI100|H39FFD8
-39FFD8:lI105|H3A0084
-3A0084:lI111|H3A0128
-3A0128:lI47|H3A01CC
-3A01CC:lI120|H3A0280
-3A0280:lI45|H3A032C
-3A032C:lI112|H3A03D0
-3A03D0:lI110|H3A0464
-3A0464:lI45|H3A0500
-3A0500:lI114|H3A05A4
-3A05A4:lI101|H3A0650
-3A0650:lI97|H3A06FC
-3A06FC:lI108|H3A07A8
-3A07A8:lI97|H3A0844
-3A0844:lI117|H3A08D0
-3A08D0:lI100|H3A0964
-3A0964:lI105|H3A09F8
-3A09F8:lI111|H3A0A94
-3A0A94:lI45|H3A0B40
-3A0B40:lI112|H3A0BEC
-3A0BEC:lI108|H3A0CA8
-3A0CA8:lI117|H3A0D64
-3A0D64:lI103|H3A0E18
-3A0E18:lI105|H3A0ECC
-3A0ECC:lI110|N
-39FDD4:lI114|H39FE80
-39FE80:lI112|H39FF2C
-39FF2C:lI109|N
-39FD24:lH39FDE4|H39FDF0
-39FDE4:t2:H39FE90,H39FE98
-39FE98:lI97|H39FF44
-39FF44:lI117|H39FFE8
-39FFE8:lI100|H3A008C
-3A008C:lI105|H3A0130
-3A0130:lI111|H3A01D4
-3A01D4:lI47|H3A0288
-3A0288:lI120|H3A0334
-3A0334:lI45|H3A03D8
-3A03D8:lI112|H3A046C
-3A046C:lI110|H3A0508
-3A0508:lI45|H3A05AC
-3A05AC:lI114|H3A0658
-3A0658:lI101|H3A0704
-3A0704:lI97|H3A07B0
-3A07B0:lI108|H3A084C
-3A084C:lI97|H3A08D8
-3A08D8:lI117|H3A096C
-3A096C:lI100|H3A0A00
-3A0A00:lI105|H3A0A9C
-3A0A9C:lI111|N
-39FE90:lI114|H39FF3C
-39FF3C:lI97|H39FFE0
-39FFE0:lI109|N
-39FDF0:lH39FEA0|H39FEAC
-39FEA0:t2:H39FF4C,H39FF54
-39FF54:lI97|H39FFF8
-39FFF8:lI117|H3A009C
-3A009C:lI100|H3A0138
-3A0138:lI105|H3A01DC
-3A01DC:lI111|H3A0290
-3A0290:lI47|H3A033C
-3A033C:lI120|H3A03E0
-3A03E0:lI45|H3A0474
-3A0474:lI97|H3A0510
-3A0510:lI105|H3A05B4
-3A05B4:lI102|H3A0660
-3A0660:lI102|N
-39FF4C:lI97|H39FFF0
-39FFF0:lI105|H3A0094
-3A0094:lI102|N
-39FEAC:lH39FF5C|H39FF68
-39FF5C:t2:H3A0000,H3A0008
-3A0008:lI97|H3A00AC
-3A00AC:lI117|H3A0148
-3A0148:lI100|H3A01EC
-3A01EC:lI105|H3A0298
-3A0298:lI111|H3A0344
-3A0344:lI47|H3A03E8
-3A03E8:lI120|H3A047C
-3A047C:lI45|H3A0518
-3A0518:lI97|H3A05BC
-3A05BC:lI105|H3A0668
-3A0668:lI102|H3A070C
-3A070C:lI102|N
-3A0000:lI97|H3A00A4
-3A00A4:lI105|H3A0140
-3A0140:lI102|H3A01E4
-3A01E4:lI102|N
-39FF68:lH3A0010|H3A001C
-3A0010:t2:H3A00B4,H3A00BC
-3A00BC:lI97|H3A0158
-3A0158:lI117|H3A01FC
-3A01FC:lI100|H3A02A8
-3A02A8:lI105|H3A034C
-3A034C:lI111|H3A03F0
-3A03F0:lI47|H3A0484
-3A0484:lI120|H3A0520
-3A0520:lI45|H3A05C4
-3A05C4:lI97|H3A0670
-3A0670:lI105|H3A0714
-3A0714:lI102|H3A07B8
-3A07B8:lI102|N
-3A00B4:lI97|H3A0150
-3A0150:lI105|H3A01F4
-3A01F4:lI102|H3A02A0
-3A02A0:lI99|N
-3A001C:lH3A00C4|H3A00D0
-3A00C4:t2:H3A0160,H3A0168
-3A0168:lI97|H3A020C
-3A020C:lI117|H3A02B8
-3A02B8:lI100|H3A035C
-3A035C:lI105|H3A03F8
-3A03F8:lI111|H3A048C
-3A048C:lI47|H3A0528
-3A0528:lI109|H3A05CC
-3A05CC:lI112|H3A0678
-3A0678:lI101|H3A071C
-3A071C:lI103|N
-3A0160:lI109|H3A0204
-3A0204:lI112|H3A02B0
-3A02B0:lI103|H3A0354
-3A0354:lI97|N
-3A00D0:lH3A0170|H3A017C
-3A0170:t2:H3A0214,H3A021C
-3A021C:lI97|H3A02C8
-3A02C8:lI117|H3A036C
-3A036C:lI100|H3A0400
-3A0400:lI105|H3A0494
-3A0494:lI111|H3A0530
-3A0530:lI47|H3A05D4
-3A05D4:lI109|H3A0680
-3A0680:lI112|H3A0724
-3A0724:lI101|H3A07C0
-3A07C0:lI103|N
-3A0214:lI109|H3A02C0
-3A02C0:lI112|H3A0364
-3A0364:lI50|N
-3A017C:lH3A0224|H3A0230
-3A0224:t2:H3A02D0,H3A02D8
-3A02D8:lI97|H3A037C
-3A037C:lI117|H3A0408
-3A0408:lI100|H3A049C
-3A049C:lI105|H3A0538
-3A0538:lI111|H3A05DC
-3A05DC:lI47|H3A0688
-3A0688:lI98|H3A072C
-3A072C:lI97|H3A07C8
-3A07C8:lI115|H3A0854
-3A0854:lI105|H3A08E0
-3A08E0:lI99|N
-3A02D0:lI97|H3A0374
-3A0374:lI117|N
-3A0230:lH3A02E0|H3A02EC
-3A02E0:t2:H3A0384,H3A038C
-3A038C:lI97|H3A0418
-3A0418:lI117|H3A04AC
-3A04AC:lI100|H3A0540
-3A0540:lI105|H3A05E4
-3A05E4:lI111|H3A0690
-3A0690:lI47|H3A0734
-3A0734:lI98|H3A07D0
-3A07D0:lI97|H3A085C
-3A085C:lI115|H3A08E8
-3A08E8:lI105|H3A0974
-3A0974:lI99|N
-3A0384:lI115|H3A0410
-3A0410:lI110|H3A04A4
-3A04A4:lI100|N
-3A02EC:lH3A0394|H3A03A0
-3A0394:t2:H3A0420,H3A0428
-3A0428:lI97|H3A04BC
-3A04BC:lI112|H3A0550
-3A0550:lI112|H3A05EC
-3A05EC:lI108|H3A0698
-3A0698:lI105|H3A073C
-3A073C:lI99|H3A07D8
-3A07D8:lI97|H3A0864
-3A0864:lI116|H3A08F0
-3A08F0:lI105|H3A097C
-3A097C:lI111|H3A0A08
-3A0A08:lI110|H3A0AA4
-3A0AA4:lI47|H3A0B48
-3A0B48:lI122|H3A0BF4
-3A0BF4:lI105|H3A0CB0
-3A0CB0:lI112|N
-3A0420:lI122|H3A04B4
-3A04B4:lI105|H3A0548
-3A0548:lI112|N
-3A03A0:lH3A0430|H3A043C
-3A0430:t2:H3A04C4,H3A04CC
-3A04CC:lI97|H3A0560
-3A0560:lI112|H3A05FC
-3A05FC:lI112|H3A06A0
-3A06A0:lI108|H3A0744
-3A0744:lI105|H3A07E0
-3A07E0:lI99|H3A086C
-3A086C:lI97|H3A08F8
-3A08F8:lI116|H3A0984
-3A0984:lI105|H3A0A10
-3A0A10:lI111|H3A0AAC
-3A0AAC:lI110|H3A0B50
-3A0B50:lI47|H3A0BFC
-3A0BFC:lI120|H3A0CB8
-3A0CB8:lI45|H3A0D6C
-3A0D6C:lI119|H3A0E20
-3A0E20:lI97|H3A0ED4
-3A0ED4:lI105|H3A0F90
-3A0F90:lI115|H3A105C
-3A105C:lI45|H3A1130
-3A1130:lI115|H3A1204
-3A1204:lI111|H3A12D0
-3A12D0:lI117|H3A13A4
-3A13A4:lI114|H3A1480
-3A1480:lI99|H3A1564
-3A1564:lI101|N
-3A04C4:lI115|H3A0558
-3A0558:lI114|H3A05F4
-3A05F4:lI99|N
-3A043C:lH3A04D4|H3A04E0
-3A04D4:t2:H3A0568,H3A0570
-3A0570:lI97|H3A060C
-3A060C:lI112|H3A06B0
-3A06B0:lI112|H3A0754
-3A0754:lI108|H3A07F0
-3A07F0:lI105|H3A0874
-3A0874:lI99|H3A0900
-3A0900:lI97|H3A098C
-3A098C:lI116|H3A0A18
-3A0A18:lI105|H3A0AB4
-3A0AB4:lI111|H3A0B58
-3A0B58:lI110|H3A0C04
-3A0C04:lI47|H3A0CC0
-3A0CC0:lI120|H3A0D74
-3A0D74:lI45|H3A0E28
-3A0E28:lI117|H3A0EDC
-3A0EDC:lI115|H3A0F98
-3A0F98:lI116|H3A1064
-3A1064:lI97|H3A1138
-3A1138:lI114|N
-3A0568:lI117|H3A0604
-3A0604:lI115|H3A06A8
-3A06A8:lI116|H3A074C
-3A074C:lI97|H3A07E8
-3A07E8:lI114|N
-3A04E0:lH3A0578|H3A0584
-3A0578:t2:H3A0614,H3A061C
-3A061C:lI97|H3A06C0
-3A06C0:lI112|H3A075C
-3A075C:lI112|H3A07F8
-3A07F8:lI108|H3A087C
-3A087C:lI105|H3A0908
-3A0908:lI99|H3A0994
-3A0994:lI97|H3A0A20
-3A0A20:lI116|H3A0ABC
-3A0ABC:lI105|H3A0B60
-3A0B60:lI111|H3A0C0C
-3A0C0C:lI110|H3A0CC8
-3A0CC8:lI47|H3A0D7C
-3A0D7C:lI120|H3A0E30
-3A0E30:lI45|H3A0EE4
-3A0EE4:lI116|H3A0FA0
-3A0FA0:lI114|H3A106C
-3A106C:lI111|H3A1140
-3A1140:lI102|H3A120C
-3A120C:lI102|H3A12D8
-3A12D8:lI45|H3A13AC
-3A13AC:lI109|H3A1488
-3A1488:lI115|N
-3A0614:lI109|H3A06B8
-3A06B8:lI115|N
-3A0584:lH3A0624|H3A0630
-3A0624:t2:H3A06C8,H3A06D0
-3A06D0:lI97|H3A076C
-3A076C:lI112|H3A0800
-3A0800:lI112|H3A0884
-3A0884:lI108|H3A0910
-3A0910:lI105|H3A099C
-3A099C:lI99|H3A0A28
-3A0A28:lI97|H3A0AC4
-3A0AC4:lI116|H3A0B68
-3A0B68:lI105|H3A0C14
-3A0C14:lI111|H3A0CD0
-3A0CD0:lI110|H3A0D84
-3A0D84:lI47|H3A0E38
-3A0E38:lI120|H3A0EEC
-3A0EEC:lI45|H3A0FA8
-3A0FA8:lI116|H3A1074
-3A1074:lI114|H3A1148
-3A1148:lI111|H3A1214
-3A1214:lI102|H3A12E0
-3A12E0:lI102|H3A13B4
-3A13B4:lI45|H3A1490
-3A1490:lI109|H3A156C
-3A156C:lI101|N
-3A06C8:lI109|H3A0764
-3A0764:lI101|N
-3A0630:lH3A06D8|H3A06E4
-3A06D8:t2:H3A0774,H3A077C
-3A077C:lI97|H3A0810
-3A0810:lI112|H3A0894
-3A0894:lI112|H3A0918
-3A0918:lI108|H3A09A4
-3A09A4:lI105|H3A0A30
-3A0A30:lI99|H3A0ACC
-3A0ACC:lI97|H3A0B70
-3A0B70:lI116|H3A0C1C
-3A0C1C:lI105|H3A0CD8
-3A0CD8:lI111|H3A0D8C
-3A0D8C:lI110|H3A0E40
-3A0E40:lI47|H3A0EF4
-3A0EF4:lI120|H3A0FB0
-3A0FB0:lI45|H3A107C
-3A107C:lI116|H3A1150
-3A1150:lI114|H3A121C
-3A121C:lI111|H3A12E8
-3A12E8:lI102|H3A13BC
-3A13BC:lI102|H3A1498
-3A1498:lI45|H3A1574
-3A1574:lI109|H3A1648
-3A1648:lI97|H3A171C
-3A171C:lI110|N
-3A0774:lI109|H3A0808
-3A0808:lI97|H3A088C
-3A088C:lI110|N
-3A06E4:lH3A0784|H3A0790
-3A0784:t2:H3A0818,H3A0820
-3A0820:lI97|H3A089C
-3A089C:lI112|H3A0920
-3A0920:lI112|H3A09AC
-3A09AC:lI108|H3A0A38
-3A0A38:lI105|H3A0AD4
-3A0AD4:lI99|H3A0B78
-3A0B78:lI97|H3A0C24
-3A0C24:lI116|H3A0CE0
-3A0CE0:lI105|H3A0D94
-3A0D94:lI111|H3A0E48
-3A0E48:lI110|H3A0EFC
-3A0EFC:lI47|H3A0FB8
-3A0FB8:lI120|H3A1084
-3A1084:lI45|H3A1158
-3A1158:lI116|H3A1224
-3A1224:lI114|H3A12F0
-3A12F0:lI111|H3A13C4
-3A13C4:lI102|H3A14A0
-3A14A0:lI102|N
-3A0818:lI116|N
-3A0790:lH3A0828|H3A0834
-3A0828:t2:H3A08A4,H3A08AC
-3A08AC:lI97|H3A0930
-3A0930:lI112|H3A09B4
-3A09B4:lI112|H3A0A40
-3A0A40:lI108|H3A0ADC
-3A0ADC:lI105|H3A0B80
-3A0B80:lI99|H3A0C2C
-3A0C2C:lI97|H3A0CE8
-3A0CE8:lI116|H3A0D9C
-3A0D9C:lI105|H3A0E50
-3A0E50:lI111|H3A0F04
-3A0F04:lI110|H3A0FC0
-3A0FC0:lI47|H3A108C
-3A108C:lI120|H3A1160
-3A1160:lI45|H3A122C
-3A122C:lI116|H3A12F8
-3A12F8:lI114|H3A13CC
-3A13CC:lI111|H3A14A8
-3A14A8:lI102|H3A157C
-3A157C:lI102|N
-3A08A4:lI116|H3A0928
-3A0928:lI114|N
-3A0834:lH3A08B4|H3A08C0
-3A08B4:t2:H3A0938,H3A0940
-3A0940:lI97|H3A09C4
-3A09C4:lI112|H3A0A50
-3A0A50:lI112|H3A0AEC
-3A0AEC:lI108|H3A0B88
-3A0B88:lI105|H3A0C34
-3A0C34:lI99|H3A0CF0
-3A0CF0:lI97|H3A0DA4
-3A0DA4:lI116|H3A0E58
-3A0E58:lI105|H3A0F0C
-3A0F0C:lI111|H3A0FC8
-3A0FC8:lI110|H3A1094
-3A1094:lI47|H3A1168
-3A1168:lI120|H3A1234
-3A1234:lI45|H3A1300
-3A1300:lI116|H3A13D4
-3A13D4:lI114|H3A14B0
-3A14B0:lI111|H3A1584
-3A1584:lI102|H3A1650
-3A1650:lI102|N
-3A0938:lI114|H3A09BC
-3A09BC:lI111|H3A0A48
-3A0A48:lI102|H3A0AE4
-3A0AE4:lI102|N
-3A08C0:lH3A0948|H3A0954
-3A0948:t2:H3A09CC,H3A09D4
-3A09D4:lI97|H3A0A60
-3A0A60:lI112|H3A0AFC
-3A0AFC:lI112|H3A0B98
-3A0B98:lI108|H3A0C44
-3A0C44:lI105|H3A0D00
-3A0D00:lI99|H3A0DB4
-3A0DB4:lI97|H3A0E60
-3A0E60:lI116|H3A0F14
-3A0F14:lI105|H3A0FD0
-3A0FD0:lI111|H3A109C
-3A109C:lI110|H3A1170
-3A1170:lI47|H3A123C
-3A123C:lI120|H3A1308
-3A1308:lI45|H3A13DC
-3A13DC:lI116|H3A14B8
-3A14B8:lI101|H3A158C
-3A158C:lI120|H3A1658
-3A1658:lI105|H3A1724
-3A1724:lI110|H3A17E8
-3A17E8:lI102|H3A18AC
-3A18AC:lI111|N
-3A09CC:lI116|H3A0A58
-3A0A58:lI101|H3A0AF4
-3A0AF4:lI120|H3A0B90
-3A0B90:lI105|H3A0C3C
-3A0C3C:lI110|H3A0CF8
-3A0CF8:lI102|H3A0DAC
-3A0DAC:lI111|N
-3A0954:lH3A09DC|H3A09E8
-3A09DC:t2:H3A0A68,H3A0A70
-3A0A70:lI97|H3A0B0C
-3A0B0C:lI112|H3A0BA8
-3A0BA8:lI112|H3A0C54
-3A0C54:lI108|H3A0D08
-3A0D08:lI105|H3A0DBC
-3A0DBC:lI99|H3A0E68
-3A0E68:lI97|H3A0F1C
-3A0F1C:lI116|H3A0FD8
-3A0FD8:lI105|H3A10A4
-3A10A4:lI111|H3A1178
-3A1178:lI110|H3A1244
-3A1244:lI47|H3A1310
-3A1310:lI120|H3A13E4
-3A13E4:lI45|H3A14C0
-3A14C0:lI116|H3A1594
-3A1594:lI101|H3A1660
-3A1660:lI120|H3A172C
-3A172C:lI105|H3A17F0
-3A17F0:lI110|H3A18B4
-3A18B4:lI102|H3A1970
-3A1970:lI111|N
-3A0A68:lI116|H3A0B04
-3A0B04:lI101|H3A0BA0
-3A0BA0:lI120|H3A0C4C
-3A0C4C:lI105|N
-3A09E8:lH3A0A78|H3A0A84
-3A0A78:t2:H3A0B14,H3A0B1C
-3A0B1C:lI97|H3A0BB8
-3A0BB8:lI112|H3A0C64
-3A0C64:lI112|H3A0D10
-3A0D10:lI108|H3A0DC4
-3A0DC4:lI105|H3A0E70
-3A0E70:lI99|H3A0F24
-3A0F24:lI97|H3A0FE0
-3A0FE0:lI116|H3A10AC
-3A10AC:lI105|H3A1180
-3A1180:lI111|H3A124C
-3A124C:lI110|H3A1318
-3A1318:lI47|H3A13EC
-3A13EC:lI120|H3A14C8
-3A14C8:lI45|H3A159C
-3A159C:lI116|H3A1668
-3A1668:lI101|H3A1734
-3A1734:lI120|N
-3A0B14:lI116|H3A0BB0
-3A0BB0:lI101|H3A0C5C
-3A0C5C:lI120|N
-3A0A84:lH3A0B24|H3A0B30
-3A0B24:t2:H3A0BC0,H3A0BC8
-3A0BC8:lI97|H3A0C74
-3A0C74:lI112|H3A0D20
-3A0D20:lI112|H3A0DCC
-3A0DCC:lI108|H3A0E78
-3A0E78:lI105|H3A0F2C
-3A0F2C:lI99|H3A0FE8
-3A0FE8:lI97|H3A10B4
-3A10B4:lI116|H3A1188
-3A1188:lI105|H3A1254
-3A1254:lI111|H3A1320
-3A1320:lI110|H3A13F4
-3A13F4:lI47|H3A14D0
-3A14D0:lI120|H3A15A4
-3A15A4:lI45|H3A1670
-3A1670:lI116|H3A173C
-3A173C:lI99|H3A17F8
-3A17F8:lI108|N
-3A0BC0:lI116|H3A0C6C
-3A0C6C:lI99|H3A0D18
-3A0D18:lI108|N
-3A0B30:lH3A0BD0|H3A0BDC
-3A0BD0:t2:H3A0C7C,H3A0C84
-3A0C84:lI97|H3A0D30
-3A0D30:lI112|H3A0DDC
-3A0DDC:lI112|H3A0E80
-3A0E80:lI108|H3A0F34
-3A0F34:lI105|H3A0FF0
-3A0FF0:lI99|H3A10BC
-3A10BC:lI97|H3A1190
-3A1190:lI116|H3A125C
-3A125C:lI105|H3A1328
-3A1328:lI111|H3A13FC
-3A13FC:lI110|H3A14D8
-3A14D8:lI47|H3A15AC
-3A15AC:lI120|H3A1678
-3A1678:lI45|H3A1744
-3A1744:lI116|H3A1800
-3A1800:lI97|H3A18BC
-3A18BC:lI114|N
-3A0C7C:lI116|H3A0D28
-3A0D28:lI97|H3A0DD4
-3A0DD4:lI114|N
-3A0BDC:lH3A0C8C|H3A0C98
-3A0C8C:t2:H3A0D38,H3A0D40
-3A0D40:lI97|H3A0DEC
-3A0DEC:lI112|H3A0E90
-3A0E90:lI112|H3A0F44
-3A0F44:lI108|H3A1000
-3A1000:lI105|H3A10CC
-3A10CC:lI99|H3A1198
-3A1198:lI97|H3A1264
-3A1264:lI116|H3A1330
-3A1330:lI105|H3A1404
-3A1404:lI111|H3A14E0
-3A14E0:lI110|H3A15B4
-3A15B4:lI47|H3A1680
-3A1680:lI120|H3A174C
-3A174C:lI45|H3A1808
-3A1808:lI115|H3A18C4
-3A18C4:lI118|H3A1978
-3A1978:lI52|H3A1A2C
-3A1A2C:lI99|H3A1AE0
-3A1AE0:lI114|H3A1BA4
-3A1BA4:lI99|N
-3A0D38:lI115|H3A0DE4
-3A0DE4:lI118|H3A0E88
-3A0E88:lI52|H3A0F3C
-3A0F3C:lI99|H3A0FF8
-3A0FF8:lI114|H3A10C4
-3A10C4:lI99|N
-3A0C98:lH3A0D48|H3A0D54
-3A0D48:t2:H3A0DF4,H3A0DFC
-3A0DFC:lI97|H3A0EA0
-3A0EA0:lI112|H3A0F54
-3A0F54:lI112|H3A1010
-3A1010:lI108|H3A10DC
-3A10DC:lI105|H3A11A8
-3A11A8:lI99|H3A1274
-3A1274:lI97|H3A1338
-3A1338:lI116|H3A140C
-3A140C:lI105|H3A14E8
-3A14E8:lI111|H3A15BC
-3A15BC:lI110|H3A1688
-3A1688:lI47|H3A1754
-3A1754:lI120|H3A1810
-3A1810:lI45|H3A18CC
-3A18CC:lI115|H3A1980
-3A1980:lI118|H3A1A34
-3A1A34:lI52|H3A1AE8
-3A1AE8:lI99|H3A1BAC
-3A1BAC:lI112|H3A1C78
-3A1C78:lI105|H3A1D3C
-3A1D3C:lI111|N
-3A0DF4:lI115|H3A0E98
-3A0E98:lI118|H3A0F4C
-3A0F4C:lI52|H3A1008
-3A1008:lI99|H3A10D4
-3A10D4:lI112|H3A11A0
-3A11A0:lI105|H3A126C
-3A126C:lI111|N
-3A0D54:lH3A0E04|H3A0E10
-3A0E04:t2:H3A0EA8,H3A0EB0
-3A0EB0:lI97|H3A0F64
-3A0F64:lI112|H3A1020
-3A1020:lI112|H3A10E4
-3A10E4:lI108|H3A11B0
-3A11B0:lI105|H3A127C
-3A127C:lI99|H3A1340
-3A1340:lI97|H3A1414
-3A1414:lI116|H3A14F0
-3A14F0:lI105|H3A15C4
-3A15C4:lI111|H3A1690
-3A1690:lI110|H3A175C
-3A175C:lI47|H3A1818
-3A1818:lI120|H3A18D4
-3A18D4:lI45|H3A1988
-3A1988:lI115|H3A1A3C
-3A1A3C:lI116|H3A1AF0
-3A1AF0:lI117|H3A1BB4
-3A1BB4:lI102|H3A1C80
-3A1C80:lI102|H3A1D44
-3A1D44:lI105|H3A1E00
-3A1E00:lI116|N
-3A0EA8:lI115|H3A0F5C
-3A0F5C:lI105|H3A1018
-3A1018:lI116|N
-3A0E10:lH3A0EB8|H3A0EC4
-3A0EB8:t2:H3A0F6C,H3A0F74
-3A0F74:lI97|H3A1030
-3A1030:lI112|H3A10F4
-3A10F4:lI112|H3A11C0
-3A11C0:lI108|H3A1284
-3A1284:lI105|H3A1348
-3A1348:lI99|H3A141C
-3A141C:lI97|H3A14F8
-3A14F8:lI116|H3A15CC
-3A15CC:lI105|H3A1698
-3A1698:lI111|H3A1764
-3A1764:lI110|H3A1820
-3A1820:lI47|H3A18DC
-3A18DC:lI120|H3A1990
-3A1990:lI45|H3A1A44
-3A1A44:lI115|H3A1AF8
-3A1AF8:lI104|H3A1BBC
-3A1BBC:lI97|H3A1C88
-3A1C88:lI114|N
-3A0F6C:lI115|H3A1028
-3A1028:lI104|H3A10EC
-3A10EC:lI97|H3A11B8
-3A11B8:lI114|N
-3A0EC4:lH3A0F7C|H3A0F88
-3A0F7C:t2:H3A1038,H3A1040
-3A1040:lI97|H3A1104
-3A1104:lI112|H3A11C8
-3A11C8:lI112|H3A128C
-3A128C:lI108|H3A1350
-3A1350:lI105|H3A1424
-3A1424:lI99|H3A1500
-3A1500:lI97|H3A15D4
-3A15D4:lI116|H3A16A0
-3A16A0:lI105|H3A176C
-3A176C:lI111|H3A1828
-3A1828:lI110|H3A18E4
-3A18E4:lI47|H3A1998
-3A1998:lI120|H3A1A4C
-3A1A4C:lI45|H3A1B00
-3A1B00:lI115|H3A1BC4
-3A1BC4:lI104|N
-3A1038:lI115|H3A10FC
-3A10FC:lI104|N
-3A0F88:lH3A1048|H3A1054
-3A1048:t2:H3A110C,H3A1114
-3A1114:lI97|H3A11D8
-3A11D8:lI112|H3A1294
-3A1294:lI112|H3A1358
-3A1358:lI108|H3A142C
-3A142C:lI105|H3A1508
-3A1508:lI99|H3A15DC
-3A15DC:lI97|H3A16A8
-3A16A8:lI116|H3A1774
-3A1774:lI105|H3A1830
-3A1830:lI111|H3A18EC
-3A18EC:lI110|H3A19A0
-3A19A0:lI47|H3A1A54
-3A1A54:lI120|H3A1B08
-3A1B08:lI45|H3A1BCC
-3A1BCC:lI110|H3A1C90
-3A1C90:lI101|H3A1D4C
-3A1D4C:lI116|H3A1E08
-3A1E08:lI99|H3A1EC4
-3A1EC4:lI100|H3A1F88
-3A1F88:lI102|N
-3A110C:lI110|H3A11D0
-3A11D0:lI99|N
-3A1054:lH3A111C|H3A1128
-3A111C:t2:H3A11E0,H3A11E8
-3A11E8:lI97|H3A12A4
-3A12A4:lI112|H3A1368
-3A1368:lI112|H3A1434
-3A1434:lI108|H3A1510
-3A1510:lI105|H3A15E4
-3A15E4:lI99|H3A16B0
-3A16B0:lI97|H3A177C
-3A177C:lI116|H3A1838
-3A1838:lI105|H3A18F4
-3A18F4:lI111|H3A19A8
-3A19A8:lI110|H3A1A5C
-3A1A5C:lI47|H3A1B10
-3A1B10:lI120|H3A1BD4
-3A1BD4:lI45|H3A1C98
-3A1C98:lI110|H3A1D54
-3A1D54:lI101|H3A1E10
-3A1E10:lI116|H3A1ECC
-3A1ECC:lI99|H3A1F90
-3A1F90:lI100|H3A2044
-3A2044:lI102|N
-3A11E0:lI99|H3A129C
-3A129C:lI100|H3A1360
-3A1360:lI102|N
-3A1128:lH3A11F0|H3A11FC
-3A11F0:t2:H3A12AC,H3A12B4
-3A12B4:lI97|H3A1378
-3A1378:lI112|H3A1444
-3A1444:lI112|H3A1518
-3A1518:lI108|H3A15EC
-3A15EC:lI105|H3A16B8
-3A16B8:lI99|H3A1784
-3A1784:lI97|H3A1840
-3A1840:lI116|H3A18FC
-3A18FC:lI105|H3A19B0
-3A19B0:lI111|H3A1A64
-3A1A64:lI110|H3A1B18
-3A1B18:lI47|H3A1BDC
-3A1BDC:lI120|H3A1CA0
-3A1CA0:lI45|H3A1D5C
-3A1D5C:lI109|H3A1E18
-3A1E18:lI105|H3A1ED4
-3A1ED4:lI102|N
-3A12AC:lI109|H3A1370
-3A1370:lI105|H3A143C
-3A143C:lI102|N
-3A11FC:lH3A12BC|H3A12C8
-3A12BC:t2:H3A1380,H3A1388
-3A1388:lI97|H3A1454
-3A1454:lI112|H3A1528
-3A1528:lI112|H3A15FC
-3A15FC:lI108|H3A16C8
-3A16C8:lI105|H3A178C
-3A178C:lI99|H3A1848
-3A1848:lI97|H3A1904
-3A1904:lI116|H3A19B8
-3A19B8:lI105|H3A1A6C
-3A1A6C:lI111|H3A1B20
-3A1B20:lI110|H3A1BE4
-3A1BE4:lI47|H3A1CA8
-3A1CA8:lI120|H3A1D64
-3A1D64:lI45|H3A1E20
-3A1E20:lI108|H3A1EDC
-3A1EDC:lI97|H3A1F98
-3A1F98:lI116|H3A204C
-3A204C:lI101|H3A2108
-3A2108:lI120|N
-3A1380:lI108|H3A144C
-3A144C:lI97|H3A1520
-3A1520:lI116|H3A15F4
-3A15F4:lI101|H3A16C0
-3A16C0:lI120|N
-3A12C8:lH3A1390|H3A139C
-3A1390:t2:H3A145C,H3A1464
-3A1464:lI97|H3A1538
-3A1538:lI112|H3A160C
-3A160C:lI112|H3A16D0
-3A16D0:lI108|H3A1794
-3A1794:lI105|H3A1850
-3A1850:lI99|H3A190C
-3A190C:lI97|H3A19C0
-3A19C0:lI116|H3A1A74
-3A1A74:lI105|H3A1B28
-3A1B28:lI111|H3A1BEC
-3A1BEC:lI110|H3A1CB0
-3A1CB0:lI47|H3A1D6C
-3A1D6C:lI120|H3A1E28
-3A1E28:lI45|H3A1EE4
-3A1EE4:lI107|H3A1FA0
-3A1FA0:lI111|H3A2054
-3A2054:lI97|H3A2110
-3A2110:lI110|N
-3A145C:lI115|H3A1530
-3A1530:lI107|H3A1604
-3A1604:lI112|N
-3A139C:lH3A146C|H3A1478
-3A146C:t2:H3A1540,H3A1548
-3A1548:lI97|H3A161C
-3A161C:lI112|H3A16E0
-3A16E0:lI112|H3A179C
-3A179C:lI108|H3A1858
-3A1858:lI105|H3A1914
-3A1914:lI99|H3A19C8
-3A19C8:lI97|H3A1A7C
-3A1A7C:lI116|H3A1B30
-3A1B30:lI105|H3A1BF4
-3A1BF4:lI111|H3A1CB8
-3A1CB8:lI110|H3A1D74
-3A1D74:lI47|H3A1E30
-3A1E30:lI120|H3A1EEC
-3A1EEC:lI45|H3A1FA8
-3A1FA8:lI107|H3A205C
-3A205C:lI111|H3A2118
-3A2118:lI97|H3A21CC
-3A21CC:lI110|N
-3A1540:lI115|H3A1614
-3A1614:lI107|H3A16D8
-3A16D8:lI100|N
-3A1478:lH3A1550|H3A155C
-3A1550:t2:H3A1624,H3A162C
-3A162C:lI97|H3A16F0
-3A16F0:lI112|H3A17AC
-3A17AC:lI112|H3A1860
-3A1860:lI108|H3A191C
-3A191C:lI105|H3A19D0
-3A19D0:lI99|H3A1A84
-3A1A84:lI97|H3A1B38
-3A1B38:lI116|H3A1BFC
-3A1BFC:lI105|H3A1CC0
-3A1CC0:lI111|H3A1D7C
-3A1D7C:lI110|H3A1E38
-3A1E38:lI47|H3A1EF4
-3A1EF4:lI120|H3A1FB0
-3A1FB0:lI45|H3A2064
-3A2064:lI107|H3A2120
-3A2120:lI111|H3A21D4
-3A21D4:lI97|H3A2288
-3A2288:lI110|N
-3A1624:lI115|H3A16E8
-3A16E8:lI107|H3A17A4
-3A17A4:lI116|N
-3A155C:lH3A1634|H3A1640
-3A1634:t2:H3A16F8,H3A1700
-3A1700:lI97|H3A17BC
-3A17BC:lI112|H3A1870
-3A1870:lI112|H3A1924
-3A1924:lI108|H3A19D8
-3A19D8:lI105|H3A1A8C
-3A1A8C:lI99|H3A1B40
-3A1B40:lI97|H3A1C04
-3A1C04:lI116|H3A1CC8
-3A1CC8:lI105|H3A1D84
-3A1D84:lI111|H3A1E40
-3A1E40:lI110|H3A1EFC
-3A1EFC:lI47|H3A1FB8
-3A1FB8:lI120|H3A206C
-3A206C:lI45|H3A2128
-3A2128:lI107|H3A21DC
-3A21DC:lI111|H3A2290
-3A2290:lI97|H3A234C
-3A234C:lI110|N
-3A16F8:lI115|H3A17B4
-3A17B4:lI107|H3A1868
-3A1868:lI109|N
-3A1640:lH3A1708|H3A1714
-3A1708:t2:H3A17C4,H3A17CC
-3A17CC:lI97|H3A1880
-3A1880:lI112|H3A1934
-3A1934:lI112|H3A19E0
-3A19E0:lI108|H3A1A94
-3A1A94:lI105|H3A1B48
-3A1B48:lI99|H3A1C0C
-3A1C0C:lI97|H3A1CD0
-3A1CD0:lI116|H3A1D8C
-3A1D8C:lI105|H3A1E48
-3A1E48:lI111|H3A1F04
-3A1F04:lI110|H3A1FC0
-3A1FC0:lI47|H3A2074
-3A2074:lI120|H3A2130
-3A2130:lI45|H3A21E4
-3A21E4:lI104|H3A2298
-3A2298:lI116|H3A2354
-3A2354:lI116|H3A2410
-3A2410:lI112|H3A24C4
-3A24C4:lI100|H3A2580
-3A2580:lI45|H3A263C
-3A263C:lI99|H3A2700
-3A2700:lI103|H3A27BC
-3A27BC:lI105|N
-3A17C4:lI99|H3A1878
-3A1878:lI103|H3A192C
-3A192C:lI105|N
-3A1714:lH3A17D4|H3A17E0
-3A17D4:t2:H3A1888,H3A1890
-3A1890:lI97|H3A1944
-3A1944:lI112|H3A19F0
-3A19F0:lI112|H3A1A9C
-3A1A9C:lI108|H3A1B50
-3A1B50:lI105|H3A1C14
-3A1C14:lI99|H3A1CD8
-3A1CD8:lI97|H3A1D94
-3A1D94:lI116|H3A1E50
-3A1E50:lI105|H3A1F0C
-3A1F0C:lI111|H3A1FC8
-3A1FC8:lI110|H3A207C
-3A207C:lI47|H3A2138
-3A2138:lI120|H3A21EC
-3A21EC:lI45|H3A22A0
-3A22A0:lI104|H3A235C
-3A235C:lI100|H3A2418
-3A2418:lI102|N
-3A1888:lI104|H3A193C
-3A193C:lI100|H3A19E8
-3A19E8:lI102|N
-3A17E0:lH3A1898|H3A18A4
-3A1898:t2:H3A194C,H3A1954
-3A1954:lI97|H3A1A00
-3A1A00:lI112|H3A1AA4
-3A1AA4:lI112|H3A1B58
-3A1B58:lI108|H3A1C1C
-3A1C1C:lI105|H3A1CE0
-3A1CE0:lI99|H3A1D9C
-3A1D9C:lI97|H3A1E58
-3A1E58:lI116|H3A1F14
-3A1F14:lI105|H3A1FD0
-3A1FD0:lI111|H3A2084
-3A2084:lI110|H3A2140
-3A2140:lI47|H3A21F4
-3A21F4:lI120|H3A22A8
-3A22A8:lI45|H3A2364
-3A2364:lI103|H3A2420
-3A2420:lI122|H3A24CC
-3A24CC:lI105|H3A2588
-3A2588:lI112|N
-3A194C:lI103|H3A19F8
-3A19F8:lI122|N
-3A18A4:lH3A195C|H3A1968
-3A195C:t2:H3A1A08,H3A1A10
-3A1A10:lI97|H3A1AB4
-3A1AB4:lI112|H3A1B68
-3A1B68:lI112|H3A1C2C
-3A1C2C:lI108|H3A1CE8
-3A1CE8:lI105|H3A1DA4
-3A1DA4:lI99|H3A1E60
-3A1E60:lI97|H3A1F1C
-3A1F1C:lI116|H3A1FD8
-3A1FD8:lI105|H3A208C
-3A208C:lI111|H3A2148
-3A2148:lI110|H3A21FC
-3A21FC:lI47|H3A22B0
-3A22B0:lI120|H3A236C
-3A236C:lI45|H3A2428
-3A2428:lI103|H3A24D4
-3A24D4:lI116|H3A2590
-3A2590:lI97|H3A2644
-3A2644:lI114|N
-3A1A08:lI103|H3A1AAC
-3A1AAC:lI116|H3A1B60
-3A1B60:lI97|H3A1C24
-3A1C24:lI114|N
-3A1968:lH3A1A18|H3A1A24
-3A1A18:t2:H3A1ABC,H3A1AC4
-3A1AC4:lI97|H3A1B78
-3A1B78:lI112|H3A1C3C
-3A1C3C:lI112|H3A1CF0
-3A1CF0:lI108|H3A1DAC
-3A1DAC:lI105|H3A1E68
-3A1E68:lI99|H3A1F24
-3A1F24:lI97|H3A1FE0
-3A1FE0:lI116|H3A2094
-3A2094:lI105|H3A2150
-3A2150:lI111|H3A2204
-3A2204:lI110|H3A22B8
-3A22B8:lI47|H3A2374
-3A2374:lI120|H3A2430
-3A2430:lI45|H3A24DC
-3A24DC:lI100|H3A2598
-3A2598:lI118|H3A264C
-3A264C:lI105|N
-3A1ABC:lI100|H3A1B70
-3A1B70:lI118|H3A1C34
-3A1C34:lI105|N
-3A1A24:lH3A1ACC|H3A1AD8
-3A1ACC:t2:H3A1B80,H3A1B88
-3A1B88:lI97|H3A1C4C
-3A1C4C:lI112|H3A1D00
-3A1D00:lI112|H3A1DB4
-3A1DB4:lI108|H3A1E70
-3A1E70:lI105|H3A1F2C
-3A1F2C:lI99|H3A1FE8
-3A1FE8:lI97|H3A209C
-3A209C:lI116|H3A2158
-3A2158:lI105|H3A220C
-3A220C:lI111|H3A22C0
-3A22C0:lI110|H3A237C
-3A237C:lI47|H3A2438
-3A2438:lI120|H3A24E4
-3A24E4:lI45|H3A25A0
-3A25A0:lI100|H3A2654
-3A2654:lI105|H3A2708
-3A2708:lI114|H3A27C4
-3A27C4:lI101|H3A2880
-3A2880:lI99|H3A2944
-3A2944:lI116|H3A2A10
-3A2A10:lI111|H3A2ADC
-3A2ADC:lI114|N
-3A1B80:lI100|H3A1C44
-3A1C44:lI99|H3A1CF8
-3A1CF8:lI114|N
-3A1AD8:lH3A1B90|H3A1B9C
-3A1B90:t2:H3A1C54,H3A1C5C
-3A1C5C:lI97|H3A1D10
-3A1D10:lI112|H3A1DC4
-3A1DC4:lI112|H3A1E78
-3A1E78:lI108|H3A1F34
-3A1F34:lI105|H3A1FF0
-3A1FF0:lI99|H3A20A4
-3A20A4:lI97|H3A2160
-3A2160:lI116|H3A2214
-3A2214:lI105|H3A22C8
-3A22C8:lI111|H3A2384
-3A2384:lI110|H3A2440
-3A2440:lI47|H3A24EC
-3A24EC:lI120|H3A25A8
-3A25A8:lI45|H3A265C
-3A265C:lI100|H3A2710
-3A2710:lI105|H3A27CC
-3A27CC:lI114|H3A2888
-3A2888:lI101|H3A294C
-3A294C:lI99|H3A2A18
-3A2A18:lI116|H3A2AE4
-3A2AE4:lI111|H3A2BB0
-3A2BB0:lI114|N
-3A1C54:lI100|H3A1D08
-3A1D08:lI105|H3A1DBC
-3A1DBC:lI114|N
-3A1B9C:lH3A1C64|H3A1C70
-3A1C64:t2:H3A1D18,H3A1D20
-3A1D20:lI97|H3A1DD4
-3A1DD4:lI112|H3A1E88
-3A1E88:lI112|H3A1F3C
-3A1F3C:lI108|H3A1FF8
-3A1FF8:lI105|H3A20AC
-3A20AC:lI99|H3A2168
-3A2168:lI97|H3A221C
-3A221C:lI116|H3A22D0
-3A22D0:lI105|H3A238C
-3A238C:lI111|H3A2448
-3A2448:lI110|H3A24F4
-3A24F4:lI47|H3A25B0
-3A25B0:lI120|H3A2664
-3A2664:lI45|H3A2718
-3A2718:lI100|H3A27D4
-3A27D4:lI105|H3A2890
-3A2890:lI114|H3A2954
-3A2954:lI101|H3A2A20
-3A2A20:lI99|H3A2AEC
-3A2AEC:lI116|H3A2BB8
-3A2BB8:lI111|H3A2C74
-3A2C74:lI114|N
-3A1D18:lI100|H3A1DCC
-3A1DCC:lI120|H3A1E80
-3A1E80:lI114|N
-3A1C70:lH3A1D28|H3A1D34
-3A1D28:t2:H3A1DDC,H3A1DE4
-3A1DE4:lI97|H3A1E98
-3A1E98:lI112|H3A1F4C
-3A1F4C:lI112|H3A2000
-3A2000:lI108|H3A20B4
-3A20B4:lI105|H3A2170
-3A2170:lI99|H3A2224
-3A2224:lI97|H3A22D8
-3A22D8:lI116|H3A2394
-3A2394:lI105|H3A2450
-3A2450:lI111|H3A24FC
-3A24FC:lI110|H3A25B8
-3A25B8:lI47|H3A266C
-3A266C:lI120|H3A2720
-3A2720:lI45|H3A27DC
-3A27DC:lI99|H3A2898
-3A2898:lI115|H3A295C
-3A295C:lI104|N
-3A1DDC:lI99|H3A1E90
-3A1E90:lI115|H3A1F44
-3A1F44:lI104|N
-3A1D34:lH3A1DEC|H3A1DF8
-3A1DEC:t2:H3A1EA0,H3A1EA8
-3A1EA8:lI97|H3A1F5C
-3A1F5C:lI112|H3A2010
-3A2010:lI112|H3A20C4
-3A20C4:lI108|H3A2178
-3A2178:lI105|H3A222C
-3A222C:lI99|H3A22E0
-3A22E0:lI97|H3A239C
-3A239C:lI116|H3A2458
-3A2458:lI105|H3A2504
-3A2504:lI111|H3A25C0
-3A25C0:lI110|H3A2674
-3A2674:lI47|H3A2728
-3A2728:lI120|H3A27E4
-3A27E4:lI45|H3A28A0
-3A28A0:lI99|H3A2964
-3A2964:lI112|H3A2A28
-3A2A28:lI105|H3A2AF4
-3A2AF4:lI111|N
-3A1EA0:lI99|H3A1F54
-3A1F54:lI112|H3A2008
-3A2008:lI105|H3A20BC
-3A20BC:lI111|N
-3A1DF8:lH3A1EB0|H3A1EBC
-3A1EB0:t2:H3A1F64,H3A1F6C
-3A1F6C:lI97|H3A2018
-3A2018:lI112|H3A20CC
-3A20CC:lI112|H3A2180
-3A2180:lI108|H3A2234
-3A2234:lI105|H3A22E8
-3A22E8:lI99|H3A23A4
-3A23A4:lI97|H3A2460
-3A2460:lI116|H3A250C
-3A250C:lI105|H3A25C8
-3A25C8:lI111|H3A267C
-3A267C:lI110|H3A2730
-3A2730:lI47|H3A27EC
-3A27EC:lI120|H3A28A8
-3A28A8:lI45|H3A296C
-3A296C:lI99|H3A2A30
-3A2A30:lI111|H3A2AFC
-3A2AFC:lI109|H3A2BC0
-3A2BC0:lI112|H3A2C7C
-3A2C7C:lI114|H3A2D2C
-3A2D2C:lI101|H3A2DD4
-3A2DD4:lI115|H3A2E6C
-3A2E6C:lI115|N
-3A1F64:lI90|N
-3A1EBC:lH3A1F74|H3A1F80
-3A1F74:t2:H3A2020,H3A2028
-3A2028:lI97|H3A20DC
-3A20DC:lI112|H3A2190
-3A2190:lI112|H3A223C
-3A223C:lI108|H3A22F0
-3A22F0:lI105|H3A23AC
-3A23AC:lI99|H3A2468
-3A2468:lI97|H3A2514
-3A2514:lI116|H3A25D0
-3A25D0:lI105|H3A2684
-3A2684:lI111|H3A2738
-3A2738:lI110|H3A27F4
-3A27F4:lI47|H3A28B0
-3A28B0:lI120|H3A2974
-3A2974:lI45|H3A2A38
-3A2A38:lI99|H3A2B04
-3A2B04:lI100|H3A2BC8
-3A2BC8:lI108|H3A2C84
-3A2C84:lI105|H3A2D34
-3A2D34:lI110|H3A2DDC
-3A2DDC:lI107|N
-3A2020:lI118|H3A20D4
-3A20D4:lI99|H3A2188
-3A2188:lI100|N
-3A1F80:lH3A2030|H3A203C
-3A2030:t2:H3A20E4,H3A20EC
-3A20EC:lI97|H3A21A0
-3A21A0:lI112|H3A224C
-3A224C:lI112|H3A2300
-3A2300:lI108|H3A23BC
-3A23BC:lI105|H3A2470
-3A2470:lI99|H3A251C
-3A251C:lI97|H3A25D8
-3A25D8:lI116|H3A268C
-3A268C:lI105|H3A2740
-3A2740:lI111|H3A27FC
-3A27FC:lI110|H3A28B8
-3A28B8:lI47|H3A297C
-3A297C:lI120|H3A2A40
-3A2A40:lI45|H3A2B0C
-3A2B0C:lI98|H3A2BD0
-3A2BD0:lI99|H3A2C8C
-3A2C8C:lI112|H3A2D3C
-3A2D3C:lI105|H3A2DE4
-3A2DE4:lI111|N
-3A20E4:lI98|H3A2198
-3A2198:lI99|H3A2244
-3A2244:lI112|H3A22F8
-3A22F8:lI105|H3A23B4
-3A23B4:lI111|N
-3A203C:lH3A20F4|H3A2100
-3A20F4:t2:H3A21A8,H3A21B0
-3A21B0:lI97|H3A225C
-3A225C:lI112|H3A2310
-3A2310:lI112|H3A23C4
-3A23C4:lI108|H3A2478
-3A2478:lI105|H3A2524
-3A2524:lI99|H3A25E0
-3A25E0:lI97|H3A2694
-3A2694:lI116|H3A2748
-3A2748:lI105|H3A2804
-3A2804:lI111|H3A28C0
-3A28C0:lI110|H3A2984
-3A2984:lI47|H3A2A48
-3A2A48:lI114|H3A2B14
-3A2B14:lI116|H3A2BD8
-3A2BD8:lI102|N
-3A21A8:lI114|H3A2254
-3A2254:lI116|H3A2308
-3A2308:lI102|N
-3A2100:lH3A21B8|H3A21C4
-3A21B8:t2:H3A2264,H3A226C
-3A226C:lI97|H3A2320
-3A2320:lI112|H3A23D4
-3A23D4:lI112|H3A2480
-3A2480:lI108|H3A252C
-3A252C:lI105|H3A25E8
-3A25E8:lI99|H3A269C
-3A269C:lI97|H3A2750
-3A2750:lI116|H3A280C
-3A280C:lI105|H3A28C8
-3A28C8:lI111|H3A298C
-3A298C:lI110|H3A2A50
-3A2A50:lI47|H3A2B1C
-3A2B1C:lI112|H3A2BE0
-3A2BE0:lI111|H3A2C94
-3A2C94:lI119|H3A2D44
-3A2D44:lI101|H3A2DEC
-3A2DEC:lI114|H3A2E74
-3A2E74:lI112|H3A2EEC
-3A2EEC:lI111|H3A2F64
-3A2F64:lI105|H3A2FD4
-3A2FD4:lI110|H3A303C
-3A303C:lI116|N
-3A2264:lI112|H3A2318
-3A2318:lI112|H3A23CC
-3A23CC:lI116|N
-3A21C4:lH3A2274|H3A2280
-3A2274:t2:H3A2328,H3A2330
-3A2330:lI97|H3A23E4
-3A23E4:lI112|H3A2488
-3A2488:lI112|H3A2534
-3A2534:lI108|H3A25F0
-3A25F0:lI105|H3A26A4
-3A26A4:lI99|H3A2758
-3A2758:lI97|H3A2814
-3A2814:lI116|H3A28D0
-3A28D0:lI105|H3A2994
-3A2994:lI111|H3A2A58
-3A2A58:lI110|H3A2B24
-3A2B24:lI47|H3A2BE8
-3A2BE8:lI112|H3A2C9C
-3A2C9C:lI111|H3A2D4C
-3A2D4C:lI115|H3A2DF4
-3A2DF4:lI116|H3A2E7C
-3A2E7C:lI115|H3A2EF4
-3A2EF4:lI99|H3A2F6C
-3A2F6C:lI114|H3A2FDC
-3A2FDC:lI105|H3A3044
-3A3044:lI112|H3A30A4
-3A30A4:lI116|N
-3A2328:lI97|H3A23DC
-3A23DC:lI105|N
-3A2280:lH3A2338|H3A2344
-3A2338:t2:H3A23EC,H3A23F4
-3A23F4:lI97|H3A2498
-3A2498:lI112|H3A2544
-3A2544:lI112|H3A25F8
-3A25F8:lI108|H3A26AC
-3A26AC:lI105|H3A2760
-3A2760:lI99|H3A281C
-3A281C:lI97|H3A28D8
-3A28D8:lI116|H3A299C
-3A299C:lI105|H3A2A60
-3A2A60:lI111|H3A2B2C
-3A2B2C:lI110|H3A2BF0
-3A2BF0:lI47|H3A2CA4
-3A2CA4:lI112|H3A2D54
-3A2D54:lI111|H3A2DFC
-3A2DFC:lI115|H3A2E84
-3A2E84:lI116|H3A2EFC
-3A2EFC:lI115|H3A2F74
-3A2F74:lI99|H3A2FE4
-3A2FE4:lI114|H3A304C
-3A304C:lI105|H3A30AC
-3A30AC:lI112|H3A3104
-3A3104:lI116|N
-3A23EC:lI101|H3A2490
-3A2490:lI112|H3A253C
-3A253C:lI115|N
-3A2344:lH3A23FC|H3A2408
-3A23FC:t2:H3A24A0,H3A24A8
-3A24A8:lI97|H3A2554
-3A2554:lI112|H3A2600
-3A2600:lI112|H3A26B4
-3A26B4:lI108|H3A2768
-3A2768:lI105|H3A2824
-3A2824:lI99|H3A28E0
-3A28E0:lI97|H3A29A4
-3A29A4:lI116|H3A2A68
-3A2A68:lI105|H3A2B34
-3A2B34:lI111|H3A2BF8
-3A2BF8:lI110|H3A2CAC
-3A2CAC:lI47|H3A2D5C
-3A2D5C:lI112|H3A2E04
-3A2E04:lI111|H3A2E8C
-3A2E8C:lI115|H3A2F04
-3A2F04:lI116|H3A2F7C
-3A2F7C:lI115|H3A2FEC
-3A2FEC:lI99|H3A3054
-3A3054:lI114|H3A30B4
-3A30B4:lI105|H3A310C
-3A310C:lI112|H3A315C
-3A315C:lI116|N
-3A24A0:lI112|H3A254C
-3A254C:lI115|N
-3A2408:lH3A24B0|H3A24BC
-3A24B0:t2:H3A255C,H3A2564
-3A2564:lI97|H3A2610
-3A2610:lI112|H3A26C4
-3A26C4:lI112|H3A2770
-3A2770:lI108|H3A282C
-3A282C:lI105|H3A28E8
-3A28E8:lI99|H3A29AC
-3A29AC:lI97|H3A2A70
-3A2A70:lI116|H3A2B3C
-3A2B3C:lI105|H3A2C00
-3A2C00:lI111|H3A2CB4
-3A2CB4:lI110|H3A2D64
-3A2D64:lI47|H3A2E0C
-3A2E0C:lI112|H3A2E94
-3A2E94:lI100|H3A2F0C
-3A2F0C:lI102|N
-3A255C:lI112|H3A2608
-3A2608:lI100|H3A26BC
-3A26BC:lI102|N
-3A24BC:lH3A256C|H3A2578
-3A256C:t2:H3A2618,H3A2620
-3A2620:lI97|H3A26D4
-3A26D4:lI112|H3A2780
-3A2780:lI112|H3A2834
-3A2834:lI108|H3A28F0
-3A28F0:lI105|H3A29B4
-3A29B4:lI99|H3A2A78
-3A2A78:lI97|H3A2B44
-3A2B44:lI116|H3A2C08
-3A2C08:lI105|H3A2CBC
-3A2CBC:lI111|H3A2D6C
-3A2D6C:lI110|H3A2E14
-3A2E14:lI47|H3A2E9C
-3A2E9C:lI111|H3A2F14
-3A2F14:lI100|H3A2F84
-3A2F84:lI97|N
-3A2618:lI111|H3A26CC
-3A26CC:lI100|H3A2778
-3A2778:lI97|N
-3A2578:lH3A2628|H3A2634
-3A2628:t2:H3A26DC,H3A26E4
-3A26E4:lI97|H3A2790
-3A2790:lI112|H3A2844
-3A2844:lI112|H3A28F8
-3A28F8:lI108|H3A29BC
-3A29BC:lI105|H3A2A80
-3A2A80:lI99|H3A2B4C
-3A2B4C:lI97|H3A2C10
-3A2C10:lI116|H3A2CC4
-3A2CC4:lI105|H3A2D74
-3A2D74:lI111|H3A2E1C
-3A2E1C:lI110|H3A2EA4
-3A2EA4:lI47|H3A2F1C
-3A2F1C:lI111|H3A2F8C
-3A2F8C:lI99|H3A2FF4
-3A2FF4:lI116|H3A305C
-3A305C:lI101|H3A30BC
-3A30BC:lI116|H3A3114
-3A3114:lI45|H3A3164
-3A3164:lI115|H3A31AC
-3A31AC:lI116|H3A31F4
-3A31F4:lI114|H3A323C
-3A323C:lI101|H3A3284
-3A3284:lI97|H3A32CC
-3A32CC:lI109|N
-3A26DC:lI98|H3A2788
-3A2788:lI105|H3A283C
-3A283C:lI110|N
-3A2634:lH3A26EC|H3A26F8
-3A26EC:t2:H3A2798,H3A27A0
-3A27A0:lI97|H3A2854
-3A2854:lI112|H3A2908
-3A2908:lI112|H3A29C4
-3A29C4:lI108|H3A2A88
-3A2A88:lI105|H3A2B54
-3A2B54:lI99|H3A2C18
-3A2C18:lI97|H3A2CCC
-3A2CCC:lI116|H3A2D7C
-3A2D7C:lI105|H3A2E24
-3A2E24:lI111|H3A2EAC
-3A2EAC:lI110|H3A2F24
-3A2F24:lI47|H3A2F94
-3A2F94:lI111|H3A2FFC
-3A2FFC:lI99|H3A3064
-3A3064:lI116|H3A30C4
-3A30C4:lI101|H3A311C
-3A311C:lI116|H3A316C
-3A316C:lI45|H3A31B4
-3A31B4:lI115|H3A31FC
-3A31FC:lI116|H3A3244
-3A3244:lI114|H3A328C
-3A328C:lI101|H3A32D4
-3A32D4:lI97|H3A3314
-3A3314:lI109|N
-3A2798:lI100|H3A284C
-3A284C:lI109|H3A2900
-3A2900:lI115|N
-3A26F8:lH3A27A8|H3A27B4
-3A27A8:t2:H3A285C,H3A2864
-3A2864:lI97|H3A2918
-3A2918:lI112|H3A29D4
-3A29D4:lI112|H3A2A90
-3A2A90:lI108|H3A2B5C
-3A2B5C:lI105|H3A2C20
-3A2C20:lI99|H3A2CD4
-3A2CD4:lI97|H3A2D84
-3A2D84:lI116|H3A2E2C
-3A2E2C:lI105|H3A2EB4
-3A2EB4:lI111|H3A2F2C
-3A2F2C:lI110|H3A2F9C
-3A2F9C:lI47|H3A3004
-3A3004:lI111|H3A306C
-3A306C:lI99|H3A30CC
-3A30CC:lI116|H3A3124
-3A3124:lI101|H3A3174
-3A3174:lI116|H3A31BC
-3A31BC:lI45|H3A3204
-3A3204:lI115|H3A324C
-3A324C:lI116|H3A3294
-3A3294:lI114|H3A32DC
-3A32DC:lI101|H3A331C
-3A331C:lI97|H3A334C
-3A334C:lI109|N
-3A285C:lI108|H3A2910
-3A2910:lI104|H3A29CC
-3A29CC:lI97|N
-3A27B4:lH3A286C|H3A2878
-3A286C:t2:H3A2920,H3A2928
-3A2928:lI97|H3A29E4
-3A29E4:lI112|H3A2AA0
-3A2AA0:lI112|H3A2B64
-3A2B64:lI108|H3A2C28
-3A2C28:lI105|H3A2CDC
-3A2CDC:lI99|H3A2D8C
-3A2D8C:lI97|H3A2E34
-3A2E34:lI116|H3A2EBC
-3A2EBC:lI105|H3A2F34
-3A2F34:lI111|H3A2FA4
-3A2FA4:lI110|H3A300C
-3A300C:lI47|H3A3074
-3A3074:lI111|H3A30D4
-3A30D4:lI99|H3A312C
-3A312C:lI116|H3A317C
-3A317C:lI101|H3A31C4
-3A31C4:lI116|H3A320C
-3A320C:lI45|H3A3254
-3A3254:lI115|H3A329C
-3A329C:lI116|H3A32E4
-3A32E4:lI114|H3A3324
-3A3324:lI101|H3A3354
-3A3354:lI97|H3A337C
-3A337C:lI109|N
-3A2920:lI108|H3A29DC
-3A29DC:lI122|H3A2A98
-3A2A98:lI104|N
-3A2878:lH3A2930|H3A293C
-3A2930:t2:H3A29EC,H3A29F4
-3A29F4:lI97|H3A2AB0
-3A2AB0:lI112|H3A2B74
-3A2B74:lI112|H3A2C30
-3A2C30:lI108|H3A2CE4
-3A2CE4:lI105|H3A2D94
-3A2D94:lI99|H3A2E3C
-3A2E3C:lI97|H3A2EC4
-3A2EC4:lI116|H3A2F3C
-3A2F3C:lI105|H3A2FAC
-3A2FAC:lI111|H3A3014
-3A3014:lI110|H3A307C
-3A307C:lI47|H3A30DC
-3A30DC:lI111|H3A3134
-3A3134:lI99|H3A3184
-3A3184:lI116|H3A31CC
-3A31CC:lI101|H3A3214
-3A3214:lI116|H3A325C
-3A325C:lI45|H3A32A4
-3A32A4:lI115|H3A32EC
-3A32EC:lI116|H3A332C
-3A332C:lI114|H3A335C
-3A335C:lI101|H3A3384
-3A3384:lI97|H3A33A4
-3A33A4:lI109|N
-3A29EC:lI101|H3A2AA8
-3A2AA8:lI120|H3A2B6C
-3A2B6C:lI101|N
-3A293C:lH3A29FC|H3A2A08
-3A29FC:t2:H3A2AB8,H3A2AC0
-3A2AC0:lI97|H3A2B84
-3A2B84:lI112|H3A2C40
-3A2C40:lI112|H3A2CF4
-3A2CF4:lI108|H3A2DA4
-3A2DA4:lI105|H3A2E44
-3A2E44:lI99|H3A2ECC
-3A2ECC:lI97|H3A2F44
-3A2F44:lI116|H3A2FB4
-3A2FB4:lI105|H3A301C
-3A301C:lI111|H3A3084
-3A3084:lI110|H3A30E4
-3A30E4:lI47|H3A313C
-3A313C:lI111|H3A318C
-3A318C:lI99|H3A31D4
-3A31D4:lI116|H3A321C
-3A321C:lI101|H3A3264
-3A3264:lI116|H3A32AC
-3A32AC:lI45|H3A32F4
-3A32F4:lI115|H3A3334
-3A3334:lI116|H3A3364
-3A3364:lI114|H3A338C
-3A338C:lI101|H3A33AC
-3A33AC:lI97|H3A33C4
-3A33C4:lI109|N
-3A2AB8:lI99|H3A2B7C
-3A2B7C:lI108|H3A2C38
-3A2C38:lI97|H3A2CEC
-3A2CEC:lI115|H3A2D9C
-3A2D9C:lI115|N
-3A2A08:lH3A2AC8|H3A2AD4
-3A2AC8:t2:H3A2B8C,H3A2B94
-3A2B94:lI97|H3A2C50
-3A2C50:lI112|H3A2D04
-3A2D04:lI112|H3A2DAC
-3A2DAC:lI108|H3A2E4C
-3A2E4C:lI105|H3A2ED4
-3A2ED4:lI99|H3A2F4C
-3A2F4C:lI97|H3A2FBC
-3A2FBC:lI116|H3A3024
-3A3024:lI105|H3A308C
-3A308C:lI111|H3A30EC
-3A30EC:lI110|H3A3144
-3A3144:lI47|H3A3194
-3A3194:lI109|H3A31DC
-3A31DC:lI115|H3A3224
-3A3224:lI119|H3A326C
-3A326C:lI111|H3A32B4
-3A32B4:lI114|H3A32FC
-3A32FC:lI100|N
-3A2B8C:lI100|H3A2C48
-3A2C48:lI111|H3A2CFC
-3A2CFC:lI99|N
-3A2AD4:lH3A2B9C|H3A2BA8
-3A2B9C:t2:H3A2C58,H3A2C60
-3A2C60:lI97|H3A2D14
-3A2D14:lI112|H3A2DBC
-3A2DBC:lI112|H3A2E54
-3A2E54:lI108|H3A2EDC
-3A2EDC:lI105|H3A2F54
-3A2F54:lI99|H3A2FC4
-3A2FC4:lI97|H3A302C
-3A302C:lI116|H3A3094
-3A3094:lI105|H3A30F4
-3A30F4:lI111|H3A314C
-3A314C:lI110|H3A319C
-3A319C:lI47|H3A31E4
-3A31E4:lI109|H3A322C
-3A322C:lI97|H3A3274
-3A3274:lI99|H3A32BC
-3A32BC:lI45|H3A3304
-3A3304:lI99|H3A333C
-3A333C:lI111|H3A336C
-3A336C:lI109|H3A3394
-3A3394:lI112|H3A33B4
-3A33B4:lI97|H3A33CC
-3A33CC:lI99|H3A33DC
-3A33DC:lI116|H3A33EC
-3A33EC:lI112|H3A33FC
-3A33FC:lI114|H3A340C
-3A340C:lI111|N
-3A2C58:lI99|H3A2D0C
-3A2D0C:lI112|H3A2DB4
-3A2DB4:lI116|N
-3A2BA8:lH3A2C68|N
-3A2C68:t2:H3A2D1C,H3A2D24
-3A2D24:lI97|H3A2DCC
-3A2DCC:lI112|H3A2E64
-3A2E64:lI112|H3A2EE4
-3A2EE4:lI108|H3A2F5C
-3A2F5C:lI105|H3A2FCC
-3A2FCC:lI99|H3A3034
-3A3034:lI97|H3A309C
-3A309C:lI116|H3A30FC
-3A30FC:lI105|H3A3154
-3A3154:lI111|H3A31A4
-3A31A4:lI110|H3A31EC
-3A31EC:lI47|H3A3234
-3A3234:lI109|H3A327C
-3A327C:lI97|H3A32C4
-3A32C4:lI99|H3A330C
-3A330C:lI45|H3A3344
-3A3344:lI98|H3A3374
-3A3374:lI105|H3A339C
-3A339C:lI110|H3A33BC
-3A33BC:lI104|H3A33D4
-3A33D4:lI101|H3A33E4
-3A33E4:lI120|H3A33F4
-3A33F4:lI52|H3A3404
-3A3404:lI48|N
-3A2D1C:lI104|H3A2DC4
-3A2DC4:lI113|H3A2E5C
-3A2E5C:lI120|N
-39DC28:lH39DC68|H39DC74
-39DC68:t2:A4:port,I8888
-39DC74:lH39DCA8|H39DCB4
-39DCA8:t2:AC:bind_address,H39DCF8
-39DCF8:t4:I127,I0,I0,I1
-39DCB4:lH39DD0C|H39DD18
-39DD0C:t2:AB:server_name,H39DD6C
-39DD6C:lI108|H39DDE4
-39DDE4:lI111|H39DE5C
-39DE5C:lI99|H39DEE4
-39DEE4:lI97|H39DF6C
-39DF6C:lI108|H39E00C
-39E00C:lI104|H39E0B4
-39E0B4:lI111|H39E16C
-39E16C:lI115|H39E238
-39E238:lI116|N
-39DD18:lH39DD74|H39DD80
-39DD74:t2:AE:max_header_siz,I1024
-39DD80:lH39DDEC|H39DDF8
-39DDEC:t2:A11:max_header_action,A8:reply414
-39DDF8:lH39DE64|H39DE70
-39DE64:t2:A8:com_type,A7:ip_comm
-39DE70:lH39DEEC|H39DEF8
-39DEEC:t2:A7:modules,H39DF74
-39DF74:lA9:mod_alias|H39E014
-39E014:lA8:mod_auth|H39E0BC
-39E0BC:lA7:mod_esi|H39E174
-39E174:lAB:mod_actions|H39E240
-39E240:lA7:mod_cgi|H39E324
-39E324:lAB:mod_include|H39E418
-39E418:lA7:mod_dir|H39E51C
-39E51C:lA7:mod_get|H39E634
-39E634:lA8:mod_head|H39E748
-39E748:lA7:mod_log|H39E85C
-39E85C:lAC:mod_disk_log|N
-39DEF8:lH39DF7C|H39DF88
-39DF7C:t2:AF:directory_index,H39E01C
-39E01C:lH39E0C4|N
-39E0C4:lI105|H39E17C
-39E17C:lI110|H39E248
-39E248:lI100|H39E32C
-39E32C:lI101|H39E420
-39E420:lI120|H39E524
-39E524:lI46|H39E63C
-39E63C:lI104|H39E750
-39E750:lI116|H39E864
-39E864:lI109|H39E978
-39E978:lI108|N
-39DF88:lH39E024|H39E030
-39E024:t2:AC:default_type,H39E0CC
-39E0CC:lI116|H39E184
-39E184:lI101|H39E250
-39E250:lI120|H39E334
-39E334:lI116|H39E428
-39E428:lI47|H39E52C
-39E52C:lI112|H39E644
-39E644:lI108|H39E758
-39E758:lI97|H39E86C
-39E86C:lI105|H39E980
-39E980:lI110|N
-39E030:lH39E0D4|H39E0E0
-39E0D4:t2:A10:erl_script_alias,H39E18C
-39E18C:t2:H39E258,H39E260
-39E260:lH39E344|N
-39E344:lI119|H39E438
-39E438:lI101|H39E53C
-39E53C:lI98|H39E654
-39E654:lI116|H39E768
-39E768:lI111|H39E87C
-39E87C:lI111|H39E990
-39E990:lI108|N
-39E258:lI47|H39E33C
-39E33C:lI119|H39E430
-39E430:lI101|H39E534
-39E534:lI98|H39E64C
-39E64C:lI116|H39E760
-39E760:lI111|H39E874
-39E874:lI111|H39E988
-39E988:lI108|N
-39E0E0:lH39E198|H39E1A4
-39E198:t2:A5:alias,H39E268
-39E268:t2:H39E34C,H39E354
-39E354:lI47|H39E448
-39E448:lI99|H39E54C
-39E54C:lI108|H39E664
-39E664:lI101|H39E778
-39E778:lI97|H39E88C
-39E88C:lI114|H39E9A0
-39E9A0:lI99|H39EA94
-39EA94:lI97|H39EB88
-39EB88:lI115|H39EC7C
-39EC7C:lI101|H39ED70
-39ED70:lI47|H39EE4C
-39EE4C:lI111|H39EF20
-39EF20:lI116|H39EFFC
-39EFFC:lI112|H39F0E0
-39F0E0:lI47|H39F1B4
-39F1B4:lI101|H39F288
-39F288:lI114|H39F344
-39F344:lI116|H39F408
-39F408:lI115|H39F4D4
-39F4D4:lI47|H39F5A8
-39F5A8:lI108|H39F67C
-39F67C:lI105|H39F750
-39F750:lI98|H39F824
-39F824:lI47|H39F908
-39F908:lI111|H39F9E4
-39F9E4:lI98|H39FAC0
-39FAC0:lI115|H39FB9C
-39FB9C:lI101|H39FC68
-39FC68:lI114|H39FD2C
-39FD2C:lI118|H39FDF8
-39FDF8:lI101|H39FEB4
-39FEB4:lI114|H39FF70
-39FF70:lI47|H3A0024
-3A0024:lI112|H3A00D8
-3A00D8:lI114|H3A0184
-3A0184:lI105|H3A0238
-3A0238:lI118|H3A02F4
-3A02F4:lI47|H3A03A8
-3A03A8:lI99|H3A0444
-3A0444:lI114|H3A04E8
-3A04E8:lI97|H3A058C
-3A058C:lI115|H3A0638
-3A0638:lI104|H3A06EC
-3A06EC:lI100|H3A0798
-3A0798:lI117|H3A083C
-3A083C:lI109|H3A08C8
-3A08C8:lI112|H3A095C
-3A095C:lI95|H3A09F0
-3A09F0:lI118|H3A0A8C
-3A0A8C:lI105|H3A0B38
-3A0B38:lI101|H3A0BE4
-3A0BE4:lI119|H3A0CA0
-3A0CA0:lI101|H3A0D5C
-3A0D5C:lI114|N
-39E34C:lI47|H39E440
-39E440:lI99|H39E544
-39E544:lI114|H39E65C
-39E65C:lI97|H39E770
-39E770:lI115|H39E884
-39E884:lI104|H39E998
-39E998:lI100|H39EA8C
-39EA8C:lI117|H39EB80
-39EB80:lI109|H39EC74
-39EC74:lI112|H39ED68
-39ED68:lI95|H39EE44
-39EE44:lI118|H39EF18
-39EF18:lI105|H39EFF4
-39EFF4:lI101|H39F0D8
-39F0D8:lI119|H39F1AC
-39F1AC:lI101|H39F280
-39F280:lI114|N
-39E1A4:lH39E274|H39E280
-39E274:t2:A5:alias,H39E35C
-39E35C:t2:H39E450,H39E458
-39E458:lI47|H39E55C
-39E55C:lI99|H39E674
-39E674:lI108|H39E788
-39E788:lI101|H39E89C
-39E89C:lI97|H39E9B0
-39E9B0:lI114|H39EAA4
-39EAA4:lI99|H39EB98
-39EB98:lI97|H39EC8C
-39EC8C:lI115|H39ED80
-39ED80:lI101|H39EE5C
-39EE5C:lI47|H39EF30
-39EF30:lI111|H39F00C
-39F00C:lI116|H39F0F0
-39F0F0:lI112|H39F1C4
-39F1C4:lI47|H39F298
-39F298:lI101|H39F354
-39F354:lI114|H39F418
-39F418:lI116|H39F4E4
-39F4E4:lI115|H39F5B0
-39F5B0:lI47|H39F684
-39F684:lI101|H39F758
-39F758:lI114|H39F82C
-39F82C:lI116|H39F910
-39F910:lI115|H39F9EC
-39F9EC:lI47|H39FAC8
-39FAC8:lI100|H39FBA4
-39FBA4:lI111|H39FC70
-39FC70:lI99|H39FD34
-39FD34:lI47|H39FE00
-39FE00:lI104|H39FEBC
-39FEBC:lI116|H39FF78
-39FF78:lI109|H3A002C
-3A002C:lI108|N
-39E450:lI47|H39E554
-39E554:lI99|H39E66C
-39E66C:lI114|H39E780
-39E780:lI97|H39E894
-39E894:lI115|H39E9A8
-39E9A8:lI104|H39EA9C
-39EA9C:lI100|H39EB90
-39EB90:lI117|H39EC84
-39EC84:lI109|H39ED78
-39ED78:lI112|H39EE54
-39EE54:lI95|H39EF28
-39EF28:lI101|H39F004
-39F004:lI114|H39F0E8
-39F0E8:lI116|H39F1BC
-39F1BC:lI115|H39F290
-39F290:lI95|H39F34C
-39F34C:lI100|H39F410
-39F410:lI111|H39F4DC
-39F4DC:lI99|N
-39E280:lH39E368|H39E374
-39E368:t2:A5:alias,H39E460
-39E460:t2:H39E564,H39E56C
-39E56C:lI47|H39E684
-39E684:lI99|H39E798
-39E798:lI108|H39E8AC
-39E8AC:lI101|H39E9C0
-39E9C0:lI97|H39EAB4
-39EAB4:lI114|H39EBA8
-39EBA8:lI99|H39EC9C
-39EC9C:lI97|H39ED90
-39ED90:lI115|H39EE6C
-39EE6C:lI101|H39EF40
-39EF40:lI47|H39F01C
-39F01C:lI111|H39F100
-39F100:lI116|H39F1D4
-39F1D4:lI112|H39F2A0
-39F2A0:lI47|H39F35C
-39F35C:lI101|H39F420
-39F420:lI114|H39F4EC
-39F4EC:lI116|H39F5B8
-39F5B8:lI115|H39F68C
-39F68C:lI47|H39F760
-39F760:lI108|H39F834
-39F834:lI105|H39F918
-39F918:lI98|H39F9F4
-39F9F4:lI47|H39FAD0
-39FAD0:lI111|H39FBAC
-39FBAC:lI98|H39FC78
-39FC78:lI115|H39FD3C
-39FD3C:lI101|H39FE08
-39FE08:lI114|H39FEC4
-39FEC4:lI118|H39FF80
-39FF80:lI101|H3A0034
-3A0034:lI114|H3A00E0
-3A00E0:lI47|H3A018C
-3A018C:lI100|H3A0240
-3A0240:lI111|H3A02FC
-3A02FC:lI99|H3A03B0
-3A03B0:lI47|H3A044C
-3A044C:lI104|H3A04F0
-3A04F0:lI116|H3A0594
-3A0594:lI109|H3A0640
-3A0640:lI108|N
-39E564:lI47|H39E67C
-39E67C:lI99|H39E790
-39E790:lI114|H39E8A4
-39E8A4:lI97|H39E9B8
-39E9B8:lI115|H39EAAC
-39EAAC:lI104|H39EBA0
-39EBA0:lI100|H39EC94
-39EC94:lI117|H39ED88
-39ED88:lI109|H39EE64
-39EE64:lI112|H39EF38
-39EF38:lI95|H39F014
-39F014:lI100|H39F0F8
-39F0F8:lI111|H39F1CC
-39F1CC:lI99|N
-39E374:lH39E46C|N
-39E46C:t2:A10:erl_script_alias,H39E574
-39E574:t2:H39E68C,H39E694
-39E694:lH39E7A8|N
-39E7A8:lI99|H39E8BC
-39E8BC:lI114|H39E9D0
-39E9D0:lI97|H39EAC4
-39EAC4:lI115|H39EBB8
-39EBB8:lI104|H39ECAC
-39ECAC:lI100|H39EDA0
-39EDA0:lI117|H39EE74
-39EE74:lI109|H39EF48
-39EF48:lI112|H39F024
-39F024:lI95|H39F108
-39F108:lI118|H39F1DC
-39F1DC:lI105|H39F2A8
-39F2A8:lI101|H39F364
-39F364:lI119|H39F428
-39F428:lI101|H39F4F4
-39F4F4:lI114|N
-39E68C:lI47|H39E7A0
-39E7A0:lI99|H39E8B4
-39E8B4:lI100|H39E9C8
-39E9C8:lI118|H39EABC
-39EABC:lI95|H39EBB0
-39EBB0:lI101|H39ECA4
-39ECA4:lI114|H39ED98
-39ED98:lI108|N
-39DB58:lN|H39DB9C
-39DB9C:lH39D9FC|H39DBEC
-39D9FC:t4:I127,I0,I0,I1
-39DBEC:lI8888|N
-3A3E20:lH3A3DFC|H3A3704
-3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
-39DAE8:lAD:httpd_manager|H39DB38
-39DB38:lAA:gen_server|N
-39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
-39DB30:lA9:undefined|H39DB78
-39DB78:lH39DB50|H39DBC0
-39DBC0:lN|N
-39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
-3A3704:lH3A36E0|H39D998
-3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
-39DA38:lAE:httpd_misc_sup|H39DAC0
-39DAC0:lAA:supervisor|N
-39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
-39D958:lH39D9FC|H39DA10
-39DA10:lI8888|H39DAB8
-39DAB8:lA7:silence|N
-39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
-39D998:lH39DA64|N
-39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
-39DB10:lA12:httpd_acceptor_sup|H39DB48
-39DB48:lAA:supervisor|N
-39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
-39DB40:lH39D9FC|H39DB80
-39DB80:lI8888|H39DBC8
-39DBC8:lA7:silence|N
-39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
-39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39D9CC:lAA:gen_server|H39DA90
-39DA90:lP<0.33.0>|H39DB20
-39DB20:lP<0.33.0>|H39DB60
-39DB60:lH39DBA4|H39DBB0
-39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39DBB0:lAA:supervisor|H39DBF4
-39DBF4:lH39DC30|H39DC40
-39DC30:t3:H39D960,A9:httpd_sup,H39DA88
-39DC40:lN|N
-39D940:t2:AD:$initial_call,H39D9E4
-39D9E4:t3:A3:gen,A7:init_it,H39D9CC
-39D94C:t2:AA:$ancestors,H39D9F4
-39D9F4:lA8:web_tool|H39DAB0
-39DAB0:lP<0.27.0>|N
-=proc_dictionary:<0.44.0>
-H3756A8
-H3756B4
-H3756C0
-H3756CC
-=proc_stack:<0.44.0>
-36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36C030
-y4:A1E:httpd_acc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H375710
-=proc_heap:<0.44.0>
-36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
-375730:lA7:silence|N
-36C028:lH36C004|N
-36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
-36BEA0:lAE:httpd_acceptor|N
-36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
-36BEE8:lP<0.46.0>|H36BEF0
-36BEF0:lA7:ip_comm|H36BEF8
-36BEF8:lH36BF00|H36BF14
-36BF00:t4:I127,I0,I0,I1
-36BF14:lI8888|H36BF1C
-36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
-36BF24:lA7:silence|N
-36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
-36BED4:t4:I127,I0,I0,I1
-3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-375710:lAA:gen_server|H375738
-375738:lP<0.43.0>|H375748
-375748:lP<0.43.0>|H375758
-375758:lH375760|H37576C
-375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-37576C:lAA:supervisor|H375774
-375774:lH37577C|H37578C
-37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
-37578C:lN|N
-3756A8:t2:AD:$initial_call,H375718
-375718:t3:A3:gen,A7:init_it,H375710
-3756B4:t2:A9:verbosity,A7:silence
-3756C0:t2:AA:$ancestors,H375728
-375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
-375740:lA8:web_tool|H375750
-375750:lP<0.27.0>|N
-3756CC:t2:A5:sname,A7:acc_sup
-=proc_dictionary:<0.45.0>
-H36F484
-H36F4F4
-H36F468
-H36F500
-=proc_stack:<0.45.0>
-36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F5D0
-y4:A1F:httpd_misc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36f750:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36F430
-=proc_heap:<0.45.0>
-36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
-36F408:lA7:silence|N
-36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F430:lAA:gen_server|H36F428
-36F428:lP<0.43.0>|H36F420
-36F420:lP<0.43.0>|H36F3D0
-36F3D0:lH36F3E0|H36F418
-36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F418:lAA:supervisor|H36F3D8
-36F3D8:lH36F3EC|H36F410
-36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
-36F410:lN|N
-36F484:t2:AD:$initial_call,H36F474
-36F474:t3:A3:gen,A7:init_it,H36F430
-36F4F4:t2:A9:verbosity,A7:silence
-36F468:t2:AA:$ancestors,H36F460
-36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
-36F440:lA8:web_tool|H36F438
-36F438:lP<0.27.0>|N
-36F500:t2:A5:sname,A8:misc_sup
-=proc_dictionary:<0.46.0>
-H3BDA50
-H3BDA5C
-H3BDAC8
-H3BDB28
-H3BDB9C
-H3BDC00
-H3BDADC
-H3BDB3C
-=proc_stack:<0.46.0>
-39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:httpd_manager
-y3:H39D5A4
-y4:A16:httpd__127_0_0_1__8888
-y5:P<0.43.0>
-39d910:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3BDAB0
-=proc_heap:<0.46.0>
-39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
-39D430:lH39BF40|H39D428
-39BF40:t2:A8:max_conn,I1
-39D428:lH39BC80|H39D420
-39BC80:t2:AF:last_heavy_load,A5:never
-39D420:lH39D414|N
-39D414:t2:AF:last_connection,H39D408
-39D408:t2:H39D3E8,H39D3F8
-39D3F8:t3:I11,I22,I34
-39D3E8:t3:I2004,I4,I21
-3BDAB0:lAA:gen_server|H3BDB20
-3BDB20:lP<0.43.0>|H3BDB94
-3BDB94:lP<0.43.0>|H3BDBF8
-3BDBF8:lH3BDC48|H3BDC54
-3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
-3BDC54:lAD:httpd_manager|H3BDCAC
-3BDCAC:lH3BDD14|H3BDD1C
-3BDD14:lA9:undefined|H3BDD9C
-3BDD9C:lH3BDA84|H3BDE2C
-3BDA84:lH3BDAF0|H3BDAFC
-3BDAF0:t2:AB:server_root,H3BDB48
-3BDB48:lI47|H3BDBB0
-3BDBB0:lI99|H3BDC0C
-3BDC0C:lI108|H3BDC64
-3BDC64:lI101|H3BDCBC
-3BDCBC:lI97|H3BDD2C
-3BDD2C:lI114|H3BDDA4
-3BDDA4:lI99|H3BDE34
-3BDE34:lI97|H3BDED4
-3BDED4:lI115|H3BDF90
-3BDF90:lI101|H3BE054
-3BE054:lI47|H3BE128
-3BE128:lI111|H3BE204
-3BE204:lI116|H3BE2EC
-3BE2EC:lI112|H3BE3E0
-3BE3E0:lI47|H3BE4E4
-3BE4E4:lI101|H3BE5E8
-3BE5E8:lI114|H3BE6EC
-3BE6EC:lI116|H3BE7E0
-3BE7E0:lI115|H3BE8CC
-3BE8CC:lI47|H3BE9B8
-3BE9B8:lI108|H3BEAAC
-3BEAAC:lI105|H3BEB98
-3BEB98:lI98|H3BEC84
-3BEC84:lI47|H3BED70
-3BED70:lI119|H3BEE5C
-3BEE5C:lI101|H3BEF30
-3BEF30:lI98|H3BEFFC
-3BEFFC:lI116|H3BF0C8
-3BF0C8:lI111|H3BF19C
-3BF19C:lI111|H3BF260
-3BF260:lI108|H3BF314
-3BF314:lI47|H3BF3C0
-3BF3C0:lI112|H3BF474
-3BF474:lI114|H3BF530
-3BF530:lI105|H3BF5F4
-3BF5F4:lI118|H3BF6C8
-3BF6C8:lI47|H3BF79C
-3BF79C:lI114|H3BF870
-3BF870:lI111|H3BF954
-3BF954:lI111|H3BFA30
-3BFA30:lI116|N
-3BDAFC:lH3BDB50|H3BDB5C
-3BDB50:t2:AD:document_root,H3BDBB8
-3BDBB8:lI47|H3BDC14
-3BDC14:lI99|H3BDC6C
-3BDC6C:lI108|H3BDCC4
-3BDCC4:lI101|H3BDD34
-3BDD34:lI97|H3BDDAC
-3BDDAC:lI114|H3BDE3C
-3BDE3C:lI99|H3BDEDC
-3BDEDC:lI97|H3BDF98
-3BDF98:lI115|H3BE05C
-3BE05C:lI101|H3BE130
-3BE130:lI47|H3BE20C
-3BE20C:lI111|H3BE2F4
-3BE2F4:lI116|H3BE3E8
-3BE3E8:lI112|H3BE4EC
-3BE4EC:lI47|H3BE5F0
-3BE5F0:lI101|H3BE6F4
-3BE6F4:lI114|H3BE7E8
-3BE7E8:lI116|H3BE8D4
-3BE8D4:lI115|H3BE9C0
-3BE9C0:lI47|H3BEAB4
-3BEAB4:lI108|H3BEBA0
-3BEBA0:lI105|H3BEC8C
-3BEC8C:lI98|H3BED78
-3BED78:lI47|H3BEE64
-3BEE64:lI119|H3BEF38
-3BEF38:lI101|H3BF004
-3BF004:lI98|H3BF0D0
-3BF0D0:lI116|H3BF1A4
-3BF1A4:lI111|H3BF268
-3BF268:lI111|H3BF31C
-3BF31C:lI108|H3BF3C8
-3BF3C8:lI47|H3BF47C
-3BF47C:lI112|H3BF538
-3BF538:lI114|H3BF5FC
-3BF5FC:lI105|H3BF6D0
-3BF6D0:lI118|H3BF7A4
-3BF7A4:lI47|H3BF878
-3BF878:lI114|H3BF95C
-3BF95C:lI111|H3BFA38
-3BFA38:lI111|H3BFB0C
-3BFB0C:lI116|H3BFBE8
-3BFBE8:lI47|H3BFCB4
-3BFCB4:lI100|H3BFD78
-3BFD78:lI111|H3BFE3C
-3BFE3C:lI99|N
-3BDB5C:lH3BDBC0|H3BDBCC
-3BDBC0:t2:AA:mime_types,H3BDC1C
-3BDC1C:lH3BDC74|H3BDC80
-3BDC74:t2:H3BDCCC,H3BDCD4
-3BDCD4:lI120|H3BDD44
-3BDD44:lI45|H3BDDBC
-3BDDBC:lI119|H3BDE44
-3BDE44:lI111|H3BDEE4
-3BDEE4:lI114|H3BDFA0
-3BDFA0:lI108|H3BE064
-3BE064:lI100|H3BE138
-3BE138:lI47|H3BE214
-3BE214:lI120|H3BE2FC
-3BE2FC:lI45|H3BE3F0
-3BE3F0:lI118|H3BE4F4
-3BE4F4:lI114|H3BE5F8
-3BE5F8:lI109|H3BE6FC
-3BE6FC:lI108|N
-3BDCCC:lI119|H3BDD3C
-3BDD3C:lI114|H3BDDB4
-3BDDB4:lI108|N
-3BDC80:lH3BDCDC|H3BDCE8
-3BDCDC:t2:H3BDD4C,H3BDD54
-3BDD54:lI120|H3BDDCC
-3BDDCC:lI45|H3BDE54
-3BDE54:lI119|H3BDEF4
-3BDEF4:lI111|H3BDFA8
-3BDFA8:lI114|H3BE06C
-3BE06C:lI108|H3BE140
-3BE140:lI100|H3BE21C
-3BE21C:lI47|H3BE304
-3BE304:lI120|H3BE3F8
-3BE3F8:lI45|H3BE4FC
-3BE4FC:lI118|H3BE600
-3BE600:lI114|H3BE704
-3BE704:lI109|H3BE7F0
-3BE7F0:lI108|N
-3BDD4C:lI118|H3BDDC4
-3BDDC4:lI114|H3BDE4C
-3BDE4C:lI109|H3BDEEC
-3BDEEC:lI108|N
-3BDCE8:lH3BDD5C|H3BDD68
-3BDD5C:t2:H3BDDD4,H3BDDDC
-3BDDDC:lI120|H3BDE64
-3BDE64:lI45|H3BDF04
-3BDF04:lI99|H3BDFB0
-3BDFB0:lI111|H3BE074
-3BE074:lI110|H3BE148
-3BE148:lI102|H3BE224
-3BE224:lI101|H3BE30C
-3BE30C:lI114|H3BE400
-3BE400:lI101|H3BE504
-3BE504:lI110|H3BE608
-3BE608:lI99|H3BE70C
-3BE70C:lI101|H3BE7F8
-3BE7F8:lI47|H3BE8DC
-3BE8DC:lI120|H3BE9C8
-3BE9C8:lI45|H3BEABC
-3BEABC:lI99|H3BEBA8
-3BEBA8:lI111|H3BEC94
-3BEC94:lI111|H3BED80
-3BED80:lI108|H3BEE6C
-3BEE6C:lI116|H3BEF40
-3BEF40:lI97|H3BF00C
-3BF00C:lI108|H3BF0D8
-3BF0D8:lI107|N
-3BDDD4:lI105|H3BDE5C
-3BDE5C:lI99|H3BDEFC
-3BDEFC:lI101|N
-3BDD68:lH3BDDE4|H3BDDF0
-3BDDE4:t2:H3BDE6C,H3BDE74
-3BDE74:lI118|H3BDF14
-3BDF14:lI105|H3BDFC0
-3BDFC0:lI100|H3BE084
-3BE084:lI101|H3BE158
-3BE158:lI111|H3BE22C
-3BE22C:lI47|H3BE314
-3BE314:lI120|H3BE408
-3BE408:lI45|H3BE50C
-3BE50C:lI115|H3BE610
-3BE610:lI103|H3BE714
-3BE714:lI105|H3BE800
-3BE800:lI45|H3BE8E4
-3BE8E4:lI109|H3BE9D0
-3BE9D0:lI111|H3BEAC4
-3BEAC4:lI118|H3BEBB0
-3BEBB0:lI105|H3BEC9C
-3BEC9C:lI101|N
-3BDE6C:lI109|H3BDF0C
-3BDF0C:lI111|H3BDFB8
-3BDFB8:lI118|H3BE07C
-3BE07C:lI105|H3BE150
-3BE150:lI101|N
-3BDDF0:lH3BDE7C|H3BDE88
-3BDE7C:t2:H3BDF1C,H3BDF24
-3BDF24:lI118|H3BDFD0
-3BDFD0:lI105|H3BE094
-3BE094:lI100|H3BE160
-3BE160:lI101|H3BE234
-3BE234:lI111|H3BE31C
-3BE31C:lI47|H3BE410
-3BE410:lI120|H3BE514
-3BE514:lI45|H3BE618
-3BE618:lI109|H3BE71C
-3BE71C:lI115|H3BE808
-3BE808:lI118|H3BE8EC
-3BE8EC:lI105|H3BE9D8
-3BE9D8:lI100|H3BEACC
-3BEACC:lI101|H3BEBB8
-3BEBB8:lI111|N
-3BDF1C:lI97|H3BDFC8
-3BDFC8:lI118|H3BE08C
-3BE08C:lI105|N
-3BDE88:lH3BDF2C|H3BDF38
-3BDF2C:t2:H3BDFD8,H3BDFE0
-3BDFE0:lI118|H3BE0A4
-3BE0A4:lI105|H3BE168
-3BE168:lI100|H3BE23C
-3BE23C:lI101|H3BE324
-3BE324:lI111|H3BE418
-3BE418:lI47|H3BE51C
-3BE51C:lI113|H3BE620
-3BE620:lI117|H3BE724
-3BE724:lI105|H3BE810
-3BE810:lI99|H3BE8F4
-3BE8F4:lI107|H3BE9E0
-3BE9E0:lI116|H3BEAD4
-3BEAD4:lI105|H3BEBC0
-3BEBC0:lI109|H3BECA4
-3BECA4:lI101|N
-3BDFD8:lI113|H3BE09C
-3BE09C:lI116|N
-3BDF38:lH3BDFE8|H3BDFF4
-3BDFE8:t2:H3BE0AC,H3BE0B4
-3BE0B4:lI118|H3BE178
-3BE178:lI105|H3BE24C
-3BE24C:lI100|H3BE32C
-3BE32C:lI101|H3BE420
-3BE420:lI111|H3BE524
-3BE524:lI47|H3BE628
-3BE628:lI113|H3BE72C
-3BE72C:lI117|H3BE818
-3BE818:lI105|H3BE8FC
-3BE8FC:lI99|H3BE9E8
-3BE9E8:lI107|H3BEADC
-3BEADC:lI116|H3BEBC8
-3BEBC8:lI105|H3BECAC
-3BECAC:lI109|H3BED88
-3BED88:lI101|N
-3BE0AC:lI109|H3BE170
-3BE170:lI111|H3BE244
-3BE244:lI118|N
-3BDFF4:lH3BE0BC|H3BE0C8
-3BE0BC:t2:H3BE180,H3BE188
-3BE188:lI118|H3BE25C
-3BE25C:lI105|H3BE33C
-3BE33C:lI100|H3BE430
-3BE430:lI101|H3BE52C
-3BE52C:lI111|H3BE630
-3BE630:lI47|H3BE734
-3BE734:lI109|H3BE820
-3BE820:lI112|H3BE904
-3BE904:lI101|H3BE9F0
-3BE9F0:lI103|N
-3BE180:lI109|H3BE254
-3BE254:lI112|H3BE334
-3BE334:lI101|H3BE428
-3BE428:lI103|N
-3BE0C8:lH3BE190|H3BE19C
-3BE190:t2:H3BE264,H3BE26C
-3BE26C:lI118|H3BE34C
-3BE34C:lI105|H3BE440
-3BE440:lI100|H3BE534
-3BE534:lI101|H3BE638
-3BE638:lI111|H3BE73C
-3BE73C:lI47|H3BE828
-3BE828:lI109|H3BE90C
-3BE90C:lI112|H3BE9F8
-3BE9F8:lI101|H3BEAE4
-3BEAE4:lI103|N
-3BE264:lI109|H3BE344
-3BE344:lI112|H3BE438
-3BE438:lI103|N
-3BE19C:lH3BE274|H3BE280
-3BE274:t2:H3BE354,H3BE35C
-3BE35C:lI118|H3BE450
-3BE450:lI105|H3BE544
-3BE544:lI100|H3BE640
-3BE640:lI101|H3BE744
-3BE744:lI111|H3BE830
-3BE830:lI47|H3BE914
-3BE914:lI109|H3BEA00
-3BEA00:lI112|H3BEAEC
-3BEAEC:lI101|H3BEBD0
-3BEBD0:lI103|N
-3BE354:lI109|H3BE448
-3BE448:lI112|H3BE53C
-3BE53C:lI101|N
-3BE280:lH3BE364|H3BE370
-3BE364:t2:H3BE458,H3BE460
-3BE460:lI116|H3BE554
-3BE554:lI101|H3BE650
-3BE650:lI120|H3BE754
-3BE754:lI116|H3BE838
-3BE838:lI47|H3BE91C
-3BE91C:lI120|H3BEA08
-3BEA08:lI45|H3BEAF4
-3BEAF4:lI115|H3BEBD8
-3BEBD8:lI103|H3BECB4
-3BECB4:lI109|H3BED90
-3BED90:lI108|N
-3BE458:lI115|H3BE54C
-3BE54C:lI103|H3BE648
-3BE648:lI109|H3BE74C
-3BE74C:lI108|N
-3BE370:lH3BE468|H3BE474
-3BE468:t2:H3BE55C,H3BE564
-3BE564:lI116|H3BE660
-3BE660:lI101|H3BE764
-3BE764:lI120|H3BE840
-3BE840:lI116|H3BE924
-3BE924:lI47|H3BEA10
-3BEA10:lI120|H3BEAFC
-3BEAFC:lI45|H3BEBE0
-3BEBE0:lI115|H3BECBC
-3BECBC:lI103|H3BED98
-3BED98:lI109|H3BEE74
-3BEE74:lI108|N
-3BE55C:lI115|H3BE658
-3BE658:lI103|H3BE75C
-3BE75C:lI109|N
-3BE474:lH3BE56C|H3BE578
-3BE56C:t2:H3BE668,H3BE670
-3BE670:lI116|H3BE774
-3BE774:lI101|H3BE850
-3BE850:lI120|H3BE92C
-3BE92C:lI116|H3BEA18
-3BEA18:lI47|H3BEB04
-3BEB04:lI120|H3BEBE8
-3BEBE8:lI45|H3BECC4
-3BECC4:lI115|H3BEDA0
-3BEDA0:lI101|H3BEE7C
-3BEE7C:lI116|H3BEF48
-3BEF48:lI101|H3BF014
-3BF014:lI120|H3BF0E0
-3BF0E0:lI116|N
-3BE668:lI101|H3BE76C
-3BE76C:lI116|H3BE848
-3BE848:lI120|N
-3BE578:lH3BE678|H3BE684
-3BE678:t2:H3BE77C,H3BE784
-3BE784:lI116|H3BE860
-3BE860:lI101|H3BE93C
-3BE93C:lI120|H3BEA20
-3BEA20:lI116|H3BEB0C
-3BEB0C:lI47|H3BEBF0
-3BEBF0:lI116|H3BECCC
-3BECCC:lI97|H3BEDA8
-3BEDA8:lI98|H3BEE84
-3BEE84:lI45|H3BEF50
-3BEF50:lI115|H3BF01C
-3BF01C:lI101|H3BF0E8
-3BF0E8:lI112|H3BF1AC
-3BF1AC:lI97|H3BF270
-3BF270:lI114|H3BF324
-3BF324:lI97|H3BF3D0
-3BF3D0:lI116|H3BF484
-3BF484:lI101|H3BF540
-3BF540:lI100|H3BF604
-3BF604:lI45|H3BF6D8
-3BF6D8:lI118|H3BF7AC
-3BF7AC:lI97|H3BF880
-3BF880:lI108|H3BF964
-3BF964:lI117|H3BFA40
-3BFA40:lI101|H3BFB14
-3BFB14:lI115|N
-3BE77C:lI116|H3BE858
-3BE858:lI115|H3BE934
-3BE934:lI118|N
-3BE684:lH3BE78C|H3BE798
-3BE78C:t2:H3BE868,H3BE870
-3BE870:lI116|H3BE94C
-3BE94C:lI101|H3BEA30
-3BEA30:lI120|H3BEB14
-3BEB14:lI116|H3BEBF8
-3BEBF8:lI47|H3BECD4
-3BECD4:lI114|H3BEDB0
-3BEDB0:lI105|H3BEE8C
-3BEE8C:lI99|H3BEF58
-3BEF58:lI104|H3BF024
-3BF024:lI116|H3BF0F0
-3BF0F0:lI101|H3BF1B4
-3BF1B4:lI120|H3BF278
-3BF278:lI116|N
-3BE868:lI114|H3BE944
-3BE944:lI116|H3BEA28
-3BEA28:lI120|N
-3BE798:lH3BE878|H3BE884
-3BE878:t2:H3BE954,H3BE95C
-3BE95C:lI116|H3BEA40
-3BEA40:lI101|H3BEB24
-3BEB24:lI120|H3BEC00
-3BEC00:lI116|H3BECDC
-3BECDC:lI47|H3BEDB8
-3BEDB8:lI112|H3BEE94
-3BEE94:lI108|H3BEF60
-3BEF60:lI97|H3BF02C
-3BF02C:lI105|H3BF0F8
-3BF0F8:lI110|N
-3BE954:lI116|H3BEA38
-3BEA38:lI120|H3BEB1C
-3BEB1C:lI116|N
-3BE884:lH3BE964|H3BE970
-3BE964:t2:H3BEA48,H3BEA50
-3BEA50:lI116|H3BEB34
-3BEB34:lI101|H3BEC10
-3BEC10:lI120|H3BECEC
-3BECEC:lI116|H3BEDC8
-3BEDC8:lI47|H3BEE9C
-3BEE9C:lI120|H3BEF68
-3BEF68:lI45|H3BF034
-3BF034:lI115|H3BF100
-3BF100:lI101|H3BF1BC
-3BF1BC:lI114|H3BF280
-3BF280:lI118|H3BF32C
-3BF32C:lI101|H3BF3D8
-3BF3D8:lI114|H3BF48C
-3BF48C:lI45|H3BF548
-3BF548:lI112|H3BF60C
-3BF60C:lI97|H3BF6E0
-3BF6E0:lI114|H3BF7B4
-3BF7B4:lI115|H3BF888
-3BF888:lI101|H3BF96C
-3BF96C:lI100|H3BFA48
-3BFA48:lI45|H3BFB1C
-3BFB1C:lI104|H3BFBF0
-3BFBF0:lI116|H3BFCBC
-3BFCBC:lI109|H3BFD80
-3BFD80:lI108|N
-3BEA48:lI115|H3BEB2C
-3BEB2C:lI104|H3BEC08
-3BEC08:lI116|H3BECE4
-3BECE4:lI109|H3BEDC0
-3BEDC0:lI108|N
-3BE970:lH3BEA58|H3BEA64
-3BEA58:t2:H3BEB3C,H3BEB44
-3BEB44:lI116|H3BEC20
-3BEC20:lI101|H3BECFC
-3BECFC:lI120|H3BEDD8
-3BEDD8:lI116|H3BEEA4
-3BEEA4:lI47|H3BEF70
-3BEF70:lI104|H3BF03C
-3BF03C:lI116|H3BF108
-3BF108:lI109|H3BF1C4
-3BF1C4:lI108|N
-3BEB3C:lI104|H3BEC18
-3BEC18:lI116|H3BECF4
-3BECF4:lI109|H3BEDD0
-3BEDD0:lI108|N
-3BEA64:lH3BEB4C|H3BEB58
-3BEB4C:t2:H3BEC28,H3BEC30
-3BEC30:lI116|H3BED0C
-3BED0C:lI101|H3BEDE8
-3BEDE8:lI120|H3BEEAC
-3BEEAC:lI116|H3BEF78
-3BEF78:lI47|H3BF044
-3BF044:lI104|H3BF110
-3BF110:lI116|H3BF1CC
-3BF1CC:lI109|H3BF288
-3BF288:lI108|N
-3BEC28:lI104|H3BED04
-3BED04:lI116|H3BEDE0
-3BEDE0:lI109|N
-3BEB58:lH3BEC38|H3BEC44
-3BEC38:t2:H3BED14,H3BED1C
-3BED1C:lI105|H3BEDF8
-3BEDF8:lI109|H3BEEBC
-3BEEBC:lI97|H3BEF80
-3BEF80:lI103|H3BF04C
-3BF04C:lI101|H3BF118
-3BF118:lI47|H3BF1D4
-3BF1D4:lI120|H3BF290
-3BF290:lI45|H3BF334
-3BF334:lI120|H3BF3E0
-3BF3E0:lI119|H3BF494
-3BF494:lI105|H3BF550
-3BF550:lI110|H3BF614
-3BF614:lI100|H3BF6E8
-3BF6E8:lI111|H3BF7BC
-3BF7BC:lI119|H3BF890
-3BF890:lI100|H3BF974
-3BF974:lI117|H3BFA50
-3BFA50:lI109|H3BFB24
-3BFB24:lI112|N
-3BED14:lI120|H3BEDF0
-3BEDF0:lI119|H3BEEB4
-3BEEB4:lI100|N
-3BEC44:lH3BED24|H3BED30
-3BED24:t2:H3BEE00,H3BEE08
-3BEE08:lI105|H3BEECC
-3BEECC:lI109|H3BEF90
-3BEF90:lI97|H3BF054
-3BF054:lI103|H3BF120
-3BF120:lI101|H3BF1DC
-3BF1DC:lI47|H3BF298
-3BF298:lI120|H3BF33C
-3BF33C:lI45|H3BF3E8
-3BF3E8:lI120|H3BF49C
-3BF49C:lI112|H3BF558
-3BF558:lI105|H3BF61C
-3BF61C:lI120|H3BF6F0
-3BF6F0:lI109|H3BF7C4
-3BF7C4:lI97|H3BF898
-3BF898:lI112|N
-3BEE00:lI120|H3BEEC4
-3BEEC4:lI112|H3BEF88
-3BEF88:lI109|N
-3BED30:lH3BEE10|H3BEE1C
-3BEE10:t2:H3BEED4,H3BEEDC
-3BEEDC:lI105|H3BEFA0
-3BEFA0:lI109|H3BF064
-3BF064:lI97|H3BF128
-3BF128:lI103|H3BF1E4
-3BF1E4:lI101|H3BF2A0
-3BF2A0:lI47|H3BF344
-3BF344:lI120|H3BF3F0
-3BF3F0:lI45|H3BF4A4
-3BF4A4:lI120|H3BF560
-3BF560:lI98|H3BF624
-3BF624:lI105|H3BF6F8
-3BF6F8:lI116|H3BF7CC
-3BF7CC:lI109|H3BF8A0
-3BF8A0:lI97|H3BF97C
-3BF97C:lI112|N
-3BEED4:lI120|H3BEF98
-3BEF98:lI98|H3BF05C
-3BF05C:lI109|N
-3BEE1C:lH3BEEE4|H3BEEF0
-3BEEE4:t2:H3BEFA8,H3BEFB0
-3BEFB0:lI105|H3BF074
-3BF074:lI109|H3BF138
-3BF138:lI97|H3BF1EC
-3BF1EC:lI103|H3BF2A8
-3BF2A8:lI101|H3BF34C
-3BF34C:lI47|H3BF3F8
-3BF3F8:lI120|H3BF4AC
-3BF4AC:lI45|H3BF568
-3BF568:lI114|H3BF62C
-3BF62C:lI103|H3BF700
-3BF700:lI98|N
-3BEFA8:lI114|H3BF06C
-3BF06C:lI103|H3BF130
-3BF130:lI98|N
-3BEEF0:lH3BEFB8|H3BEFC4
-3BEFB8:t2:H3BF07C,H3BF084
-3BF084:lI105|H3BF148
-3BF148:lI109|H3BF1FC
-3BF1FC:lI97|H3BF2B0
-3BF2B0:lI103|H3BF354
-3BF354:lI101|H3BF400
-3BF400:lI47|H3BF4B4
-3BF4B4:lI120|H3BF570
-3BF570:lI45|H3BF634
-3BF634:lI112|H3BF708
-3BF708:lI111|H3BF7D4
-3BF7D4:lI114|H3BF8A8
-3BF8A8:lI116|H3BF984
-3BF984:lI97|H3BFA58
-3BFA58:lI98|H3BFB2C
-3BFB2C:lI108|H3BFBF8
-3BFBF8:lI101|H3BFCC4
-3BFCC4:lI45|H3BFD88
-3BFD88:lI112|H3BFE44
-3BFE44:lI105|H3BFEF0
-3BFEF0:lI120|H3BFFA4
-3BFFA4:lI109|H3C0050
-3C0050:lI97|H3C00FC
-3C00FC:lI112|N
-3BF07C:lI112|H3BF140
-3BF140:lI112|H3BF1F4
-3BF1F4:lI109|N
-3BEFC4:lH3BF08C|H3BF098
-3BF08C:t2:H3BF150,H3BF158
-3BF158:lI105|H3BF20C
-3BF20C:lI109|H3BF2C0
-3BF2C0:lI97|H3BF35C
-3BF35C:lI103|H3BF408
-3BF408:lI101|H3BF4BC
-3BF4BC:lI47|H3BF578
-3BF578:lI120|H3BF63C
-3BF63C:lI45|H3BF710
-3BF710:lI112|H3BF7DC
-3BF7DC:lI111|H3BF8B0
-3BF8B0:lI114|H3BF98C
-3BF98C:lI116|H3BFA60
-3BFA60:lI97|H3BFB34
-3BFB34:lI98|H3BFC00
-3BFC00:lI108|H3BFCCC
-3BFCCC:lI101|H3BFD90
-3BFD90:lI45|H3BFE4C
-3BFE4C:lI103|H3BFEF8
-3BFEF8:lI114|H3BFFAC
-3BFFAC:lI97|H3C0058
-3C0058:lI121|H3C0104
-3C0104:lI109|H3C01A8
-3C01A8:lI97|H3C025C
-3C025C:lI112|N
-3BF150:lI112|H3BF204
-3BF204:lI103|H3BF2B8
-3BF2B8:lI109|N
-3BF098:lH3BF160|H3BF16C
-3BF160:t2:H3BF214,H3BF21C
-3BF21C:lI105|H3BF2D0
-3BF2D0:lI109|H3BF36C
-3BF36C:lI97|H3BF410
-3BF410:lI103|H3BF4C4
-3BF4C4:lI101|H3BF580
-3BF580:lI47|H3BF644
-3BF644:lI120|H3BF718
-3BF718:lI45|H3BF7E4
-3BF7E4:lI112|H3BF8B8
-3BF8B8:lI111|H3BF994
-3BF994:lI114|H3BFA68
-3BFA68:lI116|H3BFB3C
-3BFB3C:lI97|H3BFC08
-3BFC08:lI98|H3BFCD4
-3BFCD4:lI108|H3BFD98
-3BFD98:lI101|H3BFE54
-3BFE54:lI45|H3BFF00
-3BFF00:lI98|H3BFFB4
-3BFFB4:lI105|H3C0060
-3C0060:lI116|H3C010C
-3C010C:lI109|H3C01B0
-3C01B0:lI97|H3C0264
-3C0264:lI112|N
-3BF214:lI112|H3BF2C8
-3BF2C8:lI98|H3BF364
-3BF364:lI109|N
-3BF16C:lH3BF224|H3BF230
-3BF224:t2:H3BF2D8,H3BF2E0
-3BF2E0:lI105|H3BF37C
-3BF37C:lI109|H3BF420
-3BF420:lI97|H3BF4CC
-3BF4CC:lI103|H3BF588
-3BF588:lI101|H3BF64C
-3BF64C:lI47|H3BF720
-3BF720:lI120|H3BF7EC
-3BF7EC:lI45|H3BF8C0
-3BF8C0:lI112|H3BF99C
-3BF99C:lI111|H3BFA70
-3BFA70:lI114|H3BFB44
-3BFB44:lI116|H3BFC10
-3BFC10:lI97|H3BFCDC
-3BFCDC:lI98|H3BFDA0
-3BFDA0:lI108|H3BFE5C
-3BFE5C:lI101|H3BFF08
-3BFF08:lI45|H3BFFBC
-3BFFBC:lI97|H3C0068
-3C0068:lI110|H3C0114
-3C0114:lI121|H3C01B8
-3C01B8:lI109|H3C026C
-3C026C:lI97|H3C0318
-3C0318:lI112|N
-3BF2D8:lI112|H3BF374
-3BF374:lI110|H3BF418
-3BF418:lI109|N
-3BF230:lH3BF2E8|H3BF2F4
-3BF2E8:t2:H3BF384,H3BF38C
-3BF38C:lI105|H3BF430
-3BF430:lI109|H3BF4DC
-3BF4DC:lI97|H3BF590
-3BF590:lI103|H3BF654
-3BF654:lI101|H3BF728
-3BF728:lI47|H3BF7F4
-3BF7F4:lI120|H3BF8C8
-3BF8C8:lI45|H3BF9A4
-3BF9A4:lI99|H3BFA78
-3BFA78:lI109|H3BFB4C
-3BFB4C:lI117|H3BFC18
-3BFC18:lI45|H3BFCE4
-3BFCE4:lI114|H3BFDA8
-3BFDA8:lI97|H3BFE64
-3BFE64:lI115|H3BFF10
-3BFF10:lI116|H3BFFC4
-3BFFC4:lI101|H3C0070
-3C0070:lI114|N
-3BF384:lI114|H3BF428
-3BF428:lI97|H3BF4D4
-3BF4D4:lI115|N
-3BF2F4:lH3BF394|H3BF3A0
-3BF394:t2:H3BF438,H3BF440
-3BF440:lI105|H3BF4EC
-3BF4EC:lI109|H3BF5A0
-3BF5A0:lI97|H3BF664
-3BF664:lI103|H3BF730
-3BF730:lI101|H3BF7FC
-3BF7FC:lI47|H3BF8D0
-3BF8D0:lI116|H3BF9AC
-3BF9AC:lI105|H3BFA80
-3BFA80:lI102|H3BFB54
-3BFB54:lI102|N
-3BF438:lI116|H3BF4E4
-3BF4E4:lI105|H3BF598
-3BF598:lI102|H3BF65C
-3BF65C:lI102|N
-3BF3A0:lH3BF448|H3BF454
-3BF448:t2:H3BF4F4,H3BF4FC
-3BF4FC:lI105|H3BF5B0
-3BF5B0:lI109|H3BF674
-3BF674:lI97|H3BF738
-3BF738:lI103|H3BF804
-3BF804:lI101|H3BF8D8
-3BF8D8:lI47|H3BF9B4
-3BF9B4:lI116|H3BFA88
-3BFA88:lI105|H3BFB5C
-3BFB5C:lI102|H3BFC20
-3BFC20:lI102|N
-3BF4F4:lI116|H3BF5A8
-3BF5A8:lI105|H3BF66C
-3BF66C:lI102|N
-3BF454:lH3BF504|H3BF510
-3BF504:t2:H3BF5B8,H3BF5C0
-3BF5C0:lI105|H3BF684
-3BF684:lI109|H3BF748
-3BF748:lI97|H3BF80C
-3BF80C:lI103|H3BF8E0
-3BF8E0:lI101|H3BF9BC
-3BF9BC:lI47|H3BFA90
-3BFA90:lI112|H3BFB64
-3BFB64:lI110|H3BFC28
-3BFC28:lI103|N
-3BF5B8:lI112|H3BF67C
-3BF67C:lI110|H3BF740
-3BF740:lI103|N
-3BF510:lH3BF5C8|H3BF5D4
-3BF5C8:t2:H3BF68C,H3BF694
-3BF694:lI105|H3BF758
-3BF758:lI109|H3BF81C
-3BF81C:lI97|H3BF8F0
-3BF8F0:lI103|H3BF9C4
-3BF9C4:lI101|H3BFA98
-3BFA98:lI47|H3BFB6C
-3BFB6C:lI106|H3BFC30
-3BFC30:lI112|H3BFCEC
-3BFCEC:lI101|H3BFDB0
-3BFDB0:lI103|N
-3BF68C:lI106|H3BF750
-3BF750:lI112|H3BF814
-3BF814:lI101|H3BF8E8
-3BF8E8:lI103|N
-3BF5D4:lH3BF69C|H3BF6A8
-3BF69C:t2:H3BF760,H3BF768
-3BF768:lI105|H3BF82C
-3BF82C:lI109|H3BF900
-3BF900:lI97|H3BF9CC
-3BF9CC:lI103|H3BFAA0
-3BFAA0:lI101|H3BFB74
-3BFB74:lI47|H3BFC38
-3BFC38:lI106|H3BFCF4
-3BFCF4:lI112|H3BFDB8
-3BFDB8:lI101|H3BFE6C
-3BFE6C:lI103|N
-3BF760:lI106|H3BF824
-3BF824:lI112|H3BF8F8
-3BF8F8:lI103|N
-3BF6A8:lH3BF770|H3BF77C
-3BF770:t2:H3BF834,H3BF83C
-3BF83C:lI105|H3BF910
-3BF910:lI109|H3BF9DC
-3BF9DC:lI97|H3BFAA8
-3BFAA8:lI103|H3BFB7C
-3BFB7C:lI101|H3BFC40
-3BFC40:lI47|H3BFCFC
-3BFCFC:lI106|H3BFDC0
-3BFDC0:lI112|H3BFE74
-3BFE74:lI101|H3BFF18
-3BFF18:lI103|N
-3BF834:lI106|H3BF908
-3BF908:lI112|H3BF9D4
-3BF9D4:lI101|N
-3BF77C:lH3BF844|H3BF850
-3BF844:t2:H3BF918,H3BF920
-3BF920:lI105|H3BF9EC
-3BF9EC:lI109|H3BFAB8
-3BFAB8:lI97|H3BFB84
-3BFB84:lI103|H3BFC48
-3BFC48:lI101|H3BFD04
-3BFD04:lI47|H3BFDC8
-3BFDC8:lI105|H3BFE7C
-3BFE7C:lI101|H3BFF20
-3BFF20:lI102|N
-3BF918:lI105|H3BF9E4
-3BF9E4:lI101|H3BFAB0
-3BFAB0:lI102|N
-3BF850:lH3BF928|H3BF934
-3BF928:t2:H3BF9F4,H3BF9FC
-3BF9FC:lI105|H3BFAC8
-3BFAC8:lI109|H3BFB94
-3BFB94:lI97|H3BFC50
-3BFC50:lI103|H3BFD0C
-3BFD0C:lI101|H3BFDD0
-3BFDD0:lI47|H3BFE84
-3BFE84:lI103|H3BFF28
-3BFF28:lI105|H3BFFCC
-3BFFCC:lI102|N
-3BF9F4:lI103|H3BFAC0
-3BFAC0:lI105|H3BFB8C
-3BFB8C:lI102|N
-3BF934:lH3BFA04|H3BFA10
-3BFA04:t2:H3BFAD0,H3BFAD8
-3BFAD8:lI99|H3BFBA4
-3BFBA4:lI104|H3BFC60
-3BFC60:lI101|H3BFD14
-3BFD14:lI109|H3BFDD8
-3BFDD8:lI105|H3BFE8C
-3BFE8C:lI99|H3BFF30
-3BFF30:lI97|H3BFFD4
-3BFFD4:lI108|H3C0078
-3C0078:lI47|H3C011C
-3C011C:lI120|H3C01C0
-3C01C0:lI45|H3C0274
-3C0274:lI112|H3C0320
-3C0320:lI100|H3C03CC
-3C03CC:lI98|N
-3BFAD0:lI112|H3BFB9C
-3BFB9C:lI100|H3BFC58
-3BFC58:lI98|N
-3BFA10:lH3BFAE0|H3BFAEC
-3BFAE0:t2:H3BFBAC,H3BFBB4
-3BFBB4:lI99|H3BFC70
-3BFC70:lI104|H3BFD24
-3BFD24:lI101|H3BFDE0
-3BFDE0:lI109|H3BFE94
-3BFE94:lI105|H3BFF38
-3BFF38:lI99|H3BFFDC
-3BFFDC:lI97|H3C0080
-3C0080:lI108|H3C0124
-3C0124:lI47|H3C01C8
-3C01C8:lI120|H3C027C
-3C027C:lI45|H3C0328
-3C0328:lI112|H3C03D4
-3C03D4:lI100|H3C0460
-3C0460:lI98|N
-3BFBAC:lI120|H3BFC68
-3BFC68:lI121|H3BFD1C
-3BFD1C:lI122|N
-3BFAEC:lH3BFBBC|H3BFBC8
-3BFBBC:t2:H3BFC78,H3BFC80
-3BFC80:lI97|H3BFD34
-3BFD34:lI117|H3BFDF0
-3BFDF0:lI100|H3BFE9C
-3BFE9C:lI105|H3BFF40
-3BFF40:lI111|H3BFFE4
-3BFFE4:lI47|H3C0088
-3C0088:lI120|H3C012C
-3C012C:lI45|H3C01D0
-3C01D0:lI119|H3C0284
-3C0284:lI97|H3C0330
-3C0330:lI118|N
-3BFC78:lI119|H3BFD2C
-3BFD2C:lI97|H3BFDE8
-3BFDE8:lI118|N
-3BFBC8:lH3BFC88|H3BFC94
-3BFC88:t2:H3BFD3C,H3BFD44
-3BFD44:lI97|H3BFE00
-3BFE00:lI117|H3BFEA4
-3BFEA4:lI100|H3BFF48
-3BFF48:lI105|H3BFFEC
-3BFFEC:lI111|H3C0090
-3C0090:lI47|H3C0134
-3C0134:lI120|H3C01D8
-3C01D8:lI45|H3C028C
-3C028C:lI114|H3C0338
-3C0338:lI101|H3C03DC
-3C03DC:lI97|H3C0468
-3C0468:lI108|H3C04FC
-3C04FC:lI97|H3C0598
-3C0598:lI117|H3C063C
-3C063C:lI100|H3C06E8
-3C06E8:lI105|H3C0794
-3C0794:lI111|N
-3BFD3C:lI114|H3BFDF8
-3BFDF8:lI97|N
-3BFC94:lH3BFD4C|H3BFD58
-3BFD4C:t2:H3BFE08,H3BFE10
-3BFE10:lI97|H3BFEB4
-3BFEB4:lI117|H3BFF58
-3BFF58:lI100|H3BFFF4
-3BFFF4:lI105|H3C0098
-3C0098:lI111|H3C013C
-3C013C:lI47|H3C01E0
-3C01E0:lI120|H3C0294
-3C0294:lI45|H3C0340
-3C0340:lI112|H3C03E4
-3C03E4:lI110|H3C0470
-3C0470:lI45|H3C0504
-3C0504:lI114|H3C05A0
-3C05A0:lI101|H3C0644
-3C0644:lI97|H3C06F0
-3C06F0:lI108|H3C079C
-3C079C:lI97|H3C0838
-3C0838:lI117|H3C08C4
-3C08C4:lI100|H3C0958
-3C0958:lI105|H3C09EC
-3C09EC:lI111|H3C0A88
-3C0A88:lI45|H3C0B2C
-3C0B2C:lI112|H3C0BD0
-3C0BD0:lI108|H3C0C84
-3C0C84:lI117|H3C0D38
-3C0D38:lI103|H3C0DEC
-3C0DEC:lI105|H3C0EA0
-3C0EA0:lI110|N
-3BFE08:lI114|H3BFEAC
-3BFEAC:lI112|H3BFF50
-3BFF50:lI109|N
-3BFD58:lH3BFE18|H3BFE24
-3BFE18:t2:H3BFEBC,H3BFEC4
-3BFEC4:lI97|H3BFF68
-3BFF68:lI117|H3C0004
-3C0004:lI100|H3C00A0
-3C00A0:lI105|H3C0144
-3C0144:lI111|H3C01E8
-3C01E8:lI47|H3C029C
-3C029C:lI120|H3C0348
-3C0348:lI45|H3C03EC
-3C03EC:lI112|H3C0478
-3C0478:lI110|H3C050C
-3C050C:lI45|H3C05A8
-3C05A8:lI114|H3C064C
-3C064C:lI101|H3C06F8
-3C06F8:lI97|H3C07A4
-3C07A4:lI108|H3C0840
-3C0840:lI97|H3C08CC
-3C08CC:lI117|H3C0960
-3C0960:lI100|H3C09F4
-3C09F4:lI105|H3C0A90
-3C0A90:lI111|N
-3BFEBC:lI114|H3BFF60
-3BFF60:lI97|H3BFFFC
-3BFFFC:lI109|N
-3BFE24:lH3BFECC|H3BFED8
-3BFECC:t2:H3BFF70,H3BFF78
-3BFF78:lI97|H3C0014
-3C0014:lI117|H3C00B0
-3C00B0:lI100|H3C014C
-3C014C:lI105|H3C01F0
-3C01F0:lI111|H3C02A4
-3C02A4:lI47|H3C0350
-3C0350:lI120|H3C03F4
-3C03F4:lI45|H3C0480
-3C0480:lI97|H3C0514
-3C0514:lI105|H3C05B0
-3C05B0:lI102|H3C0654
-3C0654:lI102|N
-3BFF70:lI97|H3C000C
-3C000C:lI105|H3C00A8
-3C00A8:lI102|N
-3BFED8:lH3BFF80|H3BFF8C
-3BFF80:t2:H3C001C,H3C0024
-3C0024:lI97|H3C00C0
-3C00C0:lI117|H3C015C
-3C015C:lI100|H3C0200
-3C0200:lI105|H3C02AC
-3C02AC:lI111|H3C0358
-3C0358:lI47|H3C03FC
-3C03FC:lI120|H3C0488
-3C0488:lI45|H3C051C
-3C051C:lI97|H3C05B8
-3C05B8:lI105|H3C065C
-3C065C:lI102|H3C0700
-3C0700:lI102|N
-3C001C:lI97|H3C00B8
-3C00B8:lI105|H3C0154
-3C0154:lI102|H3C01F8
-3C01F8:lI102|N
-3BFF8C:lH3C002C|H3C0038
-3C002C:t2:H3C00C8,H3C00D0
-3C00D0:lI97|H3C016C
-3C016C:lI117|H3C0210
-3C0210:lI100|H3C02BC
-3C02BC:lI105|H3C0360
-3C0360:lI111|H3C0404
-3C0404:lI47|H3C0490
-3C0490:lI120|H3C0524
-3C0524:lI45|H3C05C0
-3C05C0:lI97|H3C0664
-3C0664:lI105|H3C0708
-3C0708:lI102|H3C07AC
-3C07AC:lI102|N
-3C00C8:lI97|H3C0164
-3C0164:lI105|H3C0208
-3C0208:lI102|H3C02B4
-3C02B4:lI99|N
-3C0038:lH3C00D8|H3C00E4
-3C00D8:t2:H3C0174,H3C017C
-3C017C:lI97|H3C0220
-3C0220:lI117|H3C02CC
-3C02CC:lI100|H3C0370
-3C0370:lI105|H3C040C
-3C040C:lI111|H3C0498
-3C0498:lI47|H3C052C
-3C052C:lI109|H3C05C8
-3C05C8:lI112|H3C066C
-3C066C:lI101|H3C0710
-3C0710:lI103|N
-3C0174:lI109|H3C0218
-3C0218:lI112|H3C02C4
-3C02C4:lI103|H3C0368
-3C0368:lI97|N
-3C00E4:lH3C0184|H3C0190
-3C0184:t2:H3C0228,H3C0230
-3C0230:lI97|H3C02DC
-3C02DC:lI117|H3C0380
-3C0380:lI100|H3C0414
-3C0414:lI105|H3C04A0
-3C04A0:lI111|H3C0534
-3C0534:lI47|H3C05D0
-3C05D0:lI109|H3C0674
-3C0674:lI112|H3C0718
-3C0718:lI101|H3C07B4
-3C07B4:lI103|N
-3C0228:lI109|H3C02D4
-3C02D4:lI112|H3C0378
-3C0378:lI50|N
-3C0190:lH3C0238|H3C0244
-3C0238:t2:H3C02E4,H3C02EC
-3C02EC:lI97|H3C0390
-3C0390:lI117|H3C041C
-3C041C:lI100|H3C04A8
-3C04A8:lI105|H3C053C
-3C053C:lI111|H3C05D8
-3C05D8:lI47|H3C067C
-3C067C:lI98|H3C0720
-3C0720:lI97|H3C07BC
-3C07BC:lI115|H3C0848
-3C0848:lI105|H3C08D4
-3C08D4:lI99|N
-3C02E4:lI97|H3C0388
-3C0388:lI117|N
-3C0244:lH3C02F4|H3C0300
-3C02F4:t2:H3C0398,H3C03A0
-3C03A0:lI97|H3C042C
-3C042C:lI117|H3C04B8
-3C04B8:lI100|H3C0544
-3C0544:lI105|H3C05E0
-3C05E0:lI111|H3C0684
-3C0684:lI47|H3C0728
-3C0728:lI98|H3C07C4
-3C07C4:lI97|H3C0850
-3C0850:lI115|H3C08DC
-3C08DC:lI105|H3C0968
-3C0968:lI99|N
-3C0398:lI115|H3C0424
-3C0424:lI110|H3C04B0
-3C04B0:lI100|N
-3C0300:lH3C03A8|H3C03B4
-3C03A8:t2:H3C0434,H3C043C
-3C043C:lI97|H3C04C8
-3C04C8:lI112|H3C0554
-3C0554:lI112|H3C05E8
-3C05E8:lI108|H3C068C
-3C068C:lI105|H3C0730
-3C0730:lI99|H3C07CC
-3C07CC:lI97|H3C0858
-3C0858:lI116|H3C08E4
-3C08E4:lI105|H3C0970
-3C0970:lI111|H3C09FC
-3C09FC:lI110|H3C0A98
-3C0A98:lI47|H3C0B34
-3C0B34:lI122|H3C0BD8
-3C0BD8:lI105|H3C0C8C
-3C0C8C:lI112|N
-3C0434:lI122|H3C04C0
-3C04C0:lI105|H3C054C
-3C054C:lI112|N
-3C03B4:lH3C0444|H3C0450
-3C0444:t2:H3C04D0,H3C04D8
-3C04D8:lI97|H3C0564
-3C0564:lI112|H3C05F8
-3C05F8:lI112|H3C0694
-3C0694:lI108|H3C0738
-3C0738:lI105|H3C07D4
-3C07D4:lI99|H3C0860
-3C0860:lI97|H3C08EC
-3C08EC:lI116|H3C0978
-3C0978:lI105|H3C0A04
-3C0A04:lI111|H3C0AA0
-3C0AA0:lI110|H3C0B3C
-3C0B3C:lI47|H3C0BE0
-3C0BE0:lI120|H3C0C94
-3C0C94:lI45|H3C0D40
-3C0D40:lI119|H3C0DF4
-3C0DF4:lI97|H3C0EA8
-3C0EA8:lI105|H3C0F64
-3C0F64:lI115|H3C1030
-3C1030:lI45|H3C1104
-3C1104:lI115|H3C11D8
-3C11D8:lI111|H3C12A4
-3C12A4:lI117|H3C1378
-3C1378:lI114|H3C1454
-3C1454:lI99|H3C1538
-3C1538:lI101|N
-3C04D0:lI115|H3C055C
-3C055C:lI114|H3C05F0
-3C05F0:lI99|N
-3C0450:lH3C04E0|H3C04EC
-3C04E0:t2:H3C056C,H3C0574
-3C0574:lI97|H3C0608
-3C0608:lI112|H3C06A4
-3C06A4:lI112|H3C0748
-3C0748:lI108|H3C07E4
-3C07E4:lI105|H3C0868
-3C0868:lI99|H3C08F4
-3C08F4:lI97|H3C0980
-3C0980:lI116|H3C0A0C
-3C0A0C:lI105|H3C0AA8
-3C0AA8:lI111|H3C0B44
-3C0B44:lI110|H3C0BE8
-3C0BE8:lI47|H3C0C9C
-3C0C9C:lI120|H3C0D48
-3C0D48:lI45|H3C0DFC
-3C0DFC:lI117|H3C0EB0
-3C0EB0:lI115|H3C0F6C
-3C0F6C:lI116|H3C1038
-3C1038:lI97|H3C110C
-3C110C:lI114|N
-3C056C:lI117|H3C0600
-3C0600:lI115|H3C069C
-3C069C:lI116|H3C0740
-3C0740:lI97|H3C07DC
-3C07DC:lI114|N
-3C04EC:lH3C057C|H3C0588
-3C057C:t2:H3C0610,H3C0618
-3C0618:lI97|H3C06B4
-3C06B4:lI112|H3C0750
-3C0750:lI112|H3C07EC
-3C07EC:lI108|H3C0870
-3C0870:lI105|H3C08FC
-3C08FC:lI99|H3C0988
-3C0988:lI97|H3C0A14
-3C0A14:lI116|H3C0AB0
-3C0AB0:lI105|H3C0B4C
-3C0B4C:lI111|H3C0BF0
-3C0BF0:lI110|H3C0CA4
-3C0CA4:lI47|H3C0D50
-3C0D50:lI120|H3C0E04
-3C0E04:lI45|H3C0EB8
-3C0EB8:lI116|H3C0F74
-3C0F74:lI114|H3C1040
-3C1040:lI111|H3C1114
-3C1114:lI102|H3C11E0
-3C11E0:lI102|H3C12AC
-3C12AC:lI45|H3C1380
-3C1380:lI109|H3C145C
-3C145C:lI115|N
-3C0610:lI109|H3C06AC
-3C06AC:lI115|N
-3C0588:lH3C0620|H3C062C
-3C0620:t2:H3C06BC,H3C06C4
-3C06C4:lI97|H3C0760
-3C0760:lI112|H3C07F4
-3C07F4:lI112|H3C0878
-3C0878:lI108|H3C0904
-3C0904:lI105|H3C0990
-3C0990:lI99|H3C0A1C
-3C0A1C:lI97|H3C0AB8
-3C0AB8:lI116|H3C0B54
-3C0B54:lI105|H3C0BF8
-3C0BF8:lI111|H3C0CAC
-3C0CAC:lI110|H3C0D58
-3C0D58:lI47|H3C0E0C
-3C0E0C:lI120|H3C0EC0
-3C0EC0:lI45|H3C0F7C
-3C0F7C:lI116|H3C1048
-3C1048:lI114|H3C111C
-3C111C:lI111|H3C11E8
-3C11E8:lI102|H3C12B4
-3C12B4:lI102|H3C1388
-3C1388:lI45|H3C1464
-3C1464:lI109|H3C1540
-3C1540:lI101|N
-3C06BC:lI109|H3C0758
-3C0758:lI101|N
-3C062C:lH3C06CC|H3C06D8
-3C06CC:t2:H3C0768,H3C0770
-3C0770:lI97|H3C0804
-3C0804:lI112|H3C0888
-3C0888:lI112|H3C090C
-3C090C:lI108|H3C0998
-3C0998:lI105|H3C0A24
-3C0A24:lI99|H3C0AC0
-3C0AC0:lI97|H3C0B5C
-3C0B5C:lI116|H3C0C00
-3C0C00:lI105|H3C0CB4
-3C0CB4:lI111|H3C0D60
-3C0D60:lI110|H3C0E14
-3C0E14:lI47|H3C0EC8
-3C0EC8:lI120|H3C0F84
-3C0F84:lI45|H3C1050
-3C1050:lI116|H3C1124
-3C1124:lI114|H3C11F0
-3C11F0:lI111|H3C12BC
-3C12BC:lI102|H3C1390
-3C1390:lI102|H3C146C
-3C146C:lI45|H3C1548
-3C1548:lI109|H3C161C
-3C161C:lI97|H3C16F0
-3C16F0:lI110|N
-3C0768:lI109|H3C07FC
-3C07FC:lI97|H3C0880
-3C0880:lI110|N
-3C06D8:lH3C0778|H3C0784
-3C0778:t2:H3C080C,H3C0814
-3C0814:lI97|H3C0890
-3C0890:lI112|H3C0914
-3C0914:lI112|H3C09A0
-3C09A0:lI108|H3C0A2C
-3C0A2C:lI105|H3C0AC8
-3C0AC8:lI99|H3C0B64
-3C0B64:lI97|H3C0C08
-3C0C08:lI116|H3C0CBC
-3C0CBC:lI105|H3C0D68
-3C0D68:lI111|H3C0E1C
-3C0E1C:lI110|H3C0ED0
-3C0ED0:lI47|H3C0F8C
-3C0F8C:lI120|H3C1058
-3C1058:lI45|H3C112C
-3C112C:lI116|H3C11F8
-3C11F8:lI114|H3C12C4
-3C12C4:lI111|H3C1398
-3C1398:lI102|H3C1474
-3C1474:lI102|N
-3C080C:lI116|N
-3C0784:lH3C081C|H3C0828
-3C081C:t2:H3C0898,H3C08A0
-3C08A0:lI97|H3C0924
-3C0924:lI112|H3C09A8
-3C09A8:lI112|H3C0A34
-3C0A34:lI108|H3C0AD0
-3C0AD0:lI105|H3C0B6C
-3C0B6C:lI99|H3C0C10
-3C0C10:lI97|H3C0CC4
-3C0CC4:lI116|H3C0D70
-3C0D70:lI105|H3C0E24
-3C0E24:lI111|H3C0ED8
-3C0ED8:lI110|H3C0F94
-3C0F94:lI47|H3C1060
-3C1060:lI120|H3C1134
-3C1134:lI45|H3C1200
-3C1200:lI116|H3C12CC
-3C12CC:lI114|H3C13A0
-3C13A0:lI111|H3C147C
-3C147C:lI102|H3C1550
-3C1550:lI102|N
-3C0898:lI116|H3C091C
-3C091C:lI114|N
-3C0828:lH3C08A8|H3C08B4
-3C08A8:t2:H3C092C,H3C0934
-3C0934:lI97|H3C09B8
-3C09B8:lI112|H3C0A44
-3C0A44:lI112|H3C0AE0
-3C0AE0:lI108|H3C0B74
-3C0B74:lI105|H3C0C18
-3C0C18:lI99|H3C0CCC
-3C0CCC:lI97|H3C0D78
-3C0D78:lI116|H3C0E2C
-3C0E2C:lI105|H3C0EE0
-3C0EE0:lI111|H3C0F9C
-3C0F9C:lI110|H3C1068
-3C1068:lI47|H3C113C
-3C113C:lI120|H3C1208
-3C1208:lI45|H3C12D4
-3C12D4:lI116|H3C13A8
-3C13A8:lI114|H3C1484
-3C1484:lI111|H3C1558
-3C1558:lI102|H3C1624
-3C1624:lI102|N
-3C092C:lI114|H3C09B0
-3C09B0:lI111|H3C0A3C
-3C0A3C:lI102|H3C0AD8
-3C0AD8:lI102|N
-3C08B4:lH3C093C|H3C0948
-3C093C:t2:H3C09C0,H3C09C8
-3C09C8:lI97|H3C0A54
-3C0A54:lI112|H3C0AF0
-3C0AF0:lI112|H3C0B84
-3C0B84:lI108|H3C0C28
-3C0C28:lI105|H3C0CDC
-3C0CDC:lI99|H3C0D88
-3C0D88:lI97|H3C0E34
-3C0E34:lI116|H3C0EE8
-3C0EE8:lI105|H3C0FA4
-3C0FA4:lI111|H3C1070
-3C1070:lI110|H3C1144
-3C1144:lI47|H3C1210
-3C1210:lI120|H3C12DC
-3C12DC:lI45|H3C13B0
-3C13B0:lI116|H3C148C
-3C148C:lI101|H3C1560
-3C1560:lI120|H3C162C
-3C162C:lI105|H3C16F8
-3C16F8:lI110|H3C17BC
-3C17BC:lI102|H3C1880
-3C1880:lI111|N
-3C09C0:lI116|H3C0A4C
-3C0A4C:lI101|H3C0AE8
-3C0AE8:lI120|H3C0B7C
-3C0B7C:lI105|H3C0C20
-3C0C20:lI110|H3C0CD4
-3C0CD4:lI102|H3C0D80
-3C0D80:lI111|N
-3C0948:lH3C09D0|H3C09DC
-3C09D0:t2:H3C0A5C,H3C0A64
-3C0A64:lI97|H3C0B00
-3C0B00:lI112|H3C0B94
-3C0B94:lI112|H3C0C38
-3C0C38:lI108|H3C0CE4
-3C0CE4:lI105|H3C0D90
-3C0D90:lI99|H3C0E3C
-3C0E3C:lI97|H3C0EF0
-3C0EF0:lI116|H3C0FAC
-3C0FAC:lI105|H3C1078
-3C1078:lI111|H3C114C
-3C114C:lI110|H3C1218
-3C1218:lI47|H3C12E4
-3C12E4:lI120|H3C13B8
-3C13B8:lI45|H3C1494
-3C1494:lI116|H3C1568
-3C1568:lI101|H3C1634
-3C1634:lI120|H3C1700
-3C1700:lI105|H3C17C4
-3C17C4:lI110|H3C1888
-3C1888:lI102|H3C1944
-3C1944:lI111|N
-3C0A5C:lI116|H3C0AF8
-3C0AF8:lI101|H3C0B8C
-3C0B8C:lI120|H3C0C30
-3C0C30:lI105|N
-3C09DC:lH3C0A6C|H3C0A78
-3C0A6C:t2:H3C0B08,H3C0B10
-3C0B10:lI97|H3C0BA4
-3C0BA4:lI112|H3C0C48
-3C0C48:lI112|H3C0CEC
-3C0CEC:lI108|H3C0D98
-3C0D98:lI105|H3C0E44
-3C0E44:lI99|H3C0EF8
-3C0EF8:lI97|H3C0FB4
-3C0FB4:lI116|H3C1080
-3C1080:lI105|H3C1154
-3C1154:lI111|H3C1220
-3C1220:lI110|H3C12EC
-3C12EC:lI47|H3C13C0
-3C13C0:lI120|H3C149C
-3C149C:lI45|H3C1570
-3C1570:lI116|H3C163C
-3C163C:lI101|H3C1708
-3C1708:lI120|N
-3C0B08:lI116|H3C0B9C
-3C0B9C:lI101|H3C0C40
-3C0C40:lI120|N
-3C0A78:lH3C0B18|H3C0B24
-3C0B18:t2:H3C0BAC,H3C0BB4
-3C0BB4:lI97|H3C0C58
-3C0C58:lI112|H3C0CFC
-3C0CFC:lI112|H3C0DA0
-3C0DA0:lI108|H3C0E4C
-3C0E4C:lI105|H3C0F00
-3C0F00:lI99|H3C0FBC
-3C0FBC:lI97|H3C1088
-3C1088:lI116|H3C115C
-3C115C:lI105|H3C1228
-3C1228:lI111|H3C12F4
-3C12F4:lI110|H3C13C8
-3C13C8:lI47|H3C14A4
-3C14A4:lI120|H3C1578
-3C1578:lI45|H3C1644
-3C1644:lI116|H3C1710
-3C1710:lI99|H3C17CC
-3C17CC:lI108|N
-3C0BAC:lI116|H3C0C50
-3C0C50:lI99|H3C0CF4
-3C0CF4:lI108|N
-3C0B24:lH3C0BBC|H3C0BC8
-3C0BBC:t2:H3C0C60,H3C0C68
-3C0C68:lI97|H3C0D0C
-3C0D0C:lI112|H3C0DB0
-3C0DB0:lI112|H3C0E54
-3C0E54:lI108|H3C0F08
-3C0F08:lI105|H3C0FC4
-3C0FC4:lI99|H3C1090
-3C1090:lI97|H3C1164
-3C1164:lI116|H3C1230
-3C1230:lI105|H3C12FC
-3C12FC:lI111|H3C13D0
-3C13D0:lI110|H3C14AC
-3C14AC:lI47|H3C1580
-3C1580:lI120|H3C164C
-3C164C:lI45|H3C1718
-3C1718:lI116|H3C17D4
-3C17D4:lI97|H3C1890
-3C1890:lI114|N
-3C0C60:lI116|H3C0D04
-3C0D04:lI97|H3C0DA8
-3C0DA8:lI114|N
-3C0BC8:lH3C0C70|H3C0C7C
-3C0C70:t2:H3C0D14,H3C0D1C
-3C0D1C:lI97|H3C0DC0
-3C0DC0:lI112|H3C0E64
-3C0E64:lI112|H3C0F18
-3C0F18:lI108|H3C0FD4
-3C0FD4:lI105|H3C10A0
-3C10A0:lI99|H3C116C
-3C116C:lI97|H3C1238
-3C1238:lI116|H3C1304
-3C1304:lI105|H3C13D8
-3C13D8:lI111|H3C14B4
-3C14B4:lI110|H3C1588
-3C1588:lI47|H3C1654
-3C1654:lI120|H3C1720
-3C1720:lI45|H3C17DC
-3C17DC:lI115|H3C1898
-3C1898:lI118|H3C194C
-3C194C:lI52|H3C1A00
-3C1A00:lI99|H3C1AB4
-3C1AB4:lI114|H3C1B78
-3C1B78:lI99|N
-3C0D14:lI115|H3C0DB8
-3C0DB8:lI118|H3C0E5C
-3C0E5C:lI52|H3C0F10
-3C0F10:lI99|H3C0FCC
-3C0FCC:lI114|H3C1098
-3C1098:lI99|N
-3C0C7C:lH3C0D24|H3C0D30
-3C0D24:t2:H3C0DC8,H3C0DD0
-3C0DD0:lI97|H3C0E74
-3C0E74:lI112|H3C0F28
-3C0F28:lI112|H3C0FE4
-3C0FE4:lI108|H3C10B0
-3C10B0:lI105|H3C117C
-3C117C:lI99|H3C1248
-3C1248:lI97|H3C130C
-3C130C:lI116|H3C13E0
-3C13E0:lI105|H3C14BC
-3C14BC:lI111|H3C1590
-3C1590:lI110|H3C165C
-3C165C:lI47|H3C1728
-3C1728:lI120|H3C17E4
-3C17E4:lI45|H3C18A0
-3C18A0:lI115|H3C1954
-3C1954:lI118|H3C1A08
-3C1A08:lI52|H3C1ABC
-3C1ABC:lI99|H3C1B80
-3C1B80:lI112|H3C1C4C
-3C1C4C:lI105|H3C1D10
-3C1D10:lI111|N
-3C0DC8:lI115|H3C0E6C
-3C0E6C:lI118|H3C0F20
-3C0F20:lI52|H3C0FDC
-3C0FDC:lI99|H3C10A8
-3C10A8:lI112|H3C1174
-3C1174:lI105|H3C1240
-3C1240:lI111|N
-3C0D30:lH3C0DD8|H3C0DE4
-3C0DD8:t2:H3C0E7C,H3C0E84
-3C0E84:lI97|H3C0F38
-3C0F38:lI112|H3C0FF4
-3C0FF4:lI112|H3C10B8
-3C10B8:lI108|H3C1184
-3C1184:lI105|H3C1250
-3C1250:lI99|H3C1314
-3C1314:lI97|H3C13E8
-3C13E8:lI116|H3C14C4
-3C14C4:lI105|H3C1598
-3C1598:lI111|H3C1664
-3C1664:lI110|H3C1730
-3C1730:lI47|H3C17EC
-3C17EC:lI120|H3C18A8
-3C18A8:lI45|H3C195C
-3C195C:lI115|H3C1A10
-3C1A10:lI116|H3C1AC4
-3C1AC4:lI117|H3C1B88
-3C1B88:lI102|H3C1C54
-3C1C54:lI102|H3C1D18
-3C1D18:lI105|H3C1DD4
-3C1DD4:lI116|N
-3C0E7C:lI115|H3C0F30
-3C0F30:lI105|H3C0FEC
-3C0FEC:lI116|N
-3C0DE4:lH3C0E8C|H3C0E98
-3C0E8C:t2:H3C0F40,H3C0F48
-3C0F48:lI97|H3C1004
-3C1004:lI112|H3C10C8
-3C10C8:lI112|H3C1194
-3C1194:lI108|H3C1258
-3C1258:lI105|H3C131C
-3C131C:lI99|H3C13F0
-3C13F0:lI97|H3C14CC
-3C14CC:lI116|H3C15A0
-3C15A0:lI105|H3C166C
-3C166C:lI111|H3C1738
-3C1738:lI110|H3C17F4
-3C17F4:lI47|H3C18B0
-3C18B0:lI120|H3C1964
-3C1964:lI45|H3C1A18
-3C1A18:lI115|H3C1ACC
-3C1ACC:lI104|H3C1B90
-3C1B90:lI97|H3C1C5C
-3C1C5C:lI114|N
-3C0F40:lI115|H3C0FFC
-3C0FFC:lI104|H3C10C0
-3C10C0:lI97|H3C118C
-3C118C:lI114|N
-3C0E98:lH3C0F50|H3C0F5C
-3C0F50:t2:H3C100C,H3C1014
-3C1014:lI97|H3C10D8
-3C10D8:lI112|H3C119C
-3C119C:lI112|H3C1260
-3C1260:lI108|H3C1324
-3C1324:lI105|H3C13F8
-3C13F8:lI99|H3C14D4
-3C14D4:lI97|H3C15A8
-3C15A8:lI116|H3C1674
-3C1674:lI105|H3C1740
-3C1740:lI111|H3C17FC
-3C17FC:lI110|H3C18B8
-3C18B8:lI47|H3C196C
-3C196C:lI120|H3C1A20
-3C1A20:lI45|H3C1AD4
-3C1AD4:lI115|H3C1B98
-3C1B98:lI104|N
-3C100C:lI115|H3C10D0
-3C10D0:lI104|N
-3C0F5C:lH3C101C|H3C1028
-3C101C:t2:H3C10E0,H3C10E8
-3C10E8:lI97|H3C11AC
-3C11AC:lI112|H3C1268
-3C1268:lI112|H3C132C
-3C132C:lI108|H3C1400
-3C1400:lI105|H3C14DC
-3C14DC:lI99|H3C15B0
-3C15B0:lI97|H3C167C
-3C167C:lI116|H3C1748
-3C1748:lI105|H3C1804
-3C1804:lI111|H3C18C0
-3C18C0:lI110|H3C1974
-3C1974:lI47|H3C1A28
-3C1A28:lI120|H3C1ADC
-3C1ADC:lI45|H3C1BA0
-3C1BA0:lI110|H3C1C64
-3C1C64:lI101|H3C1D20
-3C1D20:lI116|H3C1DDC
-3C1DDC:lI99|H3C1E98
-3C1E98:lI100|H3C1F5C
-3C1F5C:lI102|N
-3C10E0:lI110|H3C11A4
-3C11A4:lI99|N
-3C1028:lH3C10F0|H3C10FC
-3C10F0:t2:H3C11B4,H3C11BC
-3C11BC:lI97|H3C1278
-3C1278:lI112|H3C133C
-3C133C:lI112|H3C1408
-3C1408:lI108|H3C14E4
-3C14E4:lI105|H3C15B8
-3C15B8:lI99|H3C1684
-3C1684:lI97|H3C1750
-3C1750:lI116|H3C180C
-3C180C:lI105|H3C18C8
-3C18C8:lI111|H3C197C
-3C197C:lI110|H3C1A30
-3C1A30:lI47|H3C1AE4
-3C1AE4:lI120|H3C1BA8
-3C1BA8:lI45|H3C1C6C
-3C1C6C:lI110|H3C1D28
-3C1D28:lI101|H3C1DE4
-3C1DE4:lI116|H3C1EA0
-3C1EA0:lI99|H3C1F64
-3C1F64:lI100|H3C2018
-3C2018:lI102|N
-3C11B4:lI99|H3C1270
-3C1270:lI100|H3C1334
-3C1334:lI102|N
-3C10FC:lH3C11C4|H3C11D0
-3C11C4:t2:H3C1280,H3C1288
-3C1288:lI97|H3C134C
-3C134C:lI112|H3C1418
-3C1418:lI112|H3C14EC
-3C14EC:lI108|H3C15C0
-3C15C0:lI105|H3C168C
-3C168C:lI99|H3C1758
-3C1758:lI97|H3C1814
-3C1814:lI116|H3C18D0
-3C18D0:lI105|H3C1984
-3C1984:lI111|H3C1A38
-3C1A38:lI110|H3C1AEC
-3C1AEC:lI47|H3C1BB0
-3C1BB0:lI120|H3C1C74
-3C1C74:lI45|H3C1D30
-3C1D30:lI109|H3C1DEC
-3C1DEC:lI105|H3C1EA8
-3C1EA8:lI102|N
-3C1280:lI109|H3C1344
-3C1344:lI105|H3C1410
-3C1410:lI102|N
-3C11D0:lH3C1290|H3C129C
-3C1290:t2:H3C1354,H3C135C
-3C135C:lI97|H3C1428
-3C1428:lI112|H3C14FC
-3C14FC:lI112|H3C15D0
-3C15D0:lI108|H3C169C
-3C169C:lI105|H3C1760
-3C1760:lI99|H3C181C
-3C181C:lI97|H3C18D8
-3C18D8:lI116|H3C198C
-3C198C:lI105|H3C1A40
-3C1A40:lI111|H3C1AF4
-3C1AF4:lI110|H3C1BB8
-3C1BB8:lI47|H3C1C7C
-3C1C7C:lI120|H3C1D38
-3C1D38:lI45|H3C1DF4
-3C1DF4:lI108|H3C1EB0
-3C1EB0:lI97|H3C1F6C
-3C1F6C:lI116|H3C2020
-3C2020:lI101|H3C20DC
-3C20DC:lI120|N
-3C1354:lI108|H3C1420
-3C1420:lI97|H3C14F4
-3C14F4:lI116|H3C15C8
-3C15C8:lI101|H3C1694
-3C1694:lI120|N
-3C129C:lH3C1364|H3C1370
-3C1364:t2:H3C1430,H3C1438
-3C1438:lI97|H3C150C
-3C150C:lI112|H3C15E0
-3C15E0:lI112|H3C16A4
-3C16A4:lI108|H3C1768
-3C1768:lI105|H3C1824
-3C1824:lI99|H3C18E0
-3C18E0:lI97|H3C1994
-3C1994:lI116|H3C1A48
-3C1A48:lI105|H3C1AFC
-3C1AFC:lI111|H3C1BC0
-3C1BC0:lI110|H3C1C84
-3C1C84:lI47|H3C1D40
-3C1D40:lI120|H3C1DFC
-3C1DFC:lI45|H3C1EB8
-3C1EB8:lI107|H3C1F74
-3C1F74:lI111|H3C2028
-3C2028:lI97|H3C20E4
-3C20E4:lI110|N
-3C1430:lI115|H3C1504
-3C1504:lI107|H3C15D8
-3C15D8:lI112|N
-3C1370:lH3C1440|H3C144C
-3C1440:t2:H3C1514,H3C151C
-3C151C:lI97|H3C15F0
-3C15F0:lI112|H3C16B4
-3C16B4:lI112|H3C1770
-3C1770:lI108|H3C182C
-3C182C:lI105|H3C18E8
-3C18E8:lI99|H3C199C
-3C199C:lI97|H3C1A50
-3C1A50:lI116|H3C1B04
-3C1B04:lI105|H3C1BC8
-3C1BC8:lI111|H3C1C8C
-3C1C8C:lI110|H3C1D48
-3C1D48:lI47|H3C1E04
-3C1E04:lI120|H3C1EC0
-3C1EC0:lI45|H3C1F7C
-3C1F7C:lI107|H3C2030
-3C2030:lI111|H3C20EC
-3C20EC:lI97|H3C21A0
-3C21A0:lI110|N
-3C1514:lI115|H3C15E8
-3C15E8:lI107|H3C16AC
-3C16AC:lI100|N
-3C144C:lH3C1524|H3C1530
-3C1524:t2:H3C15F8,H3C1600
-3C1600:lI97|H3C16C4
-3C16C4:lI112|H3C1780
-3C1780:lI112|H3C1834
-3C1834:lI108|H3C18F0
-3C18F0:lI105|H3C19A4
-3C19A4:lI99|H3C1A58
-3C1A58:lI97|H3C1B0C
-3C1B0C:lI116|H3C1BD0
-3C1BD0:lI105|H3C1C94
-3C1C94:lI111|H3C1D50
-3C1D50:lI110|H3C1E0C
-3C1E0C:lI47|H3C1EC8
-3C1EC8:lI120|H3C1F84
-3C1F84:lI45|H3C2038
-3C2038:lI107|H3C20F4
-3C20F4:lI111|H3C21A8
-3C21A8:lI97|H3C225C
-3C225C:lI110|N
-3C15F8:lI115|H3C16BC
-3C16BC:lI107|H3C1778
-3C1778:lI116|N
-3C1530:lH3C1608|H3C1614
-3C1608:t2:H3C16CC,H3C16D4
-3C16D4:lI97|H3C1790
-3C1790:lI112|H3C1844
-3C1844:lI112|H3C18F8
-3C18F8:lI108|H3C19AC
-3C19AC:lI105|H3C1A60
-3C1A60:lI99|H3C1B14
-3C1B14:lI97|H3C1BD8
-3C1BD8:lI116|H3C1C9C
-3C1C9C:lI105|H3C1D58
-3C1D58:lI111|H3C1E14
-3C1E14:lI110|H3C1ED0
-3C1ED0:lI47|H3C1F8C
-3C1F8C:lI120|H3C2040
-3C2040:lI45|H3C20FC
-3C20FC:lI107|H3C21B0
-3C21B0:lI111|H3C2264
-3C2264:lI97|H3C2320
-3C2320:lI110|N
-3C16CC:lI115|H3C1788
-3C1788:lI107|H3C183C
-3C183C:lI109|N
-3C1614:lH3C16DC|H3C16E8
-3C16DC:t2:H3C1798,H3C17A0
-3C17A0:lI97|H3C1854
-3C1854:lI112|H3C1908
-3C1908:lI112|H3C19B4
-3C19B4:lI108|H3C1A68
-3C1A68:lI105|H3C1B1C
-3C1B1C:lI99|H3C1BE0
-3C1BE0:lI97|H3C1CA4
-3C1CA4:lI116|H3C1D60
-3C1D60:lI105|H3C1E1C
-3C1E1C:lI111|H3C1ED8
-3C1ED8:lI110|H3C1F94
-3C1F94:lI47|H3C2048
-3C2048:lI120|H3C2104
-3C2104:lI45|H3C21B8
-3C21B8:lI104|H3C226C
-3C226C:lI116|H3C2328
-3C2328:lI116|H3C23E4
-3C23E4:lI112|H3C2498
-3C2498:lI100|H3C2554
-3C2554:lI45|H3C2610
-3C2610:lI99|H3C26D4
-3C26D4:lI103|H3C2790
-3C2790:lI105|N
-3C1798:lI99|H3C184C
-3C184C:lI103|H3C1900
-3C1900:lI105|N
-3C16E8:lH3C17A8|H3C17B4
-3C17A8:t2:H3C185C,H3C1864
-3C1864:lI97|H3C1918
-3C1918:lI112|H3C19C4
-3C19C4:lI112|H3C1A70
-3C1A70:lI108|H3C1B24
-3C1B24:lI105|H3C1BE8
-3C1BE8:lI99|H3C1CAC
-3C1CAC:lI97|H3C1D68
-3C1D68:lI116|H3C1E24
-3C1E24:lI105|H3C1EE0
-3C1EE0:lI111|H3C1F9C
-3C1F9C:lI110|H3C2050
-3C2050:lI47|H3C210C
-3C210C:lI120|H3C21C0
-3C21C0:lI45|H3C2274
-3C2274:lI104|H3C2330
-3C2330:lI100|H3C23EC
-3C23EC:lI102|N
-3C185C:lI104|H3C1910
-3C1910:lI100|H3C19BC
-3C19BC:lI102|N
-3C17B4:lH3C186C|H3C1878
-3C186C:t2:H3C1920,H3C1928
-3C1928:lI97|H3C19D4
-3C19D4:lI112|H3C1A78
-3C1A78:lI112|H3C1B2C
-3C1B2C:lI108|H3C1BF0
-3C1BF0:lI105|H3C1CB4
-3C1CB4:lI99|H3C1D70
-3C1D70:lI97|H3C1E2C
-3C1E2C:lI116|H3C1EE8
-3C1EE8:lI105|H3C1FA4
-3C1FA4:lI111|H3C2058
-3C2058:lI110|H3C2114
-3C2114:lI47|H3C21C8
-3C21C8:lI120|H3C227C
-3C227C:lI45|H3C2338
-3C2338:lI103|H3C23F4
-3C23F4:lI122|H3C24A0
-3C24A0:lI105|H3C255C
-3C255C:lI112|N
-3C1920:lI103|H3C19CC
-3C19CC:lI122|N
-3C1878:lH3C1930|H3C193C
-3C1930:t2:H3C19DC,H3C19E4
-3C19E4:lI97|H3C1A88
-3C1A88:lI112|H3C1B3C
-3C1B3C:lI112|H3C1C00
-3C1C00:lI108|H3C1CBC
-3C1CBC:lI105|H3C1D78
-3C1D78:lI99|H3C1E34
-3C1E34:lI97|H3C1EF0
-3C1EF0:lI116|H3C1FAC
-3C1FAC:lI105|H3C2060
-3C2060:lI111|H3C211C
-3C211C:lI110|H3C21D0
-3C21D0:lI47|H3C2284
-3C2284:lI120|H3C2340
-3C2340:lI45|H3C23FC
-3C23FC:lI103|H3C24A8
-3C24A8:lI116|H3C2564
-3C2564:lI97|H3C2618
-3C2618:lI114|N
-3C19DC:lI103|H3C1A80
-3C1A80:lI116|H3C1B34
-3C1B34:lI97|H3C1BF8
-3C1BF8:lI114|N
-3C193C:lH3C19EC|H3C19F8
-3C19EC:t2:H3C1A90,H3C1A98
-3C1A98:lI97|H3C1B4C
-3C1B4C:lI112|H3C1C10
-3C1C10:lI112|H3C1CC4
-3C1CC4:lI108|H3C1D80
-3C1D80:lI105|H3C1E3C
-3C1E3C:lI99|H3C1EF8
-3C1EF8:lI97|H3C1FB4
-3C1FB4:lI116|H3C2068
-3C2068:lI105|H3C2124
-3C2124:lI111|H3C21D8
-3C21D8:lI110|H3C228C
-3C228C:lI47|H3C2348
-3C2348:lI120|H3C2404
-3C2404:lI45|H3C24B0
-3C24B0:lI100|H3C256C
-3C256C:lI118|H3C2620
-3C2620:lI105|N
-3C1A90:lI100|H3C1B44
-3C1B44:lI118|H3C1C08
-3C1C08:lI105|N
-3C19F8:lH3C1AA0|H3C1AAC
-3C1AA0:t2:H3C1B54,H3C1B5C
-3C1B5C:lI97|H3C1C20
-3C1C20:lI112|H3C1CD4
-3C1CD4:lI112|H3C1D88
-3C1D88:lI108|H3C1E44
-3C1E44:lI105|H3C1F00
-3C1F00:lI99|H3C1FBC
-3C1FBC:lI97|H3C2070
-3C2070:lI116|H3C212C
-3C212C:lI105|H3C21E0
-3C21E0:lI111|H3C2294
-3C2294:lI110|H3C2350
-3C2350:lI47|H3C240C
-3C240C:lI120|H3C24B8
-3C24B8:lI45|H3C2574
-3C2574:lI100|H3C2628
-3C2628:lI105|H3C26DC
-3C26DC:lI114|H3C2798
-3C2798:lI101|H3C2854
-3C2854:lI99|H3C2918
-3C2918:lI116|H3C29E4
-3C29E4:lI111|H3C2AB0
-3C2AB0:lI114|N
-3C1B54:lI100|H3C1C18
-3C1C18:lI99|H3C1CCC
-3C1CCC:lI114|N
-3C1AAC:lH3C1B64|H3C1B70
-3C1B64:t2:H3C1C28,H3C1C30
-3C1C30:lI97|H3C1CE4
-3C1CE4:lI112|H3C1D98
-3C1D98:lI112|H3C1E4C
-3C1E4C:lI108|H3C1F08
-3C1F08:lI105|H3C1FC4
-3C1FC4:lI99|H3C2078
-3C2078:lI97|H3C2134
-3C2134:lI116|H3C21E8
-3C21E8:lI105|H3C229C
-3C229C:lI111|H3C2358
-3C2358:lI110|H3C2414
-3C2414:lI47|H3C24C0
-3C24C0:lI120|H3C257C
-3C257C:lI45|H3C2630
-3C2630:lI100|H3C26E4
-3C26E4:lI105|H3C27A0
-3C27A0:lI114|H3C285C
-3C285C:lI101|H3C2920
-3C2920:lI99|H3C29EC
-3C29EC:lI116|H3C2AB8
-3C2AB8:lI111|H3C2B84
-3C2B84:lI114|N
-3C1C28:lI100|H3C1CDC
-3C1CDC:lI105|H3C1D90
-3C1D90:lI114|N
-3C1B70:lH3C1C38|H3C1C44
-3C1C38:t2:H3C1CEC,H3C1CF4
-3C1CF4:lI97|H3C1DA8
-3C1DA8:lI112|H3C1E5C
-3C1E5C:lI112|H3C1F10
-3C1F10:lI108|H3C1FCC
-3C1FCC:lI105|H3C2080
-3C2080:lI99|H3C213C
-3C213C:lI97|H3C21F0
-3C21F0:lI116|H3C22A4
-3C22A4:lI105|H3C2360
-3C2360:lI111|H3C241C
-3C241C:lI110|H3C24C8
-3C24C8:lI47|H3C2584
-3C2584:lI120|H3C2638
-3C2638:lI45|H3C26EC
-3C26EC:lI100|H3C27A8
-3C27A8:lI105|H3C2864
-3C2864:lI114|H3C2928
-3C2928:lI101|H3C29F4
-3C29F4:lI99|H3C2AC0
-3C2AC0:lI116|H3C2B8C
-3C2B8C:lI111|H3C2C48
-3C2C48:lI114|N
-3C1CEC:lI100|H3C1DA0
-3C1DA0:lI120|H3C1E54
-3C1E54:lI114|N
-3C1C44:lH3C1CFC|H3C1D08
-3C1CFC:t2:H3C1DB0,H3C1DB8
-3C1DB8:lI97|H3C1E6C
-3C1E6C:lI112|H3C1F20
-3C1F20:lI112|H3C1FD4
-3C1FD4:lI108|H3C2088
-3C2088:lI105|H3C2144
-3C2144:lI99|H3C21F8
-3C21F8:lI97|H3C22AC
-3C22AC:lI116|H3C2368
-3C2368:lI105|H3C2424
-3C2424:lI111|H3C24D0
-3C24D0:lI110|H3C258C
-3C258C:lI47|H3C2640
-3C2640:lI120|H3C26F4
-3C26F4:lI45|H3C27B0
-3C27B0:lI99|H3C286C
-3C286C:lI115|H3C2930
-3C2930:lI104|N
-3C1DB0:lI99|H3C1E64
-3C1E64:lI115|H3C1F18
-3C1F18:lI104|N
-3C1D08:lH3C1DC0|H3C1DCC
-3C1DC0:t2:H3C1E74,H3C1E7C
-3C1E7C:lI97|H3C1F30
-3C1F30:lI112|H3C1FE4
-3C1FE4:lI112|H3C2098
-3C2098:lI108|H3C214C
-3C214C:lI105|H3C2200
-3C2200:lI99|H3C22B4
-3C22B4:lI97|H3C2370
-3C2370:lI116|H3C242C
-3C242C:lI105|H3C24D8
-3C24D8:lI111|H3C2594
-3C2594:lI110|H3C2648
-3C2648:lI47|H3C26FC
-3C26FC:lI120|H3C27B8
-3C27B8:lI45|H3C2874
-3C2874:lI99|H3C2938
-3C2938:lI112|H3C29FC
-3C29FC:lI105|H3C2AC8
-3C2AC8:lI111|N
-3C1E74:lI99|H3C1F28
-3C1F28:lI112|H3C1FDC
-3C1FDC:lI105|H3C2090
-3C2090:lI111|N
-3C1DCC:lH3C1E84|H3C1E90
-3C1E84:t2:H3C1F38,H3C1F40
-3C1F40:lI97|H3C1FEC
-3C1FEC:lI112|H3C20A0
-3C20A0:lI112|H3C2154
-3C2154:lI108|H3C2208
-3C2208:lI105|H3C22BC
-3C22BC:lI99|H3C2378
-3C2378:lI97|H3C2434
-3C2434:lI116|H3C24E0
-3C24E0:lI105|H3C259C
-3C259C:lI111|H3C2650
-3C2650:lI110|H3C2704
-3C2704:lI47|H3C27C0
-3C27C0:lI120|H3C287C
-3C287C:lI45|H3C2940
-3C2940:lI99|H3C2A04
-3C2A04:lI111|H3C2AD0
-3C2AD0:lI109|H3C2B94
-3C2B94:lI112|H3C2C50
-3C2C50:lI114|H3C2D00
-3C2D00:lI101|H3C2DA8
-3C2DA8:lI115|H3C2E40
-3C2E40:lI115|N
-3C1F38:lI90|N
-3C1E90:lH3C1F48|H3C1F54
-3C1F48:t2:H3C1FF4,H3C1FFC
-3C1FFC:lI97|H3C20B0
-3C20B0:lI112|H3C2164
-3C2164:lI112|H3C2210
-3C2210:lI108|H3C22C4
-3C22C4:lI105|H3C2380
-3C2380:lI99|H3C243C
-3C243C:lI97|H3C24E8
-3C24E8:lI116|H3C25A4
-3C25A4:lI105|H3C2658
-3C2658:lI111|H3C270C
-3C270C:lI110|H3C27C8
-3C27C8:lI47|H3C2884
-3C2884:lI120|H3C2948
-3C2948:lI45|H3C2A0C
-3C2A0C:lI99|H3C2AD8
-3C2AD8:lI100|H3C2B9C
-3C2B9C:lI108|H3C2C58
-3C2C58:lI105|H3C2D08
-3C2D08:lI110|H3C2DB0
-3C2DB0:lI107|N
-3C1FF4:lI118|H3C20A8
-3C20A8:lI99|H3C215C
-3C215C:lI100|N
-3C1F54:lH3C2004|H3C2010
-3C2004:t2:H3C20B8,H3C20C0
-3C20C0:lI97|H3C2174
-3C2174:lI112|H3C2220
-3C2220:lI112|H3C22D4
-3C22D4:lI108|H3C2390
-3C2390:lI105|H3C2444
-3C2444:lI99|H3C24F0
-3C24F0:lI97|H3C25AC
-3C25AC:lI116|H3C2660
-3C2660:lI105|H3C2714
-3C2714:lI111|H3C27D0
-3C27D0:lI110|H3C288C
-3C288C:lI47|H3C2950
-3C2950:lI120|H3C2A14
-3C2A14:lI45|H3C2AE0
-3C2AE0:lI98|H3C2BA4
-3C2BA4:lI99|H3C2C60
-3C2C60:lI112|H3C2D10
-3C2D10:lI105|H3C2DB8
-3C2DB8:lI111|N
-3C20B8:lI98|H3C216C
-3C216C:lI99|H3C2218
-3C2218:lI112|H3C22CC
-3C22CC:lI105|H3C2388
-3C2388:lI111|N
-3C2010:lH3C20C8|H3C20D4
-3C20C8:t2:H3C217C,H3C2184
-3C2184:lI97|H3C2230
-3C2230:lI112|H3C22E4
-3C22E4:lI112|H3C2398
-3C2398:lI108|H3C244C
-3C244C:lI105|H3C24F8
-3C24F8:lI99|H3C25B4
-3C25B4:lI97|H3C2668
-3C2668:lI116|H3C271C
-3C271C:lI105|H3C27D8
-3C27D8:lI111|H3C2894
-3C2894:lI110|H3C2958
-3C2958:lI47|H3C2A1C
-3C2A1C:lI114|H3C2AE8
-3C2AE8:lI116|H3C2BAC
-3C2BAC:lI102|N
-3C217C:lI114|H3C2228
-3C2228:lI116|H3C22DC
-3C22DC:lI102|N
-3C20D4:lH3C218C|H3C2198
-3C218C:t2:H3C2238,H3C2240
-3C2240:lI97|H3C22F4
-3C22F4:lI112|H3C23A8
-3C23A8:lI112|H3C2454
-3C2454:lI108|H3C2500
-3C2500:lI105|H3C25BC
-3C25BC:lI99|H3C2670
-3C2670:lI97|H3C2724
-3C2724:lI116|H3C27E0
-3C27E0:lI105|H3C289C
-3C289C:lI111|H3C2960
-3C2960:lI110|H3C2A24
-3C2A24:lI47|H3C2AF0
-3C2AF0:lI112|H3C2BB4
-3C2BB4:lI111|H3C2C68
-3C2C68:lI119|H3C2D18
-3C2D18:lI101|H3C2DC0
-3C2DC0:lI114|H3C2E48
-3C2E48:lI112|H3C2EC0
-3C2EC0:lI111|H3C2F38
-3C2F38:lI105|H3C2FA8
-3C2FA8:lI110|H3C3010
-3C3010:lI116|N
-3C2238:lI112|H3C22EC
-3C22EC:lI112|H3C23A0
-3C23A0:lI116|N
-3C2198:lH3C2248|H3C2254
-3C2248:t2:H3C22FC,H3C2304
-3C2304:lI97|H3C23B8
-3C23B8:lI112|H3C245C
-3C245C:lI112|H3C2508
-3C2508:lI108|H3C25C4
-3C25C4:lI105|H3C2678
-3C2678:lI99|H3C272C
-3C272C:lI97|H3C27E8
-3C27E8:lI116|H3C28A4
-3C28A4:lI105|H3C2968
-3C2968:lI111|H3C2A2C
-3C2A2C:lI110|H3C2AF8
-3C2AF8:lI47|H3C2BBC
-3C2BBC:lI112|H3C2C70
-3C2C70:lI111|H3C2D20
-3C2D20:lI115|H3C2DC8
-3C2DC8:lI116|H3C2E50
-3C2E50:lI115|H3C2EC8
-3C2EC8:lI99|H3C2F40
-3C2F40:lI114|H3C2FB0
-3C2FB0:lI105|H3C3018
-3C3018:lI112|H3C3078
-3C3078:lI116|N
-3C22FC:lI97|H3C23B0
-3C23B0:lI105|N
-3C2254:lH3C230C|H3C2318
-3C230C:t2:H3C23C0,H3C23C8
-3C23C8:lI97|H3C246C
-3C246C:lI112|H3C2518
-3C2518:lI112|H3C25CC
-3C25CC:lI108|H3C2680
-3C2680:lI105|H3C2734
-3C2734:lI99|H3C27F0
-3C27F0:lI97|H3C28AC
-3C28AC:lI116|H3C2970
-3C2970:lI105|H3C2A34
-3C2A34:lI111|H3C2B00
-3C2B00:lI110|H3C2BC4
-3C2BC4:lI47|H3C2C78
-3C2C78:lI112|H3C2D28
-3C2D28:lI111|H3C2DD0
-3C2DD0:lI115|H3C2E58
-3C2E58:lI116|H3C2ED0
-3C2ED0:lI115|H3C2F48
-3C2F48:lI99|H3C2FB8
-3C2FB8:lI114|H3C3020
-3C3020:lI105|H3C3080
-3C3080:lI112|H3C30D8
-3C30D8:lI116|N
-3C23C0:lI101|H3C2464
-3C2464:lI112|H3C2510
-3C2510:lI115|N
-3C2318:lH3C23D0|H3C23DC
-3C23D0:t2:H3C2474,H3C247C
-3C247C:lI97|H3C2528
-3C2528:lI112|H3C25D4
-3C25D4:lI112|H3C2688
-3C2688:lI108|H3C273C
-3C273C:lI105|H3C27F8
-3C27F8:lI99|H3C28B4
-3C28B4:lI97|H3C2978
-3C2978:lI116|H3C2A3C
-3C2A3C:lI105|H3C2B08
-3C2B08:lI111|H3C2BCC
-3C2BCC:lI110|H3C2C80
-3C2C80:lI47|H3C2D30
-3C2D30:lI112|H3C2DD8
-3C2DD8:lI111|H3C2E60
-3C2E60:lI115|H3C2ED8
-3C2ED8:lI116|H3C2F50
-3C2F50:lI115|H3C2FC0
-3C2FC0:lI99|H3C3028
-3C3028:lI114|H3C3088
-3C3088:lI105|H3C30E0
-3C30E0:lI112|H3C3130
-3C3130:lI116|N
-3C2474:lI112|H3C2520
-3C2520:lI115|N
-3C23DC:lH3C2484|H3C2490
-3C2484:t2:H3C2530,H3C2538
-3C2538:lI97|H3C25E4
-3C25E4:lI112|H3C2698
-3C2698:lI112|H3C2744
-3C2744:lI108|H3C2800
-3C2800:lI105|H3C28BC
-3C28BC:lI99|H3C2980
-3C2980:lI97|H3C2A44
-3C2A44:lI116|H3C2B10
-3C2B10:lI105|H3C2BD4
-3C2BD4:lI111|H3C2C88
-3C2C88:lI110|H3C2D38
-3C2D38:lI47|H3C2DE0
-3C2DE0:lI112|H3C2E68
-3C2E68:lI100|H3C2EE0
-3C2EE0:lI102|N
-3C2530:lI112|H3C25DC
-3C25DC:lI100|H3C2690
-3C2690:lI102|N
-3C2490:lH3C2540|H3C254C
-3C2540:t2:H3C25EC,H3C25F4
-3C25F4:lI97|H3C26A8
-3C26A8:lI112|H3C2754
-3C2754:lI112|H3C2808
-3C2808:lI108|H3C28C4
-3C28C4:lI105|H3C2988
-3C2988:lI99|H3C2A4C
-3C2A4C:lI97|H3C2B18
-3C2B18:lI116|H3C2BDC
-3C2BDC:lI105|H3C2C90
-3C2C90:lI111|H3C2D40
-3C2D40:lI110|H3C2DE8
-3C2DE8:lI47|H3C2E70
-3C2E70:lI111|H3C2EE8
-3C2EE8:lI100|H3C2F58
-3C2F58:lI97|N
-3C25EC:lI111|H3C26A0
-3C26A0:lI100|H3C274C
-3C274C:lI97|N
-3C254C:lH3C25FC|H3C2608
-3C25FC:t2:H3C26B0,H3C26B8
-3C26B8:lI97|H3C2764
-3C2764:lI112|H3C2818
-3C2818:lI112|H3C28CC
-3C28CC:lI108|H3C2990
-3C2990:lI105|H3C2A54
-3C2A54:lI99|H3C2B20
-3C2B20:lI97|H3C2BE4
-3C2BE4:lI116|H3C2C98
-3C2C98:lI105|H3C2D48
-3C2D48:lI111|H3C2DF0
-3C2DF0:lI110|H3C2E78
-3C2E78:lI47|H3C2EF0
-3C2EF0:lI111|H3C2F60
-3C2F60:lI99|H3C2FC8
-3C2FC8:lI116|H3C3030
-3C3030:lI101|H3C3090
-3C3090:lI116|H3C30E8
-3C30E8:lI45|H3C3138
-3C3138:lI115|H3C3180
-3C3180:lI116|H3C31C8
-3C31C8:lI114|H3C3210
-3C3210:lI101|H3C3258
-3C3258:lI97|H3C32A0
-3C32A0:lI109|N
-3C26B0:lI98|H3C275C
-3C275C:lI105|H3C2810
-3C2810:lI110|N
-3C2608:lH3C26C0|H3C26CC
-3C26C0:t2:H3C276C,H3C2774
-3C2774:lI97|H3C2828
-3C2828:lI112|H3C28DC
-3C28DC:lI112|H3C2998
-3C2998:lI108|H3C2A5C
-3C2A5C:lI105|H3C2B28
-3C2B28:lI99|H3C2BEC
-3C2BEC:lI97|H3C2CA0
-3C2CA0:lI116|H3C2D50
-3C2D50:lI105|H3C2DF8
-3C2DF8:lI111|H3C2E80
-3C2E80:lI110|H3C2EF8
-3C2EF8:lI47|H3C2F68
-3C2F68:lI111|H3C2FD0
-3C2FD0:lI99|H3C3038
-3C3038:lI116|H3C3098
-3C3098:lI101|H3C30F0
-3C30F0:lI116|H3C3140
-3C3140:lI45|H3C3188
-3C3188:lI115|H3C31D0
-3C31D0:lI116|H3C3218
-3C3218:lI114|H3C3260
-3C3260:lI101|H3C32A8
-3C32A8:lI97|H3C32E8
-3C32E8:lI109|N
-3C276C:lI100|H3C2820
-3C2820:lI109|H3C28D4
-3C28D4:lI115|N
-3C26CC:lH3C277C|H3C2788
-3C277C:t2:H3C2830,H3C2838
-3C2838:lI97|H3C28EC
-3C28EC:lI112|H3C29A8
-3C29A8:lI112|H3C2A64
-3C2A64:lI108|H3C2B30
-3C2B30:lI105|H3C2BF4
-3C2BF4:lI99|H3C2CA8
-3C2CA8:lI97|H3C2D58
-3C2D58:lI116|H3C2E00
-3C2E00:lI105|H3C2E88
-3C2E88:lI111|H3C2F00
-3C2F00:lI110|H3C2F70
-3C2F70:lI47|H3C2FD8
-3C2FD8:lI111|H3C3040
-3C3040:lI99|H3C30A0
-3C30A0:lI116|H3C30F8
-3C30F8:lI101|H3C3148
-3C3148:lI116|H3C3190
-3C3190:lI45|H3C31D8
-3C31D8:lI115|H3C3220
-3C3220:lI116|H3C3268
-3C3268:lI114|H3C32B0
-3C32B0:lI101|H3C32F0
-3C32F0:lI97|H3C3320
-3C3320:lI109|N
-3C2830:lI108|H3C28E4
-3C28E4:lI104|H3C29A0
-3C29A0:lI97|N
-3C2788:lH3C2840|H3C284C
-3C2840:t2:H3C28F4,H3C28FC
-3C28FC:lI97|H3C29B8
-3C29B8:lI112|H3C2A74
-3C2A74:lI112|H3C2B38
-3C2B38:lI108|H3C2BFC
-3C2BFC:lI105|H3C2CB0
-3C2CB0:lI99|H3C2D60
-3C2D60:lI97|H3C2E08
-3C2E08:lI116|H3C2E90
-3C2E90:lI105|H3C2F08
-3C2F08:lI111|H3C2F78
-3C2F78:lI110|H3C2FE0
-3C2FE0:lI47|H3C3048
-3C3048:lI111|H3C30A8
-3C30A8:lI99|H3C3100
-3C3100:lI116|H3C3150
-3C3150:lI101|H3C3198
-3C3198:lI116|H3C31E0
-3C31E0:lI45|H3C3228
-3C3228:lI115|H3C3270
-3C3270:lI116|H3C32B8
-3C32B8:lI114|H3C32F8
-3C32F8:lI101|H3C3328
-3C3328:lI97|H3C3350
-3C3350:lI109|N
-3C28F4:lI108|H3C29B0
-3C29B0:lI122|H3C2A6C
-3C2A6C:lI104|N
-3C284C:lH3C2904|H3C2910
-3C2904:t2:H3C29C0,H3C29C8
-3C29C8:lI97|H3C2A84
-3C2A84:lI112|H3C2B48
-3C2B48:lI112|H3C2C04
-3C2C04:lI108|H3C2CB8
-3C2CB8:lI105|H3C2D68
-3C2D68:lI99|H3C2E10
-3C2E10:lI97|H3C2E98
-3C2E98:lI116|H3C2F10
-3C2F10:lI105|H3C2F80
-3C2F80:lI111|H3C2FE8
-3C2FE8:lI110|H3C3050
-3C3050:lI47|H3C30B0
-3C30B0:lI111|H3C3108
-3C3108:lI99|H3C3158
-3C3158:lI116|H3C31A0
-3C31A0:lI101|H3C31E8
-3C31E8:lI116|H3C3230
-3C3230:lI45|H3C3278
-3C3278:lI115|H3C32C0
-3C32C0:lI116|H3C3300
-3C3300:lI114|H3C3330
-3C3330:lI101|H3C3358
-3C3358:lI97|H3C3378
-3C3378:lI109|N
-3C29C0:lI101|H3C2A7C
-3C2A7C:lI120|H3C2B40
-3C2B40:lI101|N
-3C2910:lH3C29D0|H3C29DC
-3C29D0:t2:H3C2A8C,H3C2A94
-3C2A94:lI97|H3C2B58
-3C2B58:lI112|H3C2C14
-3C2C14:lI112|H3C2CC8
-3C2CC8:lI108|H3C2D78
-3C2D78:lI105|H3C2E18
-3C2E18:lI99|H3C2EA0
-3C2EA0:lI97|H3C2F18
-3C2F18:lI116|H3C2F88
-3C2F88:lI105|H3C2FF0
-3C2FF0:lI111|H3C3058
-3C3058:lI110|H3C30B8
-3C30B8:lI47|H3C3110
-3C3110:lI111|H3C3160
-3C3160:lI99|H3C31A8
-3C31A8:lI116|H3C31F0
-3C31F0:lI101|H3C3238
-3C3238:lI116|H3C3280
-3C3280:lI45|H3C32C8
-3C32C8:lI115|H3C3308
-3C3308:lI116|H3C3338
-3C3338:lI114|H3C3360
-3C3360:lI101|H3C3380
-3C3380:lI97|H3C3398
-3C3398:lI109|N
-3C2A8C:lI99|H3C2B50
-3C2B50:lI108|H3C2C0C
-3C2C0C:lI97|H3C2CC0
-3C2CC0:lI115|H3C2D70
-3C2D70:lI115|N
-3C29DC:lH3C2A9C|H3C2AA8
-3C2A9C:t2:H3C2B60,H3C2B68
-3C2B68:lI97|H3C2C24
-3C2C24:lI112|H3C2CD8
-3C2CD8:lI112|H3C2D80
-3C2D80:lI108|H3C2E20
-3C2E20:lI105|H3C2EA8
-3C2EA8:lI99|H3C2F20
-3C2F20:lI97|H3C2F90
-3C2F90:lI116|H3C2FF8
-3C2FF8:lI105|H3C3060
-3C3060:lI111|H3C30C0
-3C30C0:lI110|H3C3118
-3C3118:lI47|H3C3168
-3C3168:lI109|H3C31B0
-3C31B0:lI115|H3C31F8
-3C31F8:lI119|H3C3240
-3C3240:lI111|H3C3288
-3C3288:lI114|H3C32D0
-3C32D0:lI100|N
-3C2B60:lI100|H3C2C1C
-3C2C1C:lI111|H3C2CD0
-3C2CD0:lI99|N
-3C2AA8:lH3C2B70|H3C2B7C
-3C2B70:t2:H3C2C2C,H3C2C34
-3C2C34:lI97|H3C2CE8
-3C2CE8:lI112|H3C2D90
-3C2D90:lI112|H3C2E28
-3C2E28:lI108|H3C2EB0
-3C2EB0:lI105|H3C2F28
-3C2F28:lI99|H3C2F98
-3C2F98:lI97|H3C3000
-3C3000:lI116|H3C3068
-3C3068:lI105|H3C30C8
-3C30C8:lI111|H3C3120
-3C3120:lI110|H3C3170
-3C3170:lI47|H3C31B8
-3C31B8:lI109|H3C3200
-3C3200:lI97|H3C3248
-3C3248:lI99|H3C3290
-3C3290:lI45|H3C32D8
-3C32D8:lI99|H3C3310
-3C3310:lI111|H3C3340
-3C3340:lI109|H3C3368
-3C3368:lI112|H3C3388
-3C3388:lI97|H3C33A0
-3C33A0:lI99|H3C33B0
-3C33B0:lI116|H3C33C0
-3C33C0:lI112|H3C33D0
-3C33D0:lI114|H3C33E0
-3C33E0:lI111|N
-3C2C2C:lI99|H3C2CE0
-3C2CE0:lI112|H3C2D88
-3C2D88:lI116|N
-3C2B7C:lH3C2C3C|N
-3C2C3C:t2:H3C2CF0,H3C2CF8
-3C2CF8:lI97|H3C2DA0
-3C2DA0:lI112|H3C2E38
-3C2E38:lI112|H3C2EB8
-3C2EB8:lI108|H3C2F30
-3C2F30:lI105|H3C2FA0
-3C2FA0:lI99|H3C3008
-3C3008:lI97|H3C3070
-3C3070:lI116|H3C30D0
-3C30D0:lI105|H3C3128
-3C3128:lI111|H3C3178
-3C3178:lI110|H3C31C0
-3C31C0:lI47|H3C3208
-3C3208:lI109|H3C3250
-3C3250:lI97|H3C3298
-3C3298:lI99|H3C32E0
-3C32E0:lI45|H3C3318
-3C3318:lI98|H3C3348
-3C3348:lI105|H3C3370
-3C3370:lI110|H3C3390
-3C3390:lI104|H3C33A8
-3C33A8:lI101|H3C33B8
-3C33B8:lI120|H3C33C8
-3C33C8:lI52|H3C33D8
-3C33D8:lI48|N
-3C2CF0:lI104|H3C2D98
-3C2D98:lI113|H3C2E30
-3C2E30:lI120|N
-3BDBCC:lH3BDA78|H3BDA8C
-3BDA78:t2:A4:port,I8888
-3BDA8C:lH3BDB04|H3BDB10
-3BDB04:t2:AC:bind_address,H3BDB64
-3BDB64:t4:I127,I0,I0,I1
-3BDB10:lH3BDB78|H3BDB84
-3BDB78:t2:AB:server_name,H3BDBD4
-3BDBD4:lI108|H3BDC24
-3BDC24:lI111|H3BDC88
-3BDC88:lI99|H3BDCF0
-3BDCF0:lI97|H3BDD70
-3BDD70:lI108|H3BDDF8
-3BDDF8:lI104|H3BDE90
-3BDE90:lI111|H3BDF40
-3BDF40:lI115|H3BDFFC
-3BDFFC:lI116|N
-3BDB84:lH3BDBDC|H3BDBE8
-3BDBDC:t2:AE:max_header_siz,I1024
-3BDBE8:lH3BDC2C|H3BDC38
-3BDC2C:t2:A11:max_header_action,A8:reply414
-3BDC38:lH3BDC90|H3BDC9C
-3BDC90:t2:A8:com_type,A7:ip_comm
-3BDC9C:lH3BDCF8|H3BDD04
-3BDCF8:t2:A7:modules,H3BDD78
-3BDD78:lA9:mod_alias|H3BDE00
-3BDE00:lA8:mod_auth|H3BDE98
-3BDE98:lA7:mod_esi|H3BDF48
-3BDF48:lAB:mod_actions|H3BE004
-3BE004:lA7:mod_cgi|H3BE0D0
-3BE0D0:lAB:mod_include|H3BE1A4
-3BE1A4:lA7:mod_dir|H3BE288
-3BE288:lA7:mod_get|H3BE378
-3BE378:lA8:mod_head|H3BE47C
-3BE47C:lA7:mod_log|H3BE580
-3BE580:lAC:mod_disk_log|N
-3BDD04:lH3BDD80|H3BDD8C
-3BDD80:t2:AF:directory_index,H3BDE08
-3BDE08:lH3BDEA0|N
-3BDEA0:lI105|H3BDF50
-3BDF50:lI110|H3BE00C
-3BE00C:lI100|H3BE0D8
-3BE0D8:lI101|H3BE1AC
-3BE1AC:lI120|H3BE290
-3BE290:lI46|H3BE380
-3BE380:lI104|H3BE484
-3BE484:lI116|H3BE588
-3BE588:lI109|H3BE68C
-3BE68C:lI108|N
-3BDD8C:lH3BDE10|H3BDE1C
-3BDE10:t2:AC:default_type,H3BDEA8
-3BDEA8:lI116|H3BDF58
-3BDF58:lI101|H3BE014
-3BE014:lI120|H3BE0E0
-3BE0E0:lI116|H3BE1B4
-3BE1B4:lI47|H3BE298
-3BE298:lI112|H3BE388
-3BE388:lI108|H3BE48C
-3BE48C:lI97|H3BE590
-3BE590:lI105|H3BE694
-3BE694:lI110|N
-3BDE1C:lH3BDEB0|H3BDEBC
-3BDEB0:t2:A10:erl_script_alias,H3BDF60
-3BDF60:t2:H3BE01C,H3BE024
-3BE024:lH3BE0F0|N
-3BE0F0:lI119|H3BE1C4
-3BE1C4:lI101|H3BE2A8
-3BE2A8:lI98|H3BE398
-3BE398:lI116|H3BE49C
-3BE49C:lI111|H3BE5A0
-3BE5A0:lI111|H3BE6A4
-3BE6A4:lI108|N
-3BE01C:lI47|H3BE0E8
-3BE0E8:lI119|H3BE1BC
-3BE1BC:lI101|H3BE2A0
-3BE2A0:lI98|H3BE390
-3BE390:lI116|H3BE494
-3BE494:lI111|H3BE598
-3BE598:lI111|H3BE69C
-3BE69C:lI108|N
-3BDEBC:lH3BDF6C|H3BDF78
-3BDF6C:t2:A5:alias,H3BE02C
-3BE02C:t2:H3BE0F8,H3BE100
-3BE100:lI47|H3BE1D4
-3BE1D4:lI99|H3BE2B8
-3BE2B8:lI108|H3BE3A8
-3BE3A8:lI101|H3BE4AC
-3BE4AC:lI97|H3BE5B0
-3BE5B0:lI114|H3BE6B4
-3BE6B4:lI99|H3BE7A8
-3BE7A8:lI97|H3BE894
-3BE894:lI115|H3BE980
-3BE980:lI101|H3BEA74
-3BEA74:lI47|H3BEB68
-3BEB68:lI111|H3BEC54
-3BEC54:lI116|H3BED40
-3BED40:lI112|H3BEE2C
-3BEE2C:lI47|H3BEF00
-3BEF00:lI101|H3BEFD4
-3BEFD4:lI114|H3BF0A0
-3BF0A0:lI116|H3BF174
-3BF174:lI115|H3BF238
-3BF238:lI47|H3BF2FC
-3BF2FC:lI108|H3BF3A8
-3BF3A8:lI105|H3BF45C
-3BF45C:lI98|H3BF518
-3BF518:lI47|H3BF5DC
-3BF5DC:lI111|H3BF6B0
-3BF6B0:lI98|H3BF784
-3BF784:lI115|H3BF858
-3BF858:lI101|H3BF93C
-3BF93C:lI114|H3BFA18
-3BFA18:lI118|H3BFAF4
-3BFAF4:lI101|H3BFBD0
-3BFBD0:lI114|H3BFC9C
-3BFC9C:lI47|H3BFD60
-3BFD60:lI112|H3BFE2C
-3BFE2C:lI114|H3BFEE0
-3BFEE0:lI105|H3BFF94
-3BFF94:lI118|H3C0040
-3C0040:lI47|H3C00EC
-3C00EC:lI99|H3C0198
-3C0198:lI114|H3C024C
-3C024C:lI97|H3C0308
-3C0308:lI115|H3C03BC
-3C03BC:lI104|H3C0458
-3C0458:lI100|H3C04F4
-3C04F4:lI117|H3C0590
-3C0590:lI109|H3C0634
-3C0634:lI112|H3C06E0
-3C06E0:lI95|H3C078C
-3C078C:lI118|H3C0830
-3C0830:lI105|H3C08BC
-3C08BC:lI101|H3C0950
-3C0950:lI119|H3C09E4
-3C09E4:lI101|H3C0A80
-3C0A80:lI114|N
-3BE0F8:lI47|H3BE1CC
-3BE1CC:lI99|H3BE2B0
-3BE2B0:lI114|H3BE3A0
-3BE3A0:lI97|H3BE4A4
-3BE4A4:lI115|H3BE5A8
-3BE5A8:lI104|H3BE6AC
-3BE6AC:lI100|H3BE7A0
-3BE7A0:lI117|H3BE88C
-3BE88C:lI109|H3BE978
-3BE978:lI112|H3BEA6C
-3BEA6C:lI95|H3BEB60
-3BEB60:lI118|H3BEC4C
-3BEC4C:lI105|H3BED38
-3BED38:lI101|H3BEE24
-3BEE24:lI119|H3BEEF8
-3BEEF8:lI101|H3BEFCC
-3BEFCC:lI114|N
-3BDF78:lH3BE038|H3BE044
-3BE038:t2:A5:alias,H3BE108
-3BE108:t2:H3BE1DC,H3BE1E4
-3BE1E4:lI47|H3BE2C8
-3BE2C8:lI99|H3BE3B8
-3BE3B8:lI108|H3BE4BC
-3BE4BC:lI101|H3BE5C0
-3BE5C0:lI97|H3BE6C4
-3BE6C4:lI114|H3BE7B8
-3BE7B8:lI99|H3BE8A4
-3BE8A4:lI97|H3BE990
-3BE990:lI115|H3BEA84
-3BEA84:lI101|H3BEB78
-3BEB78:lI47|H3BEC64
-3BEC64:lI111|H3BED50
-3BED50:lI116|H3BEE3C
-3BEE3C:lI112|H3BEF10
-3BEF10:lI47|H3BEFE4
-3BEFE4:lI101|H3BF0B0
-3BF0B0:lI114|H3BF184
-3BF184:lI116|H3BF248
-3BF248:lI115|H3BF304
-3BF304:lI47|H3BF3B0
-3BF3B0:lI101|H3BF464
-3BF464:lI114|H3BF520
-3BF520:lI116|H3BF5E4
-3BF5E4:lI115|H3BF6B8
-3BF6B8:lI47|H3BF78C
-3BF78C:lI100|H3BF860
-3BF860:lI111|H3BF944
-3BF944:lI99|H3BFA20
-3BFA20:lI47|H3BFAFC
-3BFAFC:lI104|H3BFBD8
-3BFBD8:lI116|H3BFCA4
-3BFCA4:lI109|H3BFD68
-3BFD68:lI108|N
-3BE1DC:lI47|H3BE2C0
-3BE2C0:lI99|H3BE3B0
-3BE3B0:lI114|H3BE4B4
-3BE4B4:lI97|H3BE5B8
-3BE5B8:lI115|H3BE6BC
-3BE6BC:lI104|H3BE7B0
-3BE7B0:lI100|H3BE89C
-3BE89C:lI117|H3BE988
-3BE988:lI109|H3BEA7C
-3BEA7C:lI112|H3BEB70
-3BEB70:lI95|H3BEC5C
-3BEC5C:lI101|H3BED48
-3BED48:lI114|H3BEE34
-3BEE34:lI116|H3BEF08
-3BEF08:lI115|H3BEFDC
-3BEFDC:lI95|H3BF0A8
-3BF0A8:lI100|H3BF17C
-3BF17C:lI111|H3BF240
-3BF240:lI99|N
-3BE044:lH3BE114|H3BE120
-3BE114:t2:A5:alias,H3BE1EC
-3BE1EC:t2:H3BE2D0,H3BE2D8
-3BE2D8:lI47|H3BE3C8
-3BE3C8:lI99|H3BE4CC
-3BE4CC:lI108|H3BE5D0
-3BE5D0:lI101|H3BE6D4
-3BE6D4:lI97|H3BE7C8
-3BE7C8:lI114|H3BE8B4
-3BE8B4:lI99|H3BE9A0
-3BE9A0:lI97|H3BEA94
-3BEA94:lI115|H3BEB88
-3BEB88:lI101|H3BEC74
-3BEC74:lI47|H3BED60
-3BED60:lI111|H3BEE4C
-3BEE4C:lI116|H3BEF20
-3BEF20:lI112|H3BEFEC
-3BEFEC:lI47|H3BF0B8
-3BF0B8:lI101|H3BF18C
-3BF18C:lI114|H3BF250
-3BF250:lI116|H3BF30C
-3BF30C:lI115|H3BF3B8
-3BF3B8:lI47|H3BF46C
-3BF46C:lI108|H3BF528
-3BF528:lI105|H3BF5EC
-3BF5EC:lI98|H3BF6C0
-3BF6C0:lI47|H3BF794
-3BF794:lI111|H3BF868
-3BF868:lI98|H3BF94C
-3BF94C:lI115|H3BFA28
-3BFA28:lI101|H3BFB04
-3BFB04:lI114|H3BFBE0
-3BFBE0:lI118|H3BFCAC
-3BFCAC:lI101|H3BFD70
-3BFD70:lI114|H3BFE34
-3BFE34:lI47|H3BFEE8
-3BFEE8:lI100|H3BFF9C
-3BFF9C:lI111|H3C0048
-3C0048:lI99|H3C00F4
-3C00F4:lI47|H3C01A0
-3C01A0:lI104|H3C0254
-3C0254:lI116|H3C0310
-3C0310:lI109|H3C03C4
-3C03C4:lI108|N
-3BE2D0:lI47|H3BE3C0
-3BE3C0:lI99|H3BE4C4
-3BE4C4:lI114|H3BE5C8
-3BE5C8:lI97|H3BE6CC
-3BE6CC:lI115|H3BE7C0
-3BE7C0:lI104|H3BE8AC
-3BE8AC:lI100|H3BE998
-3BE998:lI117|H3BEA8C
-3BEA8C:lI109|H3BEB80
-3BEB80:lI112|H3BEC6C
-3BEC6C:lI95|H3BED58
-3BED58:lI100|H3BEE44
-3BEE44:lI111|H3BEF18
-3BEF18:lI99|N
-3BE120:lH3BE1F8|N
-3BE1F8:t2:A10:erl_script_alias,H3BE2E0
-3BE2E0:t2:H3BE3D0,H3BE3D8
-3BE3D8:lH3BE4DC|N
-3BE4DC:lI99|H3BE5E0
-3BE5E0:lI114|H3BE6E4
-3BE6E4:lI97|H3BE7D8
-3BE7D8:lI115|H3BE8C4
-3BE8C4:lI104|H3BE9B0
-3BE9B0:lI100|H3BEAA4
-3BEAA4:lI117|H3BEB90
-3BEB90:lI109|H3BEC7C
-3BEC7C:lI112|H3BED68
-3BED68:lI95|H3BEE54
-3BEE54:lI118|H3BEF28
-3BEF28:lI105|H3BEFF4
-3BEFF4:lI101|H3BF0C0
-3BF0C0:lI119|H3BF194
-3BF194:lI101|H3BF258
-3BF258:lI114|N
-3BE3D0:lI47|H3BE4D4
-3BE4D4:lI99|H3BE5D8
-3BE5D8:lI100|H3BE6DC
-3BE6DC:lI118|H3BE7D0
-3BE7D0:lI95|H3BE8BC
-3BE8BC:lI101|H3BE9A8
-3BE9A8:lI114|H3BEA9C
-3BEA9C:lI108|N
-3BDE2C:lH3BDA9C|H3BDECC
-3BDA9C:t4:I127,I0,I0,I1
-3BDECC:lI8888|H3BDF88
-3BDF88:lN|N
-3BDD1C:lN|N
-3BDA50:t2:AD:$initial_call,H3BDAB8
-3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
-3BDA5C:t2:A9:verbosity,A7:silence
-3BDAC8:t2:AE:auth_verbosity,A7:silence
-3BDB28:t2:A12:security_verbosity,A7:silence
-3BDB9C:t2:A12:acceptor_verbosity,A7:silence
-3BDC00:t2:AA:$ancestors,H3BDC5C
-3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
-3BDCB4:lA8:web_tool|H3BDD24
-3BDD24:lP<0.27.0>|N
-3BDADC:t2:A19:request_handler_verbosity,A7:silence
-3BDB3C:t2:A5:sname,A3:man
-=proc_dictionary:<0.47.0>
-H36E688
-H36E694
-H36E6A0
-H36E6AC
-=proc_stack:<0.47.0>
-36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
-y0:I5
-y1:p<0.161>
-y2:p<0.141>
-36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
-y0:N
-36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y0:N
-36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y1:P<0.46.0>
-y2:A7:ip_comm
-y3:p<0.141>
-y4:A1B:httpd_conf__127_0_0_1__8888
-36c558:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:AE:httpd_acceptor
-y2:A8:acceptor
-y3:H36E6C8
-=proc_heap:<0.47.0>
-36E6C8:lP<0.44.0>|H36E724
-36E724:lP<0.46.0>|H36E748
-36E748:lA7:ip_comm|H36E760
-36E760:lH36E6D0|H36E778
-36E6D0:t4:I127,I0,I0,I1
-36E778:lI8888|H36E788
-36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
-36E798:lA7:silence|N
-36E688:t2:AD:$initial_call,H36E6F0
-36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
-36E694:t2:A9:verbosity,A7:silence
-36E6A0:t2:AA:$ancestors,H36E700
-36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
-36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
-36E750:lA8:web_tool|H36E768
-36E768:lP<0.27.0>|N
-36E6AC:t2:A5:sname,A3:acc
-=proc_dictionary:<0.48.0>
-H385E48
-H385E54
-=proc_stack:<0.48.0>
-3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A10:crashdump_viewer
-y3:H3AB280
-y4:A17:crashdump_viewer_server
-y5:P<0.41.0>
-3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H385E90
-=proc_heap:<0.48.0>
-3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
-385E90:lAA:gen_server|H385ED8
-385ED8:lP<0.41.0>|H385F10
-385F10:lP<0.41.0>|H385F58
-385F58:lH385FA8|H385FB4
-385FA8:t2:A5:local,A17:crashdump_viewer_server
-385FB4:lA10:crashdump_viewer|H386014
-386014:lN|H38606C
-38606C:lN|N
-385E48:t2:AD:$initial_call,H385EB0
-385EB0:t3:A3:gen,A7:init_it,H385E90
-385E54:t2:AA:$ancestors,H385EC0
-385EC0:lA6:websup|H385F08
-385F08:lA8:web_tool|H385F50
-385F50:lP<0.27.0>|N
-=proc_stack:<0.49.0>
-36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
-y0:H369E10
-y1:P<0.22.0>
-36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
-y0:N
-36a128:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.49.0>
-369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
-=atoms
diff --git a/lib/odbc/configure.in b/lib/odbc/configure.in
index fa81f36e98..f86146759c 100644
--- a/lib/odbc/configure.in
+++ b/lib/odbc/configure.in
@@ -136,7 +136,7 @@ AC_SUBST(THR_LIBS)
odbc_lib_link_success=no
AC_SUBST(TARGET_FLAGS)
case $host_os in
- darwin*)
+ darwin1[[0-2]].*|darwin[[0-9]].*)
TARGET_FLAGS="-DUNIX"
if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then
ODBC_LIB= -L"/usr/lib"
diff --git a/lib/public_key/doc/src/public_key.xml b/lib/public_key/doc/src/public_key.xml
index 002f641f1d..bd19d0e434 100644
--- a/lib/public_key/doc/src/public_key.xml
+++ b/lib/public_key/doc/src/public_key.xml
@@ -71,7 +71,7 @@
<p>Use the following include directive to get access to the
records and constant macros described here and in the User's Guide.</p>
- <code> -include_lib("public_key/include/public_key.hrl"). </code>
+ <code> -include_lib("public_key/include/public_key.hrl").</code>
<p><em>Data Types </em></p>
@@ -84,44 +84,49 @@
<p><code>der_encoded() = binary()</code></p>
<p><code>pki_asn1_type() = 'Certificate' | 'RSAPrivateKey'| 'RSAPublicKey' |
- 'DSAPrivateKey' | 'DSAPublicKey' | 'DHParameter' | 'SubjectPublicKeyInfo' |
- 'PrivateKeyInfo' | 'CertificationRequest' | 'ECPrivateKey'|
- 'EcpkParameters'</code></p>
+ 'DSAPrivateKey' | 'DSAPublicKey' | 'DHParameter' |
+ 'SubjectPublicKeyInfo' | 'PrivateKeyInfo' |
+ 'CertificationRequest' | 'ECPrivateKey' | 'EcpkParameters'</code></p>
<p><code>pem_entry () = {pki_asn1_type(), binary(), %% DER or encrypted DER
- not_encrypted | cipher_info()} </code></p>
+ not_encrypted | cipher_info()}</code></p>
- <p><code>cipher_info() = {"RC2-CBC | "DES-CBC" | "DES-EDE3-CBC", crypto:rand_bytes(8)} |
- 'PBES2-params'} </code></p>
+ <p><code>cipher_info() = {"RC2-CBC | "DES-CBC" | "DES-EDE3-CBC",
+ crypto:rand_bytes(8)} | 'PBES2-params'}</code></p>
+ <p><code>public_key() = rsa_public_key() | dsa_public_key() | ec_public_key()</code></p>
+ <p><code>private_key() = rsa_public_key() | dsa_public_key() | ec_public_key()</code></p>
<p><code>rsa_public_key() = #'RSAPublicKey'{}</code></p>
- <p><code>rsa_private_key() = #'RSAPrivateKey'{} </code></p>
+ <p><code>rsa_private_key() = #'RSAPrivateKey'{}</code></p>
- <p><code>dsa_public_key() = {integer(), #'Dss-Parms'{}} </code></p>
+ <p><code>dsa_public_key() = {integer(), #'Dss-Parms'{}}</code></p>
<p><code>dsa_private_key() = #'DSAPrivateKey'{}</code></p>
- <p><code>ec_public_key() = {#'ECPoint'{}, #'EcpkParameters'{} | {namedCurve, oid()}} </code></p>
+ <p><code>ec_public_key() = {#'ECPoint'{}, #'EcpkParameters'{} |
+ {namedCurve, oid()}}</code></p>
<p><code>ec_private_key() = #'ECPrivateKey'{}</code></p>
- <p><code> public_crypt_options() = [{rsa_pad, rsa_padding()}]. </code></p>
+ <p><code>public_crypt_options() = [{rsa_pad, rsa_padding()}].</code></p>
- <p><code> rsa_padding() = 'rsa_pkcs1_padding' | 'rsa_pkcs1_oaep_padding'
- | 'rsa_no_padding'</code></p>
+ <p><code>rsa_padding() = 'rsa_pkcs1_padding' | 'rsa_pkcs1_oaep_padding' |
+ 'rsa_no_padding'</code></p>
- <p><code> rsa_digest_type() = 'md5' | 'sha' | 'sha224' | 'sha256' | 'sha384' | 'sha512' </code></p>
+ <p><code>rsa_digest_type() = 'md5' | 'sha' | 'sha224' | 'sha256' | 'sha384' |
+ 'sha512'</code></p>
- <p><code> dss_digest_type() = 'sha' </code></p>
+ <p><code>dss_digest_type() = 'sha'</code></p>
- <p><code> ecdsa_digest_type() = 'sha'| 'sha224' | 'sha256' | 'sha384' | 'sha512' </code></p>
+ <p><code>ecdsa_digest_type() = 'sha'| 'sha224' | 'sha256' | 'sha384' | 'sha512'</code></p>
- <p><code> crl_reason() = unspecified | keyCompromise | cACompromise | affiliationChanged | superseded | cessationOfOperation | certificateHold | privilegeWithdrawn | aACompromise
- </code></p>
+ <p><code>crl_reason() = unspecified | keyCompromise | cACompromise |
+ affiliationChanged | superseded | cessationOfOperation |
+ certificateHold | privilegeWithdrawn | aACompromise</code></p>
- <p><code> ssh_file() = openssh_public_key | rfc4716_public_key |
- known_hosts | auth_keys </code></p>
+ <p><code>ssh_file() = openssh_public_key | rfc4716_public_key | known_hosts |
+ auth_keys</code></p>
<!-- <p><code>policy_tree() = [Root, Children]</code></p> -->
@@ -430,7 +435,7 @@
constructing the input to this function and that should be run through the <c>verify_fun</c>.</d>
<v> CertChain = [der_encode()]</v>
<d>A list of DER encoded certificates in trust order ending with the peer certificate.</d>
- <v> Options = proplists:proplists()</v>
+ <v> Options = proplists:proplist()</v>
<v>PublicKeyInfo = {?'rsaEncryption' | ?'id-dsa',
rsa_public_key() | integer(), 'NULL' | 'Dss-Parms'{}}</v>
<v> PolicyTree = term() </v>
@@ -492,7 +497,7 @@ fun(OtpCert :: #'OTPCertificate'{}, Event :: {bad_cert, Reason :: atom()} |
<type>
<v> OTPCertificate = #'OTPCertificate'{}</v>
<v> DPAndCRLs = [{DP::#'DistributionPoint'{} ,CRL::#'CertificateList'{}}] </v>
- <v> Options = proplists:proplists()</v>
+ <v> Options = proplists:proplist()</v>
<v> CRLStatus() = valid | {bad_cert, revocation_status_undetermined} |
{bad_cert, {revoked, crl_reason()}}</v>
</type>
diff --git a/lib/public_key/include/public_key.hrl b/lib/public_key/include/public_key.hrl
index 1e882e76ee..8afc841fa6 100644
--- a/lib/public_key/include/public_key.hrl
+++ b/lib/public_key/include/public_key.hrl
@@ -88,7 +88,8 @@
-define(privilegeWithdrawn, 9).
-define(aACompromise, 10).
--type public_key() :: rsa_public_key() | dsa_public_key().
+-type public_key() :: rsa_public_key() | dsa_public_key() | ec_public_key().
+-type private_key() :: rsa_private_key() | dsa_private_key() | ec_private_key().
-type rsa_public_key() :: #'RSAPublicKey'{}.
-type rsa_private_key() :: #'RSAPrivateKey'{}.
-type dsa_private_key() :: #'DSAPrivateKey'{}.
diff --git a/lib/runtime_tools/c_src/Makefile.in b/lib/runtime_tools/c_src/Makefile.in
index d315a90e18..2bcb93b4dd 100644
--- a/lib/runtime_tools/c_src/Makefile.in
+++ b/lib/runtime_tools/c_src/Makefile.in
@@ -21,11 +21,6 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
include $(ERL_TOP)/make/$(TARGET)/otp_ded.mk
# ----------------------------------------------------
-# Items from top-level configure
-# ----------------------------------------------------
-DTRACE_ENABLED=@DTRACE_ENABLED@
-DTRACE_ENABLED_2STEP=@DTRACE_ENABLED_2STEP@
-# ----------------------------------------------------
# Application version
# ----------------------------------------------------
include ../vsn.mk
@@ -108,28 +103,7 @@ _create_dirs := $(shell mkdir -p $(OBJDIR) $(LIBDIR))
debug opt valgrind: $(SOLIBS) $(OBJDIR) $(LIBDIR) $(NIF_LIB)
-ifdef DTRACE_ENABLED
-DTRACE_USER_HEADER=$(OBJDIR)/dtrace_user.h
-$(OBJDIR)/dtrace_user.h: ./dtrace_user.d
- $(dtrace_verbose)dtrace -h -C $(INCLUDES) \
- -s ./dtrace_user.d \
- -o ./dtrace_user.tmp
- $(V_at)sed -e '/^#define[ ]*ERLANG_[A-Z0-9_]*(.*)/y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' ./dtrace_user.tmp > $@
- $(V_at)rm ./dtrace_user.tmp
-else
-DTRACE_USER_HEADER=
-endif
-
-DTRACE_OBJS =
-ifdef DTRACE_ENABLED_2STEP
-DTRACE_OBJS += $(OBJDIR)/dtrace_user.o
-$(OBJDIR)/dtrace_user.o: $(before_DTrace_OBJS) $(OBJDIR)/dtrace_user.h
- $(dtrace_verbose)dtrace -G -C \
- -s ./dtrace_user.d \
- -o $@ $(before_DTrace_OBJS)
-endif
-
-DYNTRACE_OBJS = $(before_DTrace_OBJS) $(DTRACE_OBJS)
+DYNTRACE_OBJS = $(before_DTrace_OBJS)
$(OBJDIR):
-@mkdir -p $(OBJDIR)
@@ -137,7 +111,7 @@ $(OBJDIR):
$(LIBDIR):
-@mkdir -p $(LIBDIR)
-$(OBJDIR)/dyntrace$(TYPEMARKER).o: dyntrace.c $(DTRACE_USER_HEADER)
+$(OBJDIR)/dyntrace$(TYPEMARKER).o: dyntrace.c
$(V_at)$(INSTALL_DIR) $(OBJDIR)
$(V_CC) -c -o $@ $(ALL_CFLAGS) $<
diff --git a/lib/runtime_tools/c_src/dyntrace.c b/lib/runtime_tools/c_src/dyntrace.c
index eef03afd1c..18f91cd7e7 100644
--- a/lib/runtime_tools/c_src/dyntrace.c
+++ b/lib/runtime_tools/c_src/dyntrace.c
@@ -30,9 +30,6 @@
#if defined(USE_DYNAMIC_TRACE) && (defined(USE_DTRACE) || defined(USE_SYSTEMTAP))
#define HAVE_USE_DTRACE 1
#endif
-#ifdef HAVE_USE_DTRACE
-#include "dtrace_user.h"
-#endif
void dtrace_nifenv_str(ErlNifEnv *env, char *process_buf);
void get_string_maybe(ErlNifEnv *env, const ERL_NIF_TERM term, char **ptr, char *buf, int bufsiz);
diff --git a/lib/runtime_tools/src/observer_backend.erl b/lib/runtime_tools/src/observer_backend.erl
index 202129c61a..68ef04f20c 100644
--- a/lib/runtime_tools/src/observer_backend.erl
+++ b/lib/runtime_tools/src/observer_backend.erl
@@ -53,6 +53,13 @@ sys_info() ->
Mem -> Mem
catch _:_ -> []
end,
+
+ SchedulersOnline = erlang:system_info(schedulers_online),
+ SchedulersAvailable = case erlang:system_info(multi_scheduling) of
+ enabled -> SchedulersOnline;
+ _ -> 1
+ end,
+
{{_,Input},{_,Output}} = erlang:statistics(io),
[{process_count, erlang:system_info(process_count)},
{process_limit, erlang:system_info(process_limit)},
@@ -60,9 +67,13 @@ sys_info() ->
{run_queue, erlang:statistics(run_queue)},
{io_input, Input},
{io_output, Output},
+
{logical_processors, erlang:system_info(logical_processors)},
- {logical_processors_available, erlang:system_info(logical_processors_available)},
{logical_processors_online, erlang:system_info(logical_processors_online)},
+ {logical_processors_available, erlang:system_info(logical_processors_available)},
+ {schedulers, erlang:system_info(schedulers)},
+ {schedulers_online, SchedulersOnline},
+ {schedulers_available, SchedulersAvailable},
{otp_release, erlang:system_info(otp_release)},
{version, erlang:system_info(version)},
@@ -221,7 +232,7 @@ fetch_stats_loop(Parent, Time) ->
_M = Parent ! {stats, 1,
erlang:statistics(scheduler_wall_time),
erlang:statistics(io),
- erlang:memory()},
+ try erlang:memory() catch _:_ -> [] end},
fetch_stats_loop(Parent, Time)
end.
%%
diff --git a/lib/sasl/test/sasl_SUITE.erl b/lib/sasl/test/sasl_SUITE.erl
index e8f6a4a2eb..e799230338 100644
--- a/lib/sasl/test/sasl_SUITE.erl
+++ b/lib/sasl/test/sasl_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2014. 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
@@ -34,7 +34,7 @@
log_mf_h_env/1]).
all() ->
- [app_test, appup_test, log_mf_h_env].
+ [log_mf_h_env, app_test, appup_test].
groups() ->
[].
@@ -61,54 +61,60 @@ app_test(Config) when is_list(Config) ->
%% Test that appup allows upgrade from/downgrade to a maximum of two
%% major releases back.
appup_test(_Config) ->
+ do_appup_tests(create_test_vsns()).
+
+do_appup_tests({[],[]}) ->
+ {skip,"no previous releases available"};
+do_appup_tests({OkVsns,NokVsns}) ->
application:load(sasl),
- {sasl,_,SaslVsn} = lists:keyfind(sasl,1,application:loaded_applications()),
- Ebin = filename:join(code:lib_dir(sasl),ebin),
- {ok,[{SaslVsn,UpFrom,DownTo}=Appup]} =
- file:consult(filename:join(Ebin,"sasl.appup")),
- ct:log("~p~n",[Appup]),
- {OkVsns,NokVsns} = create_test_vsns(SaslVsn),
+ {_,_,Vsn} = lists:keyfind(sasl,1,application:loaded_applications()),
+ AppupFile = filename:join([code:lib_dir(sasl),ebin,"sasl.appup"]),
+ {ok,[{Vsn,UpFrom,DownTo}=AppupScript]} = file:consult(AppupFile),
+ ct:log("~p~n",[AppupScript]),
+ ct:log("Testing ok versions: ~p~n",[OkVsns]),
check_appup(OkVsns,UpFrom,{ok,[restart_new_emulator]}),
check_appup(OkVsns,DownTo,{ok,[restart_new_emulator]}),
+ ct:log("Testing not ok versions: ~p~n",[NokVsns]),
check_appup(NokVsns,UpFrom,error),
check_appup(NokVsns,DownTo,error),
ok.
-create_test_vsns(Current) ->
- [XStr,YStr|Rest] = string:tokens(Current,"."),
- X = list_to_integer(XStr),
- Y = list_to_integer(YStr),
- SecondMajor = vsn(X,Y-2),
- SecondMinor = SecondMajor ++ ".1.3",
- FirstMajor = vsn(X,Y-1),
- FirstMinor = FirstMajor ++ ".57",
- ThisMajor = vsn(X,Y),
- This =
- case Rest of
- [] ->
- [];
- ["1"] ->
- [ThisMajor];
- _ ->
- ThisMinor = ThisMajor ++ ".1",
- [ThisMajor,ThisMinor]
- end,
- OkVsns = This ++ [FirstMajor, FirstMinor, SecondMajor, SecondMinor],
-
- ThirdMajor = vsn(X,Y-3),
- ThirdMinor = ThirdMajor ++ ".10.12",
- Illegal = ThisMajor ++ ",1",
- Newer1Major = vsn(X,Y+1),
- Newer1Minor = Newer1Major ++ ".1",
- Newer2Major = ThisMajor ++ "1",
- NokVsns = [ThirdMajor,ThirdMinor,
- Illegal,
- Newer1Major,Newer1Minor,
- Newer2Major],
- {OkVsns,NokVsns}.
-
-vsn(X,Y) ->
- integer_to_list(X) ++ "." ++ integer_to_list(Y).
+create_test_vsns() ->
+ This = erlang:system_info(otp_release),
+ FirstMajor = previous_major(This),
+ SecondMajor = previous_major(FirstMajor),
+ ThirdMajor = previous_major(SecondMajor),
+ Ok = sasl_vsn([FirstMajor,SecondMajor]),
+ Nok0 = sasl_vsn([ThirdMajor]),
+ Nok = case Ok of
+ [Ok1|_] ->
+ [Ok1 ++ ",1" | Nok0]; % illegal
+ _ ->
+ Nok0
+ end,
+ {Ok,Nok}.
+
+previous_major("17") ->
+ "r16";
+previous_major("r"++Rel) ->
+ "r"++previous_major(Rel);
+previous_major(Rel) ->
+ integer_to_list(list_to_integer(Rel)-1).
+
+sasl_vsn([R|Rs]) ->
+ case test_server:is_release_available(R) of
+ true ->
+ {ok,N} = test_server:start_node(prevrel,peer,[{erl,[{release,R}]}]),
+ _ = rpc:call(N,application,load,[sasl]),
+ As = rpc:call(N,application,loaded_applications,[]),
+ {_,_,V} = lists:keyfind(sasl,1,As),
+ test_server:stop_node(N),
+ [V|sasl_vsn(Rs)];
+ false ->
+ sasl_vsn(Rs)
+ end;
+sasl_vsn([]) ->
+ [].
check_appup([Vsn|Vsns],Instrs,Expected) ->
case systools_relup:appup_search_for_version(Vsn, Instrs) of
@@ -119,7 +125,6 @@ check_appup([],_,_) ->
ok.
-
%% OTP-9185 - fail sasl start if some but not all log_mf_h env vars
%% are given.
log_mf_h_env(Config) ->
diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml
index d213b67052..ab5514e550 100644
--- a/lib/snmp/doc/src/notes.xml
+++ b/lib/snmp/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -34,6 +34,80 @@
<section>
+ <title>SNMP Development Toolkit 4.25.0.1</title>
+ <p>Version 4.25.0.1 supports code replacement in runtime from/to
+ version 4.25, 4.24.2, 4.24.1 and 4.24. </p>
+
+ <section>
+ <title>Improvements and new features</title>
+<!--
+ <p>-</p>
+-->
+
+ <list type="bulleted">
+ <item>
+ <p>Updated doc files to utf8. </p>
+ <p>Own Id: OTP-10907</p>
+ </item>
+
+ <item>
+ <p>Fixed test suite to support UTF-8 paths. </p>
+ <p>Own Id: OTP-10877</p>
+ </item>
+
+ </list>
+
+ </section>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>Wrong block cypher type used for AES ('aes_cbf128'
+ instead of 'aes_cfb128') when performing AES block
+ encrypt/decrypt which breaks SNMP usmAesCfb128Protocol
+ in agent and manager. </p>
+ <p>Own Id: OTP-11412</p>
+ </item>
+
+ <item>
+ <p>[manager] When performing the AES encryption, invalid values for
+ the EngineBoots and EngineTime was used. </p>
+ <p>The values of the local agent was used, which would have produced
+ "some" values if an agent was actually running.
+ If not it would have caused a crash. </p>
+ <p>Own Id: OTP-11413</p>
+ </item>
+
+ </list>
+-->
+
+ </section>
+
+ <section>
+ <title>Incompatibilities</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>[manager] The old Addr-and-Port based API functions, previously
+ long deprecated and marked for deletion in R16B, has now been
+ removed. </p>
+ <p>Own Id: OTP-10027</p>
+ </item>
+
+ </list>
+-->
+ </section>
+
+ </section> <!-- 4.25.0.1 -->
+
+
+ <section>
<title>SNMP Development Toolkit 4.25</title>
<p>Version 4.25 supports code replacement in runtime from/to
version 4.24.2, 4.24.1, 4.24, 4.23.1 and 4.23. </p>
diff --git a/lib/snmp/src/app/snmp.appup.src b/lib/snmp/src/app/snmp.appup.src
index fa4b72ab68..babc33e6a5 100644
--- a/lib/snmp/src/app/snmp.appup.src
+++ b/lib/snmp/src/app/snmp.appup.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2014. 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
@@ -28,11 +28,10 @@
%% {update, snmpa_local_db, soft, soft_purge, soft_purge, []}
%% {add_module, snmpm_net_if_mt}
[
+ {"4.25", [{restart_application, snmp}]},
{"4.24.2", [{restart_application, snmp}]},
{"4.24.1", [{restart_application, snmp}]},
- {"4.24", [{restart_application, snmp}]},
- {"4.23.1", [{restart_application, snmp}]},
- {"4.23", [{restart_application, snmp}]}
+ {"4.24", [{restart_application, snmp}]}
],
%% ------D o w n g r a d e ---------------------------------------------------
@@ -41,11 +40,10 @@
%% {remove, {snmpm_net_if_mt, soft_purge, soft_purge}}
[
+ {"4.25", [{restart_application, snmp}]},
{"4.24.2", [{restart_application, snmp}]},
{"4.24.1", [{restart_application, snmp}]},
- {"4.24", [{restart_application, snmp}]},
- {"4.23.1", [{restart_application, snmp}]},
- {"4.23", [{restart_application, snmp}]}
+ {"4.24", [{restart_application, snmp}]}
]
}.
diff --git a/lib/snmp/vsn.mk b/lib/snmp/vsn.mk
index 70f7c2b19a..533e313bdb 100644
--- a/lib/snmp/vsn.mk
+++ b/lib/snmp/vsn.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2014. 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
@@ -18,6 +18,6 @@
# %CopyrightEnd%
APPLICATION = snmp
-SNMP_VSN = 4.25
+SNMP_VSN = 4.25.0.1
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(SNMP_VSN)$(PRE_VSN)"
diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml
index 89d8be850e..5d5f2e5b91 100644
--- a/lib/ssh/doc/src/ssh.xml
+++ b/lib/ssh/doc/src/ssh.xml
@@ -38,7 +38,7 @@
<item>Supported SSH version is 2.0 </item>
<item>Supported MAC algorithms: hmac-sha1</item>
<item>Supported encryption algorithms: aes128-cb and 3des-cbc</item>
- <item>Supports unicode filenames if the emulator and the underlaying OS supports it. See the DESCRIPTION section in <seealso marker="file">file</seealso> for information about this subject</item>
+ <item>Supports unicode filenames if the emulator and the underlaying OS supports it. See the DESCRIPTION section in <seealso marker="kernel:file">file</seealso> for information about this subject</item>
<item>Supports unicode in shell and cli</item>
</list>
diff --git a/lib/ssh/src/ssh.erl b/lib/ssh/src/ssh.erl
index 2685b1553b..9f571adba2 100644
--- a/lib/ssh/src/ssh.erl
+++ b/lib/ssh/src/ssh.erl
@@ -59,8 +59,8 @@ stop() ->
application:stop(ssh).
%%--------------------------------------------------------------------
--spec connect(string(), integer(), proplists:proplists()) -> {ok, pid()} | {error, term()}.
--spec connect(string(), integer(), proplists:proplists(), timeout()) -> {ok, pid()} | {error, term()}.
+-spec connect(string(), integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+-spec connect(string(), integer(), proplists:proplist(), timeout()) -> {ok, pid()} | {error, term()}.
%%
%% Description: Starts an ssh connection.
%%--------------------------------------------------------------------
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl
index 41febf9707..77453e8fd7 100644
--- a/lib/ssh/src/ssh_cli.erl
+++ b/lib/ssh/src/ssh_cli.erl
@@ -170,10 +170,19 @@ handle_msg({Group, get_unicode_state}, State) ->
{ok, State};
handle_msg({Group, tty_geometry}, #state{group = Group,
- pty = #ssh_pty{width=Width,
- height=Height}
+ pty = Pty
} = State) ->
- Group ! {self(),tty_geometry,{Width,Height}},
+ case Pty of
+ #ssh_pty{width=Width,height=Height} ->
+ Group ! {self(),tty_geometry,{Width,Height}};
+ _ ->
+ %% This is a dirty fix of the problem with the otp ssh:shell
+ %% client. That client will not allocate a tty, but someone
+ %% asks for the tty_geometry just before every erlang prompt.
+ %% If that question is not answered, there is a 2 sec timeout
+ %% Until the prompt is seen by the user at the client side ...
+ Group ! {self(),tty_geometry,{0,0}}
+ end,
{ok,State};
handle_msg({Group, Req}, #state{group = Group, buf = Buf, pty = Pty,
diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml
index 80ef419fb7..910dca3889 100644
--- a/lib/ssl/doc/src/ssl.xml
+++ b/lib/ssl/doc/src/ssl.xml
@@ -460,6 +460,10 @@ fun(srp, Username :: string(), UserState :: term()) ->
</item>
<tag>{log_alert, boolean()}</tag>
<item>If false, error reports will not be displayed.</item>
+ <tag>{honor_cipher_order, boolean()}</tag>
+ <item>If true, use the server's preference for cipher selection. If false
+ (the default), use the client's preference.
+ </item>
</taglist>
</section>
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index a7fd9f5f81..8c2b84bc1e 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -640,7 +640,8 @@ handle_options(Opts0, _Role) ->
make_next_protocol_selector(
handle_option(client_preferred_next_protocols, Opts, undefined)),
log_alert = handle_option(log_alert, Opts, true),
- server_name_indication = handle_option(server_name_indication, Opts, undefined)
+ server_name_indication = handle_option(server_name_indication, Opts, undefined),
+ honor_cipher_order = handle_option(honor_cipher_order, Opts, false)
},
CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}),
@@ -652,7 +653,8 @@ handle_options(Opts0, _Role) ->
reuse_session, reuse_sessions, ssl_imp,
cb_info, renegotiate_at, secure_renegotiate, hibernate_after,
erl_dist, next_protocols_advertised,
- client_preferred_next_protocols, log_alert, server_name_indication],
+ client_preferred_next_protocols, log_alert,
+ server_name_indication, honor_cipher_order],
SockOpts = lists:foldl(fun(Key, PropList) ->
proplists:delete(Key, PropList)
@@ -695,11 +697,9 @@ validate_option(verify_fun, Fun) when is_function(Fun) ->
end, Fun};
validate_option(verify_fun, {Fun, _} = Value) when is_function(Fun) ->
Value;
-validate_option(fail_if_no_peer_cert, Value)
- when Value == true; Value == false ->
+validate_option(fail_if_no_peer_cert, Value) when is_boolean(Value) ->
Value;
-validate_option(verify_client_once, Value)
- when Value == true; Value == false ->
+validate_option(verify_client_once, Value) when is_boolean(Value) ->
Value;
validate_option(depth, Value) when is_integer(Value),
Value >= 0, Value =< 255->
@@ -779,12 +779,10 @@ validate_option(ciphers, Value) when is_list(Value) ->
end;
validate_option(reuse_session, Value) when is_function(Value) ->
Value;
-validate_option(reuse_sessions, Value) when Value == true;
- Value == false ->
+validate_option(reuse_sessions, Value) when is_boolean(Value) ->
Value;
-validate_option(secure_renegotiate, Value) when Value == true;
- Value == false ->
+validate_option(secure_renegotiate, Value) when is_boolean(Value) ->
Value;
validate_option(renegotiate_at, Value) when is_integer(Value) ->
erlang:min(Value, ?DEFAULT_RENEGOTIATE_AT);
@@ -793,8 +791,7 @@ validate_option(hibernate_after, undefined) ->
undefined;
validate_option(hibernate_after, Value) when is_integer(Value), Value >= 0 ->
Value;
-validate_option(erl_dist,Value) when Value == true;
- Value == false ->
+validate_option(erl_dist,Value) when is_boolean(Value) ->
Value;
validate_option(client_preferred_next_protocols = Opt, {Precedence, PreferredProtocols} = Value)
when is_list(PreferredProtocols) ->
@@ -820,8 +817,7 @@ validate_option(client_preferred_next_protocols = Opt, {Precedence, PreferredPro
validate_option(client_preferred_next_protocols, undefined) ->
undefined;
-validate_option(log_alert, Value) when Value == true;
- Value == false ->
+validate_option(log_alert, Value) when is_boolean(Value) ->
Value;
validate_option(next_protocols_advertised = Opt, Value) when is_list(Value) ->
case tls_record:highest_protocol_version([]) of
@@ -840,6 +836,8 @@ validate_option(server_name_indication, disable) ->
disable;
validate_option(server_name_indication, undefined) ->
undefined;
+validate_option(honor_cipher_order, Value) when is_boolean(Value) ->
+ Value;
validate_option(Opt, Value) ->
throw({error, {options, {Opt, Value}}}).
diff --git a/lib/ssl/src/ssl_connection.hrl b/lib/ssl/src/ssl_connection.hrl
index 27489ca325..adb2e1debe 100644
--- a/lib/ssl/src/ssl_connection.hrl
+++ b/lib/ssl/src/ssl_connection.hrl
@@ -41,7 +41,7 @@
data_tag :: atom(), % ex tcp.
close_tag :: atom(), % ex tcp_closed
error_tag :: atom(), % ex tcp_error
- host :: string() | inet:ipaddress(),
+ host :: string() | inet:ip_address(),
port :: integer(),
socket :: port(),
ssl_options :: #ssl_options{},
diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl
index 2b9bae6e80..7b4cf8eb06 100644
--- a/lib/ssl/src/ssl_handshake.erl
+++ b/lib/ssl/src/ssl_handshake.erl
@@ -164,7 +164,7 @@ next_protocol(SelectedProtocol) ->
%%--------------------------------------------------------------------
-spec client_certificate_verify(undefined | der_cert(), binary(),
- tls_version(), term(), private_key(),
+ tls_version(), term(), public_key:private_key(),
tls_handshake_history()) ->
#certificate_verify{} | ignore | #alert{}.
%%
@@ -207,12 +207,12 @@ certificate_request(CipherSuite, CertDbHandle, CertDbRef, Version) ->
{premaster_secret, binary(), public_key_info()} |
{dh, binary()} |
{dh, {binary(), binary()}, #'DHParameter'{}, {HashAlgo::atom(), SignAlgo::atom()},
- binary(), binary(), private_key()} |
+ binary(), binary(), public_key:private_key()} |
{ecdh, #'ECPrivateKey'{}} |
{psk, binary()} |
{dhe_psk, binary(), binary()} |
{srp, {binary(), binary()}, #srp_user{}, {HashAlgo::atom(), SignAlgo::atom()},
- binary(), binary(), private_key()}) ->
+ binary(), binary(), public_key:private_key()}) ->
#client_key_exchange{} | #server_key_exchange{}.
%%
@@ -1029,14 +1029,15 @@ cipher_suites(Suites, true) ->
select_session(SuggestedSessionId, CipherSuites, Compressions, Port, #session{ecc = ECCCurve} =
Session, Version,
- #ssl_options{ciphers = UserSuites} = SslOpts, Cache, CacheCb, Cert) ->
+ #ssl_options{ciphers = UserSuites, honor_cipher_order = HCO} = SslOpts,
+ Cache, CacheCb, Cert) ->
{SessionId, Resumed} = ssl_session:server_id(Port, SuggestedSessionId,
SslOpts, Cert,
Cache, CacheCb),
case Resumed of
undefined ->
Suites = available_suites(Cert, UserSuites, Version, ECCCurve),
- CipherSuite = select_cipher_suite(CipherSuites, Suites),
+ CipherSuite = select_cipher_suite(CipherSuites, Suites, HCO),
Compression = select_compression(Compressions),
{new, Session#session{session_id = SessionId,
cipher_suite = CipherSuite,
@@ -1796,6 +1797,11 @@ handle_srp_extension(#srp{username = Username}, Session) ->
%%-------------Misc --------------------------------
+select_cipher_suite(CipherSuites, Suites, false) ->
+ select_cipher_suite(CipherSuites, Suites);
+select_cipher_suite(CipherSuites, Suites, true) ->
+ select_cipher_suite(Suites, CipherSuites).
+
select_cipher_suite([], _) ->
no_suite;
select_cipher_suite([Suite | ClientSuites], SupportedSuites) ->
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 0186f9fca2..102215119d 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -35,7 +35,6 @@
-type certdb_ref() :: reference().
-type db_handle() :: term().
-type der_cert() :: binary().
--type private_key() :: #'RSAPrivateKey'{} | #'DSAPrivateKey'{} | #'ECPrivateKey'{}.
-type issuer() :: tuple().
-type serialnumber() :: integer().
-type cert_key() :: {reference(), integer(), issuer()}.
@@ -114,7 +113,10 @@
next_protocols_advertised = undefined, %% [binary()],
next_protocol_selector = undefined, %% fun([binary()]) -> binary())
log_alert :: boolean(),
- server_name_indication = undefined
+ server_name_indication = undefined,
+ %% Should the server prefer its own cipher order over the one provided by
+ %% the client?
+ honor_cipher_order = false
}).
-record(config, {ssl, %% SSL parameters
diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl
index 1006b23a30..ddc511c652 100644
--- a/lib/ssl/test/ssl_basic_SUITE.erl
+++ b/lib/ssl/test/ssl_basic_SUITE.erl
@@ -110,7 +110,10 @@ options_tests() ->
empty_protocol_versions,
ipv6,
reuseaddr,
- tcp_reuseaddr].
+ tcp_reuseaddr,
+ honor_server_cipher_order,
+ honor_client_cipher_order
+].
api_tests() ->
[connection_info,
@@ -2443,6 +2446,51 @@ tcp_reuseaddr(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
+honor_server_cipher_order() ->
+ [{doc,"Test API honor server cipher order."}].
+honor_server_cipher_order(Config) when is_list(Config) ->
+ ClientCiphers = [{rsa, aes_128_cbc, sha}, {rsa, aes_256_cbc, sha}],
+ ServerCiphers = [{rsa, aes_256_cbc, sha}, {rsa, aes_128_cbc, sha}],
+honor_cipher_order(Config, true, ServerCiphers, ClientCiphers, {rsa, aes_256_cbc, sha}).
+
+honor_client_cipher_order() ->
+ [{doc,"Test API honor server cipher order."}].
+honor_client_cipher_order(Config) when is_list(Config) ->
+ ClientCiphers = [{rsa, aes_128_cbc, sha}, {rsa, aes_256_cbc, sha}],
+ ServerCiphers = [{rsa, aes_256_cbc, sha}, {rsa, aes_128_cbc, sha}],
+honor_cipher_order(Config, false, ServerCiphers, ClientCiphers, {rsa, aes_128_cbc, sha}).
+
+honor_cipher_order(Config, Honor, ServerCiphers, ClientCiphers, Expected) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, connection_info_result, []}},
+ {options, [{ciphers, ServerCiphers}, {honor_cipher_order, Honor}
+ | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, connection_info_result, []}},
+ {options, [{ciphers, ClientCiphers}, {honor_cipher_order, Honor}
+ | ClientOpts]}]),
+
+ Version =
+ tls_record:protocol_version(tls_record:highest_protocol_version([])),
+
+ ServerMsg = ClientMsg = {ok, {Version, Expected}},
+
+ ssl_test_lib:check_result(Server, ServerMsg, Client, ClientMsg),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
+
hibernate() ->
[{doc,"Check that an SSL connection that is started with option "
"{hibernate_after, 1000} indeed hibernates after 1000ms of "
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index 74fadc0cc7..7ed9adfcd9 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2014. 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
@@ -146,7 +146,7 @@ remove_close_msg(ReconnectTimes) ->
end.
start_client(Args) ->
- Result = spawn_link(?MODULE, run_client, [lists:delete(return_socket, Args)]),
+ Result = spawn_link(?MODULE, run_client_init, [lists:delete(return_socket, Args)]),
receive
{ connected, Socket } ->
case lists:member(return_socket, Args) of
@@ -155,6 +155,10 @@ start_client(Args) ->
end
end.
+run_client_init(Opts) ->
+ put(retries, 0),
+ run_client(Opts).
+
run_client(Opts) ->
Node = proplists:get_value(node, Opts),
Host = proplists:get_value(host, Opts),
@@ -189,9 +193,19 @@ run_client(Opts) ->
{gen_tcp, closed} ->
ok
end;
+ {error, econnrefused = Reason} ->
+ case get(retries) of
+ N when N < 5 ->
+ put(retries, N+1),
+ ct:sleep(?SLEEP),
+ run_client(Opts);
+ _ ->
+ ct:log("Client faild several times: connection failed: ~p ~n", [Reason]),
+ Pid ! {self(), {error, Reason}}
+ end;
{error, Reason} ->
ct:log("Client: connection failed: ~p ~n", [Reason]),
- Pid ! {self(), {error, Reason}}
+ Pid ! {self(), {error, Reason}}
end.
close(Pid) ->
diff --git a/lib/ssl/test/ssl_to_openssl_SUITE.erl b/lib/ssl/test/ssl_to_openssl_SUITE.erl
index 4682a109af..68784a175e 100644
--- a/lib/ssl/test/ssl_to_openssl_SUITE.erl
+++ b/lib/ssl/test/ssl_to_openssl_SUITE.erl
@@ -912,8 +912,16 @@ ssl2_erlang_server_openssl_client(Config) when is_list(Config) ->
{'EXIT', OpenSslPort, _} = Exit ->
ct:log("Received: ~p ~n", [Exit]),
ok
-
end,
+ receive
+ {'EXIT', _, _} = UnkownExit ->
+ Msg = lists:flatten(io_lib:format("Received: ~p ~n", [UnkownExit])),
+ ct:log(Msg),
+ ct:comment(Msg),
+ ok
+ after 0 ->
+ ok
+ end,
ssl_test_lib:check_result(Server, {error, {tls_alert, "protocol version"}}),
process_flag(trap_exit, false).
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index cf01e1f8cf..f0d50df4c7 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -844,8 +844,9 @@ behaviour_callbacks(Line, B, St0) ->
{[], St1}
end.
-behaviour_missing_callbacks([{{Line,B},Bfs}|T], #lint{exports=Exp}=St0) ->
- Missing = ordsets:subtract(ordsets:from_list(Bfs), gb_sets:to_list(Exp)),
+behaviour_missing_callbacks([{{Line,B},Bfs}|T], St0) ->
+ Exports = gb_sets:to_list(exports(St0)),
+ Missing = ordsets:subtract(ordsets:from_list(Bfs), Exports),
St = foldl(fun (F, S0) ->
add_warning(Line, {undefined_behaviour_func,F,B}, S0)
end, St0, Missing),
@@ -1149,6 +1150,14 @@ export_type(Line, ETs, #lint{usage = Usage, exp_types = ETs0} = St0) ->
add_error(Line, {bad_export_type, ETs}, St0)
end.
+-spec exports(lint_state()) -> gb_set().
+
+exports(#lint{compile = Opts, defined = Defs, exports = Es}) ->
+ case lists:member(export_all, Opts) of
+ true -> Defs;
+ false -> Es
+ end.
+
-type import() :: {module(), [fa()]} | module().
-spec import(line(), import(), lint_state()) -> lint_state().
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index a71d7f3018..6e9a9dd7bf 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -2859,7 +2859,15 @@ behaviour_basic(Config) when is_list(Config) ->
stop(_) -> ok.
">>,
[],
- []}
+ []},
+
+ {behaviour4,
+ <<"-behavior(application). %% Test callbacks with export_all
+ -compile(export_all).
+ stop(_) -> ok.
+ ">>,
+ [],
+ {warnings,[{1,erl_lint,{undefined_behaviour_func,{start,2},application}}]}}
],
?line [] = run(Config, Ts),
ok.
diff --git a/lib/stdlib/test/stdlib_SUITE.erl b/lib/stdlib/test/stdlib_SUITE.erl
index 8a2cb5ea6b..8fff5e2e05 100644
--- a/lib/stdlib/test/stdlib_SUITE.erl
+++ b/lib/stdlib/test/stdlib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2014. 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
@@ -81,53 +81,59 @@ app_test(Config) when is_list(Config) ->
%% Test that appup allows upgrade from/downgrade to a maximum of two
%% major releases back.
appup_test(_Config) ->
+ do_appup_tests(create_test_vsns()).
+
+do_appup_tests({[],[]}) ->
+ {skip,"no previous releases available"};
+do_appup_tests({OkVsns,NokVsns}) ->
application:load(stdlib),
{_,_,Vsn} = lists:keyfind(stdlib,1,application:loaded_applications()),
AppupFile = filename:join([code:lib_dir(stdlib),ebin,"stdlib.appup"]),
{ok,[{Vsn,UpFrom,DownTo}=AppupScript]} = file:consult(AppupFile),
ct:log("~p~n",[AppupScript]),
- {OkVsns,NokVsns} = create_test_vsns(Vsn),
+ ct:log("Testing ok versions: ~p~n",[OkVsns]),
check_appup(OkVsns,UpFrom,{ok,[restart_new_emulator]}),
check_appup(OkVsns,DownTo,{ok,[restart_new_emulator]}),
+ ct:log("Testing not ok versions: ~p~n",[NokVsns]),
check_appup(NokVsns,UpFrom,error),
check_appup(NokVsns,DownTo,error),
ok.
-create_test_vsns(Current) ->
- [XStr,YStr|Rest] = string:tokens(Current,"."),
- X = list_to_integer(XStr),
- Y = list_to_integer(YStr),
- SecondMajor = vsn(X,Y-2),
- SecondMinor = SecondMajor ++ ".1.3",
- FirstMajor = vsn(X,Y-1),
- FirstMinor = FirstMajor ++ ".57",
- ThisMajor = vsn(X,Y),
- This =
- case Rest of
- [] ->
- [];
- ["1"] ->
- [ThisMajor];
- _ ->
- ThisMinor = ThisMajor ++ ".1",
- [ThisMajor,ThisMinor]
- end,
- OkVsns = This ++ [FirstMajor, FirstMinor, SecondMajor, SecondMinor],
-
- ThirdMajor = vsn(X,Y-3),
- ThirdMinor = ThirdMajor ++ ".10.12",
- Illegal = ThisMajor ++ ",1",
- Newer1Major = vsn(X,Y+1),
- Newer1Minor = Newer1Major ++ ".1",
- Newer2Major = ThisMajor ++ "1",
- NokVsns = [ThirdMajor,ThirdMinor,
- Illegal,
- Newer1Major,Newer1Minor,
- Newer2Major],
- {OkVsns,NokVsns}.
-
-vsn(X,Y) ->
- integer_to_list(X) ++ "." ++ integer_to_list(Y).
+create_test_vsns() ->
+ This = erlang:system_info(otp_release),
+ FirstMajor = previous_major(This),
+ SecondMajor = previous_major(FirstMajor),
+ ThirdMajor = previous_major(SecondMajor),
+ Ok = stdlib_vsn([FirstMajor,SecondMajor]),
+ Nok0 = stdlib_vsn([ThirdMajor]),
+ Nok = case Ok of
+ [Ok1|_] ->
+ [Ok1 ++ ",1" | Nok0]; % illegal
+ _ ->
+ Nok0
+ end,
+ {Ok,Nok}.
+
+previous_major("17") ->
+ "r16";
+previous_major("r"++Rel) ->
+ "r"++previous_major(Rel);
+previous_major(Rel) ->
+ integer_to_list(list_to_integer(Rel)-1).
+
+stdlib_vsn([R|Rs]) ->
+ case test_server:is_release_available(R) of
+ true ->
+ {ok,N} = test_server:start_node(prevrel,peer,[{erl,[{release,R}]}]),
+ As = rpc:call(N,application,which_applications,[]),
+ {_,_,KV} = lists:keyfind(stdlib,1,As),
+ test_server:stop_node(N),
+ [KV|stdlib_vsn(Rs)];
+ false ->
+ stdlib_vsn(Rs)
+ end;
+stdlib_vsn([]) ->
+ [].
check_appup([Vsn|Vsns],Instrs,Expected) ->
case systools_relup:appup_search_for_version(Vsn, Instrs) of
diff --git a/lib/syntax_tools/src/erl_syntax.erl b/lib/syntax_tools/src/erl_syntax.erl
index 82be9aa489..4f7f9e83ac 100644
--- a/lib/syntax_tools/src/erl_syntax.erl
+++ b/lib/syntax_tools/src/erl_syntax.erl
@@ -512,7 +512,7 @@
%% @see macro/2
%% @see match_expr/2
%% @see module_qualifier/2
-%% @see named_fun_expr/1
+%% @see named_fun_expr/2
%% @see nil/0
%% @see operator/1
%% @see parentheses/1
@@ -5699,7 +5699,7 @@ named_fun_expr_name(Node) ->
%% =====================================================================
%% @doc Returns the list of clause subtrees of a `named_fun_expr' node.
%%
-%% @see named_fun_expr/1
+%% @see named_fun_expr/2
-spec named_fun_expr_clauses(syntaxTree()) -> [syntaxTree()].
@@ -5722,7 +5722,7 @@ named_fun_expr_clauses(Node) ->
%% syntax tree `C' of type `clause' such that
%% `clause_patterns(C)' is a nonempty list.
%%
-%% @see named_fun_expr/1
+%% @see named_fun_expr/2
%% @see named_fun_expr_clauses/1
%% @see clause/3
%% @see clause_patterns/1
diff --git a/lib/syntax_tools/src/erl_tidy.erl b/lib/syntax_tools/src/erl_tidy.erl
index 0c149634f6..7444d8dc67 100644
--- a/lib/syntax_tools/src/erl_tidy.erl
+++ b/lib/syntax_tools/src/erl_tidy.erl
@@ -269,6 +269,13 @@ file(Name) ->
%% is typically most useful if the `verbose' flag is enabled, to
%% generate reports about the program files without affecting
%% them. The default value is `false'.</dd>
+%%
+%% <dt>{stdout, boolean()}</dt>
+%%
+%% <dd>If the value is `true', instead of the file being written
+%% to disk it will be printed to stdout. The default value is
+%% `false'.</dd>
+%%
%% </dl>
%%
%% See the function `module/2' for further options.
@@ -309,9 +316,15 @@ file_2(Name, Opts) ->
true ->
ok;
false ->
- write_module(Tree, Name, Opts1),
- ok
- end.
+ case proplists:get_bool(stdout, Opts1) of
+ true ->
+ print_module(Tree, Opts1),
+ ok;
+ false ->
+ write_module(Tree, Name, Opts1),
+ ok
+ end
+ end.
read_module(Name, Opts) ->
verbose("reading module `~ts'.", [filename(Name)], Opts),
@@ -399,6 +412,10 @@ write_module(Tree, Name, Opts) ->
throw(R)
end.
+print_module(Tree, Opts) ->
+ Printer = proplists:get_value(printer, Opts),
+ io:format(Printer(Tree, Opts)).
+
output(FD, Printer, Tree, Opts) ->
io:put_chars(FD, Printer(Tree, Opts)),
io:nl(FD).
diff --git a/lib/wx/api_gen/gen_util.erl b/lib/wx/api_gen/gen_util.erl
index 2ba1c6e16f..9b08815bf7 100644
--- a/lib/wx/api_gen/gen_util.erl
+++ b/lib/wx/api_gen/gen_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2014. 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
@@ -222,11 +222,12 @@ halt(Reason) ->
erl_copyright() ->
StartYear = start_year(get(current_class)),
+ {CurrentYear,_,_} = erlang:date(),
w("%%~n",[]),
w("%% %CopyrightBegin%~n",[]),
w("%%~n",[]),
- w("%% Copyright Ericsson AB ~p-2013. All Rights Reserved.~n",
- [StartYear]),
+ w("%% Copyright Ericsson AB ~p-~p. All Rights Reserved.~n",
+ [StartYear, CurrentYear]),
w("%%~n",[]),
w("%% The contents of this file are subject to the Erlang Public License,~n",[]),
w("%% Version 1.1, (the \"License\"); you may not use this file except in~n",[]),
@@ -242,10 +243,11 @@ erl_copyright() ->
w("%% %CopyrightEnd%~n",[]).
c_copyright() ->
+ {CurrentYear,_,_} = erlang:date(),
w("/*~n",[]),
w(" * %CopyrightBegin%~n",[]),
w(" *~n",[]),
- w(" * Copyright Ericsson AB 2008-2013. All Rights Reserved.~n",[]),
+ w(" * Copyright Ericsson AB 2008-~p. All Rights Reserved.~n",[CurrentYear]),
w(" *~n",[]),
w(" * The contents of this file are subject to the Erlang Public License,~n",[]),
w(" * Version 1.1, (the \"License\"); you may not use this file except in~n",[]),
diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl
index 6eed0668f6..5ac57e4929 100644
--- a/lib/wx/api_gen/wx_gen_cpp.erl
+++ b/lib/wx/api_gen/wx_gen_cpp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2014. 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
@@ -190,10 +190,14 @@ gen_funcs(Defs) ->
%% w(" case WXE_REMOVE_PORT:~n", []),
%% w(" { destroyMemEnv(Ecmd.port); } break;~n", []),
w(" case DESTROY_OBJECT: {~n"),
- w(" wxObject *This = (wxObject *) getPtr(bp,memenv); "),
- w(" if(This) {"),
- w(" ((WxeApp *) wxTheApp)->clearPtr((void *) This);~n"),
- w(" delete This; }~n } break;~n"),
+ w(" wxObject *This = (wxObject *) getPtr(bp,memenv);~n"),
+ w(" if(This) {~n"),
+ w(" if(recurse_level > 1) {~n"),
+ w(" delayed_delete->Append(Ecmd.Save());~n"),
+ w(" } else {~n"),
+ w(" ((WxeApp *) wxTheApp)->clearPtr((void *) This);~n"),
+ w(" delete This; }~n"),
+ w(" } } break;~n"),
w(" case WXE_REGISTER_OBJECT: {~n"
" registerPid(bp, Ecmd.caller, memenv);~n"
" rt.addAtom(\"ok\");~n"
diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf
index ff680d0655..73c5af43d8 100644
--- a/lib/wx/api_gen/wxapi.conf
+++ b/lib/wx/api_gen/wxapi.conf
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2014. 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
@@ -1883,3 +1883,5 @@
[{event,[wxEVT_TASKBAR_MOVE,wxEVT_TASKBAR_LEFT_DOWN,wxEVT_TASKBAR_LEFT_UP,
wxEVT_TASKBAR_RIGHT_DOWN,wxEVT_TASKBAR_RIGHT_UP,
wxEVT_TASKBAR_LEFT_DCLICK,wxEVT_TASKBAR_RIGHT_DCLICK]}],[]}.
+
+{class, wxInitDialogEvent, wxEvent, [{event,[wxEVT_INIT_DIALOG]}], []}.
diff --git a/lib/wx/c_src/Makefile.in b/lib/wx/c_src/Makefile.in
index 5507a74c14..93a191378f 100644
--- a/lib/wx/c_src/Makefile.in
+++ b/lib/wx/c_src/Makefile.in
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2008-2012. All Rights Reserved.
+# Copyright Ericsson AB 2008-2014. 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
@@ -34,8 +34,9 @@ SO_EXT = @SO_EXT@
OBJC_CC=@OBJC_CC@
OBJC_CFLAGS=@OBJC_CFLAGS@
-GENERAL = wxe_driver wxe_ps_init wxe_impl wxePrintout wxe_return wxe_gl
-GENERAL_H = wxe_driver.h wxe_impl.h wxe_return.h
+GENERAL = wxe_driver wxe_ps_init wxe_main wxe_impl wxe_helpers wxe_callback_impl wxe_return wxe_gl
+GENERAL_H = wxe_callback_impl.h wxe_driver.h wxe_events.h wxe_gl.h \
+ wxe_helpers.h wxe_impl.h wxe_memory.h wxe_return.h
GENERATED_F = wxe_funcs wxe_events wxe_init
GENERATED_H = gen/wxe_macros.h
diff --git a/lib/wx/c_src/gen/wxe_events.cpp b/lib/wx/c_src/gen/wxe_events.cpp
index fb3a065448..a1b4d090b3 100644
--- a/lib/wx/c_src/gen/wxe_events.cpp
+++ b/lib/wx/c_src/gen/wxe_events.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2014. 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
@@ -297,6 +297,7 @@ void initEventTable()
{wxEVT_TASKBAR_RIGHT_UP, 227, "taskbar_right_up"},
{wxEVT_TASKBAR_LEFT_DCLICK, 227, "taskbar_left_dclick"},
{wxEVT_TASKBAR_RIGHT_DCLICK, 227, "taskbar_right_dclick"},
+ {wxEVT_INIT_DIALOG, 228, "init_dialog"},
{-1, 0, }
};
for(int i=0; event_types[i].ev_type != -1; i++) {
@@ -814,6 +815,13 @@ case 227: {// wxTaskBarIconEvent
rt.addTupleCount(2);
break;
}
+case 228: {// wxInitDialogEvent
+ evClass = (char*)"wxInitDialogEvent";
+ rt.addAtom((char*)"wxInitDialog");
+ rt.addAtom(Etype->eName);
+ rt.addTupleCount(2);
+ break;
+}
}
rt.addTupleCount(5);
diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp
index 329af36f4d..82dd414911 100644
--- a/lib/wx/c_src/gen/wxe_funcs.cpp
+++ b/lib/wx/c_src/gen/wxe_funcs.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2014. 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
@@ -45,9 +45,14 @@ void WxeApp::wxe_dispatch(wxeCommand& Ecmd)
switch (Ecmd.op)
{
case DESTROY_OBJECT: {
- wxObject *This = (wxObject *) getPtr(bp,memenv); if(This) { ((WxeApp *) wxTheApp)->clearPtr((void *) This);
- delete This; }
- } break;
+ wxObject *This = (wxObject *) getPtr(bp,memenv);
+ if(This) {
+ if(recurse_level > 1) {
+ delayed_delete->Append(Ecmd.Save());
+ } else {
+ ((WxeApp *) wxTheApp)->clearPtr((void *) This);
+ delete This; }
+ } } break;
case WXE_REGISTER_OBJECT: {
registerPid(bp, Ecmd.caller, memenv);
rt.addAtom("ok");
diff --git a/lib/wx/c_src/wxePrintout.cpp b/lib/wx/c_src/wxe_callback_impl.cpp
index fc8782ba95..8ba2557d82 100644
--- a/lib/wx/c_src/wxePrintout.cpp
+++ b/lib/wx/c_src/wxe_callback_impl.cpp
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2014. 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
@@ -20,9 +20,49 @@
#include <wx/wx.h>
#include "wxe_impl.h"
#include "wxe_return.h"
+#include "wxe_events.h"
+#include "wxe_gl.h"
#include "gen/wxe_macros.h"
#include "gen/wxe_derived_dest.h"
+
+/* ****************************************************************************
+ * CallbackData *
+ * ****************************************************************************/
+
+wxeCallbackData::wxeCallbackData(ErlDrvTermData caller, int req, char *req_type,
+ int funcb, int skip_ev, wxeErlTerm * userData,
+ wxeEvtListener *handler_cb)
+ : wxObject()
+{
+ listener = caller;
+ obj = req;
+ fun_id = funcb;
+ strcpy(class_name, req_type);
+ skip = skip_ev;
+ user_data = userData;
+ handler = handler_cb;
+}
+
+wxeCallbackData::~wxeCallbackData() {
+ // fprintf(stderr, "CBD Deleteing %p %s\r\n", this, class_name); fflush(stderr);
+ if(user_data) {
+ delete user_data;
+ }
+ ptrMap::iterator it;
+ it = ((WxeApp *)wxTheApp)->ptr2ref.find(handler);
+ if(it != ((WxeApp *)wxTheApp)->ptr2ref.end()) {
+ wxeRefData *refd = it->second;
+ wxeReturn rt = wxeReturn(WXE_DRV_PORT, refd->memenv->owner, false);
+ rt.addAtom("wx_delete_cb");
+ rt.addInt(fun_id);
+ rt.addRef(refd->ref, "wxeEvtListener");
+ rt.addRef(obj, class_name);
+ rt.addTupleCount(4);
+ rt.send();
+ }
+}
+
/* *****************************************************************/
/* Special Class impls */
@@ -228,6 +268,35 @@ EwxListCtrl::~EwxListCtrl() {
clear_cb(port, onGetItemColumnImage);
((WxeApp *)wxTheApp)->clearPtr(this);
}
+
+/* ****************************************************************************
+ * wxListCtrlCompare wrapper
+ * ****************************************************************************/
+
+int wxCALLBACK wxEListCtrlCompare(long item1, long item2, long callbackInfoPtr)
+{
+ callbackInfo * cb = (callbackInfo *)callbackInfoPtr;
+ wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(cb->port);
+ wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false);
+ rt.addInt(cb->callbackID);
+ rt.addInt(item1);
+ rt.addInt(item2);
+ rt.endList(2);
+ rt.addAtom("_wx_invoke_cb_");
+ rt.addTupleCount(3);
+ rt.send();
+ handle_event_callback(WXE_DRV_PORT_HANDLE, memenv->owner);
+
+ if(((WxeApp *) wxTheApp)->cb_buff) {
+ int res = * (int*) ((WxeApp *) wxTheApp)->cb_buff;
+ driver_free(((WxeApp *) wxTheApp)->cb_buff);
+ ((WxeApp *) wxTheApp)->cb_buff = NULL;
+ return res;
+ }
+ return 0;
+}
+
+
// tools
void clear_cb(ErlDrvTermData port, int callback)
diff --git a/lib/wx/c_src/wxe_callback_impl.h b/lib/wx/c_src/wxe_callback_impl.h
new file mode 100644
index 0000000000..c7243e23a4
--- /dev/null
+++ b/lib/wx/c_src/wxe_callback_impl.h
@@ -0,0 +1,75 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2014. 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%
+ */
+
+#ifndef _WXE_CALLBACK_IMPL_H
+#define _WXE_CALLBACK_IMPL_H
+
+void pre_callback();
+void handle_event_callback(ErlDrvPort port, ErlDrvTermData process);
+
+class wxEPrintout : public wxPrintout
+{
+ public:
+ wxEPrintout(wxString Title, int onPrintP, int onPrepareP,
+ int onBeginP, int onEndP,
+ int onBeginD, int onEndD,
+ int hasP, int getPageI, ErlDrvTermData Port) :
+ wxPrintout(Title),
+ onPrintPage(onPrintP), onPreparePrinting(onPrepareP),
+ onBeginPrinting(onBeginP), onEndPrinting(onEndP),
+ onBeginDocument(onBeginD), onEndDocument(onEndD), hasPage(hasP), getPageInfo(getPageI),
+ port(Port)
+ { } ;
+
+ ~wxEPrintout();
+
+ bool OnBeginDocument(int startPage, int endPage);
+ void OnEndDocument();
+ void OnBeginPrinting();
+ void OnEndPrinting();
+
+ void OnPreparePrinting();
+
+ bool HasPage(int page);
+ bool OnPrintPage(int page);
+ void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo);
+
+ int onPrintPage;
+ int onPreparePrinting;
+ int onBeginPrinting;
+ int onEndPrinting;
+ int onBeginDocument;
+ int onEndDocument;
+ int hasPage;
+ int getPageInfo;
+
+ ErlDrvTermData port;
+};
+
+void clear_cb(ErlDrvTermData port, int callback);
+
+// Implementation of wxListCtrlCompare
+struct callbackInfo {
+ ErlDrvTermData port;
+ int callbackID;
+};
+
+int wxCALLBACK wxEListCtrlCompare(long item1, long item2, long callbackInfoPtr);
+
+#endif
diff --git a/lib/wx/c_src/wxe_driver.c b/lib/wx/c_src/wxe_driver.c
index 4d3aa577bf..ea52737fa2 100644
--- a/lib/wx/c_src/wxe_driver.c
+++ b/lib/wx/c_src/wxe_driver.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2014. 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
@@ -195,7 +195,7 @@ void wxe_process_died(ErlDrvData handle, ErlDrvMonitor *monitor)
{
/* Callback is active for the dead process */
wxe_data *sd = ((wxe_data *)handle);
- push_command(WXE_CB_RETURN,NULL,0,sd);
+ push_command(WXE_CB_DIED,NULL,0,sd);
/* ErlDrvTermData pid; */
/* pid = driver_get_monitored_process(sd->port_handle, monitor); */
diff --git a/lib/wx/c_src/wxe_driver.h b/lib/wx/c_src/wxe_driver.h
index 0f0143bd4c..e35bbe2118 100644
--- a/lib/wx/c_src/wxe_driver.h
+++ b/lib/wx/c_src/wxe_driver.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2014. 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
@@ -89,6 +89,7 @@ extern char * erl_wx_privdir;
#define WXE_BIN_INCR 11
#define WXE_BIN_DECR 12
#define WXE_INIT_OPENGL 13
+#define WXE_CB_DIED 14
#define OPENGL_START 5000
diff --git a/lib/wx/c_src/wxe_events.h b/lib/wx/c_src/wxe_events.h
index 718e0ad120..22a737d854 100644
--- a/lib/wx/c_src/wxe_events.h
+++ b/lib/wx/c_src/wxe_events.h
@@ -1,20 +1,20 @@
/*
* %CopyrightBegin%
- *
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
- *
+ *
+ * Copyright Ericsson AB 2008-2014. 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%
+ *
+ * %CopyrightEnd%
*/
#ifndef __WXE_EVENT_H__
@@ -22,6 +22,8 @@
#include "wxe_driver.h"
+bool sendevent(wxEvent * event, ErlDrvTermData port);
+
class wxeEtype
{
public:
diff --git a/lib/wx/c_src/wxe_gl.cpp b/lib/wx/c_src/wxe_gl.cpp
index 34904397d3..a9feb23831 100644
--- a/lib/wx/c_src/wxe_gl.cpp
+++ b/lib/wx/c_src/wxe_gl.cpp
@@ -1,20 +1,20 @@
/*
* %CopyrightBegin%
- *
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
- *
+ *
+ * Copyright Ericsson AB 2008-2014. 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%
+ *
+ * %CopyrightEnd%
*/
#include <stdio.h>
@@ -26,8 +26,9 @@
#endif
#include "wxe_impl.h"
#include "wxe_return.h"
+#include "wxe_gl.h"
-/* ****************************************************************************
+/* ****************************************************************************
* Opengl context management *
* ****************************************************************************/
@@ -138,7 +139,7 @@ void gl_dispatch(int op, char *bp,ErlDrvTermData caller,WXEBinRef *bins[]){
else {
ErlDrvTermData rt[] = // Error msg
{ERL_DRV_ATOM, driver_mk_atom((char *) "_egl_error_"),
- ERL_DRV_INT, op,
+ ERL_DRV_INT, (ErlDrvTermData) op,
ERL_DRV_ATOM, driver_mk_atom((char *) "no_gl_context"),
ERL_DRV_TUPLE,3};
erl_drv_send_term(WXE_DRV_PORT,caller,rt,8);
diff --git a/lib/wx/c_src/wxe_gl.h b/lib/wx/c_src/wxe_gl.h
index 1b556ff4ec..dc117bf610 100644
--- a/lib/wx/c_src/wxe_gl.h
+++ b/lib/wx/c_src/wxe_gl.h
@@ -1,22 +1,35 @@
/*
* %CopyrightBegin%
- *
- * Copyright Ericsson AB 2008-2010. All Rights Reserved.
- *
+ *
+ * Copyright Ericsson AB 2008-2014. 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%
+ *
+ * %CopyrightEnd%
*/
+#ifndef _WXE_GL_H
+#define _WXE_GL_H
+
#include "egl_impl.h"
+#include "wxe_return.h"
+void activateGL(ErlDrvTermData caller);
+void setActiveGL(ErlDrvTermData caller, wxGLCanvas *canvas);
+void deleteActiveGL(wxGLCanvas *canvas);
void wxe_initOpenGL(wxeReturn, char*);
+void gl_dispatch(int op, char *bp, ErlDrvTermData caller, WXEBinRef *bins[]);
+
+WX_DECLARE_HASH_MAP(ErlDrvTermData, wxGLCanvas*, wxIntegerHash, wxIntegerEqual, wxeGLC);
+extern wxeGLC glc;
+
+#endif
diff --git a/lib/wx/c_src/wxe_helpers.cpp b/lib/wx/c_src/wxe_helpers.cpp
new file mode 100644
index 0000000000..15d75080d9
--- /dev/null
+++ b/lib/wx/c_src/wxe_helpers.cpp
@@ -0,0 +1,95 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2014. 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 <wx/wx.h>
+#include "wxe_impl.h"
+
+/* ****************************************************************************
+ * Erlang Commands
+ * ****************************************************************************/
+
+wxeCommand::wxeCommand(int fc,char * cbuf,int buflen, wxe_data *sd)
+ : wxObject()
+{
+ WXEBinRef *temp, *start, *prev;
+ int n = 0;
+ ref_count = 1;
+ caller = driver_caller(sd->port_handle);
+ port = sd->port;
+ op = fc;
+ len = buflen;
+ bin[0] = NULL;
+ bin[1] = NULL;
+ bin[2] = NULL;
+
+ if(cbuf) {
+ buffer = (char *) driver_alloc(len);
+ memcpy((void *) buffer, (void *) cbuf, len);;
+
+ temp = sd->bin;
+
+ prev = NULL;
+ start = temp;
+
+ while(temp) {
+ if(caller == temp->from) {
+ bin[n++] = temp;
+ if(prev) {
+ prev->next = temp->next;
+ } else {
+ start = temp->next;
+ }
+ temp = temp->next;
+ } else {
+ prev = temp;
+ temp = temp->next;
+ }
+ }
+ sd->bin = start;
+ } else { // No-op only PING currently
+ buffer = NULL;
+ }
+}
+
+wxeCommand::~wxeCommand() {
+ int n = 0;
+ if(buffer) {
+ while(bin[n]) {
+ if(bin[n]->bin)
+ driver_free_binary(bin[n]->bin);
+ driver_free(bin[n++]);
+ }
+ driver_free(buffer);
+ }
+}
+
+/* ****************************************************************************
+ * TreeItemData
+ * ****************************************************************************/
+
+wxETreeItemData::wxETreeItemData(int sz, char * data) {
+ size = sz;
+ bin = (char *) driver_alloc(sz);
+ memcpy(bin, data, sz);
+}
+
+wxETreeItemData::~wxETreeItemData()
+{
+ driver_free(bin);
+}
diff --git a/lib/wx/c_src/wxe_helpers.h b/lib/wx/c_src/wxe_helpers.h
new file mode 100644
index 0000000000..659bc666c6
--- /dev/null
+++ b/lib/wx/c_src/wxe_helpers.h
@@ -0,0 +1,122 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2014. 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%
+ */
+
+#ifndef _WXE_HELPER_H
+#define _WXE_HELPER_H
+
+DECLARE_EVENT_TYPE(wxeEVT_META_COMMAND, -1)
+
+class wxeMetaCommand : public wxEvent
+{
+ public:
+ wxeMetaCommand(wxe_data *sd, int EvId)
+ : wxEvent(EvId, wxeEVT_META_COMMAND)
+ { caller = driver_caller(sd->port_handle); port = sd->port; pdl = sd->pdl; } ;
+ wxeMetaCommand(const wxeMetaCommand& event)
+ : wxEvent(event)
+ { caller = event.caller; port = event.port; pdl = event.pdl; };
+ virtual ~wxeMetaCommand() {};
+ virtual wxEvent *Clone() const { return new wxeMetaCommand(*this); }
+
+ ErlDrvTermData caller;
+ ErlDrvTermData port;
+ ErlDrvPDL pdl;
+};
+
+class wxeCommand : public wxObject
+{
+ public:
+ wxeCommand(int fc,char * cbuf,int buflen, wxe_data *);
+ virtual ~wxeCommand(); // Use Delete()
+
+ wxeCommand * Save() {ref_count++; return this; };
+ void Delete() {if(--ref_count < 1) delete this;};
+
+ ErlDrvTermData caller;
+ ErlDrvTermData port;
+ WXEBinRef * bin[3];
+ char * buffer;
+ int len;
+ int op;
+ int ref_count;
+};
+
+class intListElement {
+ public:
+ intListElement(int Element) {car = Element; cdr = NULL;};
+ intListElement(int Element, intListElement *list)
+ {car = Element; cdr = list;};
+ int car;
+ intListElement *cdr;
+};
+
+class intList {
+ public:
+ intList() {list = NULL;};
+ ~intList() {
+ intListElement *head = list;
+ while(head) {
+ intListElement *tail=head->cdr;
+ delete head;
+ head = tail;
+ } };
+ bool IsEmpty() {return list == NULL;};
+ void Append(int Element) { list = new intListElement(Element, list); };
+ int Pop() {
+ intListElement *temp = list;
+ int res = list->car;
+ list = temp->cdr;
+ delete temp;
+ return res;
+ }
+ intListElement *list;
+};
+
+class wxe_badarg
+{
+ public:
+ wxe_badarg(int Ref) : ref(Ref) { } ;
+ int ref;
+};
+
+class wxeErlTerm : public wxClientData
+{
+ public:
+ wxeErlTerm(WXEBinRef * data)
+ {
+ size = data->size;
+ bin = (char *) driver_alloc(size);
+ memcpy(bin, data->base, size);
+ } ;
+ ~wxeErlTerm() { driver_free(bin); };
+ char * bin;
+ int size;
+};
+
+class wxETreeItemData : public wxTreeItemData
+{
+ public:
+ wxETreeItemData(int sz, char * data);
+ ~wxETreeItemData();
+
+ int size;
+ char * bin;
+};
+
+#endif
diff --git a/lib/wx/c_src/wxe_impl.cpp b/lib/wx/c_src/wxe_impl.cpp
index cc9bcc9957..5964ccfd00 100644
--- a/lib/wx/c_src/wxe_impl.cpp
+++ b/lib/wx/c_src/wxe_impl.cpp
@@ -23,10 +23,6 @@
#include <wx/wx.h>
-#if defined(_WIN32)
-#include <wx/msw/private.h> // for wxSetInstance
-#endif
-
// Avoid including these in dcbuffer below
#include "wx/dcmemory.h"
#include "wx/dcclient.h"
@@ -34,12 +30,12 @@
// Ok ugly but needed for wxBufferedDC crash workaround
#define private public
#include <wx/dcbuffer.h>
-
#undef private
#include "wxe_impl.h"
#include "wxe_events.h"
#include "wxe_return.h"
+#include "wxe_gl.h"
IMPLEMENT_APP_NO_MAIN(WxeApp)
@@ -47,120 +43,21 @@ DECLARE_APP(WxeApp)
DEFINE_EVENT_TYPE(wxeEVT_META_COMMAND)
-#define WXE_NOT_INITIATED 0
-#define WXE_INITIATED 1
-#define WXE_EXITED 2
-#define WXE_ERROR -1
-
#define WXE_NORMAL 0
#define WXE_CALLBACK 1
#define WXE_STORED 2
-ErlDrvTid wxe_thread;
-
-ErlDrvMutex *wxe_status_m;
-ErlDrvCond *wxe_status_c;
-
-ErlDrvMutex * wxe_batch_locker_m;
-ErlDrvCond * wxe_batch_locker_c;
-
-static int wxe_status = WXE_NOT_INITIATED;
+// Globals initiated in wxe_init.cpp
+extern ErlDrvMutex *wxe_status_m;
+extern ErlDrvCond *wxe_status_c;
+extern ErlDrvMutex * wxe_batch_locker_m;
+extern ErlDrvCond * wxe_batch_locker_c;
+extern ErlDrvTermData init_caller;
+extern int wxe_status;
wxList * wxe_batch = NULL;
wxList * wxe_batch_cb_saved = NULL;
-
-ErlDrvTermData wxe_batch_caller = 0;
-ErlDrvTermData init_caller = 0;
-
-// extern opengl
-void gl_dispatch(int op, char *bp, ErlDrvTermData caller, WXEBinRef *bins[]);
-
-
-// Until fixed in emulator
-#ifndef _WIN32
-extern "C" {
-extern void erts_thread_disable_fpe(void);
-}
-#endif
-
-#if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__)
-#define __DARWIN__ 1
-#endif
-
-#ifdef __DARWIN__
-extern "C" {
- int erl_drv_stolen_main_thread_join(ErlDrvTid tid, void **respp);
- int erl_drv_steal_main_thread(char *name,
- ErlDrvTid *dtid,
- void* (*func)(void*),
- void* arg,
- ErlDrvThreadOpts *opts);
-}
-#endif
-
-void *wxe_main_loop(void * );
-
-/* ************************************************************
- * START AND STOP of driver thread
- * ************************************************************/
-
-int load_native_gui()
-{
- return 1;
-}
-
-int start_native_gui(wxe_data *sd)
-{
- int res;
- wxe_status_m = erl_drv_mutex_create((char *) "wxe_status_m");
- wxe_status_c = erl_drv_cond_create((char *)"wxe_status_c");
-
- wxe_batch_locker_m = erl_drv_mutex_create((char *)"wxe_batch_locker_m");
- wxe_batch_locker_c = erl_drv_cond_create((char *)"wxe_batch_locker_c");
- init_caller = driver_connected(sd->port_handle);
-
-#ifdef __DARWIN__
- res = erl_drv_steal_main_thread((char *)"wxwidgets",
- &wxe_thread,wxe_main_loop,(void *) sd->pdl,NULL);
-#else
- res = erl_drv_thread_create((char *)"wxwidgets",
- &wxe_thread,wxe_main_loop,(void *) sd->pdl,NULL);
-#endif
- if(res == 0) {
- erl_drv_mutex_lock(wxe_status_m);
- for(;wxe_status == WXE_NOT_INITIATED;) {
- erl_drv_cond_wait(wxe_status_c, wxe_status_m);
- }
- erl_drv_mutex_unlock(wxe_status_m);
- return wxe_status;
- } else {
- wxString msg;
- msg.Printf(wxT("Erlang failed to create wxe-thread %d\r\n"), res);
- send_msg("error", &msg);
- return -1;
- }
-}
-
-void stop_native_gui(wxe_data *sd)
-{
- if(wxe_status == WXE_INITIATED) {
- meta_command(WXE_SHUTDOWN, sd);
- }
-#ifdef __DARWIN__
- erl_drv_stolen_main_thread_join(wxe_thread, NULL);
-#else
- erl_drv_thread_join(wxe_thread, NULL);
-#endif
- erl_drv_mutex_destroy(wxe_status_m);
- erl_drv_cond_destroy(wxe_status_c);
- erl_drv_mutex_destroy(wxe_batch_locker_m);
- erl_drv_cond_destroy(wxe_batch_locker_c);
-}
-
-void unload_native_gui()
-{
-
-}
+int wxe_batch_caller = 0; // inside batch if larger than 0
/* ************************************************************
* Commands from erlang
@@ -169,7 +66,8 @@ void unload_native_gui()
void push_command(int op,char * buf,int len, wxe_data *sd)
{
- // fprintf(stderr, "Op %d %d\r\n", op, (int) driver_caller(sd->port_handle)),fflush(stderr);
+ /* fprintf(stderr, "Op %d %d [%ld] %d\r\n", op, (int) driver_caller(sd->port_handle),
+ wxe_batch->size(), wxe_batch_caller),fflush(stderr); */
wxeCommand *Cmd = new wxeCommand(op, buf, len, sd);
erl_drv_mutex_lock(wxe_batch_locker_m);
wxe_batch->Append(Cmd);
@@ -206,60 +104,19 @@ void meta_command(int what, wxe_data *sd) {
}
}
-/* ************************************************************
- * wxWidgets Thread
- * ************************************************************/
-
-void *wxe_main_loop(void *vpdl)
-{
- int result;
- int argc = 1;
- char * temp = (char *) "Erlang";
- char * argv[] = {temp,NULL};
- ErlDrvPDL pdl = (ErlDrvPDL) vpdl;
-
- driver_pdl_inc_refc(pdl);
-
- // Disable floating point execption if they are on.
- // This should be done in emulator but it's not in yet.
-#ifndef _WIN32
- erts_thread_disable_fpe();
-#else
- // Setup that wxWidgets should look for cursors and icons in
- // this dll and not in werl.exe (which is the default)
- HMODULE WXEHandle = GetModuleHandle(_T("wxe_driver"));
- wxSetInstance((HINSTANCE) WXEHandle);
-#endif
-
- wxe_ps_init();
- result = wxEntry(argc, argv);
- // fprintf(stderr, "WXWidgets quits main loop %d \r\n", result);
- if(result >= 0 && wxe_status == WXE_INITIATED) {
- /* We are done try to make a clean exit */
- wxe_status = WXE_EXITED;
- driver_pdl_dec_refc(pdl);
-#ifndef __DARWIN__
- erl_drv_thread_exit(NULL);
-#endif
- return NULL;
- } else {
- erl_drv_mutex_lock(wxe_status_m);
- wxe_status = WXE_ERROR;
- erl_drv_cond_signal(wxe_status_c);
- erl_drv_mutex_unlock(wxe_status_m);
- driver_pdl_dec_refc(pdl);
- return NULL;
- }
-}
-
-void WxeApp::dummy_close(wxEvent& Ev) {
- // fprintf(stderr, "Dummy Close invoked\r\n");
- // wxMac really wants a top level window which command-q quits if there are no
- // windows open, and this will kill the erlang, override default handling
+void send_msg(const char * type, wxString * msg) {
+ wxeReturn rt = wxeReturn(WXE_DRV_PORT, init_caller);
+ rt.addAtom((char *) "wxe_driver");
+ rt.addAtom((char *) type);
+ rt.add(msg);
+ rt.addTupleCount(3);
+ rt.send();
}
+/* ************************************************************
+ * Init WxeApp the application emulator
+ * ************************************************************/
-// Init wx-widgets thread
bool WxeApp::OnInit()
{
@@ -267,6 +124,9 @@ bool WxeApp::OnInit()
wxe_batch = new wxList;
wxe_batch_cb_saved = new wxList;
cb_buff = NULL;
+ recurse_level = 0;
+ delayed_cleanup = new wxList;
+ delayed_delete = new wxList;
wxe_ps_init2();
// wxIdleEvent::SetMode(wxIDLE_PROCESS_SPECIFIED); // Hmm printpreview doesn't work in 2.9 with this
@@ -304,13 +164,16 @@ void WxeApp::shutdown(wxeMetaCommand& Ecmd) {
ExitMainLoop();
}
-void send_msg(const char * type, wxString * msg) {
- wxeReturn rt = wxeReturn(WXE_DRV_PORT, init_caller);
- rt.addAtom((char *) "wxe_driver");
- rt.addAtom((char *) type);
- rt.add(msg);
- rt.addTupleCount(3);
- rt.send();
+void WxeApp::dummy_close(wxEvent& Ev) {
+ // fprintf(stderr, "Dummy Close invoked\r\n");
+ // wxMac really wants a top level window which command-q quits if there are no
+ // windows open, and this will kill the erlang, override default handling
+}
+
+// Called by wx thread
+void WxeApp::idle(wxIdleEvent& event) {
+ event.Skip(true);
+ dispatch_cmds();
}
/* ************************************************************
@@ -327,29 +190,51 @@ void handle_event_callback(ErlDrvPort port, ErlDrvTermData process)
{
WxeApp * app = (WxeApp *) wxTheApp;
ErlDrvMonitor monitor;
- driver_monitor_process(port, process, &monitor);
- // Should we be able to handle commands when recursing? probably
- erl_drv_mutex_lock(wxe_batch_locker_m);
- //fprintf(stderr, "\r\nCB EV Start %lu \r\n", process);fflush(stderr);
- app->dispatch_cb(wxe_batch, wxe_batch_cb_saved, process);
- //fprintf(stderr, "CB EV done %lu \r\n", process);fflush(stderr);
- wxe_batch_caller = 0;
- erl_drv_mutex_unlock(wxe_batch_locker_m);
- driver_demonitor_process(port, &monitor);
-}
-
-// Called by wx thread
-void WxeApp::idle(wxIdleEvent& event) {
- event.Skip(true);
- dispatch_cmds();
+ // Is thread safe if pdl have been incremented
+ if(driver_monitor_process(port, process, &monitor) == 0) {
+ // Should we be able to handle commands when recursing? probably
+ erl_drv_mutex_lock(wxe_batch_locker_m);
+ //fprintf(stderr, "\r\nCB EV Start %lu \r\n", process);fflush(stderr);
+ app->recurse_level++;
+ app->dispatch_cb(wxe_batch, wxe_batch_cb_saved, process);
+ app->recurse_level--;
+ //fprintf(stderr, "CB EV done %lu \r\n", process);fflush(stderr);
+ wxe_batch_caller = 0;
+ erl_drv_mutex_unlock(wxe_batch_locker_m);
+ driver_demonitor_process(port, &monitor);
+ }
}
-void WxeApp::dispatch_cmds() {
+void WxeApp::dispatch_cmds()
+{
erl_drv_mutex_lock(wxe_batch_locker_m);
+ recurse_level++;
int level = dispatch(wxe_batch_cb_saved, 0, WXE_STORED);
dispatch(wxe_batch, level, WXE_NORMAL);
+ recurse_level--;
wxe_batch_caller = 0;
erl_drv_mutex_unlock(wxe_batch_locker_m);
+ // Cleanup old memenv's and deleted objects
+ if(recurse_level == 0) {
+ if(delayed_delete->size() > 0)
+ for( wxList::compatibility_iterator node = delayed_delete->GetFirst();
+ node;
+ node = delayed_delete->GetFirst()) {
+ wxeCommand *event = (wxeCommand *)node->GetData();
+ delayed_delete->Erase(node);
+ wxe_dispatch(*event);
+ event->Delete();
+ }
+ if(delayed_cleanup->size() > 0)
+ for( wxList::compatibility_iterator node = delayed_cleanup->GetFirst();
+ node;
+ node = delayed_cleanup->GetFirst()) {
+ wxeMetaCommand *event = (wxeMetaCommand *)node->GetData();
+ delayed_cleanup->Erase(node);
+ destroyMemEnv(*event);
+ delete event;
+ }
+ }
}
// Should have erl_drv_mutex_lock(wxe_batch_locker_m);
@@ -401,7 +286,7 @@ int WxeApp::dispatch(wxList * batch, int blevel, int list_type)
erl_drv_mutex_lock(wxe_batch_locker_m);
break;
}
- delete event;
+ event->Delete();
}
} else {
if((list_type == WXE_STORED) || (blevel <= 0 && list_type == WXE_NORMAL)) {
@@ -433,6 +318,7 @@ void WxeApp::dispatch_cb(wxList * batch, wxList * temp, ErlDrvTermData process)
// fprintf(stderr, " Ev %d %lu\r\n", event->op, event->caller);
if(event->caller == process || // Callbacks from CB process only
event->op == WXE_CB_START || // Event callback start change process
+ event->op == WXE_CB_DIED || // Event callback process died
// Allow connect_cb during CB i.e. msg from wxe_server.
(memenv && event->caller == memenv->owner))
{
@@ -445,7 +331,8 @@ void WxeApp::dispatch_cb(wxList * batch, wxList * temp, ErlDrvTermData process)
if(event->len > 0) {
cb_buff = (char *) driver_alloc(event->len);
memcpy(cb_buff, event->buffer, event->len);
- }
+ } // continue
+ case WXE_CB_DIED:
callback_returned = 1;
return;
case WXE_CB_START:
@@ -480,7 +367,7 @@ void WxeApp::dispatch_cb(wxList * batch, wxList * temp, ErlDrvTermData process)
return;
break;
}
- delete event;
+ event->Delete();
} else {
// fprintf(stderr, " save %d \r\n", event->op);
temp->Append(event);
@@ -517,7 +404,8 @@ void WxeApp::newMemEnv(wxeMetaCommand& Ecmd) {
erl_drv_send_term(WXE_DRV_PORT,Ecmd.caller,rt,2);
}
-void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd) {
+void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd)
+{
// Clear incoming cmd queue first
// dispatch_cmds();
wxWindow *parent = NULL;
@@ -536,26 +424,33 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd) {
ptrMap::iterator it = ptr2ref.find(ptr);
if(it != ptr2ref.end()) {
wxeRefData *refd = it->second;
- if(refd->alloc_in_erl) {
- if(refd->type == 2) {
- wxDialog *win = (wxDialog *) ptr;
- if(win->IsModal()) {
- win->EndModal(-1);
- }
- parent = win->GetParent();
- if(parent) {
- ptrMap::iterator parentRef = ptr2ref.find(parent);
- if(parentRef == ptr2ref.end()) {
- // The parent is already dead delete the parent ref
- win->SetParent(NULL);
- }
+ if(refd->alloc_in_erl && refd->type == 2) {
+ wxDialog *win = (wxDialog *) ptr;
+ if(win->IsModal()) {
+ win->EndModal(-1);
+ }
+ parent = win->GetParent();
+ if(parent) {
+ ptrMap::iterator parentRef = ptr2ref.find(parent);
+ if(parentRef == ptr2ref.end()) {
+ // The parent is already dead delete the parent ref
+ win->SetParent(NULL);
}
+ }
+ if(recurse_level > 0) {
+ // Delay delete until we are out of dispatch*
+ delayed_cleanup->Append(Ecmd.Clone());
+ } else {
delete win;
}
}
}
}
}
+
+ if(recurse_level > 0)
+ return;
+
// First pass, delete all top parents/windows of all linked objects
// fprintf(stderr, "close port %x\r\n", Ecmd.port);fflush(stderr);
@@ -780,161 +675,3 @@ void WxeApp::registerPid(char * bp, ErlDrvTermData pid, wxeMemEnv * memenv) {
};
throw wxe_badarg(index);
}
-
-
-/* ************************************************************
- * Misc utility classes
- * ************************************************************/
-
-/* ****************************************************************************
- * Memory handling
- * ****************************************************************************/
-
-wxeMemEnv::wxeMemEnv() {
- ref2ptr = (void **) driver_alloc(128*sizeof(void *));
- ref2ptr[0] = NULL;
- next = 1;
- max = 128;
-}
-
-wxeMemEnv::~wxeMemEnv() {
- driver_free(ref2ptr);
-}
-
-/* ****************************************************************************
- * Erlang Commands (don't need to be derived of wxEvent anymore should
- * be re-written to own class struct)
- * ****************************************************************************/
-
-wxeCommand::wxeCommand(int fc,char * cbuf,int buflen, wxe_data *sd)
- : wxObject()
-{
- WXEBinRef *temp, *start, *prev;
- int n = 0;
- caller = driver_caller(sd->port_handle);
- port = sd->port;
- op = fc;
- len = buflen;
- bin[0] = NULL;
- bin[1] = NULL;
- bin[2] = NULL;
-
- if(cbuf) {
- buffer = (char *) driver_alloc(len);
- memcpy((void *) buffer, (void *) cbuf, len);;
-
- temp = sd->bin;
-
- prev = NULL;
- start = temp;
-
- while(temp) {
- if(caller == temp->from) {
- bin[n++] = temp;
- if(prev) {
- prev->next = temp->next;
- } else {
- start = temp->next;
- }
- temp = temp->next;
- } else {
- prev = temp;
- temp = temp->next;
- }
- }
- sd->bin = start;
- } else { // No-op only PING currently
- buffer = NULL;
- }
-}
-
-wxeCommand::~wxeCommand() {
- int n = 0;
- if(buffer) {
- while(bin[n]) {
- if(bin[n]->bin)
- driver_free_binary(bin[n]->bin);
- driver_free(bin[n++]);
- }
- driver_free(buffer);
- }
-}
-
-/* ****************************************************************************
- * TreeItemData
- * ****************************************************************************/
-
-wxETreeItemData::wxETreeItemData(int sz, char * data) {
- size = sz;
- bin = (char *) driver_alloc(sz);
- memcpy(bin, data, sz);
-}
-
-wxETreeItemData::~wxETreeItemData()
-{
- driver_free(bin);
-}
-
-/* ****************************************************************************
- * CallbackData *
- * ****************************************************************************/
-
-wxeCallbackData::wxeCallbackData(ErlDrvTermData caller, int req, char *req_type,
- int funcb, int skip_ev, wxeErlTerm * userData,
- wxeEvtListener *handler_cb)
- : wxObject()
-{
- listener = caller;
- obj = req;
- fun_id = funcb;
- strcpy(class_name, req_type);
- skip = skip_ev;
- user_data = userData;
- handler = handler_cb;
-}
-
-wxeCallbackData::~wxeCallbackData() {
- // fprintf(stderr, "CBD Deleteing %p %s\r\n", this, class_name); fflush(stderr);
- if(user_data) {
- delete user_data;
- }
- ptrMap::iterator it;
- it = ((WxeApp *)wxTheApp)->ptr2ref.find(handler);
- if(it != ((WxeApp *)wxTheApp)->ptr2ref.end()) {
- wxeRefData *refd = it->second;
- wxeReturn rt = wxeReturn(WXE_DRV_PORT, refd->memenv->owner, false);
- rt.addAtom("wx_delete_cb");
- rt.addInt(fun_id);
- rt.addRef(refd->ref, "wxeEvtListener");
- rt.addRef(obj, class_name);
- rt.addTupleCount(4);
- rt.send();
- }
-}
-
-/* ****************************************************************************
- * wxListCtrlCompare wrapper
- * ****************************************************************************/
-
-int wxCALLBACK wxEListCtrlCompare(long item1, long item2, long callbackInfoPtr)
-{
- callbackInfo * cb = (callbackInfo *)callbackInfoPtr;
- wxeMemEnv * memenv = ((WxeApp *) wxTheApp)->getMemEnv(cb->port);
- wxeReturn rt = wxeReturn(WXE_DRV_PORT, memenv->owner, false);
- rt.addInt(cb->callbackID);
- rt.addInt(item1);
- rt.addInt(item2);
- rt.endList(2);
- rt.addAtom("_wx_invoke_cb_");
- rt.addTupleCount(3);
- rt.send();
- handle_event_callback(WXE_DRV_PORT_HANDLE, memenv->owner);
-
- if(((WxeApp *) wxTheApp)->cb_buff) {
- int res = * (int*) ((WxeApp *) wxTheApp)->cb_buff;
- driver_free(((WxeApp *) wxTheApp)->cb_buff);
- ((WxeApp *) wxTheApp)->cb_buff = NULL;
- return res;
- }
- return 0;
-}
diff --git a/lib/wx/c_src/wxe_impl.h b/lib/wx/c_src/wxe_impl.h
index a3c57e2598..bb54961edd 100644
--- a/lib/wx/c_src/wxe_impl.h
+++ b/lib/wx/c_src/wxe_impl.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2008-2013. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2014. 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
@@ -14,12 +14,17 @@
* the License for the specific language governing rights and limitations
* under the License.
*
- * %CopyrightEnd%
+ * %CopyrightEnd%
*/
#ifndef _WXE_IMPL_H
#define _WXE_IMPL_H
+#if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__)
+#define __DARWIN__ 1
+#endif
+
+
#include <wx/glcanvas.h>
#include <wx/treectrl.h>
#include <wx/print.h>
@@ -27,119 +32,16 @@ extern "C" {
#include "wxe_driver.h"
}
-DECLARE_EVENT_TYPE(wxeEVT_META_COMMAND, -1)
-
-class wxeMetaCommand : public wxEvent
-{
- public:
- wxeMetaCommand(wxe_data *sd, int EvId)
- : wxEvent(EvId, wxeEVT_META_COMMAND)
- { caller = driver_caller(sd->port_handle); port = sd->port; pdl = sd->pdl; } ;
- wxeMetaCommand(const wxeMetaCommand& event)
- : wxEvent(event)
- { caller = event.caller; port = event.port; pdl = event.pdl; };
- virtual ~wxeMetaCommand() {};
- virtual wxEvent *Clone() const { return new wxeMetaCommand(*this); }
-
- ErlDrvTermData caller;
- ErlDrvTermData port;
- ErlDrvPDL pdl;
-};
-
-class wxeCommand : public wxObject
-{
- public:
- wxeCommand(int fc,char * cbuf,int buflen, wxe_data *);
- virtual ~wxeCommand();
-
- ErlDrvTermData caller;
- ErlDrvTermData port;
- WXEBinRef * bin[3];
- char * buffer;
- int len;
- int op;
-};
-
-#define WXE_EVENT_PTR 0
-#define WXE_OBJECT_PTR 1
-
-class intListElement {
-public:
- intListElement(int Element) {car = Element; cdr = NULL;};
- intListElement(int Element, intListElement *list)
- {car = Element; cdr = list;};
- int car;
- intListElement *cdr;
-};
-
-class intList {
-public:
- intList() {list = NULL;};
- bool IsEmpty() {return list == NULL;};
- void Append(int Element) { list = new intListElement(Element, list); };
- int Pop() {
- intListElement *temp = list;
- int res = list->car;
- list = temp->cdr;
- delete temp;
- return res;
- }
- intListElement *list;
-};
-
-class wxe_badarg
-{
-public:
- wxe_badarg(int Ref) : ref(Ref) { } ;
- int ref;
-};
-
-class wxeErlTerm : public wxClientData
-{
- public:
- wxeErlTerm(WXEBinRef * data)
- {
- size = data->size;
- bin = (char *) driver_alloc(size);
- memcpy(bin, data->base, size);
- } ;
- ~wxeErlTerm() { driver_free(bin); };
- char * bin;
- int size;
-};
-
-class wxeMemEnv
-{
-public:
- wxeMemEnv();
- int next;
- int max;
- void ** ref2ptr;
- intList free;
- ~wxeMemEnv();
- ErlDrvTermData owner;
-};
-
-class wxeRefData {
- public:
- wxeRefData(unsigned int dref, int ttype, int is_new, wxeMemEnv *menv) :
- ref(dref), type(ttype), alloc_in_erl(is_new), memenv(menv), pid(-1) { } ;
- int ref;
- int type;
- // 0 = wxWindow subclasses, 1 = wxObject subclasses
- // 2 = wxDialog subclasses, 3 = allocated wxObjects but not returned from new
- // > 3 classes which lack virtual destr, or are supposed to be allocated on
- // the stack
- bool alloc_in_erl;
- wxeMemEnv *memenv;
- ErlDrvTermData pid;
-};
-
-WX_DECLARE_HASH_MAP(ErlDrvTermData, wxGLCanvas*, wxIntegerHash, wxIntegerEqual, wxeGLC);
-WX_DECLARE_HASH_MAP(ErlDrvTermData, wxeMemEnv*, wxIntegerHash, wxIntegerEqual, wxeMemMap);
+#include "wxe_helpers.h"
+#include "wxe_callback_impl.h"
+#include "wxe_memory.h"
+#define WXE_NOT_INITIATED 0
+#define WXE_INITIATED 1
+#define WXE_EXITED 2
+#define WXE_ERROR -1
-WX_DECLARE_VOIDPTR_HASH_MAP(wxeRefData *, ptrMap);
+void send_msg(const char *, wxString *); // For debugging and error msgs
class WxeApp : public wxApp
{
@@ -158,101 +60,31 @@ public:
void dummy_close(wxEvent& Ev);
bool sendevent(wxEvent *event);
- // MemEnv handling
+ // MemEnv handling
void newMemEnv(wxeMetaCommand& event);
void destroyMemEnv(wxeMetaCommand& event);
wxeMemEnv * getMemEnv(ErlDrvTermData port);
-
+
int newPtr(void * ptr, int type, wxeMemEnv *memenv);
int getRef(void * ptr, wxeMemEnv *memenv);
- void * getPtr(char * bp, wxeMemEnv *memenv);
+ void * getPtr(char * bp, wxeMemEnv *memenv);
void clearPtr(void *ptr);
void registerPid(char *ptr, ErlDrvTermData pid, wxeMemEnv *memenv);
- void init_nonconsts(wxeMemEnv *memenv, ErlDrvTermData caller);
-
+ void init_nonconsts(wxeMemEnv *memenv, ErlDrvTermData caller);
+
// Code found in gen/wxe_derived_dest.h
void delete_object(void *ptr, wxeRefData *refd);
-
+
wxeMemMap refmap;
ptrMap ptr2ref;
wxeMemEnv * global_me;
-
+
+ int recurse_level;
+ wxList * delayed_cleanup;
+ wxList * delayed_delete;
// Temp container for callbacks
char *cb_buff;
int cb_len;
};
-class wxETreeItemData : public wxTreeItemData
-{
- public:
- wxETreeItemData(int sz, char * data);
-
- ~wxETreeItemData();
-
- int size;
- char * bin;
-};
-
-bool sendevent(wxEvent * event, ErlDrvTermData port);
-void pre_callback();
-void handle_event_callback(ErlDrvPort port, ErlDrvTermData process);
-
-void activateGL(ErlDrvTermData caller);
-void setActiveGL(ErlDrvTermData caller, wxGLCanvas *canvas);
-void deleteActiveGL(wxGLCanvas *canvas);
-
-void send_msg(const char *, wxString *); // For debugging and error msgs
-
-extern wxeGLC glc;
-
-class wxEPrintout : public wxPrintout
-{
- public:
- wxEPrintout(wxString Title, int onPrintP, int onPrepareP,
- int onBeginP, int onEndP,
- int onBeginD, int onEndD,
- int hasP, int getPageI, ErlDrvTermData Port) :
- wxPrintout(Title),
- onPrintPage(onPrintP), onPreparePrinting(onPrepareP),
- onBeginPrinting(onBeginP), onEndPrinting(onEndP),
- onBeginDocument(onBeginD), onEndDocument(onEndD), hasPage(hasP), getPageInfo(getPageI),
- port(Port)
- { } ;
-
- ~wxEPrintout();
-
- bool OnBeginDocument(int startPage, int endPage);
- void OnEndDocument();
- void OnBeginPrinting();
- void OnEndPrinting();
-
- void OnPreparePrinting();
-
- bool HasPage(int page);
- bool OnPrintPage(int page);
- void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo);
-
- int onPrintPage;
- int onPreparePrinting;
- int onBeginPrinting;
- int onEndPrinting;
- int onBeginDocument;
- int onEndDocument;
- int hasPage;
- int getPageInfo;
-
- ErlDrvTermData port;
-};
-
-void clear_cb(ErlDrvTermData port, int callback);
-
-
-// Implementation of wxListCtrlCompare
-struct callbackInfo {
- ErlDrvTermData port;
- int callbackID;
-};
-
-int wxCALLBACK wxEListCtrlCompare(long item1, long item2, long callbackInfoPtr);
-
#endif //_WXE_IMPL_H
diff --git a/lib/wx/c_src/wxe_main.cpp b/lib/wx/c_src/wxe_main.cpp
new file mode 100644
index 0000000000..2bec2422c9
--- /dev/null
+++ b/lib/wx/c_src/wxe_main.cpp
@@ -0,0 +1,163 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2014. 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%
+ */
+
+#if defined(_WIN32)
+#include <wx/msw/private.h> // for wxSetInstance
+#endif
+
+#include "wxe_impl.h"
+
+// Until fixed in emulator
+#ifndef _WIN32
+extern "C" {
+ extern void erts_thread_disable_fpe(void);
+}
+#endif
+
+ErlDrvTid wxe_thread;
+
+ErlDrvMutex *wxe_status_m;
+ErlDrvCond *wxe_status_c;
+
+int wxe_status = WXE_NOT_INITIATED;
+
+ErlDrvMutex * wxe_batch_locker_m;
+ErlDrvCond * wxe_batch_locker_c;
+ErlDrvTermData init_caller = 0;
+
+#ifdef __DARWIN__
+extern "C" {
+ int erl_drv_stolen_main_thread_join(ErlDrvTid tid, void **respp);
+ int erl_drv_steal_main_thread(char *name,
+ ErlDrvTid *dtid,
+ void* (*func)(void*),
+ void* arg,
+ ErlDrvThreadOpts *opts);
+}
+#endif
+
+void *wxe_main_loop(void * );
+
+/* ************************************************************
+ * START AND STOP of driver thread
+ * ************************************************************/
+
+int load_native_gui()
+{
+ return 1;
+}
+
+int start_native_gui(wxe_data *sd)
+{
+ int res;
+ wxe_status_m = erl_drv_mutex_create((char *) "wxe_status_m");
+ wxe_status_c = erl_drv_cond_create((char *)"wxe_status_c");
+
+ wxe_batch_locker_m = erl_drv_mutex_create((char *)"wxe_batch_locker_m");
+ wxe_batch_locker_c = erl_drv_cond_create((char *)"wxe_batch_locker_c");
+ init_caller = driver_connected(sd->port_handle);
+
+#ifdef __DARWIN__
+ res = erl_drv_steal_main_thread((char *)"wxwidgets",
+ &wxe_thread,wxe_main_loop,(void *) sd->pdl,NULL);
+#else
+ res = erl_drv_thread_create((char *)"wxwidgets",
+ &wxe_thread,wxe_main_loop,(void *) sd->pdl,NULL);
+#endif
+ if(res == 0) {
+ erl_drv_mutex_lock(wxe_status_m);
+ for(;wxe_status == WXE_NOT_INITIATED;) {
+ erl_drv_cond_wait(wxe_status_c, wxe_status_m);
+ }
+ erl_drv_mutex_unlock(wxe_status_m);
+ return wxe_status;
+ } else {
+ wxString msg;
+ msg.Printf(wxT("Erlang failed to create wxe-thread %d\r\n"), res);
+ send_msg("error", &msg);
+ return -1;
+ }
+}
+
+void stop_native_gui(wxe_data *sd)
+{
+ if(wxe_status == WXE_INITIATED) {
+ meta_command(WXE_SHUTDOWN, sd);
+ }
+#ifdef __DARWIN__
+ erl_drv_stolen_main_thread_join(wxe_thread, NULL);
+#else
+ erl_drv_thread_join(wxe_thread, NULL);
+#endif
+ erl_drv_mutex_destroy(wxe_status_m);
+ erl_drv_cond_destroy(wxe_status_c);
+ erl_drv_mutex_destroy(wxe_batch_locker_m);
+ erl_drv_cond_destroy(wxe_batch_locker_c);
+}
+
+void unload_native_gui()
+{
+
+}
+
+/* ************************************************************
+ * wxWidgets Thread
+ * ************************************************************/
+
+void *wxe_main_loop(void *vpdl)
+{
+ int result;
+ int argc = 1;
+ char * temp = (char *) "Erlang";
+ char * argv[] = {temp,NULL};
+ ErlDrvPDL pdl = (ErlDrvPDL) vpdl;
+
+ driver_pdl_inc_refc(pdl);
+
+ // Disable floating point execption if they are on.
+ // This should be done in emulator but it's not in yet.
+#ifndef _WIN32
+ erts_thread_disable_fpe();
+#else
+ // Setup that wxWidgets should look for cursors and icons in
+ // this dll and not in werl.exe (which is the default)
+ HMODULE WXEHandle = GetModuleHandle(_T("wxe_driver"));
+ wxSetInstance((HINSTANCE) WXEHandle);
+#endif
+
+ wxe_ps_init();
+ result = wxEntry(argc, argv);
+ // fprintf(stderr, "WXWidgets quits main loop %d \r\n", result);
+ if(result >= 0 && wxe_status == WXE_INITIATED) {
+ /* We are done try to make a clean exit */
+ wxe_status = WXE_EXITED;
+ driver_pdl_dec_refc(pdl);
+#ifndef __DARWIN__
+ erl_drv_thread_exit(NULL);
+#endif
+ return NULL;
+ } else {
+ erl_drv_mutex_lock(wxe_status_m);
+ wxe_status = WXE_ERROR;
+ erl_drv_cond_signal(wxe_status_c);
+ erl_drv_mutex_unlock(wxe_status_m);
+ driver_pdl_dec_refc(pdl);
+ return NULL;
+ }
+}
diff --git a/lib/wx/c_src/wxe_memory.h b/lib/wx/c_src/wxe_memory.h
new file mode 100644
index 0000000000..ec22183bfa
--- /dev/null
+++ b/lib/wx/c_src/wxe_memory.h
@@ -0,0 +1,61 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2014. 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%
+ */
+
+#ifndef _WXE_MEMORY_H
+#define _WXE_MEMORY_H
+
+class wxeMemEnv
+{
+public:
+ wxeMemEnv()
+ {
+ ref2ptr = (void **) driver_alloc(128*sizeof(void *));
+ ref2ptr[0] = NULL;
+ next = 1;
+ max = 128;
+ };
+ ~wxeMemEnv()
+ { driver_free(ref2ptr); };
+ int next;
+ int max;
+ void ** ref2ptr;
+ intList free;
+ ErlDrvTermData owner;
+};
+
+class wxeRefData {
+ public:
+ wxeRefData(unsigned int dref, int ttype, int is_new, wxeMemEnv *menv) :
+ ref(dref), type(ttype), alloc_in_erl(is_new), memenv(menv), pid(-1) { } ;
+ int ref;
+ int type;
+ // 0 = wxWindow subclasses, 1 = wxObject subclasses
+ // 2 = wxDialog subclasses, 3 = allocated wxObjects but not returned from new
+ // > 3 classes which lack virtual destr, or are supposed to be allocated on
+ // the stack
+ bool alloc_in_erl;
+ wxeMemEnv *memenv;
+ ErlDrvTermData pid;
+};
+
+WX_DECLARE_HASH_MAP(ErlDrvTermData, wxeMemEnv*, wxIntegerHash, wxIntegerEqual, wxeMemMap);
+
+WX_DECLARE_VOIDPTR_HASH_MAP(wxeRefData *, ptrMap);
+
+#endif
diff --git a/lib/wx/include/wx.hrl b/lib/wx/include/wx.hrl
index aa1c81ac0f..2dc1791cce 100644
--- a/lib/wx/include/wx.hrl
+++ b/lib/wx/include/wx.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2014. 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
@@ -273,6 +273,10 @@
-type wxAuiManagerEventType() :: aui_pane_button | aui_pane_close | aui_pane_maximize | aui_pane_restore | aui_render | aui_find_manager.
-type wxAuiManager() :: #wxAuiManager{}. %% Callback event: {@link wxAuiManagerEvent}
+-record(wxInitDialog, {type :: wxInitDialogEventType()}). %% Callback event: {@link wxInitDialogEvent}
+-type wxInitDialogEventType() :: init_dialog.
+-type wxInitDialog() :: #wxInitDialog{}. %% Callback event: {@link wxInitDialogEvent}
+
-record(wxCommand,{type :: wxCommandEventType(), %% Callback event: {@link wxCommandEvent}
cmdString :: unicode:chardata(),
commandInt :: integer(),
@@ -312,8 +316,8 @@
-type wxTreeEventType() :: command_tree_begin_drag | command_tree_begin_rdrag | command_tree_begin_label_edit | command_tree_end_label_edit | command_tree_delete_item | command_tree_get_info | command_tree_set_info | command_tree_item_expanded | command_tree_item_expanding | command_tree_item_collapsed | command_tree_item_collapsing | command_tree_sel_changed | command_tree_sel_changing | command_tree_key_down | command_tree_item_activated | command_tree_item_right_click | command_tree_item_middle_click | command_tree_end_drag | command_tree_state_image_click | command_tree_item_gettooltip | command_tree_item_menu.
-type wxTree() :: #wxTree{}. %% Callback event: {@link wxTreeEvent}
--type event() :: wxAuiManager() | wxAuiNotebook() | wxCalendar() | wxChildFocus() | wxClipboardText() | wxClose() | wxColourPicker() | wxCommand() | wxContextMenu() | wxDate() | wxDisplayChanged() | wxErase() | wxFileDirPicker() | wxFocus() | wxFontPicker() | wxGrid() | wxHelp() | wxHtmlLink() | wxIconize() | wxIdle() | wxJoystick() | wxKey() | wxList() | wxMaximize() | wxMenu() | wxMouse() | wxMouseCaptureChanged() | wxMove() | wxNavigationKey() | wxNotebook() | wxPaint() | wxPaletteChanged() | wxQueryNewPalette() | wxSash() | wxScroll() | wxScrollWin() | wxSetCursor() | wxShow() | wxSize() | wxSpin() | wxSplitter() | wxStyledText() | wxSysColourChanged() | wxTaskBarIcon() | wxTree() | wxUpdateUI() | wxWindowCreate() | wxWindowDestroy().
--type wxEventType() :: wxAuiManagerEventType() | wxAuiNotebookEventType() | wxCalendarEventType() | wxChildFocusEventType() | wxClipboardTextEventType() | wxCloseEventType() | wxColourPickerEventType() | wxCommandEventType() | wxContextMenuEventType() | wxDateEventType() | wxDisplayChangedEventType() | wxEraseEventType() | wxFileDirPickerEventType() | wxFocusEventType() | wxFontPickerEventType() | wxGridEventType() | wxHelpEventType() | wxHtmlLinkEventType() | wxIconizeEventType() | wxIdleEventType() | wxJoystickEventType() | wxKeyEventType() | wxListEventType() | wxMaximizeEventType() | wxMenuEventType() | wxMouseCaptureChangedEventType() | wxMouseEventType() | wxMoveEventType() | wxNavigationKeyEventType() | wxNotebookEventType() | wxPaintEventType() | wxPaletteChangedEventType() | wxQueryNewPaletteEventType() | wxSashEventType() | wxScrollEventType() | wxScrollWinEventType() | wxSetCursorEventType() | wxShowEventType() | wxSizeEventType() | wxSpinEventType() | wxSplitterEventType() | wxStyledTextEventType() | wxSysColourChangedEventType() | wxTaskBarIconEventType() | wxTreeEventType() | wxUpdateUIEventType() | wxWindowCreateEventType() | wxWindowDestroyEventType().
+-type event() :: wxAuiManager() | wxAuiNotebook() | wxCalendar() | wxChildFocus() | wxClipboardText() | wxClose() | wxColourPicker() | wxCommand() | wxContextMenu() | wxDate() | wxDisplayChanged() | wxErase() | wxFileDirPicker() | wxFocus() | wxFontPicker() | wxGrid() | wxHelp() | wxHtmlLink() | wxIconize() | wxIdle() | wxInitDialog() | wxJoystick() | wxKey() | wxList() | wxMaximize() | wxMenu() | wxMouse() | wxMouseCaptureChanged() | wxMove() | wxNavigationKey() | wxNotebook() | wxPaint() | wxPaletteChanged() | wxQueryNewPalette() | wxSash() | wxScroll() | wxScrollWin() | wxSetCursor() | wxShow() | wxSize() | wxSpin() | wxSplitter() | wxStyledText() | wxSysColourChanged() | wxTaskBarIcon() | wxTree() | wxUpdateUI() | wxWindowCreate() | wxWindowDestroy().
+-type wxEventType() :: wxAuiManagerEventType() | wxAuiNotebookEventType() | wxCalendarEventType() | wxChildFocusEventType() | wxClipboardTextEventType() | wxCloseEventType() | wxColourPickerEventType() | wxCommandEventType() | wxContextMenuEventType() | wxDateEventType() | wxDisplayChangedEventType() | wxEraseEventType() | wxFileDirPickerEventType() | wxFocusEventType() | wxFontPickerEventType() | wxGridEventType() | wxHelpEventType() | wxHtmlLinkEventType() | wxIconizeEventType() | wxIdleEventType() | wxInitDialogEventType() | wxJoystickEventType() | wxKeyEventType() | wxListEventType() | wxMaximizeEventType() | wxMenuEventType() | wxMouseCaptureChangedEventType() | wxMouseEventType() | wxMoveEventType() | wxNavigationKeyEventType() | wxNotebookEventType() | wxPaintEventType() | wxPaletteChangedEventType() | wxQueryNewPaletteEventType() | wxSashEventType() | wxScrollEventType() | wxScrollWinEventType() | wxSetCursorEventType() | wxShowEventType() | wxSizeEventType() | wxSpinEventType() | wxSplitterEventType() | wxStyledTextEventType() | wxSysColourChangedEventType() | wxTaskBarIconEventType() | wxTreeEventType() | wxUpdateUIEventType() | wxWindowCreateEventType() | wxWindowDestroyEventType().
%% Hardcoded Records
-record(wxMouseState, {x :: integer(), y :: integer(),
diff --git a/lib/wx/priv/erlang-logo128.png b/lib/wx/priv/erlang-logo128.png
new file mode 100644
index 0000000000..33d1475cea
--- /dev/null
+++ b/lib/wx/priv/erlang-logo128.png
Binary files differ
diff --git a/lib/wx/priv/erlang-logo32.png b/lib/wx/priv/erlang-logo32.png
index a4afed8140..efddf5c5f9 100644
--- a/lib/wx/priv/erlang-logo32.png
+++ b/lib/wx/priv/erlang-logo32.png
Binary files differ
diff --git a/lib/wx/priv/erlang-logo64.png b/lib/wx/priv/erlang-logo64.png
index 91dfbbab53..b7d2128cdb 100644
--- a/lib/wx/priv/erlang-logo64.png
+++ b/lib/wx/priv/erlang-logo64.png
Binary files differ
diff --git a/lib/wx/src/gen/wxInitDialogEvent.erl b/lib/wx/src/gen/wxInitDialogEvent.erl
new file mode 100644
index 0000000000..c8fe6042ac
--- /dev/null
+++ b/lib/wx/src/gen/wxInitDialogEvent.erl
@@ -0,0 +1,64 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2008-2014. 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%
+%% This file is generated DO NOT EDIT
+
+%% @doc See external documentation: <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxinitdialogevent.html">wxInitDialogEvent</a>.
+%% <dl><dt>Use {@link wxEvtHandler:connect/3.} with EventType:</dt>
+%% <dd><em>init_dialog</em></dd></dl>
+%% See also the message variant {@link wxEvtHandler:wxInitDialog(). #wxInitDialog{}} event record type.
+%%
+%% <p>This class is derived (and can use functions) from:
+%% <br />{@link wxEvent}
+%% </p>
+%% @type wxInitDialogEvent(). An object reference, The representation is internal
+%% and can be changed without notice. It can't be used for comparsion
+%% stored on disc or distributed for use on other nodes.
+
+-module(wxInitDialogEvent).
+-include("wxe.hrl").
+-export([]).
+
+%% inherited exports
+-export([getId/1,getSkipped/1,getTimestamp/1,isCommandEvent/1,parent_class/1,
+ resumePropagation/2,shouldPropagate/1,skip/1,skip/2,stopPropagation/1]).
+
+-export_type([wxInitDialogEvent/0]).
+%% @hidden
+parent_class(wxEvent) -> true;
+parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
+
+-type wxInitDialogEvent() :: wx:wx_object().
+ %% From wxEvent
+%% @hidden
+stopPropagation(This) -> wxEvent:stopPropagation(This).
+%% @hidden
+skip(This, Options) -> wxEvent:skip(This, Options).
+%% @hidden
+skip(This) -> wxEvent:skip(This).
+%% @hidden
+shouldPropagate(This) -> wxEvent:shouldPropagate(This).
+%% @hidden
+resumePropagation(This,PropagationLevel) -> wxEvent:resumePropagation(This,PropagationLevel).
+%% @hidden
+isCommandEvent(This) -> wxEvent:isCommandEvent(This).
+%% @hidden
+getTimestamp(This) -> wxEvent:getTimestamp(This).
+%% @hidden
+getSkipped(This) -> wxEvent:getSkipped(This).
+%% @hidden
+getId(This) -> wxEvent:getId(This).
diff --git a/lib/wx/test/wx_basic_SUITE.erl b/lib/wx/test/wx_basic_SUITE.erl
index 9174b80d52..79dbea0575 100644
--- a/lib/wx/test/wx_basic_SUITE.erl
+++ b/lib/wx/test/wx_basic_SUITE.erl
@@ -241,21 +241,6 @@ wx_misc(Config) ->
%% wx:shutdown() %% How do you test this?
- case os:type() of
- {win32, _} -> %% These hangs when running automatic tests
- skip; %% through ssh on windows. Works otherwise
- _ ->
- wx_misc:shell([{command,"echo TESTING close the popup shell"}])
- end,
-
- case wx_test_lib:user_available(Config) of
- true ->
- wx_misc:shell();
- false ->
- %% Don't want to spawn a shell if no user
- skip %% is available
- end,
-
?m(false, wx_misc:isBusy()),
?m(ok, wx_misc:beginBusyCursor([])),
?m(true, wx_misc:isBusy()),
@@ -356,6 +341,7 @@ wx_object(Config) ->
%% Which it did in my buggy handling of the sync_callback
wxWindow:refresh(Frame),
?m([{sync_event, #wx{event=#wxPaint{}}, _}], flush()),
+ timer:sleep(500),
?m([{cast, slept}], flush()),
Monitor = erlang:monitor(process, FramePid),
diff --git a/lib/wx/test/wx_event_SUITE.erl b/lib/wx/test/wx_event_SUITE.erl
index bbb5294d08..b9c2fafe0e 100644
--- a/lib/wx/test/wx_event_SUITE.erl
+++ b/lib/wx/test/wx_event_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2014. 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
@@ -48,7 +48,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[connect, disconnect, connect_msg_20, connect_cb_20,
mouse_on_grid, spin_event, connect_in_callback, recursive,
- char_events, callback_clean
+ dialog, char_events, callback_clean
].
groups() ->
@@ -402,6 +402,42 @@ recursive(Config) ->
wx_test_lib:wx_destroy(Frame, Config).
+dialog(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+dialog(Config) ->
+ Wx = wx:new(),
+ Frame = wxFrame:new(Wx, ?wxID_ANY, "Testing"),
+ wxFrame:show(Frame),
+ Env = wx:get_env(),
+ Tester = self(),
+ PD = wxProgressDialog:new("Dialog","Testing",
+ [%%{parent, Frame},
+ {maximum,101},
+ {style, ?wxPD_SMOOTH bor ?wxPD_AUTO_HIDE}]),
+ Forward = fun(#wx{event=#wxInitDialog{}}, Ev) ->
+ ?mt(wxInitDialogEvent, Ev),
+ io:format("Heyhoo~n", []),
+ wxEvent:skip(Ev),
+ Tester ! {progress_dialog,PD}
+ end,
+ wxDialog:connect(PD, init_dialog, [{callback, Forward}]),
+ Recurse = fun(Recurse, N) ->
+ true = wxProgressDialog:update(PD, min(N,100)),
+ timer:sleep(5),
+ Recurse(Recurse,N+1)
+ end,
+ Run = fun() ->
+ wx:set_env(Env),
+ Recurse(Recurse, 0)
+ end,
+ Worker = spawn_link(Run),
+ timer:sleep(500),
+ io:format("Got ~p~n", [wx_test_lib:flush()]),
+ unlink(Worker),
+ wxProgressDialog:destroy(PD),
+ wx_test_lib:wx_destroy(Frame, Config).
+
+
+
char_events(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
char_events(Config) ->
Wx = wx:new(),
diff --git a/system/doc/getting_started/seq_prog.xml b/system/doc/getting_started/seq_prog.xml
index 567d032bb5..3830a34e5a 100644
--- a/system/doc/getting_started/seq_prog.xml
+++ b/system/doc/getting_started/seq_prog.xml
@@ -408,7 +408,7 @@ list_length([First | Rest]) ->
or "structs" in other languages and we use lists when we want to
represent things which have varying sizes, (i.e. where we would
use linked lists in other languages).</p>
- <p>Erlang does not have a string date type, instead strings can be
+ <p>Erlang does not have a string data type, instead strings can be
represented by lists of ASCII characters. So the list
<c>[97,98,99]</c> is equivalent to "abc". The Erlang shell is
"clever" and guesses the what sort of list we mean and outputs it
@@ -1031,7 +1031,7 @@ month_length(Year, Month) ->
<title>Built In Functions (BIFs)</title>
<p>Built in functions BIFs are functions which for some reason is
built in to the Erlang virtual machine. BIFs often implement
- functionality that is impossible to implement in Erlang or is to
+ functionality that is impossible to implement in Erlang or is too
inefficient to implement in Erlang. Some BIFs can be called
by use of the function name only but they are by default belonging
to the erlang module so for example the call to the BIF <c>trunc</c>
diff --git a/system/doc/reference_manual/code_loading.xml b/system/doc/reference_manual/code_loading.xml
index 10022a5d33..23871dfa83 100644
--- a/system/doc/reference_manual/code_loading.xml
+++ b/system/doc/reference_manual/code_loading.xml
@@ -121,10 +121,9 @@ loop() ->
<title>Running a function when a module is loaded</title>
<warning>
- <p>This section describes an experimental feature that was
- introduced in R13B03, and changed in a backwards-incompatible
- way in R13B04. There may be more backward-incompatible changes
- in future releases.</p>
+ <p>We recommend that the feature described in this section is to
+ be used only for loading NIF libraries. For other usages this
+ feature should be considered experimental.</p>
</warning>
<p>The <c>-on_load()</c> directive names a function that should
diff --git a/system/doc/reference_manual/distributed.xml b/system/doc/reference_manual/distributed.xml
index d337920a64..88f98bc106 100644
--- a/system/doc/reference_manual/distributed.xml
+++ b/system/doc/reference_manual/distributed.xml
@@ -199,7 +199,7 @@ dilbert@uab</pre>
<cell align="left" valign="middle">Depending on <c>Arg</c>, this function can return a list not only of visible nodes, but also hidden nodes and previously known nodes, etc.</cell>
</row>
<row>
- <cell align="left" valign="middle"><c>set_cookie(Node, Cookie)</c></cell>
+ <cell align="left" valign="middle"><c>erlang:set_cookie(Node, Cookie)</c></cell>
<cell align="left" valign="middle">Sets the magic cookie used when connecting to <c>Node</c>. If <c>Node</c> is the current node, <c>Cookie</c> will be used when connecting to all new nodes.</cell>
</row>
<row>
diff --git a/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf b/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf
index 84bf735ff2..fe0886ac8a 100644
--- a/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf
+++ b/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf
@@ -19,6 +19,7 @@
##
## File: erl-xcomp-TileraMDE2.0-tilepro.conf
## Author: Rickard Green
+## Tested on: TileraMDE-2.0, TileraMDE-3.0.1.125620
##
## -----------------------------------------------------------------------------
## When cross compiling Erlang/OTP using `otp_build', copy this file and set