Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'mc'
authorGabriel Corona <gabriel.corona@loria.fr>
Fri, 27 Jun 2014 10:41:21 +0000 (12:41 +0200)
committerGabriel Corona <gabriel.corona@loria.fr>
Fri, 27 Jun 2014 11:06:36 +0000 (13:06 +0200)
Conflicts:
src/mc/mc_global.c

347 files changed:
.gitignore
CMakeLists.txt
ChangeLog
INSTALL
NEWS
buildtools/Cmake/AddTests.cmake
buildtools/Cmake/CompleteInFiles.cmake
buildtools/Cmake/DefinePackages.cmake
buildtools/Cmake/Distrib.cmake
buildtools/Cmake/GenerateDoc.cmake
buildtools/Cmake/MakeExe.cmake
buildtools/Cmake/MakeJava.cmake
buildtools/Cmake/Modules/FindF2c.cmake [deleted file]
buildtools/Cmake/Modules/FindGFortran.cmake
buildtools/Cmake/Option.cmake
buildtools/Cmake/PrintArgs.cmake
buildtools/Cmake/Scripts/tesh.pl
buildtools/Cmake/src/internal_config.h.in
buildtools/Cmake/src/simgrid.nsi.in
buildtools/jenkins/run.sh
buildtools/jenkins/run_DynamicAnalysis.sh
buildtools/jenkins/runmingw.sh
doc/doxygen/bindings.doc
doc/doxygen/header.html
doc/doxygen/inside_cmake.doc
doc/doxygen/inside_doxygen.doc
doc/doxygen/inside_extending.doc
doc/doxygen/install.doc
doc/doxygen/module-surf.doc
doc/doxygen/options.doc
doc/doxygen/platform.doc
doc/doxygen/pls.doc
doc/manpage/smpicc.1
doc/manpage/smpicxx.1 [new file with mode: 0644]
doc/manpage/smpif90.1 [new file with mode: 0644]
doc/manpage/smpiff.1 [new file with mode: 0644]
doc/manpage/smpirun.1
doc/surf++.graphml [new file with mode: 0644]
doc/surf++.pdf [new file with mode: 0644]
doc/surf++.png [new file with mode: 0644]
doc/surf++.uml [new file with mode: 0644]
examples/java/cloud/cloud.tesh
examples/java/cloud/migration/migration.tesh
examples/java/io/CMakeLists.txt
examples/java/io/Client.java [new file with mode: 0644]
examples/java/io/Node.java
examples/java/io/Storage.java [new file with mode: 0644]
examples/java/io/storage.xml [deleted file]
examples/msg/chord/chord.tesh
examples/msg/chord/chord10.xml
examples/msg/chord/chord100.xml
examples/msg/chord/chord_crosstraffic.tesh
examples/msg/chord/generate.py
examples/msg/cloud/CMakeLists.txt
examples/msg/cloud/master_worker_vm.c [new file with mode: 0644]
examples/msg/cloud/master_worker_vm.tesh [new file with mode: 0644]
examples/msg/cloud/simple_vm.tesh
examples/msg/io/CMakeLists.txt
examples/msg/io/file_unlink.c
examples/msg/io/io.tesh
examples/msg/io/remote.c
examples/msg/io/remote.tesh
examples/msg/io/storage.c
examples/msg/io/storage.tesh
examples/msg/ns3/One_cluster-d.xml
examples/msg/ns3/ns3.tesh
examples/msg/pastry/pastry_crosstraffic.tesh
examples/msg/pmm/pmm.tesh
examples/msg/pmm/pmm_9_deploy.xml
examples/msg/properties/msg_prop.c
examples/msg/sendrecv/sendrecv.c
examples/msg/sendrecv/sendrecv_CLM03.tesh
examples/msg/sendrecv/sendrecv_Reno.tesh
examples/msg/sendrecv/sendrecv_Vegas.tesh
examples/msg/start_kill_time/deployment.xml
examples/msg/start_kill_time/deployment_kill.xml
examples/msg/start_kill_time/deployment_start.xml
examples/msg/start_kill_time/deployment_start_kill.xml
examples/msg/start_kill_time/start_kill_time.tesh
examples/platforms/cluster.xml
examples/platforms/deployment_remote_io.xml
examples/platforms/fat_tree_cluster.xml [new file with mode: 0644]
examples/simdag/properties/sd_prop.c
examples/smpi/energy/f77/CMakeLists.txt
examples/smpi/energy/f77/energy.tesh
examples/smpi/energy/f90/CMakeLists.txt
examples/smpi/mc/hostfile_bugged1
examples/smpi/mc/hostfile_bugged1_liveness
examples/smpi/mc/hostfile_bugged2
examples/smpi/mc/hostfile_mutual_exclusion
examples/smpi/mc/hostfile_non_deterministic
examples/smpi/mc/hostfile_send_deterministic
examples/smpi/mc/non_deterministic.tesh
include/msg/msg.h
include/simgrid/platf.h
include/simgrid/simix.h
include/smpi/mpif.h.in
include/smpi/smpi.h
include/smpi/smpi_cocci.h
include/smpi/smpif.h.in [deleted file]
include/surf/simgrid_dtd.h
include/xbt/config.h
include/xbt/graphxml.h
include/xbt/log.h
include/xbt/sysdep.h
include/xbt/xbt_os_time.h
src/bindings/java/jmsg.c
src/bindings/java/jmsg.h
src/bindings/java/jmsg_host.c
src/bindings/java/jmsg_host.h
src/bindings/java/jmsg_storage.c [new file with mode: 0644]
src/bindings/java/jmsg_storage.h [new file with mode: 0644]
src/bindings/java/jxbt_utilities.c
src/bindings/java/jxbt_utilities.h
src/bindings/java/org/simgrid/msg/File.java
src/bindings/java/org/simgrid/msg/Host.java
src/bindings/java/org/simgrid/msg/Storage.java [new file with mode: 0644]
src/bindings/java/org/simgrid/msg/StorageNotFoundException.java [new file with mode: 0644]
src/bindings/java/org/simgrid/surf/Action.java
src/bindings/java/org/simgrid/surf/ActionList.java
src/bindings/java/org/simgrid/surf/ActionState.java
src/bindings/java/org/simgrid/surf/Cpu.java
src/bindings/java/org/simgrid/surf/CpuAction.java
src/bindings/java/org/simgrid/surf/CpuModel.java
src/bindings/java/org/simgrid/surf/LmmConstraint.java
src/bindings/java/org/simgrid/surf/LmmVariable.java
src/bindings/java/org/simgrid/surf/Model.java
src/bindings/java/org/simgrid/surf/NetworkAction.java
src/bindings/java/org/simgrid/surf/NetworkLink.java
src/bindings/java/org/simgrid/surf/Plugin.java
src/bindings/java/org/simgrid/surf/Resource.java
src/bindings/java/org/simgrid/surf/ResourceState.java
src/bindings/java/org/simgrid/surf/RoutingEdge.java
src/bindings/java/org/simgrid/surf/Surf.java
src/bindings/java/org/simgrid/surf/SurfJNI.java
src/bindings/java/org/simgrid/surf/TmgrTrace.java
src/bindings/java/org/simgrid/surf/TmgrTraceEvent.java
src/bindings/java/org/simgrid/surf/XbtDict.java
src/bindings/java/surf.i
src/bindings/java/surfJAVA_wrap.cxx
src/bindings/java/surfJAVA_wrap.h
src/include/surf/maxmin.h
src/include/surf/surf.h
src/instr/instr_config.c
src/instr/instr_interface.c
src/instr/instr_paje_containers.c
src/instr/instr_private.h
src/instr/jedule/jedule_platform.c
src/mc/mc_global.c
src/msg/msg_gos.c
src/msg/msg_io.c
src/msg/msg_mailbox.c
src/msg/msg_vm.c
src/simdag/dax_dtd.c
src/simdag/dax_dtd.h
src/simix/simcalls.in
src/simix/simcalls.py
src/simix/simcalls_generated_args_getter_setter.h
src/simix/simcalls_generated_body.c
src/simix/simcalls_generated_case.c
src/simix/smx_global.c
src/simix/smx_io.c
src/simix/smx_io_private.h
src/simix/smx_network.c
src/simix/smx_network_private.h
src/simix/smx_smurf_private.h
src/simix/smx_user.c
src/simix/smx_vm.c
src/smpi/instr_smpi.c
src/smpi/private.h
src/smpi/smpi_base.c
src/smpi/smpi_bench.c
src/smpi/smpi_deployment.c
src/smpi/smpi_dvfs.c
src/smpi/smpi_f77.c
src/smpi/smpi_global.c
src/smpi/smpi_mpi.c
src/smpi/smpi_mpi_dt.c
src/smpi/smpi_mpi_dt_private.h
src/smpi/smpi_pmpi.c
src/smpi/smpi_rma.c [new file with mode: 0644]
src/smpi/smpi_topo.c
src/smpi/smpicc.in
src/smpi/smpicxx.in
src/smpi/smpif2c.in [deleted file]
src/smpi/smpif90.in
src/smpi/smpiff.in
src/smpi/smpirun.in
src/surf/cpu_cas01.hpp
src/surf/cpu_interface.hpp
src/surf/instr_routing.c
src/surf/network_constant.cpp
src/surf/network_ib.cpp [new file with mode: 0644]
src/surf/network_ib.hpp [new file with mode: 0644]
src/surf/network_interface.cpp
src/surf/network_interface.hpp
src/surf/network_smpi.cpp
src/surf/platf_generator.c
src/surf/simgrid_dtd.c
src/surf/storage_interface.cpp
src/surf/storage_interface.hpp
src/surf/storage_n11.cpp
src/surf/surf_c_bindings.cpp
src/surf/surf_interface.cpp
src/surf/surf_interface.hpp
src/surf/surf_routing.cpp
src/surf/surf_routing_cluster_fat_tree.cpp
src/surf/surf_routing_cluster_fat_tree.hpp
src/surf/surf_routing_cluster_torus.cpp
src/surf/surf_routing_dijkstra.cpp
src/surf/surf_routing_floyd.cpp
src/surf/surf_routing_full.cpp
src/surf/surfxml_parse.c
src/surf/vm_workstation_hl13.cpp
src/surf/workstation_interface.cpp
src/surf/workstation_interface.hpp
src/xbt/graphxml.c
src/xbt/lib.c
src/xbt/log.c
src/xbt/mmalloc/mm_legacy.c
src/xbt/xbt_replay.c
teshsuite/mc/dwarf_expression/dwarf_expression.tesh
teshsuite/msg/process_join/process_join.tesh
teshsuite/msg/storage/CMakeLists.txt
teshsuite/msg/storage/concurrent_rw.c [new file with mode: 0644]
teshsuite/msg/storage/one_host_platform.xml [new file with mode: 0644]
teshsuite/msg/storage/storage_basic.c
teshsuite/msg/storage/storage_basic.tesh
teshsuite/simdag/platforms/bogus_disk_attachment.xml
teshsuite/smpi/mpich3-test/CMakeLists.txt
teshsuite/smpi/mpich3-test/datatype/CMakeLists.txt
teshsuite/smpi/mpich3-test/datatype/testlist
teshsuite/smpi/mpich3-test/f77/attr/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/coll/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/coll/testlist
teshsuite/smpi/mpich3-test/f77/comm/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/datatype/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/ext/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/init/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/pt2pt/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/util/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/coll/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/datatype/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/init/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/pt2pt/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/util/CMakeLists.txt
teshsuite/smpi/mpich3-test/rma/CMakeLists.txt [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/accfence1.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/accfence2.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/accfence2_am.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/accpscw1.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/adlb_mimic1.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/allocmem.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/attrorderwin.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/baseattrwin.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/compare_and_swap.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/contention_put.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/contention_putget.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/contig_displ.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/epochtest.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/fetch_and_op.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/fetchandadd.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/fetchandadd_am.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/fetchandadd_tree.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/fetchandadd_tree_am.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/fkeyvalwin.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/flush.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/get_acc_local.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/get_accumulate.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/getfence1.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/getgroup.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/ircpi.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/linked_list.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_all.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_excl.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_shr.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/linked_list_fop.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/linked_list_lockall.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/lockcontention.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/lockcontention2.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/lockcontention3.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/locknull.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/lockopts.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/manyrma2.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/mcs-mutex.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/mcs-mutex.h [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/mixedsync.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/mutex_bench.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/nullpscw.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/pscw_ordering.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/put_base.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/put_bottom.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/putfence1.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/putfidx.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/putpscw1.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/req_example.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/reqops.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/rmanull.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/rmazero.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/selfrma.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/squelch.h [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/strided_acc_indexed.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/strided_acc_onelock.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/strided_acc_subarray.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/strided_get_indexed.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/strided_getacc_indexed.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/strided_getacc_indexed_shared.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/strided_putget_indexed.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/strided_putget_indexed_shared.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test1.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test1_am.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test1_dt.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test2.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test2_am.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test3.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test3_am.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test4.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test4_am.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test5.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/test5_am.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/testlist [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/transpose1.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/transpose2.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/transpose3.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/transpose4.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/transpose5.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/transpose6.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/transpose7.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/win_dynamic_acc.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/win_flavors.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/win_info.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/win_shared.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/win_shared_noncontig.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/win_shared_noncontig_put.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/wincall.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/window_creation.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/winname.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/rma/wintest.c [new file with mode: 0644]
teshsuite/smpi/mpich3-test/testlist
teshsuite/smpi/pingpong/CMakeLists.txt
teshsuite/smpi/pingpong/broken_hostfiles.tesh [new file with mode: 0644]
teshsuite/smpi/pingpong/empty-hostfile.txt [new file with mode: 0644]
teshsuite/surf/trace_usage/trace_usage.tesh
teshsuite/xbt/graphxml_usage/graphxml_usage.c
teshsuite/xbt/graphxml_usage/graphxml_usage.tesh
tools/generate-multi-jar.py
tools/tesh/CMakeLists.txt

index bba0e95..af8a049 100644 (file)
@@ -232,6 +232,13 @@ examples/smpi/mc/bugged2
 src/replay/replay
 src/testall
 teshsuite/bug-17132/bug-17132
+teshsuite/smpi/bcast/bcast_coll
+teshsuite/smpi/compute/compute2
+teshsuite/smpi/compute/compute3
+teshsuite/smpi/pingpong/dsend
+teshsuite/smpi/pingpong/tmpkkndqe
+teshsuite/smpi/reduce/reduce_coll
+teshsuite/smpi/reduce/reduce_scatter_coll
 teshsuite/smpi/allgather/allgather_coll
 teshsuite/smpi/allgatherv/allgatherv_coll
 teshsuite/smpi/allreduce/allreduce_coll
@@ -706,6 +713,7 @@ teshsuite/smpi/mpich3-test/topo/cartcreates
 teshsuite/smpi/mpich3-test/topo/cartshift1
 teshsuite/smpi/mpich3-test/topo/cartsuball
 teshsuite/smpi/mpich3-test/topo/cartzero
+teshsuite/msg/storage/concurrent_rw
 teshsuite/msg/host_on_off/host_on_off
 teshsuite/msg/process/process
 teshsuite/msg/process_join/process_join
index e90ed43..a97eb96 100644 (file)
@@ -10,6 +10,11 @@ endif()
 
 enable_language(CXX)
 
+if (APPLE) #MAC
+  set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+  set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+endif()
+
 if (NOT DEFINED enable_smpi OR enable_smpi) # smpi is enabled by default
   # Call enable_language(Fortran) in order to load the build rules for
   # this language, needed by teshsuite/smpi/mpich-test/.  Use
@@ -51,9 +56,10 @@ set(CMAKE_Fortran_LINK_FLAGS "" CACHE TYPE INTERNAL FORCE)
 # 3.9.90 -> release 3.10pre1
 # 3.10.0 -> release 3.10
 # 3.11.0 -> release 3.11
+# 3.12.0 -> release 3.12
 
 set(SIMGRID_VERSION_MAJOR "3")
-set(SIMGRID_VERSION_MINOR "11")
+set(SIMGRID_VERSION_MINOR "12")
 set(SIMGRID_VERSION_PATCH "0")
 set(SIMGRID_VERSION_EXTRA "-devel") # Extra words to add to version string (e.g. -rc1)
 
@@ -97,6 +103,12 @@ if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
   if(${GCC_NEED_VERSION} GREATER  COMPILER_C_VERSION_MAJOR_MINOR)
     message(FATAL_ERROR "Gcc must be to version ${GCC_NEED_VERSION} current version ${COMPILER_C_VERSION_MAJOR_MINOR}")
   endif()
+  
+  if(COMPILER_C_VERSION_MAJOR_MINOR STRGREATER "4.8")
+    set (CMAKE_AR gcc-ar)
+    set (CMAKE_RANLIB gcc-ranlib)
+  endif()
+  
 endif()
 
 exec_program("${CMAKE_LINKER} --version" OUTPUT_VARIABLE "LINKER_VERSION")
index 181642a..0c46ad1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,10 @@
-SimGrid (3.11) NOT RELEASED; urgency=low
+SimGrid (3.12) NOT RELEASED; urgency=low
+
+ (to complete)
+
+ -- $date Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+
+SimGrid (3.11) stable; urgency=low
 
  The Class Release.
 
@@ -42,6 +48,11 @@ SimGrid (3.11) NOT RELEASED; urgency=low
    - msg_as_t MSG_environment_as_get_by_name(const char * name)
  * New option "msg/debug_multiple_use" to help debugging when a task is used
    several times
+ * MSG IO
+   - Improvements and finalization of MSG_storage, MSG_file APIs and their
+     documentation
+   - Increase code coverage in test suites
+   - Bug fixes
 
  SIMIX:
  * Protect context stacks against stack overflow. The number of protected memory
@@ -69,10 +80,14 @@ SimGrid (3.11) NOT RELEASED; urgency=low
    - Add callback functions for action state change
    - Handle Energy as a plugin
  * Replace swag by boost::intrusive
- * Add new routing model for torus clusters 
-   - topology="TORUS" and topo_parameters="ndim1,ndim2,...,ndimn" parameters
-     for cluster tag
-   - see examples/platforms/torus_cluster.xml
+ * Add new routing models for clusters. For documentation, see
+   http://simgrid.gforge.inria.fr/simgrid/latest/doc/platform.html#pf_cluster
+   - tori, with topology="TORUS" and topo_parameters="ndim1,ndim2,...,ndimn"
+     parameters for cluster tag
+   - Fat trees, with topology="FAT_TREE" and
+     topo_parameters="h;m1,...,mh;w1,...,wh;p1,...,ph" parameters for cluster tag
+   - see examples/platforms/torus_cluster.xml and
+     examples/platforms/fat_tree_cluster.xml
  * More documentation
 
  SMPI:
@@ -81,18 +96,18 @@ SimGrid (3.11) NOT RELEASED; urgency=low
  * Collective communication algorithms should not crash if used with
    improper number of nodes and report the error.
  * SMPI now partially supports MPI_Topologies : MPI_Cart_create, MPI_Cart_shift,
-   MPI_Cart_rank, MPI_Cart_get, MPI_Cart_coords, MPI_Cartdim_get, 
+   MPI_Cart_rank, MPI_Cart_get, MPI_Cart_coords, MPI_Cartdim_get,
    MPI_Dims_create, MPI_Cart_sub are supported.
  * New interface to use SMPI programmatically (still depends on MSG for
    some parts, see examples/smpi/smpi_msg_masterslave) :
-   - SMPI_app_instance_register(const char *name, xbt_main_func_t code, 
+   - SMPI_app_instance_register(const char *name, xbt_main_func_t code,
         int num_processes)
    - SMPI_init()
    - SMPI_finalize();
  * Global variables privatization in MPI executables is now performed at runtime
-   with the option smpi/privatize_global_variables (default:no). 
-   Limitations : Linux/BSD only, with mmap enabled. Global variables inside 
-   dynamic libraries loaded by the application are not privatized (static 
+   with the option smpi/privatize_global_variables (default:no).
+   Limitations : Linux/BSD only, with mmap enabled. Global variables inside
+   dynamic libraries loaded by the application are not privatized (static
    linking with these libraries is advised in this case)
 
  Tracing:
@@ -124,7 +139,7 @@ SimGrid (3.11) NOT RELEASED; urgency=low
    - void XBT_barrier_destroy(xbt_bar_t barrier)
  * Make the xbt_os_time module public
 
- -- $date Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
+ -- Sat May 31 22:39:38 CEST 2014 Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
 
 SimGrid (3.10) stable; urgency=low
 
@@ -171,7 +186,8 @@ SimGrid (3.10) stable; urgency=low
  * Add a --cfg:tracing/smpi/internals option, to trace internal communications
    happening inside a collective SMPI call.
  * Fix the behavior of complex data types handling.
- * Make MPI_Wtime another synchronization point to take computations into account.
+ * Make MPI_Wtime another synchronization point to take computations into
+   account.
  * Replace MPICH-1 test suite by the one from MPICH 3.0.4. Can be built using
    enable_smpi_MPICH3_testsuite flag in cmake. Run with ctest.
  * Add all missing Fortran bindings, SMPI should work with Fortran 90
diff --git a/INSTALL b/INSTALL
index cc31a6f..5637597 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -53,7 +53,8 @@ the jni.h header file (available from the JDK).
 If you want to compile the lua bindings, you have to have lua5.1 executable and
 liblua5.1-dev.
 
-If you want to compile smpi, you should install f2c to use Fortran code.
+If you want to compile smpi, you should install a fortran compiler to use
+ Fortran code. Only gfortran has been tested for now.
 
 If you want to compile the GTNetS backend, you have to have a patched version of
 GTNetS installed. The patch lives in the contrib section of the Git.
diff --git a/NEWS b/NEWS
index 6388d4a..99a0696 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,14 +1,25 @@
+                    _               _____  _ ____
+__   _____ _ __ ___(_) ___  _ __   |___ / / |___ \
+\ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ | | __) |
+ \ V /  __/ |  \__ \ | (_) | | | |  ___) || |/ __/
+  \_/ \___|_|  |___/_|\___/|_| |_| |____(_)_|_____|
+
+(to complete)
+
                     _               _____  _ _
 __   _____ _ __ ___(_) ___  _ __   |___ / / / |
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ | | |
  \ V /  __/ |  \__ \ | (_) | | | |  ___) || | |
   \_/ \___|_|  |___/_|\___/|_| |_| |____(_)_|_|
+                May 31 2014
 
 The Class Release. Major changes:
+
  * Surf is now in C++ (and documented!)
  * Virtual Machine model for Cloud Simulation
  * Surf callbacks: plug your code directly in Surf!
  * Simcalls are script-generated to clean the mess
+
                     _               _____  _  ___
 __   _____ _ __ ___(_) ___  _ __   |___ / / |/ _ \
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ | | | | |
@@ -39,6 +50,7 @@ The "Grasgory" release. Major changes:
  * Gras was completely removed from this version.
  * Documentation reorganization to ease browsing it.
  * New default value for the TCP_gamma parameter: 4MiB
+
                     _               _____  ___   _
 __   _____ _ __ ___(_) ___  _ __   |___ / ( _ ) / |
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ / _ \ | |
@@ -50,6 +62,7 @@ The "we are told that some people want to also *install* the simgrid
 framework" release.
 
  * Add missing manpage to the archive.
+
                     _               _____  ___
 __   _____ _ __ ___(_) ___  _ __   |___ / ( _ )
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \ / _ \
@@ -67,6 +80,7 @@ Major changes:
  * SMPI now covers more of the MPI interface.
    More datatypes, more functions, more robust.
  * Model-checking: mmalloc is more robust to user errors.
+
                     _               _____ _____ _
 __   _____ _ __ ___(_) ___  _ __   |___ /|___  / |
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \   / /| |
@@ -78,6 +92,7 @@ The "cleaning the cleanup" release. Major changes:
 
  * Portability fixups for Mac OSX and Windows
  * Some other bug fixing and various polishing.
+
                     _               ____  _____
 __   _____ _ __ ___(_) ___  _ __   |___ /|___  |
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \   / /
@@ -93,6 +108,7 @@ Major changes:
  * Parallel execution of user code should be stable and efficient now
  * SMPI is now considered stable
  * Add temporals to Model-Checking (highly experimental right now)
+
                     _               _____  __    ____
 __   _____ _ __ ___(_) ___  _ __   |___ / / /_  |___ \
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \| '_ \   __) |
@@ -175,6 +191,7 @@ __   _____ _ __ ___(_) ___  _ __   |___ /| || |  / |
 
 The "Polishing easter eggs is probably a good idea" release.
 This is a bug fixes release only.
+
                     _               _____ _  _
 __   _____ _ __ ___(_) ___  _ __   |___ /| || |
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \| || |_
@@ -231,6 +248,7 @@ Most important changes:
 
 On the way, we gained a bit more than 5% on the classical master/slave
 example. More to come on this in future releases.
+
                     _               _____  _____  _
 __   _____ _ __ ___(_) ___  _ __   |___ / |___ / / |
 \ \ / / _ \ '__/ __| |/ _ \| '_ \    |_ \   |_ \ | |
index 256435b..8edb591 100644 (file)
@@ -6,7 +6,6 @@ ENDIF()
 IF(enable_smpi AND NOT WIN32)
   exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicc" OUTPUT_VARIABLE "OKITOKI")
   exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicxx" OUTPUT_VARIABLE "OKITOKI")
-  exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c" OUTPUT_VARIABLE "OKITOKI")
   exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff" OUTPUT_VARIABLE "OKITOKI")
   exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif90" OUTPUT_VARIABLE "OKITOKI")
   exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun" OUTPUT_VARIABLE "OKITOKI")
@@ -26,7 +25,7 @@ IF(WIN32)
 SET(TESH_COMMAND perl.exe ${CMAKE_BINARY_DIR}/bin/tesh)
 SET(TESH_OPTION $TESH_OPTION --timeout 50)
 ELSE()
-SET(TESH_COMMAND ${CMAKE_BINARY_DIR}/bin/tesh)
+SET(TESH_COMMAND perl ${CMAKE_BINARY_DIR}/bin/tesh)
 ENDIF()
 
 #some tests may take forever on non futexes systems, using busy_wait with n cores < n workers
@@ -38,6 +37,9 @@ ENDIF()
 MACRO(ADD_TESH NAME)
   SET(ARGR ${ARGV})
   LIST(REMOVE_AT ARGR 0)
+  IF(WIN32)
+    STRING(REPLACE "§" "\;" ARGR "${ARGR}")
+  ENDIF()
   ADD_TEST(${NAME} ${TESH_COMMAND} ${TESH_OPTION} ${ARGR})
 ENDMACRO()
 
@@ -187,6 +189,7 @@ IF(NOT enable_memcheck)
 
   ADD_TESH(msg-file                              --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/msg/io/io.tesh)
   ADD_TESH(msg-storage                           --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/msg/io/storage.tesh)
+  ADD_TESH(msg-remote-io                         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/msg/io/remote.tesh)
   ADD_TESH(msg-start-kill-time                   --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/msg/start_kill_time/start_kill_time.tesh)
   ADD_TESH(msg-chainsend                         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chainsend --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/chainsend --cd ${CMAKE_HOME_DIRECTORY}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/chainsend/chainsend.tesh)
   ADD_TESH_FACTORIES(msg-sendrecv-CLM03          "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh)
@@ -207,6 +210,7 @@ IF(NOT enable_memcheck)
   ADD_TESH_FACTORIES(msg-masterslave-mailbox     "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox_crosstraffic.tesh)
   ADD_TESH_FACTORIES(msg-masterslave-cpu-ti      "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti_crosstraffic.tesh)
   ADD_TESH_FACTORIES(msg-masterslave-vivaldi     "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_vivaldi.tesh)
+  ADD_TESH_FACTORIES(msg-cloud-master-worker-vm      "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/cloud/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/ --cd ${CMAKE_BINARY_DIR}/examples/msg/cloud/ ${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/master_worker_vm.tesh)
   ADD_TESH_FACTORIES(msg-cloud-two-tasks-vm      "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/cloud/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/ --cd ${CMAKE_BINARY_DIR}/examples/msg/cloud/ ${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/two_tasks_vm.tesh)
   ADD_TESH_FACTORIES(msg-cloud-simple-vm         "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/cloud/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/ --cd ${CMAKE_BINARY_DIR}/examples/msg/cloud/ ${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/simple_vm.tesh)
   ADD_TESH_FACTORIES(msg-energy-pstates          "thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/e1/pstate.tesh)
@@ -265,7 +269,7 @@ IF(NOT enable_memcheck)
   IF(enable_debug AND NOT enable_memcheck)
     ADD_TESH(tesh-parser-bogus-symmetric         --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_two_hosts_asymetric.tesh)
     ADD_TESH(tesh-parser-bogus-missing-gw        --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_missing_gateway.tesh)
-    ADD_TESH(tesh-disk-attachment                --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_disk_attachment.tesh)
+    ADD_TESH(tesh-parser-bogus-disk-attachment   --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_disk_attachment.tesh)
   ENDIF()
   ADD_TESH(tesh-simdag-bypass                    --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_parsing_test_bypass.tesh)
   ADD_TESH(tesh-simdag-flatifier                 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms flatifier.tesh)
@@ -334,6 +338,8 @@ IF(NOT enable_memcheck)
   ### SMPI ###
   IF(enable_smpi)
     # BEGIN TESH TESTS
+    # smpi broken usage
+    ADD_TESH_FACTORIES(tesh-smpi-broken          "thread"              --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/pingpong --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong broken_hostfiles.tesh)
     # smpi examples
     ADD_TESH_FACTORIES(tesh-smpi-bcast           "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast bcast.tesh)
     ADD_TESH_FACTORIES(tesh-smpi-reduce          "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/reduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce reduce.tesh)
@@ -421,13 +427,12 @@ IF(NOT enable_memcheck)
         ADD_TEST(test-smpi-mpich3-group-raw      ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/group perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/group -tests=testlist -execarg=--cfg=contexts/factory:raw)
         ADD_TEST(test-smpi-mpich3-pt2pt-raw      ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/pt2pt perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/pt2pt -tests=testlist -execarg=--cfg=contexts/factory:raw)
         ADD_TEST(test-smpi-mpich3-topo-raw       ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/topo perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/topo -tests=testlist -execarg=--cfg=contexts/factory:raw)
-        SET_TESTS_PROPERTIES(test-smpi-mpich3-attr-raw test-smpi-mpich3-comm-raw test-smpi-mpich3-init-raw test-smpi-mpich3-datatype-raw test-smpi-mpich3-group-raw test-smpi-mpich3-pt2pt-raw test-smpi-mpich3-topo-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!")
+        ADD_TEST(test-smpi-mpich3-rma-raw       ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/rma perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/rma -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/privatize_global_variables:yes)
+        SET_TESTS_PROPERTIES(test-smpi-mpich3-attr-raw test-smpi-mpich3-comm-raw test-smpi-mpich3-init-raw test-smpi-mpich3-datatype-raw test-smpi-mpich3-group-raw test-smpi-mpich3-pt2pt-raw test-smpi-mpich3-topo-raw test-smpi-mpich3-rma-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!")
       ENDIF()
-      IF(SMPI_F2C)
+      IF(SMPI_FORTRAN)
         ADD_TEST(test-smpi-mpich3-thread-f77     ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/f77/ perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/ -tests=testlist -execarg=--cfg=contexts/stack_size:8000 -execarg=--cfg=smpi/privatize_global_variables:yes)
         SET_TESTS_PROPERTIES(test-smpi-mpich3-thread-f77 PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!")
-      ENDIF()
-      IF(SMPI_F90)
         ADD_TEST(test-smpi-mpich3-thread-f90     ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/f90/ perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/ -tests=testlist -execarg=--cfg=smpi/privatize_global_variables:yes)
         SET_TESTS_PROPERTIES(test-smpi-mpich3-thread-f90 PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!")
       ENDIF()
@@ -435,10 +440,8 @@ IF(NOT enable_memcheck)
 
     # BEGIN TESH TESTS
     ADD_TESH_FACTORIES(smpi-energy               "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/energy.tesh)
-    IF(SMPI_F2C)
+    IF(SMPI_FORTRAN)
       ADD_TESH_FACTORIES(smpi-energy-f77         "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/f77/energy.tesh)
-    ENDIF()
-    IF(SMPI_F90)
       ADD_TESH_FACTORIES(smpi-energy-f90         "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/f90/energy.tesh)
     ENDIF()
     ADD_TESH_FACTORIES(smpi-msg-masterslave      "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_msg_masterslave --cd ${CMAKE_BINARY_DIR}/examples/smpi/smpi_msg_masterslave ${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_msg_masterslave/msg_smpi.tesh)
@@ -480,6 +483,7 @@ IF(NOT enable_memcheck)
   IF(enable_java)
     IF(WIN32)
       SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/\;${SIMGRID_FULL_JAR}")
+      STRING(REPLACE "\;" "§" TESH_CLASSPATH "${TESH_CLASSPATH}")
     ELSE()
       SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/:${SIMGRID_FULL_JAR}")
     ENDIF()
@@ -512,6 +516,7 @@ IF(NOT enable_memcheck)
   IF(enable_scala)
     IF(WIN32)
       SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/scala/\;${SIMGRID_FULL_JAR}\;${SCALA_JARS}")
+      STRING(REPLACE "\;" "§" TESH_CLASSPATH "${TESH_CLASSPATH}")
     ELSE()
       SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/scala/:${SIMGRID_FULL_JAR}:${SCALA_JARS}")
     ENDIF()
index 9b9df89..b0a4b7c 100644 (file)
@@ -104,11 +104,20 @@ if(enable_ns3)
   include(FindNS3)
 endif()
 
-find_package(Boost REQUIRED)
+# algorithm 1.50.0
+# function 1.23.0
+# intrusive 1.35.0
+# lambda 1.28.0
+# signals2 1.39.0
+find_package(Boost 1.42 REQUIRED)
 if(Boost_FOUND)
   include_directories(${Boost_INCLUDE_DIRS})
 else()
-  message(FATAL_ERROR, "Failed to find Boost libraries")
+  if(APPLE) #MAC
+    message(FATAL_ERROR, "Failed to find Boost libraries (Try to install them with 'sudo fink install boost1.53.nopython')")
+  else()
+    message(FATAL_ERROR, "Failed to find Boost libraries")
+  endif()
 endif()
 
 # Checks for header libraries functions.
@@ -243,8 +252,6 @@ else()
 endif()
 
 if(enable_smpi)
-  include(FindF2c)
-  # FindGFortran must come after FindF2C, and after having set HAVE_MC
   include(FindGFortran)
   SET(HAVE_SMPI 1)
 endif()
@@ -841,10 +848,8 @@ set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_P
 
 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH)
 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
-configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/smpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/smpif.h @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/bin/smpicc @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicxx.in ${CMAKE_BINARY_DIR}/bin/smpicxx @ONLY)
-configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/bin/smpif2c @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/bin/smpiff @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/bin/smpif90 @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/bin/smpirun @ONLY)
@@ -866,7 +871,6 @@ set(libdir "${CMAKE_BINARY_DIR}/lib")
 
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicxx.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicxx @ONLY)
-configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90 @ONLY)
 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun @ONLY)
@@ -876,13 +880,11 @@ set(top_builddir ${CMAKE_HOME_DIRECTORY})
 if(NOT WIN32)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicc)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicxx)
-  execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif90)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicxx)
-  execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90)
   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun)
@@ -890,7 +892,6 @@ endif()
 
 set(generated_headers_to_install
   ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
-  ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/smpif.h
   ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid_config.h
   )
 
@@ -904,7 +905,6 @@ set(generated_files_to_clean
   ${generated_headers_to_install}
   ${CMAKE_BINARY_DIR}/bin/smpicc
   ${CMAKE_BINARY_DIR}/bin/smpicxx
-  ${CMAKE_BINARY_DIR}/bin/smpif2c
   ${CMAKE_BINARY_DIR}/bin/smpiff
   ${CMAKE_BINARY_DIR}/bin/smpif90
   ${CMAKE_BINARY_DIR}/bin/smpirun
index 138f001..7f3a592 100644 (file)
@@ -59,6 +59,7 @@ set(EXTRA_DIST
   src/surf/network_interface.hpp
   src/surf/network_ns3.hpp
   src/surf/network_smpi.hpp
+  src/surf/network_ib.hpp
   src/surf/ns3/my-point-to-point-helper.h
   src/surf/ns3/ns3_interface.h
   src/surf/ns3/ns3_simulator.h
@@ -229,10 +230,11 @@ set(SMPI_SRC
   src/smpi/smpi_mpi_dt.c
   src/smpi/smpi_pmpi.c
   src/smpi/smpi_replay.c
+  src/smpi/smpi_rma.c
   src/smpi/smpi_topo.c
   )
 
-if(SMPI_F2C)
+if(SMPI_FORTRAN)
   set(SMPI_SRC
     ${SMPI_SRC}
     src/smpi/smpi_f77.c
@@ -321,6 +323,7 @@ set(SURF_SRC
   src/surf/network_constant.cpp
   src/surf/network_interface.cpp
   src/surf/network_smpi.cpp
+  src/surf/network_ib.cpp
   src/surf/platf_generator.c
   src/surf/plugins/energy.cpp
   src/surf/random_mgr.c
@@ -495,6 +498,8 @@ set(JMSG_C_SRC
   src/bindings/java/smx_context_cojava.h
   src/bindings/java/smx_context_java.c
   src/bindings/java/smx_context_java.h
+  src/bindings/java/jmsg_storage.c
+  src/bindings/java/jmsg_storage.h
 )
 
 set(JSURF_C_SRC
@@ -521,6 +526,8 @@ set(JMSG_JAVA_SRC
   src/bindings/java/org/simgrid/msg/ProcessNotFoundException.java
   src/bindings/java/org/simgrid/msg/RngStream.java
   src/bindings/java/org/simgrid/msg/Semaphore.java
+  src/bindings/java/org/simgrid/msg/Storage.java
+  src/bindings/java/org/simgrid/msg/StorageNotFoundException.java
   src/bindings/java/org/simgrid/msg/Task.java
   src/bindings/java/org/simgrid/msg/TaskCancelledException.java
   src/bindings/java/org/simgrid/msg/TimeoutException.java
@@ -671,7 +678,6 @@ set(headers_to_install
 set(source_of_generated_headers
   include/simgrid_config.h.in
   include/smpi/mpif.h.in
-  include/smpi/smpif.h.in
   src/context_sysv_config.h.in)
 
 ### depend of some variables setted upper
@@ -800,6 +806,10 @@ set(DOC_SOURCES
   doc/sg_thread_model.fig
   doc/simix.fig
   doc/surf_nutshell.fig
+  doc/surf++.png
+  doc/surf++.pdf
+  doc/surf++.graphml
+  doc/surf++.uml
   doc/triva-graph_configuration.png
   doc/triva-graph_configuration.svg
   doc/triva-graph_visualization.png
@@ -845,6 +855,9 @@ set(DOC_SOURCES
   doc/doxygen/use.doc
 
   doc/manpage/smpicc.1
+  doc/manpage/smpicxx.1
+  doc/manpage/smpif90.1
+  doc/manpage/smpiff.1
   doc/manpage/smpirun.1
 
   doc/msg-tuto-src/deployment0.xml
@@ -909,7 +922,6 @@ set(bin_files
   ${bin_files}
   src/smpi/smpicc.in
   src/smpi/smpicxx.in
-  src/smpi/smpif2c.in
   src/smpi/smpiff.in
   src/smpi/smpif90.in
   src/smpi/smpirun.in
@@ -1068,6 +1080,7 @@ set(TESHSUITE_CMAKEFILES_TXT
   teshsuite/smpi/mpich3-test/init/CMakeLists.txt
   teshsuite/smpi/mpich3-test/pt2pt/CMakeLists.txt
   teshsuite/smpi/mpich3-test/topo/CMakeLists.txt
+  teshsuite/smpi/mpich3-test/rma/CMakeLists.txt
   teshsuite/surf/CMakeLists.txt
   teshsuite/surf/lmm_usage/CMakeLists.txt
   teshsuite/surf/maxmin_bench/CMakeLists.txt
@@ -1105,7 +1118,6 @@ set(CMAKE_SOURCE_FILES
   buildtools/Cmake/MakeJava.cmake
   buildtools/Cmake/MakeLib.cmake
   buildtools/Cmake/MakeLibWin.cmake
-  buildtools/Cmake/Modules/FindF2c.cmake
   buildtools/Cmake/Modules/FindGFortran.cmake
   buildtools/Cmake/Modules/FindGTnets.cmake
   buildtools/Cmake/Modules/FindGraphviz.cmake
@@ -1169,6 +1181,7 @@ set(PLATFORMS_EXAMPLES
   examples/platforms/content/win_storage_content.txt
   examples/platforms/data_center.xml
   examples/platforms/deployment_remote_io.xml
+  examples/platforms/fat_tree_cluster.xml
   examples/platforms/g5k.xml
   examples/platforms/generation_scripts/create_hierarchical_clusters.pl
   examples/platforms/generation_scripts/enhancedDTDwithHierarchicalCluster.pl
index 597fc9e..1fcd9e2 100644 (file)
@@ -20,7 +20,14 @@ if(NOT WIN32)
     COMMAND pod2man ${CMAKE_HOME_DIRECTORY}/tools/simgrid_update_xml.pl > ${MANPAGE_DIR}/simgrid_update_xml.1
     COMMENT "Generating manpages"
     )
-  install(FILES ${MANPAGE_DIR}/simgrid_update_xml.1 ${CMAKE_HOME_DIRECTORY}/tools/tesh/tesh.1 ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpirun.1 ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpicc.1
+  install(FILES
+    ${MANPAGE_DIR}/simgrid_update_xml.1
+    ${CMAKE_HOME_DIRECTORY}/tools/tesh/tesh.1
+    ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpicc.1
+    ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpicxx.1
+    ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpif90.1
+    ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpiff.1
+    ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpirun.1
     DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/man/man1)
 
 endif()
@@ -32,15 +39,10 @@ if(enable_smpi)
     ${CMAKE_BINARY_DIR}/bin/smpicxx
     ${CMAKE_BINARY_DIR}/bin/smpirun
     DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/)
-  if(SMPI_F2C)
-    install(PROGRAMS
-      ${CMAKE_BINARY_DIR}/bin/smpif2c
-      ${CMAKE_BINARY_DIR}/bin/smpiff
-      DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/)
-  endif()
-  if(SMPI_F90)
+  if(SMPI_FORTRAN)
     install(PROGRAMS
       ${CMAKE_BINARY_DIR}/bin/smpif90
+      ${CMAKE_BINARY_DIR}/bin/smpiff
       DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/)
   endif()
 endif()
@@ -140,7 +142,6 @@ add_custom_target(uninstall
   COMMAND ${CMAKE_COMMAND} -E  echo "uninstall lib ok"
   COMMAND ${CMAKE_COMMAND} -E  remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpicc
   COMMAND ${CMAKE_COMMAND} -E  remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpicxx
-  COMMAND ${CMAKE_COMMAND} -E  remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpif2c
   COMMAND ${CMAKE_COMMAND} -E  remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpiff
   COMMAND ${CMAKE_COMMAND} -E  remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpif90
   COMMAND ${CMAKE_COMMAND} -E  remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpirun
@@ -163,7 +164,14 @@ add_custom_target(uninstall
   COMMAND ${CMAKE_COMMAND} -E  remove -f ${CMAKE_INSTALL_PREFIX}/include/xbt.h
   COMMAND ${CMAKE_COMMAND} -E  echo "uninstall include ok"
   COMMAND ${CMAKE_COMMAND} -E  remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/simgrid_update_xml.1
-    COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/tesh.1
+  COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/tesh.1
+  COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/smpicc.1
+  COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/smpicxx.1
+  COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/smpirun.1
+  COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/smpiff.1
+  COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/smpif90.1
+  
+    
   COMMAND ${CMAKE_COMMAND} -E  echo "uninstall man ok"
   WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}"
   )
@@ -240,7 +248,6 @@ add_custom_target(dist-dir
   COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_NAME}-${release_version}/doc/html/
   COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_HOME_DIRECTORY}/doc/html/ ${PROJECT_NAME}-${release_version}/doc/html/
   )
-add_dependencies(dist-dir simgrid_documentation)
 add_dependencies(dist-dir maintainer_files)
 
 set(dirs_in_tarball "")
@@ -340,9 +347,6 @@ add_custom_target(distcheck
   ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_inst/lib/libsimgrid.so
   ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_inst/lib/libsimgridtest.so
 
-  COMMAND ${CMAKE_COMMAND} -E echo "XXX Build documentation"
-  COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build ${CMAKE_MAKE_PROGRAM} simgrid_documentation
-
   COMMAND ${CMAKE_COMMAND} -E echo "XXX Install with documentation"
   COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build ${CMAKE_MAKE_PROGRAM} install
 
index d4f482c..408f208 100644 (file)
@@ -1,13 +1,19 @@
 #### Generate the whole html documentation
 
-find_path(DOXYGEN_PATH  NAMES doxygen  PATHS NO_DEFAULT_PATHS)
+if (enable_documentation)
+  find_package(Doxygen REQUIRED)
+  set(DocAll "ALL")
+else()
+  find_package(Doxygen)
+endif()
+
 find_path(JAVADOC_PATH  NAMES javadoc   PATHS NO_DEFAULT_PATHS)
 find_path(FIG2DEV_PATH  NAMES fig2dev  PATHS NO_DEFAULT_PATHS)
 mark_as_advanced(JAVADOC_PATH)
 
-if(DOXYGEN_PATH)
+if(DOXYGEN_FOUND)
 
-  ADD_CUSTOM_TARGET(simgrid_documentation
+  ADD_CUSTOM_TARGET(doc ${DocAll}
     COMMENT "Generating the SimGrid documentation..."
     DEPENDS ${DOC_SOURCES} ${DOC_FIGS} ${source_doxygen}
     COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_HOME_DIRECTORY}/doc/html
@@ -15,21 +21,15 @@ if(DOXYGEN_PATH)
     WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc
     )
 
-  execute_process(COMMAND ${DOXYGEN_PATH}/doxygen --version OUTPUT_VARIABLE DOXYGEN_VERSION )
-  string(REGEX MATCH "^[0-9]" DOXYGEN_MAJOR_VERSION "${DOXYGEN_VERSION}")
-  string(REGEX MATCH "^[0-9].[0-9]" DOXYGEN_MINOR_VERSION "${DOXYGEN_VERSION}")
-  string(REGEX MATCH "^[0-9].[0-9].[0-9]" DOXYGEN_PATCH_VERSION "${DOXYGEN_VERSION}")
-  string(REGEX REPLACE "^${DOXYGEN_MINOR_VERSION}." "" DOXYGEN_PATCH_VERSION "${DOXYGEN_PATCH_VERSION}")
-  string(REGEX REPLACE "^${DOXYGEN_MAJOR_VERSION}." "" DOXYGEN_MINOR_VERSION "${DOXYGEN_MINOR_VERSION}")
-  message(STATUS "Doxygen version : ${DOXYGEN_MAJOR_VERSION}.${DOXYGEN_MINOR_VERSION}.${DOXYGEN_PATCH_VERSION}")
+  message(STATUS "Doxygen version: ${DOXYGEN_VERSION}")
 
-  if(DOXYGEN_MAJOR_VERSION STRLESS "2" AND DOXYGEN_MINOR_VERSION STRLESS "8")
+  if(DOXYGEN_VERSION VERSION_LESS "1.8")
     ADD_CUSTOM_TARGET(error_doxygen
       COMMAND ${CMAKE_COMMAND} -E echo "Doxygen must be at least version 1.8 to generate documentation"
       COMMAND false
     )
 
-    add_dependencies(simgrid_documentation error_doxygen)
+    add_dependencies(doc error_doxygen)
   endif()
 
   configure_file(${CMAKE_HOME_DIRECTORY}/doc/Doxyfile.in ${CMAKE_HOME_DIRECTORY}/doc/Doxyfile @ONLY)
@@ -37,30 +37,30 @@ if(DOXYGEN_PATH)
   foreach(file ${DOC_FIGS})
     string(REPLACE ".fig" ".png" tmp_file ${file})
     string(REPLACE "${CMAKE_HOME_DIRECTORY}/doc/shared/fig/" "${CMAKE_HOME_DIRECTORY}/doc/html/" tmp_file ${tmp_file})
-    ADD_CUSTOM_COMMAND(TARGET simgrid_documentation
+    ADD_CUSTOM_COMMAND(TARGET doc
       COMMAND ${FIG2DEV_PATH}/fig2dev -Lpng -S 4 ${file} ${tmp_file}
       )
   endforeach()
 
   foreach(file ${DOC_IMG})
     ADD_CUSTOM_COMMAND(
-      TARGET simgrid_documentation
+      TARGET doc
       COMMAND ${CMAKE_COMMAND} -E copy ${file} ${CMAKE_HOME_DIRECTORY}/doc/html/
     )
   endforeach()
 
-  ADD_CUSTOM_COMMAND(TARGET simgrid_documentation
+  ADD_CUSTOM_COMMAND(TARGET doc
     COMMAND ${FIG2DEV_PATH}/fig2dev -Lmap ${CMAKE_HOME_DIRECTORY}/doc/shared/fig/simgrid_modules.fig | perl -pe 's/imagemap/simgrid_modules/g'| perl -pe 's/<IMG/<IMG style=border:0px/g' | ${CMAKE_HOME_DIRECTORY}/tools/doxygen/fig2dev_postprocessor.pl > ${CMAKE_HOME_DIRECTORY}/doc/simgrid_modules.map
     COMMAND pwd
     COMMAND ${CMAKE_COMMAND} -E tar czf html/msg-tuto-src.tgz msg-tuto-src/
     COMMAND ${CMAKE_COMMAND} -E echo "XX Run doxygen"
-    COMMAND ${DOXYGEN_PATH}/doxygen Doxyfile
+    COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
     COMMAND ${CMAKE_COMMAND} -E echo "XX Generate the index files"
-    COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/index_create.pl simgrid.tag index-API.doc     
+    COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/index_create.pl simgrid.tag index-API.doc
     COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_HOME_DIRECTORY}/doc/doxygen/logcategories.doc
     COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/xbt_log_extract_hierarchy.pl > ${CMAKE_HOME_DIRECTORY}/doc/doxygen/logcategories.doc
     COMMAND ${CMAKE_COMMAND} -E echo "XX Run doxygen again"
-    COMMAND ${DOXYGEN_PATH}/doxygen Doxyfile
+    COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
     COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_HOME_DIRECTORY}/doc/simgrid_modules.map
     COMMAND ${CMAKE_COMMAND} -E echo "XX Javadoc pass"
     COMMAND ${JAVADOC_PATH}/javadoc -quiet -d ${CMAKE_HOME_DIRECTORY}/doc/html/javadoc/ ${CMAKE_HOME_DIRECTORY}/src/bindings/java/org/simgrid/*.java ${CMAKE_HOME_DIRECTORY}/src/bindings/java/org/simgrid/*/*.java
@@ -78,7 +78,7 @@ if(DOXYGEN_PATH)
     COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_HOME_DIRECTORY}/doc/latex/refman.pdf ${CMAKE_HOME_DIRECTORY}/doc/latex/simgrid_documentation.pdf
     WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc/latex/
     )
-  add_dependencies(pdf simgrid_documentation)
+  add_dependencies(pdf doc)
 
 
 endif()
@@ -99,7 +99,7 @@ add_custom_target(sync-gforge-doc
 
   WORKING_DIRECTORY "${CMAKE_HOME_DIRECTORY}"
   )
-add_dependencies(sync-gforge-doc simgrid_documentation)
+add_dependencies(sync-gforge-doc doc)
 
 add_custom_target(sync-gforge-dtd
   COMMAND ${RSYNC_CMD} src/surf/simgrid.dtd scm.gforge.inria.fr:/home/groups/simgrid/htdocs/simgrid/${release_version}/simgrid.dtd
index a8d13cc..b86b7e6 100644 (file)
@@ -135,6 +135,7 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/group)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/topo)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/init)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/pt2pt)
+add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/rma)
 
 #add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/attr)
 add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/util)
index 1d1292a..8a34726 100644 (file)
@@ -78,9 +78,9 @@ endif()
 ##
 if(CMAKE_VERSION VERSION_LESS "2.8.12")
   set(CMAKE_JAVA_TARGET_OUTPUT_NAME simgrid)
-  add_jar(simgrid-java_pre_jar ${JMSG_JAVA_SRC} ${JSURF_JAVA_GENERATED_SRC})
+  add_jar(simgrid-java_pre_jar ${JMSG_JAVA_SRC})
 else()
-  add_jar(simgrid-java_pre_jar ${JMSG_JAVA_SRC} ${JSURF_JAVA_GENERATED_SRC} OUTPUT_NAME simgrid)
+  add_jar(simgrid-java_pre_jar ${JMSG_JAVA_SRC} OUTPUT_NAME simgrid)
 endif()
 
 set(JAVA_BUNDLE "${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/java_bundle.sh")
@@ -110,6 +110,8 @@ add_custom_command(
   COMMAND ${JAVA_ARCHIVE} -uvf ${SIMGRID_FULL_JAR} "NATIVE"
   COMMAND ${CMAKE_COMMAND} -E remove ${SIMGRID_JAR}_finalized
   COMMAND ${CMAKE_COMMAND} -E touch ${SIMGRID_JAR}_finalized
+  COMMAND ${Java_JAVADOC_EXECUTABLE} -quiet -d doc ${CMAKE_HOME_DIRECTORY}/src/bindings/java/org/simgrid/*.java ${CMAKE_HOME_DIRECTORY}/src/bindings/java/org/simgrid/*/*.java
+  COMMAND ${JAVA_ARCHIVE} -uvf ${SIMGRID_FULL_JAR} doc
   )
 add_custom_target(simgrid-java_jar ALL DEPENDS ${SIMGRID_JAR}_finalized)
 
@@ -136,6 +138,8 @@ else()
     PROPERTIES COMPILE_FLAGS "-fPIC -I\"${JAVA_INCLUDE_PATH}\" -I\"${JAVA_INCLUDE_PATH2}\""
   )
 endif()
+set_target_properties(surf-java PROPERTIES SKIP_BUILD_RPATH ON)
+set_target_properties(simgrid-java PROPERTIES SKIP_BUILD_RPATH ON)
 
 add_dependencies(simgrid-java surf-java)
 add_dependencies(simgrid-java_pre_jar surf-java)
diff --git a/buildtools/Cmake/Modules/FindF2c.cmake b/buildtools/Cmake/Modules/FindF2c.cmake
deleted file mode 100644 (file)
index 4d22501..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-find_program(F2C_EXE
-  NAME f2c
-  PATH_SUFFIXES bin/
-  PATHS
-  /opt
-  /opt/local
-  /opt/csw
-  /sw
-  /usr
-  )
-
-if(F2C_EXE)
-  message(STATUS "Looking for bin f2c - found: ${F2C_EXE}")
-else()
-  message(STATUS "Looking for bin f2c - not found (http://www.netlib.org/f2c/)")
-endif()
-
-find_library(HAVE_F2C_LIB
-  NAME f2c
-  HINTS
-  ENV LD_LIBRARY_PATH
-  PATH_SUFFIXES lib/
-  PATHS
-  /opt
-  /opt/local
-  /opt/csw
-  /sw
-  /usr
-  )
-
-if(HAVE_F2C_LIB)
-  message(STATUS "Looking for lib f2c - found: ${HAVE_F2C_LIB}")
-else()
-  message(STATUS "Looking for lib f2c - not found")
-endif()
-
-get_filename_component(F2C_HINT ${HAVE_F2C_LIB} PATH)
-find_path(HAVE_F2C_H f2c.h
-  HINTS
-  ${F2C_HINT}/..
-  PATH_SUFFIXES include/
-  PATHS
-  /opt
-  /opt/local
-  /opt/csw
-  /sw
-  /usr
-  )
-
-if(HAVE_F2C_H)
-  message(STATUS "Looking for f2c.h - found: ${HAVE_F2C_H}")
-else()
-  message(STATUS "Looking for f2c.h - not found")
-endif()
-
-if(HAVE_F2C_H)
-  set(HAVE_SMPI_F2C_H 1)
-endif()
-
-mark_as_advanced(HAVE_F2C_H)
-mark_as_advanced(F2C_EXE)
-mark_as_advanced(HAVE_F2C_LIB)
-
-if(HAVE_F2C_LIB)
-  get_filename_component(F2C_LIBRARY_PATH "${HAVE_F2C_LIB}" PATH)
-  file(TO_NATIVE_PATH "${F2C_LIBRARY_PATH}" F2C_LIBRARY_PATH)
-endif()
-
-#Some old versions of 64 bits systems seem to have a different size between C and Fortran Datatypes
-#Deactivate F2C with these versions, in order to avoid breaking test cases in legacy systems (as Fedora 13)
-set(COMPILER_OK 1)
-if(PROCESSOR_x86_64 AND "${CMAKE_SYSTEM}" MATCHES "Linux" AND ${CMAKE_C_COMPILER_ID} STREQUAL "GNU" AND "4.5" STRGREATER "${COMPILER_C_VERSION_MAJOR_MINOR}" )
-    set(COMPILER_OK 0)
-    message("Your C compiler is a bit old and Fortran support is quite problematic on 64 bit platforms, F2C has been deactivated")
-endif()
-
-set(SMPI_F2C 0)
-if(HAVE_F2C_H AND F2C_EXE AND HAVE_F2C_LIB AND COMPILER_OK)
-  set(SMPI_F2C 1)
-endif()
-
-if(SMPI_F2C)
-  include_directories(${HAVE_F2C_H})
-else()
-  message("-- Fortran 77 support for smpi is disabled.")
-endif()
index ff01f17..dfd141a 100644 (file)
@@ -12,23 +12,18 @@ find_program(GFORTRAN_EXE
 mark_as_advanced(GFORTRAN_EXE)
 
 message(STATUS "Looking for bin gfortran")
-if(GFORTRAN_EXE)
-  message(STATUS "Found gfortran: ${GFORTRAN_EXE}")
-else()
-  message(STATUS "Looking for bin gfortran - not found")
-endif()
-
-set(SMPI_F90 0)
-if(GFORTRAN_EXE)
-  if(NOT SMPI_F2C)
-    message("-- Fortran 90 support for smpi also needs f2c.")
-  #elseif(HAVE_MC)
-  #  message("-- Fortran 90 support for smpi is currently not compatible with model checking.")
+set(SMPI_FORTRAN 0)
+if(NOT WIN32)
+  if(GFORTRAN_EXE)
+    message(STATUS "Found gfortran: ${GFORTRAN_EXE}")
+    set(SMPI_FORTRAN 1)
   else()
-    set(SMPI_F90 1)
+    message(STATUS "Looking for bin gfortran - not found")
   endif()
+else()
+  message(STATUS "SMPI Fortran is disabled on Windows platforms. Please contact the SimGrid team if you need it.")
 endif()
 
-if(NOT SMPI_F90)
-  message("-- Fortran 90 support for smpi is disabled.")
+if(NOT SMPI_FORTRAN)
+  message("-- Fortran support for smpi is disabled.")
 endif()
index d8325ea..a3f0dae 100644 (file)
@@ -16,6 +16,7 @@ mark_as_advanced(pipol_user)
 
 option(release "Whether Release Mode is activated (disable tests on experimental parts)" on)
 option(enable_compile_optimizations "Whether to produce efficient code for the SimGrid library" on)
+option(enable_documentation "Whether to produce documentation" on)
 option(enable_gtnets "Whether gtnets model is activated." off)
 option(enable_ns3    "Whether ns3 model is activated." off)
 option(enable_java   "Whether the Java bindings are activated." off)
index 09c6b3d..5180926 100644 (file)
@@ -112,14 +112,15 @@ message("        Compile Scala........: ${HAVE_Scala}")
 message("        Compile Lua .........: ${HAVE_LUA}")
 message("        Compile Smpi ........: ${HAVE_SMPI}")
 message("        Compile MPI testsuite: ${enable_smpi_MPICH3_testsuite}")
-message("        Compile Smpi f77 ....: ${SMPI_F2C}")
-message("        Compile Smpi f90 ....: ${SMPI_F90}")
+message("        Compile Smpi f77 ....: ${SMPI_FORTRAN}")
+message("        Compile Smpi f90 ....: ${SMPI_FORTRAN}")
 message("        Compile Static ......: ${enable_lib_static}")
 if(enable_java)
   message("        Native lib in jar ...: ${enable_lib_in_jar}")
 endif()
 message("")
 message("        Maintainer mode .....: ${enable_maintainer_mode}")
+message("        Documentation........: ${enable_documentation}")
 message("        Model checking ......: ${HAVE_MC}")
 message("        Tracing mode ........: ${enable_tracing}")
 message("        Jedule  mode ........: ${enable_jedule}")
index 0b819b1..199c84f 100755 (executable)
@@ -34,7 +34,7 @@ my $error=0;
 my $exitcode=0;
 my @bg_cmds;
 my (%environ);
-
+$SIG{'PIPE'} = 'IGNORE';
 $path =~ s|[^/]*$||;
 push @INC,$path;
 
@@ -373,10 +373,14 @@ sub parse_out {
   # Check the result of execution 
   ###
   my $diff;
-  if (!defined($cmd{'output ignore'})){
+  if (defined($cmd{'output display'})){
+    print "[Tesh/INFO] Here is the (ignored) command output:\n";
+    map { print "||$_\n" } @got;
+  }
+  elsif (!defined($cmd{'output ignore'})){
     $diff = build_diff(\@{$cmd{'out'}}, \@got);
   }else{
-  print "(ignoring the output of <$cmd{'file'}:$cmd{'line'}> as requested)\n"
+    print "(ignoring the output of <$cmd{'file'}:$cmd{'line'}> as requested)\n"
   }
   if (length $diff) {
     print "Output of <$cmd{'file'}:$cmd{'line'}> mismatch:\n";
@@ -522,6 +526,13 @@ LINE: while (not $finished and not $error) {
     }
     $cmd{'output ignore'} = 1;
   }
+  elsif($line =~ /^!\s*output display/){    #output display
+    if (defined($cmd{'cmd'})) {
+      exec_cmd(\%cmd);
+      %cmd = ();
+    }
+    $cmd{'output display'} = 1;
+  }
   elsif($line =~ /^!\s*expect signal (\w*)/) {#expect signal SIGABRT
     if (defined($cmd{'cmd'})) {
       exec_cmd(\%cmd);
index 71b4bb4..76f05f8 100644 (file)
 /* Indicates that we have SMPI support */
 #cmakedefine HAVE_SMPI @HAVE_SMPI@
 
-/* Indicates that we have SMPI F2C support */
-#cmakedefine  SMPI_F2C @SMPI_F2C@
+/* Indicates that we have SMPI FORTRAN support */
+#cmakedefine  SMPI_FORTRAN @SMPI_FORTRAN@
 
 /* Indicates that we have NS3 support */
 #cmakedefine HAVE_NS3 @HAVE_NS3@
index 53813ec..e5dbeaf 100644 (file)
@@ -188,7 +188,6 @@ SectionEnd
 Section "SMPI Library" SMPISection\r
        setOutPath $INSTDIR\bin\r
        file bin\smpicc\r
-       file bin\smpif2c\r
        file bin\smpiff\r
        file bin\smpirun\r
        file bin\smpif90\r
@@ -202,7 +201,6 @@ Section "SMPI Library" SMPISection
        file @CMAKE_HOME_DIRECTORY@\include\smpi\smpi_cocci.h\r
        file @CMAKE_HOME_DIRECTORY@\include\smpi\smpi_main.h\r
        file include\smpi\mpif.h\r
-       file include\smpi\smpif.h\r
        \r
        CreateDirectory $INSTDIR\examples\smpi\r
        file /r @CMAKE_HOME_DIRECTORY@\examples\smpi\tracing\r
@@ -285,7 +283,6 @@ section "Uninstall"
        delete $INSTDIR\bin\graphicator@BIN_EXE@\r
        delete $INSTDIR\bin\simgrid_update_xml\r
        delete $INSTDIR\bin\smpicc\r
-       delete $INSTDIR\bin\smpif2c\r
        delete $INSTDIR\bin\smpiff\r
        delete $INSTDIR\bin\smpirun\r
        delete $INSTDIR\bin\tesh\r
@@ -343,7 +340,6 @@ section "Uninstall"
        delete $INSTDIR\include\smpi\mpif.h\r
        delete $INSTDIR\include\smpi\smpi_cocci.h\r
        delete $INSTDIR\include\smpi\smpi_main.h\r
-       delete $INSTDIR\include\smpi\smpif.h\r
        delete $INSTDIR\include\surf\surfxml_parse.h\r
        delete $INSTDIR\include\surf\simgrid_dtd.h\r
        delete $INSTDIR\include\surf\surf_routing.h\r
index c95277c..f726799 100755 (executable)
@@ -22,17 +22,17 @@ cd $WORKSPACE/build
 export PATH=./lib/:../../lib:$PATH
 
 if test "$(uname -o)" = "Msys"
-then 
+then
     #$NUMBER_OF_PROCESSORS should be already set on win
     if [ -z "$NUMBER_OF_PROCESSORS" ]; then
         NUMBER_OF_PROCESSORS=1
-    fi  
+    fi
 
-    cmake -G "MSYS Makefiles" $WORKSPACE || die 1 "Failed to do the first cmake - Halting"
+    cmake -G "MSYS Makefiles" -Denable_documentation=OFF $WORKSPACE || die 1 "Failed to do the first cmake - Halting"
 
     make dist || die 2 "Failed to build dist - Halting"
 
-    cmake -G "MSYS Makefiles" -Denable_java=ON -Denable_model-checking=OFF -Denable_lua=OFF -Denable_compile_optimizations=ON  -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=ON -Denable_compile_warnings=OFF . \
+    cmake -G "MSYS Makefiles" -Denable_java=ON -Denable_model-checking=OFF -Denable_lua=OFF -Denable_compile_optimizations=ON  -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=ON -Denable_compile_warnings=OFF -Denable_documentation=OFF . \
     || die 5 "Failed to perform the Cmake for $build_mode - Halting"
 
     make -j$NUMBER_OF_PROCESSORS || die 5 "Build failure - Halting"
@@ -46,7 +46,7 @@ else
     NUMBER_OF_PROCESSORS=$(grep -c "^processor[[:space:]]*:" ${cpuinfo_file} 2>/dev/null)
     [ "0$NUMBER_OF_PROCESSORS" -gt 0 ] || NUMBER_OF_PROCESSORS=1
 
-    cmake $WORKSPACE || die 1 "Failed to do the first cmake - Halting"
+    cmake -Denable_documentation=OFF $WORKSPACE || die 1 "Failed to do the first cmake - Halting"
 
     rm Simgrid*.tar.gz
     make dist || die 2 "Failed to build dist - Halting"
@@ -57,17 +57,17 @@ else
 
     if [ "$build_mode" = "Debug" ]
     then
-    cmake -Denable_coverage=OFF -Denable_java=ON -Denable_model-checking=OFF -Denable_lua=ON -Denable_compile_optimizations=ON  -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=ON -Denable_compile_warnings=ON .
+    cmake -Denable_documentation=OFF -Denable_coverage=OFF -Denable_java=ON -Denable_model-checking=OFF -Denable_lua=ON -Denable_compile_optimizations=ON  -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=ON -Denable_compile_warnings=ON .
     fi
 
     if [ "$build_mode" = "ModelChecker" ]
     then
-    cmake -Denable_coverage=OFF -Denable_java=ON -Denable_smpi=ON -Denable_model-checking=ON -Denable_lua=ON -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON .
+    cmake -Denable_documentation=OFF -Denable_coverage=OFF -Denable_java=ON -Denable_smpi=ON -Denable_model-checking=ON -Denable_lua=ON -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON .
     fi
 
     if [ "$build_mode" = "DynamicAnalysis" ]
     then
-    cmake -Denable_lua=OFF -Denable_java=ON -Denable_tracing=ON -Denable_smpi=ON -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON -Denable_lib_static=OFF -Denable_model-checking=OFF -Denable_latency_bound_tracking=OFF -Denable_gtnets=OFF -Denable_jedule=OFF -Denable_mallocators=OFF -Denable_memcheck=ON .
+    cmake -Denable_documentation=OFF -Denable_lua=OFF -Denable_java=ON -Denable_tracing=ON -Denable_smpi=ON -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON -Denable_lib_static=OFF -Denable_model-checking=OFF -Denable_latency_bound_tracking=OFF -Denable_gtnets=OFF -Denable_jedule=OFF -Denable_mallocators=OFF -Denable_memcheck=ON .
     fi
 
     [ $? -eq 0 ] || die 5 "Failed to perform the Cmake for $build_mode - Halting"
index 0d05047..0c4070e 100755 (executable)
@@ -18,7 +18,7 @@ mkdir $WORKSPACE/memcheck
 
 cd $WORKSPACE/build
 
-cmake -Denable_lua=OFF -Denable_tracing=ON -Denable_smpi=ON  -Denable_smpi_MPICH3_testsuite=OFF -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON -Denable_lib_static=OFF -Denable_model-checking=OFF -Denable_latency_bound_tracking=OFF -Denable_gtnets=OFF -Denable_jedule=OFF -Denable_mallocators=OFF -Denable_memcheck_xml=ON $WORKSPACE
+cmake -Denable_documentation=OFF -Denable_lua=OFF -Denable_tracing=ON -Denable_smpi=ON  -Denable_smpi_MPICH3_testsuite=OFF -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON -Denable_lib_static=OFF -Denable_model-checking=OFF -Denable_latency_bound_tracking=OFF -Denable_gtnets=OFF -Denable_jedule=OFF -Denable_mallocators=OFF -Denable_memcheck_xml=ON $WORKSPACE
 make
 
 ctest -D ExperimentalStart
@@ -34,7 +34,7 @@ fi
 
 make clean
 
-cmake -Denable_lua=OFF -Denable_tracing=ON -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=ON -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON -Denable_lib_static=OFF -Denable_model-checking=OFF -Denable_latency_bound_tracking=OFF -Denable_gtnets=OFF -Denable_jedule=OFF -Denable_mallocators=OFF -Denable_memcheck=OFF -Denable_memcheck_xml=OFF -Denable_coverage=ON $WORKSPACE
+cmake -Denable_documentation=OFF -Denable_lua=OFF -Denable_tracing=ON -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=ON -Denable_compile_optimizations=OFF -Denable_compile_warnings=ON -Denable_lib_static=OFF -Denable_model-checking=OFF -Denable_latency_bound_tracking=OFF -Denable_gtnets=OFF -Denable_jedule=OFF -Denable_mallocators=OFF -Denable_memcheck=OFF -Denable_memcheck_xml=OFF -Denable_coverage=ON $WORKSPACE
 
 make
 ctest -D ExperimentalStart
@@ -44,7 +44,7 @@ ctest -D ExperimentalTest
 ctest -D ExperimentalCoverage
 
 if [ -f Testing/TAG ] ; then
-   /usr/local/gcovr-3.1/scripts/gcovr -r .. --xml-pretty -o $WORKSPACE/xml_coverage.xml 
+   /usr/local/gcovr-3.1/scripts/gcovr -r .. --xml-pretty -o $WORKSPACE/xml_coverage.xml
    xsltproc $WORKSPACE/buildtools/jenkins/ctest2junit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > CTestResults_memcheck.xml
    mv CTestResults_memcheck.xml $WORKSPACE
 fi
index dc901e8..27cad0b 100755 (executable)
@@ -16,7 +16,7 @@ fi
 
 if [ "$build_mode" = "ModelChecker" ]
 then
-cmake -G "MSYS Makefiles" -Denable_model-checking=ON -Denable_compile_optimizations=OFF ..
+cmake -G "MSYS Makefiles" -Denable_documentation=OFF -Denable_model-checking=ON -Denable_compile_optimizations=OFF ..
 fi
 
 make
index 1283603..c0603e3 100644 (file)
@@ -5,7 +5,7 @@ Check online for our specific [Simgrid-Ruby documentation](http://simgrid.gforge
 
 \section MSG_Java Java Binding
 Simgrid-java is a java API that let you use [Simgrid](http://simgrid.gforge.inria.fr/)
-MSG API in your favorite language (java). Without it, you would be forced to
+MSG and SURF API in your favorite language (java). Without it, you would be forced to
 use C or one of the other bindings provided.
 
 MSG was the first distributed programming environment provided within SimGrid.
@@ -16,19 +16,20 @@ The javadoc is accessible [here](javadoc/index.html)
 
 \subsection bindings_binding_Java_jMSG_who Who should use this (and who shouldn't)
 You should use MSG if you want to study some heuristics for a given problem you
-don't really want to implement. SimGrid-java let you use MSG while coding in
-Java. So if your need is MSG + Java, you're in the right section!
+don't really want to implement. SimGrid-java let you use MSG and SURF while coding in
+Java. So if your need is MSG + Java (+ SURF), you're in the right section!
 
-\subsection SimGrid-java Usage overview 
+\subsection SimGrid-java Usage overview
 
-To make a long story short, it's a JNI binding, so it implies that:
-- Most of the MSG and SimGrid documentation about behavioral aspects applies
-  directly to what you are programming. 
-- MSG data structures are mapped to Java objects. So it means that from the
+To make a long story short, it's a JNI binding for MSG and a SWIG binding for SURF,
+so it implies that:
+- Most of the MSG/SURF and SimGrid documentation about behavioral aspects applies
+  directly to what you are programming.
+- MSG/SURF data structures are mapped to Java objects. So it means that from the
   syntax point of view, you have to know how those objects are. Fortunately,
   we have generated the Javadoc for those objects. So take a look at it
 
-Finally, it implies also that your program can crash for 3 main reasons: 
+Finally, it implies also that your program can crash for 3 main reasons:
 - Your Java part is not good: you'll have a good old java exception thrown,
   and hence you should be able to correct it by yourself.
 - Our java part is not good: you'll also have a java exception thrown, but
@@ -38,7 +39,7 @@ Finally, it implies also that your program can crash for 3 main reasons:
   you should read carefully MSG samples and/or documentation.
 - Something has crashed in the C part. Okay, here comes the tricky thing.
 
-C crashes mainly for 2 reasons: 
+C crashes mainly for 2 reasons:
 - When something goes wrong in your simulation, sometimes the C part stops
   because you used SimGrid incorrectly, and JNI bindings are not fond of that.
   It means that you'll have something that looks ugly, but you should be able
@@ -54,12 +55,12 @@ To use java with Simgrid you have to install some dependencies:
 - Java JDK packages, such as `openjdk7` or `sun-java6-jdk` (with `libgcj10-dev` or another
   version of gcj). For maximal performance and scalability, use a coroutine-enabled JVM (see
   \ref bindings_binding_java_coroutines).
+
 Then build Simgrid with the Java bindings enabled:
 ~~~~{.sh}
 cmake -Denable_java=ON .
 ~~~~
+
 If cmake complains that **jni could not be found**, you need to tell it where
 JNI header files are located. the following command should tell you:
 
@@ -111,7 +112,7 @@ context factory itself remains a bit experimental so far.
 \subsubsection  bindings_java_coro_install Getting a mlvm JVM
 
 You need to get a patched JVM from [here](http://ssw.jku.at/General/Staff/LS/coro/)
-(many thanks to Lukas Stadler for this work!). 
+(many thanks to Lukas Stadler for this work!).
 
 You can either get a prebuilt binary, or recompile your own JVM. Make
 sure to get a coro-simple version, as we don't need to serialize nor
@@ -123,7 +124,7 @@ Finally, if you're really stuck, you can get the version compiled by
 Jonathan Rouzaud-Cornabas from his web page. This version is known to
 work with SimGrid for sure!
 http://graal.ens-lyon.fr/~jrouzaud/files/corosimple-linux-amd64-20120914.tgz
+
  -# Install mercurial and some dependencies
 ~~~~{.sh}
 sudo apt-get install mercurial ksh libfreetype6-dev libcups2-dev libasound2-dev gawk openjdk-7-jdk libxext-dev libxrender-dev libxtst-dev
@@ -132,8 +133,8 @@ hg clone https://bitbucket.org/gxti/hgforest hgforest
 ~~~~
  -# Configure the mercurial extensions: Edit ~/.hgrc and paste the
     following lines. Don't forget to change the /path/to/forest.py to
-    point to where you just downloaded the source. 
-    
+    point to where you just downloaded the source.
+
     Forest extension is needed to download the openjdk source code and
     patches while the mq line is needed to apply the patches. The
     username is needed at the step "preparing the sources", not sure why.
@@ -160,10 +161,10 @@ bash patches/make/link-patch-dirs.sh sources patches
 ls -i patches/hotspot/series sources/hotspot/.hg/patches/series
 # It should display something like the following.
 # (note that both file share the same inode number)
-#  9707849 patches/hotspot/series  
+#  9707849 patches/hotspot/series
 #  9707849 sources/hotspot/.hg/patches/series
 
-# Specify what to compile. 
+# Specify what to compile.
 export davinci=${pwd} guards="buildable testable coro-simple"
 # Apply the patches
 sh patches/make/each-patch-repo.sh hg qselect --reapply $guards `sh $davinci/patches/make/current-release.sh`
@@ -172,7 +173,7 @@ grep -r GLOBAL_GUARDS patches/make/
 # this should display something like the following (maybe amonst other unrelated lines)
 # GLOBAL_GUARDS=buildable testable coro-simple
 # If this does not work, edit patches/make/Makefile,
-#   manually coro-simple to GLOBAL_GUARDS and then 
+#   manually coro-simple to GLOBAL_GUARDS and then
 #   rerun the patches/make/each-patch-repo.sh script as earlier
 
 
@@ -228,7 +229,7 @@ process can manage (by default, this limit is often at 65535). Since
 the JVM needs a few dozen of such maps on its own (three maps per
 dynamic library -- check `/proc/the_pid/maps` if you don't believe it),
 this is enough to create over 30,000 simulated processes. But to go
-futher, that limit must be modified. 
+futher, that limit must be modified.
 
 If you want to make this change permanent on your machine, edit your
 `/etc/sysctl.conf` file. Otherwise, you have to redo it by calling
@@ -380,7 +381,7 @@ the full example is distributed in the file examples/lua/master_slave_bypass.lua
 
 \subsection MSG_ex_master_slave_lua Master/slave Lua application
 
-Simulation of a master-slave application using lua bindings    
+Simulation of a master-slave application using lua bindings
 - \ref MSG_ext_ms_master_lua
 - \ref MSG_ext_ms_slave_lua
 - \ref MSG_ext_ms_core_lua
@@ -389,7 +390,7 @@ Simulation of a master-slave application using lua bindings
 - \ref MSG_ext_ms_platform
 
 
-     
+
 \subsubsection MSG_ext_ms_master_lua Master code
 
 as described in the C native master/Slave example, this function has to be assigned to a msg_process_t that will behave as the master.
@@ -439,7 +440,7 @@ Simulation of a master-slave application using lua bindings, Bypassing the XML p
 - \ref MSG_ext_ms_bp_slave_lua
 - \ref MSG_ext_ms_bp_core_lua
 
-      
+
 
 \subsubsection MSG_ext_ms_bp_master_lua Master code
 
index af40754..5507839 100644 (file)
@@ -51,6 +51,7 @@ $mathjax
     <ul class="tablist">
       <li><a href="http://simgrid.gforge.inria.fr/"><span>Home page</span></a></li>
       <li><a href="http://simgrid.gforge.inria.fr/documentation.html"><span>Online documentation</span></a></li>
+      <li><a href="$relpath$javadoc"><span>Java documentation</span></a></li>
       <li><a href="https://gforge.inria.fr/projects/simgrid"><span>Dev's Corner</span></a></li>
       <li>$searchbox</li>
     </ul>
index 616a219..4d95e0c 100644 (file)
@@ -50,8 +50,8 @@ done by adding the files to the EXTRA_DIST list, as in the following
 example:
 
 \verbatim
-### If f2c is installed compiled source other-whise source is only copy in the dist 
-if(SMPI_F2C)
+### If fortran is installed compile source other-whise source is only copied in the dist 
+if(SMPI_FORTRAN)
   set(SMPI_SRC
     ${SMPI_SRC}
     src/smpi/smpi_f77.c
index a120f17..f599035 100644 (file)
@@ -181,7 +181,7 @@ complete your day.
 
 If you need to run a command (like fig2dev) to generate your image,
 edit buildtools/Cmake/GenerateDoc.cmake and add your command to the
-simgrid_documentation target (grep for fig2dev in the file to see
+doc target (grep for fig2dev in the file to see
 where exactly). Don't forget to add the source of your image to the
 archive somehow. You can add it to the list DOC_FIG of
 buildtools/Cmake/DefinePackage.cmake.
@@ -210,7 +210,7 @@ Once you've changed the doc, you want to run doxygen to regenerate the
 html output (and maybe the pdf too). Here is how to do this:
 
 @verbatim
-make simgrid_documentation # html documentation
+make doc # html documentation
 make pdf # the result is in doc/latex/simgrid_documentation.pdf
 @endverbatim
 
index bf38712..ea7cc55 100644 (file)
@@ -79,7 +79,7 @@ s_surf_model_description_t surf_cpu_model_description[] = {
   {"Plop",
    "The new plop CPU model.",
    surf_cpu_model_init_plop},
-  {NULL, NULL,  NULL}      /* this array must be NULL terminated */
+  {NULL, NULL, NULL}      // this array must be NULL terminated
 };
 ~~~~
 
@@ -134,7 +134,7 @@ s_surf_model_description_t surf_plugin_description[] = {
                   {"MyNetworkPlugin",
                    "My network plugin.",
                    sg_my_network_plugin_init},
-                  {NULL, NULL,  NULL}      /* this array must be NULL terminated */
+                  {NULL, NULL, NULL}      // this array must be NULL terminated
 };
 ~~~~
 
index b557898..366b75c 100644 (file)
@@ -1,4 +1,4 @@
-/*! 
+/*!
 @page install Installing Simgrid
 
 @tableofcontents
@@ -8,7 +8,7 @@ Under Debian or Ubuntu, this is very easy as SimGrid is directly
 integrated to the official repositories. Under Windows, SimGrid can be
 installed in a few clicks once you downloaded the installer from
 gforge. If you just want to use Java, simply copy the jar file on your
-disk and you're set. 
+disk and you're set.
 
 Recompiling an official archive is not much more complex, actually.
 SimGrid has very few dependencies and rely only on very standard
@@ -29,13 +29,13 @@ git version, and recompile it as you would do for an official archive.
 Depending on the files you change in the source tree, some extra
 tools may be needed.
 
-@section install_binary Installing a binary package 
+@section install_binary Installing a binary package
 
 @subsection install_binary_linux Binary packages for linux
 
 Most of the developers use a Debian or Ubuntu system, and some of us
 happen to be Debian Maintainers, so the packages for these systems are
-well integrated with these systems and very uptodate. To install them,
+well integrated with these systems and very up-to-date. To install them,
 simply type:
 
 @verbatim
@@ -44,7 +44,7 @@ apt-get install simgrid
 
 On other Linux variants, you probably want to go for a source install.
 Please contact us if you want to contribute the build scripts for your
-prefered distribution.
+preferred distribution.
 
 @subsection install_binary_win Installation wizard for Windows
 
@@ -67,14 +67,14 @@ execute it and follow instructions.
 @subsection install_binary_java Using the binary jar file
 
 The easiest way to install the Java bindings of SimGrid is to grab the
-jar file from the 
+jar file from the
 <a href="https://gforge.inria.fr/frs/?group_id=12">Download page</a>,
 and copy it in your classpath (typically, in the same directory than
 your source code). If you go for that version, there is no need to
 install the C library as it is bundled within the jar file. Actually,
 only a bunch of architectures are supported this way to keep the
-jarfile size under control and because we don't have access to every
-exotic architectures ourselves. 
+jar file size under control and because we don't have access to every
+exotic architectures ourselves.
 
 If the jarfile fails on you, complaining that your architecture is not
 supported, drop us an email: we may extend the jarfile for you, if we
@@ -84,13 +84,16 @@ have access to your architecture to build SimGrid on it.
 
 @subsection install_src_deps Resolving the dependencies
 
-SimGrid only uses very standard tools: 
-  @li C compiler, C++ compiler, make and friends.
-  @li perl (but you may try to go without it)
-  @li We use cmake to configure our compilation 
+SimGrid only uses very standard tools:
+  - C compiler, C++ compiler, make and friends.
+  - perl (but you may try to go without it)
+  - We use cmake to configure our compilation
       (<a href="http://www.cmake.org/cmake/resources/software.html">download page</a>).
       You need cmake version 2.8 or higher. You may want to use ccmake
-      for a graphical interface over cmake. 
+      for a graphical interface over cmake.
+  - LibBoost:
+    - osX: with <a href="http://www.finkproject.org/">fink</a>: `sudo fink install boost1.53.nopython`
+    - debian: `apt-get install libboost-dev`
 
 On MacOSX, it is advised to use the clang compiler (version 3.0 or
 higher), from either MacPort or XCode. If you insist on using gcc on
@@ -98,19 +101,20 @@ this system, you still need a recent version of this compiler, so you
 need an unofficial gcc47 from MacPort because the version provided by
 Apple is ways to ancient to suffice. See also @ref install_cmake_mac.
 
-On Windows, it is strongly advised to use the 
+On Windows, it is strongly advised to use the
 <a href="http://sourceforge.net/projects/mingw/files/MinGW/">MinGW
-environment</a> to build SimGrid. Any other compilers are not tests
-(and thus probably broken). We usually use the 
+environment</a> to build SimGrid, with <a href="http://www.mingw.org/wiki/MSYS">
+MSYS tools</a> installed. Any other compilers are not tested
+(and thus probably broken). We usually use the
 <a href="http://www.activestate.com/activeperl/downloads">activestate</a>
-version of Perl, and the 
+version of Perl, and the
 <a href="http://msysgit.googlecode.com/files/Git-1.7.4-preview20110204.exe">msys</a>
 version of git on this architecture, but YMMV. See also @ref install_cmake_win.
 
 @subsection install_src_fetch Retrieving the source
 
 If you just want to use SimGrid, you should probably grab the latest
-stable version available from the 
+stable version available from the
 <a href="https://gforge.inria.fr/frs/?group_id=12">download page</a>.
 We do our best to release soon and release often, but sometimes you
 need to install the developer version of SimGrid, directly from the
@@ -134,7 +138,7 @@ can use environment variables. For example, you can change the used
 compilers by issuing these commands before launching cmake:
 
 @verbatim
-export CC=gcc-4.4 
+export CC=gcc-4.4
 export CXX=g++-4.4
 @endverbatim
 
@@ -162,13 +166,13 @@ ccmake .
 In addition to the classical cmake configuration variables, SimGrid
 accepts several options, as listed below.
 
-  @li <b>CMAKE_INSTALL_PREFIX</b> (path): Where to install SimGrid 
+  @li <b>CMAKE_INSTALL_PREFIX</b> (path): Where to install SimGrid
       (e.g. /usr/local or /opt).
 
   @li <b>enable_compile_optimizations</b> (ON/OFF): request the
       compiler to produce efficient code. You want to activate it,
       unless you want to debug SimGrid itself (as efficient code may
-      be appear mangled to the debugers).
+      be appear mangled to the debuggers).
 
   @li <b>enable_debug</b> (ON/OFF): disable this if simulation speed
       really matters to you. All log messages of gravity debug or
@@ -179,7 +183,7 @@ accepts several options, as listed below.
       SimGrid if something goes wrong.
 
   @li <b>enable_msg_deprecated</b> (ON/OFF): enable this option if
-      your code used a feature of Simgrid that was droped or modified
+      your code used a feature of Simgrid that was dropped or modified
       in recent releases of SimGrid. You should update your code if
       possible, but with this option, SimGrid will try to emulate its
       old behavior.
@@ -196,16 +200,16 @@ accepts several options, as listed below.
       clean. If you develop SimGrid itself, you must activate it to
       ensure the code quality, but as a user, that option will only
       bring you issues.
-      
+
   @li <b>enable_lib_static</b> (ON/OFF): enable this if you want to
       compile the static library (but you should consider enjoying
       this new century instead).
-      
+
   @li <b>enable_maintainer_mode</b> (ON/OFF): you only need to set
       this option if you modify very specific parts of SimGrid itself
       (the XML parsers and other related elements). Adds an extra
       dependency on flex and flexml.
-     
+
   @li <b>enable_tracing</b> (ON/OFF): disable this if you have issues
       with the tracing module. But this module is now very stable and
       you really should try to enjoy this beauty.
@@ -214,30 +218,32 @@ accepts several options, as listed below.
       with the module allowing to run MPI code on top of SimGrid. This
       module very stable, but if you really don't need it, you can
       disable it.
-      
+
   @li <b>enable_mallocators</b> (ON/OFF): disable this when tracking
       memory issues within SimGrid, or the caching mechanism used
-      internally will fool the debugers.
+      internally will fool the debuggers.
 
   @li <b>enable_jedule</b> (ON/OFF): enable this to get SimDag
-      producing traces that can then be vizualized with the Jedule
+      producing traces that can then be visualized with the Jedule
       external tool.
 
   @li <b>enable_lua</b> (ON/OFF): enable this if you want to enjoy the
       lua bindings of SimGrid. Adds an extra dependency on lua library
-      and developper header files.
+      and developer header files.
 
 
   @li <b>enable_gtnets</b> (ON/OFF): whether you want to use gtnets.
       See section @ref pls_simgrid_configuration_gtnets.
-  @li <b>gtnets_path</b> (path): GTNetS installation directory 
+  @li <b>gtnets_path</b> (path): GTNetS installation directory
       (eg /usr or /opt).
   @li <b>enable_ns3</b> (ON/OFF): whether you want to use ns3.
       See section @ref pls_simgrid_configuration_ns3.
   @li <b>ns3_path</b> (path): NS3 installation directory (eg /usr or /opt).
   @li <b>enable_latency_bound_tracking</b> (ON/OFF): enable it if you
       want to be warned when communications are limited by round trip
-      time while doing packet-level simulation. 
+      time while doing packet-level simulation.
+  @li <b>enable_documentation</b> (ON/OFF) : whether the documentation should be
+       generated during the compilation. Default is ON.
 
 \subsubsection install_cmake_reset Resetting the compilation configuration
 
@@ -255,7 +261,7 @@ is advised to to put them all in a separate directory. It is then
 easier to cleanup, and this allows to compile several configurations
 out of the same source tree. For that, simply enter the directory
 where you want the produced files to land, and invoke cmake (or
-ccmake) with the full path to the simgrid source as last argument.
+ccmake) with the full path to the SimGrid source as last argument.
 This approach is called "compilation out of source tree".
 
 @verbatim
@@ -265,19 +271,19 @@ cmake [options] ..
 make
 @endverbatim
 
-\subsubsection install_cmake_win Cmake on Windows (with MinGW)
+\subsubsection install_cmake_win Cmake on Windows (with MinGW + MSYS)
 
 Cmake can produce several kind of of makefiles. Under Windows, it has
 no way of determining what kind you want to use, so you have to hint it:
 
 @verbatim
-cmake -G"MinGW Makefiles" (other options) .
-mingw32-make
+cmake -G "MSYS Makefiles" (other options) .
+make
 @endverbatim
 
-\subsubsection install_cmake_mac Cmake on Mac OSX
+\subsubsection install_cmake_mac Cmake on Mac OS X
 
-SimGrid compiles like a charm with clang on Mac OSX:
+SimGrid compiles like a charm with clang on Mac OS X:
 
 @verbatim
 cmake -DCMAKE_C_COMPILER=/path/to/clang -DCMAKE_CXX_COMPILER=/path/to/clang++ .
@@ -298,7 +304,7 @@ CMAKE_OSX_SYSROOT:PATH=/Applications/XCode.app/Contents/Developer/Platforms/MacO
 
 \subsection install_src_compil Compiling SimGrid
 
-In most cases, compiling and installing simgrid is enough:
+In most cases, compiling and installing SimGrid is enough:
 
 @verbatim
 make
@@ -308,28 +314,28 @@ make install # try "sudo make install" if you don't have the permission to write
 In addition, several compilation targets are provided in SimGrid. If
 your system is well configured, the full list of targets is available
 for completion when using the Tab key. Note that some of the existing
-targets are not really for publc consumption so don't worry if some
+targets are not really for public consumption so don't worry if some
 stuff don't work for you.
 
 @verbatim
-make simgrid                   Builds only the simgrid library and not any example
-make masterslave               Builds only this example (and its dependencies)
+make simgrid                   Build only the SimGrid library and not any example
+make masterslave               Build only this example (and its dependencies)
 make clean                     Clean the results of a previous compilation
 make install                   Install the project (doc/ bin/ lib/ include/)
 make uninstall                 Uninstall the project (doc/ bin/ lib/ include/)
-make dist                      Cuild a distribution archive (tgz)
+make dist                      Build a distribution archive (tgz)
 make distcheck                 Check the dist (make + make dist + tests on the distribution)
-make simgrid_documentation     Create simgrid documentation
+make doc                       Create SimGrid documentation
 @endverbatim
 
 If you want to see what is really happening, try adding VERBOSE=1 to
 your compilation requests:
 
 @verbatim
-make VERBOSE=1 
+make VERBOSE=1
 @endverbatim
 
-@subsection install_src_test Testing SimGrid 
+@subsection install_src_test Testing SimGrid
 
 Once everything is built, you may want to test the result. SimGrid
 comes with an extensive set of regression tests (see @ref
@@ -437,7 +443,7 @@ compiling a source file. There are:
 \verbatim
 - HelloWorld.c         The example source file.
 - CMakeLists.txt       It allows to configure the project.
-- README               This explaination.
+- README               This explanation.
 \endverbatim
 
 Now let's compile this example:
index e4aed28..d7e025f 100644 (file)
@@ -23,7 +23,7 @@
     \ingroup SURF_API
     \brief Functions for creating the environment and launching the simulation
 
-    This section describes the functions for initialising SURF, performing
+    This section describes the functions for initializing SURF, performing
     the simulation and exiting SURF.
 */
 
     \ingroup SURF_API
     \brief How to build a new API on top of SURF
 
-    SURF provides the functionnalities to simulate the platform. There are two main datatypes in SURF:
+    SURF provides the functionalities to simulate the platform. There are two main data types in SURF:
     the actions and the resources. Several types of resources exist:
        - the workstation resource,
        - the network resource,
        - the CPU resource,
        - the timer resource.
 
-    The implentation of these resources depends on the platform model you choose. There are several
+    The implementation of these resources depends on the platform model you choose. There are several
     platform models. You can select your model by calling surf_workstation_resource_init_CLM03()
     or surf_workstation_resource_init_KCCFLN05(). See the documentation of these functions to have
     more details about the models. Remember that the model KCCFLN05 is an implementation of both the
@@ -77,7 +77,7 @@
 
     Have a look at the implementation of \ref MSG_API "MSG" and \ref SD_API "Simdag" to see how these module
     interact with SURF. But if you want to create a new API on top of SURF,
-    we strongly recommand you to contact us before anyway.
+    we strongly recommend you to contact us before anyway.
 
 */
 
index 0b18f83..4ae9562 100644 (file)
@@ -417,7 +417,7 @@ model checker (see \ref options_mc_perf).
 
 In some cases, no stack guard page is used and the stack will silently
 overflow on other parts of the memory if the stack size is too small
-for your application. This happens :
+for your application. This happens :
 
 - on Windows systems;
 - when the model checker is enabled;
@@ -633,7 +633,7 @@ item several times, as in \verbatim
 \subsection options_generic_exit Behavior on Ctrl-C
 
 By default, when Ctrl-C is pressed, the status of all existing
-simulated processes is displayed. This is very useful to debug your
+simulated processes is displayed before exiting the simulation. This is very useful to debug your
 code, but it can reveal troublesome in some cases (such as when the
 amount of processes becomes really big). This behavior is disabled
 when \b verbose-exit is set to 0 (it is to 1 by default).
index a4902d6..fd64f87 100644 (file)
@@ -368,12 +368,13 @@ unset.
 \li <b>loopback_lat </b>: latency for loopback (if any). See <b>link</b>
     section for syntax/details. See loopback_bw for more info.
 \li <b>topology </b>: network topology to use. For now SimGrid supports FLAT 
-     (default, with or without backbone, as described before) or 
+     (default, with or without backbone, as described before), 
      <a href="http://en.wikipedia.org/wiki/Torus_interconnect">TORUS
-     </a> attributes for this tag.
+     </a> and FAT_TREE attributes for this tag.
 \li <b>topo_parameters </b>: specific parameters to pass for the topology 
      defined in the topology tag. For torus networks, comma-separated list of 
-    the number of nodes in each dimension of the torus.
+    the number of nodes in each dimension of the torus. For fat trees, refer to
+    \ref AsClusterFatTree "AsClusterFatTree documentation".
 
 
 the router name is defined as the resulting String in the following
index c52f5f8..e236b5f 100644 (file)
@@ -158,20 +158,36 @@ cd ns-allinone-3.12.1/ns-3.12.1/
 
 After install ns-3 you should have directories into your "ns-3_install_directory":
        \li include/ns3/
-       \li lib/
-       \li bin/ (with 3.12)
+  \li lib/
+  \li bin/ (with 3.12)
 
+In some cases, include/ns3 does not exist, but there is an /include/ns3.XX . Then, a simple symbolic link is enough. From the /path/to/ns3/installation/include directory, run:
+\verbatim
+ln -s -T ns3.XX/ns3 ns3
+\endverbatim
+
+Make sure to replace 3.XX with your version of NS3, e.g., 3.17, or 3.18.
+Check the correct presence of the symbolic link using
+\verbatim
+ls -al
+\endverbatim
+
+and you should see an ns3 link pointing to ns3.XX. E.g., ns3 -> ns3.17/ns3
 You also need to add to the LD_LIBRARY_PATH : "ns-3_install_directory/lib".
 
 - <b>Enable ns-3 support on SimGrid</b>
 
-In order to enable ns-3 with simgrid you have to give where is ns-3 to the simgrid configuration command. (path to \<ns3_path\>/lib and \<ns3_path\>/include)
+Enabling ns-3 integration with Simgrid requires several intermediate steps.
+-# Modify "simgrid_path/buildtools/CMake/MakeLib.cmake".\n
+The "-lns3.${NS3_VERSION_MINOR}-[module]" should match the library names in your "ns-3_install_directory/lib". The "module" can be one of the following: core, csma, point-to-oint, internet, applications, bridge, mpi, config-store, stats, network. For this, in the "MakeLib.cmake" file find the "else" branch of "if(HAVE_NS3)" statement. Replace the se of "-lns3.${NS3_VERSION_MINOR}-[module]" with "-lns3[version]-[module]-debug" in "SET(SIMGRID_DEP)". On the same branch, add "-I/path/to/ns-3_install_directory/include" to MAKE_C_FLAGS and "CMAKE_CXX_FLAGS".
+-# There might be a need for creating symbolic links of each ns3 library from "ns-3_install_directory/lib" to "/usr/lib".
+-# In order to enable ns-3 with simgrid you have to give where is ns-3 to the simgrid configuration command. (path to \<ns3_path\>/lib and \<ns3_path\>/include)
 
 \verbatim
 cmake . -Denable_ns3=ON -Dns3_path=<ns3_path>
 \endverbatim
 
-With the output of the configuration you can see if ns-3 is detected by included the directory to flags.
+With the output of the configuration you can see if ns-3 is detected (see CFlags: ; CPPFlags: ; Compile NS-3: , NS-3 path:).
 
 \verbatim
 Configuration of package `simgrid' on arch (=4):
@@ -233,6 +249,25 @@ You should see
 3/3 Test #184: msg-ns3-raw ......................   Passed    0.23 sec
 \endverbatim
 
+- <b>Use case</b>
+
+An example of using Simgrid with NS3 can be found in:
+
+\verbatim
+path/to/simgrid/examples/src/surf/ns3/
+\endverbatim
+
+From the example folder above, the command line sintax is
+
+\verbatim
+<simgrid_executable> <platform description file> <deployment file> --cfg=network/model:NS3 --log=surf.threshold:info
+\endverbatim
+
+This example should work:
+\verbatim
+./ns3 ./3hosts_2links_p.xml 3hosts_2links_d.xml --cfg=network/model:NS3 --log=root.threshold:info
+\endverbatim
+
 More about ns-3 simulator <a href="http://www.nsnam.org/">(Official website)</a>
 
 */
index 2a79ffe..5ba493d 100644 (file)
@@ -4,9 +4,9 @@ smpicc \- SMPI C wrapper compiler
 .SH SYNOPSIS
 smpicc …
 .SH DESCRIPTION
-smpicc is just a wrapper around the compiler used to build simgrid, adding the right flags in order to use the simgrid library and SMPI, the MPI implementation within it. Any arguments filled to smpicc will be passed to the underlying compiler directly, of which the \fB\-\-version\fR argument should give the name and the version. Please refer to its documentation in case of trouble.
+smpicc is a wrapper around the C compiler defined when building SimGrid, adding the right flags in order to use the SimGrid library and SMPI, the MPI implementation within it. Most of the arguments filled to smpicc will be passed to the underlying compiler directly, except for \fB\-\-version\fR which gives the SimGrid library version, and \fB\-\-compiler-version\fR which gives the C compiler version. Please refer to the latter documentation in case of trouble.
 .SH ENVIRONMENT VARIABLES
-All environment variables taken into account by the compiler will be used, but note that setting CC has no effect.
+All environment variables taken into account by the underlying compiler will be used by it, but note that the compiler can not be modified.
 .SH AUTHORS
 The SimGrid team (simgrid-devel@lists.gforge.inria.fr)
 .SH COPYRIGHT AND LICENCE
@@ -14,4 +14,7 @@ Copyright (c) 2014. The SimGrid Team. All rights reserved.
 
 This program is free software; you may redistribute it and/or modify it under the terms of GNU LGPL (v2.1) license.
 .SH SEE ALSO
-.B smpirun\fR(1)
+.BR smpirun (1),
+.BR smpicxx (1)
+.BR smpiff (1)
+.BR smpif90 (1)
diff --git a/doc/manpage/smpicxx.1 b/doc/manpage/smpicxx.1
new file mode 100644 (file)
index 0000000..68d2cf3
--- /dev/null
@@ -0,0 +1,20 @@
+.TH smpicxx 1
+.SH NAME
+smpicxx \- SMPI C++ wrapper compiler
+.SH SYNOPSIS
+smpicxx …
+.SH DESCRIPTION
+smpicxx is a wrapper around the C++ compiler defined when building SimGrid, adding the right flags in order to use the SimGrid library and SMPI, the MPI implementation within it. Most of the arguments filled to smpicxx will be passed to the underlying compiler directly, except for \fB\-\-version\fR which gives the SimGrid library version, and \fB\-\-compiler-version\fR which gives the C++ compiler version. Please refer to the latter documentation in case of trouble.
+.SH ENVIRONMENT VARIABLES
+All environment variables taken into account by the underlying compiler will be used by it, but note that the compiler can not be modified.
+.SH AUTHORS
+The SimGrid team (simgrid-devel@lists.gforge.inria.fr)
+.SH COPYRIGHT AND LICENCE
+Copyright (c) 2014. The SimGrid Team. All rights reserved.
+
+This program is free software; you may redistribute it and/or modify it under the terms of GNU LGPL (v2.1) license.
+.SH SEE ALSO
+.BR smpirun (1),
+.BR smpicc (1),
+.BR smpiff (1),
+.BR smpif90 (1)
diff --git a/doc/manpage/smpif90.1 b/doc/manpage/smpif90.1
new file mode 100644 (file)
index 0000000..8bfda66
--- /dev/null
@@ -0,0 +1,20 @@
+.TH smpif90 1
+.SH NAME
+smpif90 \- SMPI Fortran 90 wrapper compiler
+.SH SYNOPSIS
+smpif90 …
+.SH DESCRIPTION
+smpif90 is a wrapper around the Fortran 90 compiler defined when building SimGrid, adding the right flags in order to use the SimGrid library and SMPI, the MPI implementation within it.  Most of the arguments filled to smpif90 will be passed to the underlying compiler directly, except for \fB\-\-version\fR which gives the SimGrid library version, and \fB\-\-compiler-version\fR which gives the F90 compiler version. Please refer to the latter documentation in case of trouble.
+.SH ENVIRONMENT VARIABLES
+All environment variables taken into account by the underlying compiler will be used by it, but note that the compiler can not be modified.
+.SH AUTHORS
+The SimGrid team (simgrid-devel@lists.gforge.inria.fr)
+.SH COPYRIGHT AND LICENCE
+Copyright (c) 2014. The SimGrid Team. All rights reserved.
+
+This program is free software; you may redistribute it and/or modify it under the terms of GNU LGPL (v2.1) license.
+.SH SEE ALSO
+.BR smpirun (1),
+.BR smpicc (1),
+.BR smpicxx (1),
+.BR smpiff (1)
diff --git a/doc/manpage/smpiff.1 b/doc/manpage/smpiff.1
new file mode 100644 (file)
index 0000000..9f6a3a8
--- /dev/null
@@ -0,0 +1,20 @@
+.TH smpiff 1
+.SH NAME
+smpiff \- SMPI Fortran 77 wrapper compiler
+.SH SYNOPSIS
+smpiff …
+.SH DESCRIPTION
+smpiff is a wrapper around the Fortran 77 compiler defined when building SimGrid, adding the right flags in order to use the SimGrid library and SMPI, the MPI implementation within it.  Most of the arguments filled to smpiff will be passed to the underlying compiler directly, except for \fB\-\-version\fR which gives the SimGrid library version, and \fB\-\-compiler-version\fR which gives the F77 compiler version. Please refer to the latter documentation in case of trouble.
+.SH ENVIRONMENT VARIABLES
+All environment variables taken into account by the underlying compiler will be used, but note that the compiler can not be modified.
+.SH AUTHORS
+The SimGrid team (simgrid-devel@lists.gforge.inria.fr)
+.SH COPYRIGHT AND LICENCE
+Copyright (c) 2014. The SimGrid Team. All rights reserved.
+
+This program is free software; you may redistribute it and/or modify it under the terms of GNU LGPL (v2.1) license.
+.SH SEE ALSO
+.BR smpirun (1),
+.BR smpicc (1),
+.BR smpicxx (1),
+.BR smpif90 (1)
index 1cbee03..a9e3336 100644 (file)
@@ -62,3 +62,6 @@ Copyright (c) 2014. The SimGrid Team. All rights reserved.
 This program is free software; you may redistribute it and/or modify it under the terms of GNU LGPL (v2.1) license.
 .SH SEE ALSO
 .B smpicc\fR(1)
+.B smpicxx\fR(1)
+.B smpiff\fR(1)
+.B smpif90\fR(1)
diff --git a/doc/surf++.graphml b/doc/surf++.graphml
new file mode 100644 (file)
index 0000000..c0d5c7a
--- /dev/null
@@ -0,0 +1,1390 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+  <!--Created by yFiles for Java 2.11-->
+  <key for="graphml" id="d0" yfiles.type="resources"/>
+  <key for="port" id="d1" yfiles.type="portgraphics"/>
+  <key for="port" id="d2" yfiles.type="portgeometry"/>
+  <key for="port" id="d3" yfiles.type="portuserdata"/>
+  <key attr.name="url" attr.type="string" for="node" id="d4"/>
+  <key attr.name="description" attr.type="string" for="node" id="d5"/>
+  <key for="node" id="d6" yfiles.type="nodegraphics"/>
+  <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+  <graph edgedefault="directed" id="G">
+    <data key="d7"/>
+    <node id="n0" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="183.140873015873" width="200.0000000000001" x="-1082.500592296737" y="562.9714285714285"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="200.0000000000001" x="0.0" y="0.0">Surf Interface</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0003773569275154" left="0" leftF="0.0" right="0" rightF="1.1368683772161603E-13" top="1" topF="1.000154142641918"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-91.5" y="-154.4609375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n0:">
+        <node id="n0::n0">
+          <data key="d4"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="23.226229413128976" width="170.0" x="-1067.500592296737" y="600.4325202140705"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="48.4462890625" x="60.77685546875" y="3.0">Model<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n0::n1">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="23.226229413128976" width="170.0" x="-1067.500592296737" y="653.6591075156578"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="71.68505859375" x="49.157470703125" y="3.0">Resource<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n0::n2">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="23.226229413128976" width="170.0" x="-1067.500592296737" y="706.885694817245"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="50.62353515625" x="59.688232421875" y="3.0">Action<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n1" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="182.22698412698412" width="200.0" x="-765.9320498018132" y="457.5432539682539"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="200.0" x="0.0" y="0.0">Cpu Interface</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0001984126984098" left="0" leftF="0.0" right="0" rightF="0.0" top="1" topF="1.000372023809632"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-91.5" y="-154.4609375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n1:">
+        <node id="n1::n0">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="170.0" x="-750.9320498018132" y="495.00456349206354"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="76.54736328125" x="46.726318359375" y="3.0">CpuModel<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n1::n1">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="23.226229413128976" width="170.0" x="-750.9320498018132" y="547.7741868807371"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="32.10107421875" x="68.949462890625" y="3.0">Cpu<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n1::n2">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="170.0" x="-750.9320498018132" y="601.0005952380952"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="78.724609375" x="45.6376953125" y="3.0">CpuAction<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n2" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="181.76984126984144" width="200.0" x="-765.9320498018132" y="881.5400793650792"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="200.0" x="0.0" y="0.0">Network Inteface</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0001984126986372" left="0" leftF="0.0" right="0" rightF="0.0" top="1" topF="1.000372023809632"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-91.5" y="-154.4609375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n2:">
+        <node id="n2::n0">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="170.0" x="-750.9320498018132" y="919.0013888888889"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="110.35498046875" x="29.822509765625" y="3.0">NetworkModel<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n2::n1">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="170.0" x="-750.9320498018132" y="971.7708333333334"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="96.548828125" x="36.7255859375" y="3.0">NetworkLink<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n2::n2">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="170.0" x="-750.9320498018132" y="1024.5402777777776"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="112.5322265625" x="28.73388671875" y="3.0">NetworkAction<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n3" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="181.7698412698412" width="200.0" x="-765.9320498018132" y="669.7702380952381"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="200.0" x="0.0" y="0.0">Storage Interface</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0001984126984098" left="0" leftF="0.0" right="0" rightF="0.0" top="1" topF="1.0003720238095184"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-91.5" y="-154.4609375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n3:">
+        <node id="n3::n0">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="170.0" x="-750.9320498018132" y="707.2315476190477"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="106.2607421875" x="31.86962890625" y="3.0">StorageModel<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n3::n1">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="170.0" x="-750.9320498018132" y="760.000992063492"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="61.814453125" x="54.0927734375" y="3.0">Storage<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n3::n2">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="170.0" x="-750.9320498018132" y="812.7704365079366"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="108.43798828125" x="30.781005859375" y="3.0">StorageAction<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n4" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="183.140873015873" width="200.0" x="-765.9320498018132" y="173.8575396825397"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="200.0" x="0.0" y="0.0">Workstation Interface</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0003773569275722" left="0" leftF="0.0" right="0" rightF="0.0" top="1" topF="1.0001541426418328"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-91.5" y="-154.4609375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n4:">
+        <node id="n4::n0">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="23.226229413128976" width="170.0" x="-750.9320498018132" y="211.31863132518154"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="138.3544921875" x="15.82275390625" y="3.0">WorkstationModel<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n4::n1">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="23.226229413128976" width="170.0" x="-750.9320498018132" y="264.5452186267689"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="93.908203125" x="38.0458984375" y="3.0">Workstation<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n4::n2">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="23.226229413128976" width="170.0" x="-750.9320498018132" y="317.7718059283562"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="140.53173828125" x="14.734130859375" y="3.0">WorkstationAction<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n5" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="181.76984126984124" width="209.36350730688935" x="-449.36350730688935" y="174.99999999999997"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="209.36350730688935" x="0.0" y="0.0">Workstation VM Interface </y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.000198412698353" left="0" leftF="0.0" right="0" rightF="0.0" top="1" topF="1.0003720238095752"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-126.89718627929688" y="242.4611111111111"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n5:">
+        <node id="n5::n0">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="212.46130952380955"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="161.35205078125" x="9.005728262819673" y="3.0">WorkstationVMModel<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n5::n1">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="265.230753968254"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="116.90576171875" x="31.228872794069673" y="3.0">WorkstationVM<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n5::n2">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="318.00019841269847"/>
+              <y:Fill color="#FFFF99" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="163.529296875" x="7.917105215944673" y="3.0">WorkstationVMAction<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n6" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="181.76984126984132" width="209.36350730688935" x="-449.36350730688935" y="386.7698412698413"/>
+              <y:Fill color="#C0C0C0" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#999999" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="209.36350730688935" x="0.0" y="0.0">Cpu Cas</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0001984126985235" left="0" leftF="0.0" right="0" rightF="0.0" top="1" topF="1.0003720238095184"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-91.5" y="-154.4609375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n6:">
+        <node id="n6::n0">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="424.23115079365084"/>
+              <y:Fill color="#FFCC00" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="102.59814453125" x="38.38268138781967" y="3.0">CpuCasModel<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n6::n1">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="477.0005952380953"/>
+              <y:Fill color="#FFCC00" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="58.15185546875" x="60.60582591906967" y="3.0">CpuCas<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n6::n2">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="529.7700396825397"/>
+              <y:Fill color="#FFCC00" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="104.775390625" x="37.29405834094467" y="3.0">CpuCasAction<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n7" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="181.76984126984132" width="209.36350730688935" x="-449.36350730688935" y="598.5396825396824"/>
+              <y:Fill color="#C0C0C0" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#999999" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="209.36350730688935" x="0.0" y="0.0">Cpu Ti</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0001984126984098" left="0" leftF="0.0" right="0" rightF="0.0" top="1" topF="1.000372023809632"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-91.5" y="-154.4609375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n7:">
+        <node id="n7::n0">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="636.000992063492"/>
+              <y:Fill color="#FFCC00" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="89.87109375" x="44.74620677844467" y="3.0">CpuTiModel<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n7::n1">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="688.7704365079366"/>
+              <y:Fill color="#FFCC00" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="45.4248046875" x="66.96935130969467" y="3.0">CpuTi<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+        <node id="n7::n2">
+          <data key="d4"/>
+          <data key="d5"/>
+          <data key="d6">
+            <y:UMLClassNode>
+              <y:Geometry height="22.76944444444439" width="179.36350730688935" x="-434.36350730688935" y="741.5398809523809"/>
+              <y:Fill color="#FFCC00" transparent="false"/>
+              <y:BorderStyle color="#000000" type="line" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="92.04833984375" x="43.65758373156967" y="3.0">CpuTiAction<y:LabelModel>
+                  <y:SmartNodeLabelModel distance="4.0"/>
+                </y:LabelModel>
+                <y:ModelParameter>
+                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
+                </y:ModelParameter>
+              </y:NodeLabel>
+              <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+                <y:AttributeLabel>&lt;attrs&gt;</y:AttributeLabel>
+                <y:MethodLabel>&lt;code&gt;</y:MethodLabel>
+              </y:UML>
+            </y:UMLClassNode>
+          </data>
+        </node>
+      </graph>
+    </node>
+    <node id="n8" yfiles.foldertype="folder">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="1">
+            <y:GroupNode>
+              <y:Geometry height="197.46111111111114" width="203.79437255859375" x="270.3363732196599" y="43.150070459290546"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="203.79437255859375" x="0.0" y="0.0">Surf Workstation VM</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0" left="0" leftF="0.0" right="0" rightF="0.0" top="1" topF="1.0001736111111086"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="220.0" x="-220.0" y="237.13492063492066"/>
+              <y:Fill color="#C0C0C0" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#999999" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="220.0" x="0.0" y="0.0">Workstation VM HL13</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="220.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n8:"/>
+    </node>
+    <node id="n9" yfiles.foldertype="group">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="0">
+            <y:GroupNode>
+              <y:Geometry height="51.4609375" width="220.0" x="-454.6817536534447" y="810.3096106150794"/>
+              <y:Fill color="#C0C0C0" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#999999" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="220.0" x="0.0" y="0.0">Storage N11</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0" left="0" leftF="0.0" right="60" rightF="59.923507306889405" top="1" topF="1.0001736111111086"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="50.0" x="-91.5" y="-154.4609375"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="65.201171875" x="-7.6005859375" y="0.0">Folder 1</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n9:"/>
+    </node>
+    <node id="n10" yfiles.foldertype="folder">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="1">
+            <y:GroupNode>
+              <y:Geometry height="197.4611111111111" width="239.4686661562988" x="68.02975877988877" y="351.0762186847603"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="239.4686661562988" x="0.0" y="0.0">Surf Workstation CLM03</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0" left="46" leftF="45.72651356993731" right="16" rightF="16.330897703549" top="1" topF="1.0001736111111086"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="220.0" x="-454.6817536534447" y="15.0"/>
+              <y:Fill color="#C0C0C0" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#999999" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="220.0" x="0.0" y="0.0">Workstation CLM03</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="220.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n10:"/>
+    </node>
+    <node id="n11" yfiles.foldertype="folder">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="1">
+            <y:GroupNode>
+              <y:Geometry height="197.4611111111111" width="239.4686661562988" x="68.02975877988877" y="351.0762186847603"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="239.4686661562988" x="0.0" y="0.0">Surf Workstation CLM03</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0" left="46" leftF="45.72651356993731" right="16" rightF="16.330897703549" top="1" topF="1.0001736111111086"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="220.0" x="-454.6817536534447" y="95.0"/>
+              <y:Fill color="#C0C0C0" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#999999" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="220.0" x="0.0" y="0.0">Workstation L07</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="220.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n11:"/>
+    </node>
+    <node id="n12" yfiles.foldertype="folder">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="1">
+            <y:GroupNode>
+              <y:Geometry height="197.4611111111111" width="239.4686661562988" x="68.02975877988877" y="351.0762186847603"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="239.4686661562988" x="0.0" y="0.0">Surf Workstation CLM03</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0" left="46" leftF="45.72651356993731" right="16" rightF="16.330897703549" top="1" topF="1.0001736111111086"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="220.0" x="-454.6817536534447" y="918.3099206349207"/>
+              <y:Fill color="#C0C0C0" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#999999" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="220.0" x="0.0" y="0.0">Network CM02</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="220.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n12:"/>
+    </node>
+    <node id="n13" yfiles.foldertype="folder">
+      <data key="d4"/>
+      <data key="d5"/>
+      <data key="d6">
+        <y:ProxyAutoBoundsNode>
+          <y:Realizers active="1">
+            <y:GroupNode>
+              <y:Geometry height="197.4611111111111" width="239.4686661562988" x="68.02975877988877" y="351.0762186847603"/>
+              <y:Fill color="#F5F5F5" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="239.4686661562988" x="0.0" y="0.0">Surf Workstation CLM03</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+              <y:BorderInsets bottom="1" bottomF="1.0" left="46" leftF="45.72651356993731" right="16" rightF="16.330897703549" top="1" topF="1.0001736111111086"/>
+            </y:GroupNode>
+            <y:GroupNode>
+              <y:Geometry height="50.0" width="220.0" x="-454.6817536534447" y="998.3099206349207"/>
+              <y:Fill color="#C0C0C0" transparent="false"/>
+              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+              <y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#999999" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="220.0" x="0.0" y="0.0">Network Constant</y:NodeLabel>
+              <y:Shape type="roundrectangle"/>
+              <y:State closed="true" closedHeight="50.0" closedWidth="220.0" innerGraphDisplayEnabled="false"/>
+              <y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
+              <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+            </y:GroupNode>
+          </y:Realizers>
+        </y:ProxyAutoBoundsNode>
+      </data>
+      <graph edgedefault="directed" id="n13:"/>
+    </node>
+    <edge id="e0" source="n2::n1" target="n0::n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-810.0741854255441" y="983.1555555555556"/>
+            <y:Point x="-824.216321049275" y="969.0134199318246"/>
+            <y:Point x="-824.216321049275" y="679.4143578459532"/>
+            <y:Point x="-838.358456673006" y="665.2722222222222"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e1" source="n2::n2" target="n0::n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-839.216321049275" y="1035.9249999999997"/>
+            <y:Point x="-853.358456673006" y="1021.7828643762688"/>
+            <y:Point x="-853.358456673006" y="732.6409451475405"/>
+            <y:Point x="-867.500592296737" y="718.4988095238095"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e2" source="n2::n0" target="n0::n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-780.9320498018132" y="930.3861111111111"/>
+            <y:Point x="-795.0741854255441" y="916.2439754873801"/>
+            <y:Point x="-795.0741854255441" y="626.1877705443659"/>
+            <y:Point x="-809.216321049275" y="612.0456349206349"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e3" source="n1::n2" target="n0::n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-839.216321049275" y="612.3853174603174"/>
+            <y:Point x="-853.358456673006" y="626.5274530840484"/>
+            <y:Point x="-853.358456673006" y="704.3566739000786"/>
+            <y:Point x="-867.500592296737" y="718.4988095238095"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e4" source="n1::n1" target="n0::n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-810.0741854255441" y="559.3873015873016"/>
+            <y:Point x="-824.216321049275" y="573.5294372110326"/>
+            <y:Point x="-824.216321049275" y="651.1300865984913"/>
+            <y:Point x="-838.358456673006" y="665.2722222222222"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e5" source="n1::n0" target="n0::n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-780.9320498018132" y="506.38928571428573"/>
+            <y:Point x="-795.0741854255441" y="520.5314213380167"/>
+            <y:Point x="-795.0741854255441" y="597.903499296904"/>
+            <y:Point x="-809.216321049275" y="612.0456349206349"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e6" source="n3::n0" target="n0::n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-780.9320498018132" y="718.6162698412699"/>
+            <y:Point x="-795.0741854255441" y="704.4741342175389"/>
+            <y:Point x="-795.0741854255441" y="626.1877705443659"/>
+            <y:Point x="-809.216321049275" y="612.0456349206349"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e7" source="n3::n2" target="n0::n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-839.216321049275" y="824.1551587301587"/>
+            <y:Point x="-853.358456673006" y="810.0130231064278"/>
+            <y:Point x="-853.358456673006" y="732.6409451475405"/>
+            <y:Point x="-867.500592296737" y="718.4988095238095"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e8" source="n4::n0" target="n0::n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-780.9320498018132" y="222.93174603174603"/>
+            <y:Point x="-795.0741854255441" y="237.07388165547698"/>
+            <y:Point x="-795.0741854255441" y="597.903499296904"/>
+            <y:Point x="-809.216321049275" y="612.0456349206349"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e9" source="n4::n1" target="n0::n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-810.0741854255441" y="276.15833333333336"/>
+            <y:Point x="-824.216321049275" y="290.3004689570643"/>
+            <y:Point x="-824.216321049275" y="651.1300865984913"/>
+            <y:Point x="-838.358456673006" y="665.2722222222222"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e10" source="n4::n2" target="n0::n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-839.216321049275" y="329.38492063492066"/>
+            <y:Point x="-853.358456673006" y="343.5270562586516"/>
+            <y:Point x="-853.358456673006" y="704.3566739000786"/>
+            <y:Point x="-867.500592296737" y="718.4988095238095"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e11" source="n5::n0" target="n4::n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-464.36350730688935" y="223.84603174603174"/>
+            <y:Point x="-465.27779302117506" y="222.93174603174603"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e12" source="n5::n1" target="n4::n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e13" source="n5::n2" target="n4::n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e14" source="n8" target="n5">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-110.0" sy="0.0" tx="104.68175365344467" ty="-3.749999999999943"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e15" source="n6::n2" target="n1::n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-522.6477785543512" y="541.1547619047619"/>
+            <y:Point x="-536.7899141780822" y="555.2968975284929"/>
+            <y:Point x="-536.7899141780822" y="598.2431818365865"/>
+            <y:Point x="-550.9320498018132" y="612.3853174603174"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e16" source="n6::n1" target="n1::n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-493.5056429306203" y="488.3853174603175"/>
+            <y:Point x="-507.64777855435125" y="502.52745308404843"/>
+            <y:Point x="-507.64777855435125" y="545.2451659635707"/>
+            <y:Point x="-521.7899141780822" y="559.3873015873016"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e17" source="n6::n0" target="n1::n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-464.36350730688935" y="435.61587301587304"/>
+            <y:Point x="-478.5056429306203" y="449.758008639604"/>
+            <y:Point x="-478.5056429306203" y="492.2471500905548"/>
+            <y:Point x="-492.64777855435125" y="506.38928571428573"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e18" source="n7::n2" target="n1::n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-522.6477785543512" y="752.9246031746031"/>
+            <y:Point x="-536.7899141780822" y="738.7824675508722"/>
+            <y:Point x="-536.7899141780822" y="626.5274530840484"/>
+            <y:Point x="-550.9320498018132" y="612.3853174603174"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e19" source="n7::n1" target="n1::n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-493.5056429306203" y="700.1551587301587"/>
+            <y:Point x="-507.64777855435125" y="686.0130231064278"/>
+            <y:Point x="-507.64777855435125" y="573.5294372110326"/>
+            <y:Point x="-521.7899141780822" y="559.3873015873016"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e20" source="n7::n0" target="n1::n0">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-89.68175365344467" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-464.36350730688935" y="647.3857142857142"/>
+            <y:Point x="-478.5056429306203" y="633.2435786619833"/>
+            <y:Point x="-478.5056429306203" y="520.5314213380167"/>
+            <y:Point x="-492.64777855435125" y="506.38928571428573"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e21" source="n10" target="n4">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-110.0" sy="0.0" tx="100.0" ty="-83.57043650793653">
+            <y:Point x="-522.6477785543512" y="40.0"/>
+            <y:Point x="-536.7899141780822" y="54.14213562373095"/>
+            <y:Point x="-536.7899141780822" y="167.71540405880873"/>
+            <y:Point x="-550.9320498018132" y="181.85753968253968"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e22" source="n11" target="n4">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-110.0" sy="0.0" tx="100.0" ty="-68.57043650793653">
+            <y:Point x="-507.64777855435125" y="120.0"/>
+            <y:Point x="-521.7899141780822" y="134.14213562373095"/>
+            <y:Point x="-521.7899141780822" y="167.71540405880873"/>
+            <y:Point x="-550.9320498018132" y="196.85753968253968"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e23" source="n9" target="n3">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-110.0" sy="0.0" tx="100.0" ty="75.3849206349206"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e24" source="n12" target="n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-110.0" sy="0.0" tx="100.0" ty="-29.115079365079282"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e25" source="n13" target="n2">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-110.0" sy="0.0" tx="100.0" ty="50.88492063492072"/>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+    <edge id="e26" source="n3::n1" target="n0::n1">
+      <data key="d9"/>
+      <data key="d10">
+        <y:PolyLineEdge>
+          <y:Path sx="-85.0" sy="0.0" tx="85.0" ty="0.0">
+            <y:Point x="-810.0741854255441" y="771.3857142857142"/>
+            <y:Point x="-824.216321049275" y="757.2435786619833"/>
+            <y:Point x="-824.216321049275" y="679.4143578459532"/>
+            <y:Point x="-838.358456673006" y="665.2722222222222"/>
+          </y:Path>
+          <y:LineStyle color="#000000" type="line" width="1.0"/>
+          <y:Arrows source="none" target="white_delta"/>
+          <y:BendStyle smoothed="false"/>
+        </y:PolyLineEdge>
+      </data>
+    </edge>
+  </graph>
+  <data key="d0">
+    <y:Resources/>
+  </data>
+</graphml>
diff --git a/doc/surf++.pdf b/doc/surf++.pdf
new file mode 100644 (file)
index 0000000..027db80
--- /dev/null
@@ -0,0 +1,2312 @@
+%PDF-1.4
+%âãÏÓ
+1 0 obj
+   << 
+      /Title ()
+      /Author ()
+      /Subject ()
+      /Keywords ()
+      /Creator (yExport 1.4.0.1)
+      /Producer (org.freehep.graphicsio.pdf.YPDFGraphics2D 1.4.0.1)
+      /CreationDate (D:20140121173240+01'00')
+      /ModDate (D:20140121173240+01'00')
+      /Trapped /False
+   >>
+endobj
+2 0 obj
+   << 
+      /Type /Catalog
+      /Pages 3 0 R
+      /ViewerPreferences 4 0 R
+      /OpenAction [5 0 R /Fit]
+   >>
+endobj
+4 0 obj
+   << 
+      /FitWindow true
+      /CenterWindow false
+   >>
+endobj
+5 0 obj
+   << 
+      /Parent 3 0 R
+      /Type /Page
+      /Contents 6 0 R
+   >>
+endobj
+6 0 obj
+   << 
+      /Length 7 0 R
+      /Filter [/ASCII85Decode /FlateDecode]
+   >>
+stream
+Gb"-6bH>EgN[<7@?P,L6@D*c-C)J^%%D*Nr,cY;>Jh%cPL*-F+G_oo=MK>mZf6Qs/(D;F\7Vn/idZd:[
++sg.05LSlT\+KIe4[6`Pk5LLWIJs$&s8(dO_d@oSSEg]@IgTeQT78tmq"_rps7*l'nUJ4*q&fURci<U/
+s0qpn^]$H9:%HX1rEk&8s'PcG5P":4^I>k_r'13?r73rHhT,UjRs3S;2LcHqs/rO)XWQ`5f;n$%pXath
+q>!r:k\ouEJpq?JGBj'VpuG5e4rdSt5QnCkn,LX7r0RBWD&!!U$\%H)k5+fLo,@+:nR00_5PhiQ`fE8i
+/.c:!nfqe/R#(I2QIFHNI`rTf:AG9fb=W6AqW%HVj$um3r&ff/UMR-<:2@t@F0Kn;6a/pB"/>a]j-uM'
+URZ@QNo8M2l4=Qks66a;pjgcIF8TD6!q]uhgul00+/A";n.0g\daPg8hT#.*8#q3VT*SHmkgSG0j*tH#
+Ui6:^9,:`]63$KIX)t,t3ir2n&GsN7k]n%1MBU^Q#&kG^:!CfY;%:_O]Qt_tSkQN6ZJ+WpH%Js;I_Ldo
+.^/),7WY!U^pbhC?=-V8]kcL*^07/49)AY7ks%CgfDhE'fta<4Q[t'cGp-LbR4lBN/5HIjW7u'R+&.0m
+Z+U^DO]7OZ=Il76d:UrO"f1AU\U#\$78fauPCA&(^`C6mV<'p+LmM4&QF@Yi:NQ<`q=Zk/IJr,`H6H>d
+k'WSklt\:DTGTCNq.o?I^si[.CM[?I1pi:8([Kg:U]<@`Ci#Yu=-kg9og33TIAu:$2mBFR\bT`Wk=dbO
+.d[*hE6#d3.*f2%54.[";Y't[F7kQhRQo4E.>N%hU]C,+(]>>0-H]*d.Idt$QSL$S,FTdEau?i%mYlCA
+WB2>ZM9/C?Irao)&>KD,<D"Pds,sqXUkTH4&Qk0FbT+FZ;?b!S7W"DL9L-i>bh'QN'C`D9eM(?9#hKq5
+^qbb1%d!3V5:V_>U`qMPL"Og2:`d/rHdbtbY9-^u@eLmR:jiB7dMin-P)YtRLjkRR7(ais\.?\&>['gt
+TN9>66t,&9,ak$bGuN4!T`$ukj,]O"1;T!`=B\8"4P?-:S]R(d!BUS$oZ$iTH]0QfC[_G2I-.]V#NGF8
+l3PU?OT!^"BU54qFp#_D]VHK).F=f`JJ&EL-=6m@I#Kknf\B_%078nU+=O%Xr-ct*Is^3?73^KDntNp8
+^&%D^pkdlRN$4fnk8+_/9*%;\$o[/L*bHL7g0@^p`IoDt6ZdiG+=NHqjVcc(9-gf7;"7!BKij)^TKd%u
+k!-]UUN;R@jdj<>)Z2i'Td]A-;E.!G=?2QfD2(5dY)F>dns,C`9O(^6oQ-bO5]R_jqW2?M\cW73Mlh2\
+%,(/;e8L[V0<fr<bY1cnaB^O5:bhW2L'+\c$`$6t'+e)u"*W.89.]P;CXgBW`MrD<b@Ne$RC#3^%]":i
+&WtD6oeTSC5[6LN_3t(Q#Z[/npPB0J*H);7&TSqCG`AP-UdIdC-g3Tq,DAmbOcEAQ#2'I`HKUMIDsq[&
+Mld=E>PIQi^F'lb#TpRVHluDM1qWUPh.L'-VW"_/n4N#SP.0<ll=oUA34(['EFb(u=9&i4c,CHNK@lQ'
+a$AEqSOLNi_>q*D5l:@@9^qVDIMD_XeK"b4dR&G4^28%^.<*$#!c,6Y*Ab[N`hgZeQU\/rceflk$XVos
++h_kV[C>H2lXP+OEPO\hhDcaM=)T(_<7_M5+CbPfETf>S."<+Nkg!<^p[K1Gga'rKOe?p-Odl8#B!X\s
+rrnP+V^8Z'+DF7!!?ZqRrsk_?j]+JUj#AJ``%nc6nBkde^^cR$/W:kqHcK1&6dh=e]4!0bJoqJ!$6:li
+m,=4=<k4$6Q6%5V?ocemXmcX)a"4/,*@chRB%!'2=3Q6;3C(rGCHj3+&u>KIj`^tXWiE]V^mLb_SAKZ&
+rOP80)ji!@Vrl^:5.,T&mFKmUS/@XOV&[s%^OFdCHGC:VLdXJe%/fdp8mCcRnP$;Ad!f:TT2fchU\QU!
+b"!r5K5o33d83S%2QNCa"f(Y?*uD3-9`+Y+Xg!gFTfKEliTgf)eaD^.Vh`=LVuBD&f`A^sKD+p1A'Ij,
+TugUr;F.k0TlMh#+uRWgfl5_?-tWGu]b!]`1FCV+%qAf(0Eb&-i6R0jiEGG=$>SV2:+<3&=$&3lnr/VU
+B]5_V0Oaitb/,8Oo@k"THF3I:QpGSZWq>6s,k$G;X'[Bk0VPHn=ci_#mpBFG=a3s,r"p1,g]GTThElM>
+quWYjn^Z9=&ZamV$,ioAHWB!#hnS"QK:+T5kgs''LrOT(aNgH_^g'(]jFi;e]b((0bBs$^5N_G9X'<X<
+o8[rejW410k40RsiF%$eQOfekEQmMHc>,$o.!+&RY5OA64+;s(m@u-Q#[d:#+3Im_:*9@=p<EqA>kUX2
+rC2D2IHC'^bJfnA>O>;57C/35"$_ROD!Z\"p\O84$g+`L';H4,,'Ulm50`S9F4h/2Nd$8\&eJ[>b$7-g
+8o?7'E3EY%mf?(3k4/PrE-"$i<$t(=%_TNJqX5!0W!p/$h@Q%")90c'i`7M+^V<'>8RRh@+LoE&6$)jP
+/\/E>3^ppHWfd#Ck-EBS\[cNen%i7XEf/)IXWZAKJi;m/SSkYKH@o5JYR^>dq.([`9m/'-rE'@1Ra'Ak
+<=0_7IM\^?3`\7>ShI=`>3XB;YHQE"=;@Ck=UPJGqH-8!D4]U)Z`LQ_EkmWpALn8G</b\M*BAFsD->c@
+!5'FsSIeN(dXu]gB>RnjLO[&?_So!HHlsapL(Am-7;hHM.Wg\[TL%kdf:XpK^,LjW%-(T<Of[-D1r!^o
+@sQ,c[]hab!V::O\[.ohA,dH=N<9jJDIPa?3.cf0m$IC)k%5.P1IRca%NV%qB(R'OK/PWOkr"\d"\&t=
+io^F6=qW'S:]`D"U&nWqU)d;;8M?*5Zkg>=R-%[)?f9(H/Ud;qXAIc\F:ARuhJ/"E)mD`SoR2_UBOdSe
+YY>48&ZH_`Sg[qd7NW)+:;8[&0^*DpN2GHSlKX,\jh#A=E\ZT8nJZaYTfi4XP5lr4;3[OQ)pKqO/(]KF
+MfK=iVe&u7kLe4[Je2O0qugK&%5TJ<_<fFe=>Xu9*t96>+m:MHakH%5Jot\<^c<UF>/Na*H&#pCgU]Qk
+h7JEph$/+.0tnGpaY\#DCuVQ.h9-2=[(\lm;i4acTBnZ:7UoeRG@s0N;`R?3flp>+H=r--Sf)C>l\$C:
+mdk+DYJ>sj=ec>IN^U"[i8L6Q!Sg>]96:@bHJa<DBscc&j1NC'K<oOBJ^KuJ"#"UZkL7sp'DCgHp"q)Y
+fQ#-N$XQ:6;.3.tG-UWPD`qm!i"Xn`I"G3U)#LMNYIO=?A'9r(7-gcU7\mB9L_8EPaCGFNk_b>')1b@W
+WKGsF'uIZ0]!+j"5h'`?L/t45\Y5;6OLq3/p^Y(_a9sOOC+ldrYLJ$XS/kYei:GA+XVH;U]:maYea2I#
+ml.^##/CGRU`1e:]:l5i2tSrIc%ZFaV3Hs@GDmPa6XSdF`Q\V9>gPJ()'nZ>S%5``<O8]Wq,"OIWO\]U
+E8h/R"Ati(TgI*84gj$'G=,`>O!8FP5;sLl2EuQqP4e,;E3#Qtm6NnM822R&*FOIId1&7'c/7:cPo.mX
+I>AaeYC]mEL/q&Z\tPDT"l7PZYV`p1H<<HlY+u"G?#=qCj!uQ]d=Rka+pOC#73Ues82mnNE0bD*MjPC"
+W<A.RrTekc#ad"fFMT.=^AZ*%,^SG^!qB(D#%Ag7rV=bHQ2!$48<CgbIuhEkO2:Wf:\Ob9mg8q$.!qrQ
+ho;,t%mh@FqqFZI8_+3EEl?:^."qq,q*:n$>B%mB[o[MFGC9OaI@A_n@\<Q#l+IJt,3EeUWcIt.ekR3$
+H5irHrdAT)I<glA)LK.5+oQ-NjfmHDqAhaT!7\A>bpU1F;?+Z"*uqQ%50"EW%YO`TdeZ,d:Bp^"Ogb)G
+?e2,>j"01Ks2"c=oNJ>&*EYi/iahX#`=cTL1@*Qtj+N]o=]ejg?^NSEM9+IPYQM>#Rf3a?S^kjoVXI$`
+<Pf=E=>Lc`lIZE_\lB`D7Q$JBKK<^82"N-*O_pN^"iPG7SJd^A0fh1-Tj-Uq20KmHVSYVmrd7EbN\.OQ
+Uj4.P_]l#4B)g`=qq5rKcgC$=(4l<?@,.^L#4d<0;>s`r>Gs^12F2/m+$9CL]cZ:tp5S"t]-B!ff%.pq
+qP=V80$9/$>pJ1?*iqoQ<V_=adMB\`Qn'"kh/-gibB."O,?^5]5;UNcIli1)3(.ku%B;QB'$4?"g-sTE
+/TBnHD8NV\hl$L%*LlM`>I^H[hA0N:>2Nr`q:BgS6h\5#oY(^LZ)KWOY1>7;piTGoI1om2h0B&VNcB2F
+BUBN&Uj5X73up*VoFl5B[+b:?$pS1+0VsE;Z-,766Dm0,!;?W<Gc\01q.pLDq)U-_;tsq@Rp*BC84Ta7
+#81Y*4H8Q`dQ#Tq$CNTulr`0L(/1%D"*gYtLr)M\f$85le9[FgWit/0q<]+]TY?TlGAJblaHIKO:77o7
+/BZA>'O<M,hLh6WmlIm8`U+IFf^6i=Bb6.--V0J`Y"cQCRs;(roEAt>JPN;)-tK^80%`iolU;aaqK`20
+eMg+0qJIF4[<!bRiXBR?#lAIe6]L?r)er&pF&7946=XMBNL[+Xb&#0/.*'&YY*&-[`TTf<fE\,CKP9(d
+R221[L7i]DFsdQ"a7es^.Y&Yj"$b2Xe80;[[B\60BuQ2A62UI=*oS][^dJ8<5a/=Qm=98$`C8npgC'h>
+)EOl"\Tla[KS]\i\dHqTiDCD(FfY:Bc'\)bc^8@]YZY8Zqmu2@+%nYM8cYci=%Qr(Vc:RdG<KH*8LLD<
+=okor]>[bL"`$*hh@M!fi^;e8#pN0h.CYbr)3gs95(-XZOq3J1%SC,*mSuGZ!9r9US:)8j]o'+Z.Ys=m
+j7_j`AsBq7<n,%N?NF$.q_;c$fSY]!9[(Xa,UaCR"fJdE?#r9\hY=X4'Z6L`j_NZ*e$b%6od%h&q5tuD
+a/m:[Err>A95PZ-+#De#b/Td-A9Z9Bi\"*0npsW&^U7qJpKIUsfRCUqZ$N0eSu<\piD:>HT.fs6h6-3"
+qrZY3[d@mSrAb44+`)5hkP[hBa-r'FI#`j;HC07h9o2;lm3m]=[<XlBr%)>*gIlG28k)V1<jT57dEjV<
+B"_A-+lNZrN9KRTX5Y7F@eiZWlF),B!%M4pLmGO_K%_gHA,V'b+)k3ZGqoLHGM=HAYUb:-!rV%c7P%mt
+a0%imn`^:[N8AG"2Z!%UdID&l.CR@.K8VWZ5W!BL7,!KfK04DKn^g4BfJ`!eTTr;@MMMa;VpOgI-al4;
+lp:Mcn`L0-Dqdee[:`k`.$Blmh@mj8dEDIk`7r<Lq:[VbKQ-$o"q-0N$eESYrI@H!S(Fg#/jH75#3PcD
+*ei?-c%8,=<!OWQVE:3+ON8)DS*63V_[J\jZ<E?KBU90ZKEmV0b`C$:A:\*;3&+q=2K2=AM])u??3`jb
+Ha99uN]r8MT=<si/(RtSFA:?BDT7bOX.(Qr;peA8eN:umUoLe=@opY^j8r^/]9e.LSN/cKE,:uR0*Fh&
+^gIM\'0=2t6hSbSfF)8fgol74=9L<.Z,7Z>c1#8InqPe0faS5N8Ur>4B.FZt7?=oEELnY8L-R6(R2#e<
+DMN`J4cH^+F*9U=Qjtmi!NW)5-]%"hUf8g.\^@*?KnoRIJ/Bnf%R_F1UPsRCS>`IYL+pXFI-24:=>_ZD
+Qq,)3V2i#s*MK'LPrHWm?Bp*Ho;YBX1TrFZ6HlK.i*]l^j<^0p-YnWckYPY.&XQS#nj)QW]IMG=k1)n,
+Mg9I:P@36M3WemQ#3HL0GblkeJT.?`arB=q060\/__e[_NF,(=o8q6o_pWjs36>L"T3;+4/8mi!eSJEk
+HP0:0iq#kTjOXoEq6@(:[ON"t=cOd.9*E)m3E&p6`d-)%":L#VUFJ_.6k$PqfS<5FJ:6e.LT,t:QK]X4
+c^fM8BMO_k7J`9^H%(A?=A&R6,*\T(S``RhR*Y#/90.LCE6B"[^T#cTI%dVl#Ai(9VS/8faE::XGkcQq
+3KmF\Q)T/F&:S9;@pBg%lS4VWaj26rb928J.#smF9*o;Ccr4G*QqA&\mE)+\9<g;ei$RkYTS?>u1JA4R
+LCOF<9kj<dlfT@V(eZ;oh*,J@4oiX@.P..aZ7#'P(m3hZ3iP/?7T\nP)4hU;>H^%3C/@H45)d)te'L[o
+W6eX!rP^>H-1*U]Z><g7[^62aLhNkaQb4jOqWAs0Jo\8VoH0Q,>ae`SS8i[SV!]ZYddFF'M[X*]%lJS&
+GknU8W[';;>[,@q2Dn]gqTj^0C(AD?dsaC2Ql\%m;lan--nQ'[Y7(6jhjHWFIM0ssb2P'D\YQ5@\+cG-
+_3?s"#""?g8P<)C+ckQsp-D+AN.T@EKPJ_4Aa",'FXE]#^:$+jrm59tXHsH3U`>VSi\"NIoU+9Hg/J^R
+\k77^Pm`D\@3Vl7R_'nlIitoc>@_A<`=m53kkm0__e4J*S+'^4IG8[h4V3,2f>!jO3MTqGChkQ2i57=e
+,JpAoh"Xa,^D@L8a3(S:?NK2"Y9Q(:<JNZ10>pCos6(gBgCQekAhc!]<U*WBh$"J^K1L*LZ@PZO=q`;s
+jABf`@`ZuMmkV7_0&L8SY/><!k2]jQnF47+Pug>WG,;jXol_=Wi#/*TKlm:)(J(%Mq@53(7^q/B5+4TK
+UWdE'8H@ijeK3u/fQYd"/dV4ZN9JP^<p9+#d@=c2hp:sO(BPgf#[GZ*rI=u.JjWr8=hPeZ/>G#U(-^t#
+lGMLDBcHWqQVeN5O^MQbVL2H^%tKXVhprD%0"t=Q'M1_P6)G=+/gs2R=:PpJf40MjV@a^96KE/)EB[DU
+,;:@FMcqC%E`$J6g8[0<YOaYgKott].Du]RP8gWr">@$9W98!jeuj$W.g8A-0>HpQ>:>4f\?8\D1[DA0
+;i"R<Z*l`cRPW$mDifn"blr]mmm(Ed?`]g/#-dcBrRB$t:<I.rSobE`J$NP>NO/QDI3Q!H3O[k:(1`oe
+)L!HFdJ&7<X<iC@3(-_XE3j^LgKr`_Ui#*:Jo-(Qh)SOh.*gpV?8]P<jl0"l1epAd]g)?_0X.99`l?^N
+3EcrX_:L@%XDaH.JaR&;XlNdMQ7rku>edrhp"pAAL4`H&i!n'ro,KC8kZi%@V;A6CaBU*AdE0;PYu>m`
+K0\DLh`(U;s-?=@6L2JV+3gqY3]6X9b:teW$"/i9+L4$i\[9B-Yu7SXOT%#MH/G+ok^1[&(u$W\e=!tN
+a4[Gc<jp<!<rSUj_?=J.^LkVt355M]HATS?])?8<d:bD>S`7dFFKQI&s!>n'4TNcQH%"8HXR3,k9)jeI
+pV,0:SOu;I[o]E2pBn%#\G<@]*TFG[?:*P%'n`dIo)>^Rpb?\m2V(q)N-u(UQfY7o,0OsB@U'`8[tr2e
+!;I;(hCH+7aK?`h<Ars\pTR3(PRjc"DU9sOX4JVQC#TV5Vej_:C2C$hK!&+grj[c5*QU]S#+IhGds.,H
+\K5$=c>)`UZnTT^R&^@o/TJrMFb]?@E2_KVfM]V-Z64rd"gAt>83Rj?nG7<D9*rDs$;(;WE[:_"p`tW)
++-ZbqW*A-3*7!)l$gNq]ko?C'1!4P+Js^u^Q4\H35*li.9m\`WomPK]RWi:2Z7lLYb<Ac_S/lfVU&b8G
+s4"2;C(mAm>cP3\$\*;0m9XXic:8r\UFe3g)"PV&(-4HM\T)f8%O^6s?:F1k>dGWD9?p`_r34tgpt=R"
+PlEsSC&3,$jS/EG3krGea8(0mkPKt)+7ZH4l4EC?hP-Hi#[tBP^BG$q+B7I+$K:FG/VLaNa"3jYSO]@A
+#GTi)Vmgj/@-cQTIIuu<qrl41'uCDpL8\]3Y9V'E)#](3NtC_5f_I_`O"[Wm,Q;5Xs6:0`ImK_+N3e"Z
+#e/WtAaV_mA$VV[L)[l?="Qf\jMWo/a31r.R9D0)ME;lPDH+e_[?g7OC9V5mBYF8N-GNmO1:(na8'(&/
+JbXN$Ln=]fc`H/GWJ^M@ksc-o-gONOd[C+65R]_g;mYkJ8G<qXm?036VbOXT6+>#D8kX=P/uG)ma+2].
+Yhl!fbD0/dacK')_MfJI=."!V72Mbjj_?K"_etDpTJ#\DB*T5gs*9ZR+25>>NG"#qYWDUQq<Zis$Sd*J
+7VEpA?-r;</q!J;^+[F/-?fe@3>j]:iQG$ZR.J&%K.)nG+oZrRD0#iphYGJj^Qq=D*`U1V?]NK9/Wp4-
+Lk\ZWi@sm?m97,(Cn*2gHdc(U"O*uIC^cg1m4#A@6V;M+GKUZCZ)s9(96ojNhT*JR#SKN`7'b+j[0IY-
+"(Q>C8;Ltm&PAYq9C1YnD+DML*1`_F?l4#O8n9A(0[+&Uig*L)FRn2Olo=U&2hK\D9JCOrgV!ojSs.=B
+TQ'_T"a(3*,6i8nCNj'Df=9A2W"sdZln^6a%IOV2?h407k!P\GIOMP&f03SsqpN&S(>9Fqq%P(Gm3uYS
+Hcar\)#Ys-FP*.[IsEbVilp#FS1/Mh!ukGn9081gSE;aQV]mKu:^k`4VfGZ#eN!lZJsf,sf.ehmEMYQ%
+L,04Z#Imaq=$TlO5EW'E0jl7kfR6<rZl;]IV0%lk?cX"Ogo%FJH57h:k^\)7!?]8:U"k%1>J">#F@E<L
+46!NK(R-R6M#.2_s#C[Tj`<D0%QL+P&V,!8%0Xj*cW%h&aoqBppV#SLQ$H2LQ&!agQgAPk#P1&oW7*tD
+1[H56'0kc*Xm4hBMQIGZK2$!^biU5IE[%cdU(n3u2$Zf*'JO9,-")A)5ma'tQ5%JYj)$36H/%-k@k(UC
++BWOO^jE#gh0$5_>&PZ$&4c]Y&sR76gYc)hVmus7M0[c?frac-_oRD62i>^tom6nLG#6KidFt?Xk>8cU
+`4'3`%rKZS/g`-H??&2,"F1[@7Gq?:KUq-M@S?dc_qY%-8qaHLMo!F8$q=Y#j6[5dTsL%.c0W#H['YB`
+eQ5s",T#&^;@c;E3&`Mp#,gqZ.H6k#e4:J=SXUPqH%L@u>C>nD#Y,=[9'WmS<4I7__++*&Un6<B=J:,R
+bNssHC&&"gHu7?pkpB"g=+0>e:?d]$f601VH#:oqV#tP:XhTsn2PFM:J%dVsEMXpH^JX2=(=U>ON/G25
+l\e8OrcR'nTY>:"mE!"[V;/9J/@TD:DXDV->%6f@PLKJVL"rYG%]\tcBPacPOgF^R)1GkUCJVN2\j'=p
+Q$)f#P1JanWXrYmc)[Lc/c9dK,M!a%KZgO<1?G#.G_\Z)6AC&+j4(qMhqY0[f9(mII?V*LhleqC(4LGM
+mJb@7HU6!8er^g7?T65MqaU)KSHt47[5E!5IOToQ46=gJVe`(i'?%=Y"L%$YDAF\YDaK/++D`k*M,75V
+-[1s7f=BGs=$61reI7YWL+^eo&=`TXR'uVPXn*=.3O.p(&T!p-@N(Tp%2sAnDjBpslK8=LAatAo9RY4#
+-WoQCjH(j1HTiDc<Xa,d3d5'TT)UD2;#_KYS6_['9J\HQcdi3A.l'c\%!=bMm.WO.n_d*':44>A5?!gX
+`7TMl/J>F1%ir6?$B6Kh-TC9rF#32=%pSEWb#c?AJJir]ZJ[(9>Ai%$=`[9aUZmkcUZOI-jReI(GRM^X
+/ck$m2,(;+ZuWdAll$o0JaB<9AQ3qD,ZPR2+j;`0,ii8HJBD#18K`MsG:9Anl!mXMjC7GrXHJi.(=ltf
+^;-_i9LN9S3H^sMbAalZJS<**rHXUOGSFTN<)<mJ!A)a55/N"Z*`#8s<?(T%2>rHDC$SV[d6FsX@;Q\=
+c_[8TS]79tJ/jO9Z]*]$/UPR+]hXCq4^@J9TT4!%fn."`ghh[2PCZN#DnHW%/2\*BDlnGrR%9>9Fr)r%
+cj)lt'$[ctN[t]rdq'4EF<15>"W"%'bNKZ(gA`?Ja],\,5C;_!bk-#rVs54\"SLT1Lq[F.>C"7i!A%q]
+L,K2gV6`Rk_&%EVY-9A!L_/CuoHdsM+;PhLPA`m[p(Oq#)SfCM8CY7nh25W5_)2JW]7OY2Oj,I2!c8f=
+o(uPME@U=unCdFBbHSe*#U2s7hqE&"]lh*6OC-$bo"Oq$5i9J\6'f%'cOg[8d3<.ZVB@=OW;#mBVsC:o
+gG7%[hS6PY62@,)7:6L^f.B/uFBg;6&A7>+JVfjq]\eh%r9!C;'bcj-<A.PMFHpBf]<$%b),#<c#L&6?
+[(H?QHX]-POg[EX[`(>>#"760Z0noMb>?Yd&D\@uP[',Uet1OYC^lQX93C2f5cPe4^to6<?3NoY@8juN
+Qp2eFE791;nD6i2"S\Hd]AG\3j.;Wd*F=u`$luL^99rkp'I9mFTYQOB44[/=$f!m"OdaEi@`5uD`!hg\
+ZfY!BKtphCCgOKk9q"B%-7lC/92J6q'<U#Cf=hF<9@siN(q(@*l,R1-bbWfi5<6clU@Wuk:-V6Mbg(-N
+:[C*/IsX2mG\AJC&d.[eZ,CGTh*6]AhKGZ>#l?d><r%;[*oi1*iE);l*sfKs+B2KiD<(HF7um)I]AQ#9
+0G"63Z)O,=CuBbQH1#_E+GYMb5!Xfc&5a0@MV<A"#9fnTH>!>"KQg?!i$Jnj@XX0M0+MU4E]["3[cM^e
+Qss855IXma>oEBtr6fF+I_gBVj9RoX'P[<_&I'=ENpprA+nAYt&2bXm3*en\S"_\T)q5H4,&=YSp5o`o
+]/#=(9CkmC/tj7F_Ro>#!BJ#003A(rlqCHA0Z7uo5oh-^;3]Xhg+GO3&qaKT-p7p;U9Gr_Xf`%$%OBcV
+!?mSL6l$<&$2b.pen]VG3hjHONurt<QNnCHQ=g)C^R&khj-rtjD%CiCYV.;n,@Yu`4[u4MT;Q.Qe*\@&
+J."BS/*,l;"7*["EUcm`T,h]]0G^L,^`XEnj4M%mo&ks*[/fM-ijB"_M8L@V[1bUBr?FgWR;![^K\&AU
+7)J==_JWThfrH3NZYqoILoU7(_Dsdo!=S_qGlC$`'-h%3;d+>+<(f/.GRF!4Jagd].ZPq,5rdI^T_HG@
+mKtc-bqn(8,OG"0q7B-em/Rn4ao`h#Uf!rF&:pd>N.423@t).5lB*;2Qq,)3"d,s[Lt`SDGt/#"<@MT8
+%lqMP4QHbQk#EjL#1#n;-:RLf#P6<9^cY,C='d0qG$lA3KUmD0&J!#PNj(;Mq7Fp7JsUaJ6s_1=T-kfo
+'idF/Q[+]lNu[,RG@o&24p]LqMc7b!AhQQ^b^O0#`3u?$O<_F+_m.8p^?%dj&,E\Mqgg\XR!01j.[PZ'
+;MKDX,>*t%4DK(l"[o.`Q(iXM[bFR@_c!oLqm^lJ#',CKnu'`o,J;U(h[5g9jLUef8s+H\'l=9,^CMVs
+"G3QceR[&0Y5Hqse9(+BEeI5DLBi3YAR48TSX!Ai87rD6;5Dq]GE.VQB.8uHIGHDW<OFG')#'=Lagn^!
+LBIZC?i50[&YNo\Q3#d_/J^k+qc)e\]>+^d@!h2NW29:<$kkuq)(&_T-:%FM'lntO^.H/q^`L@gK2ma&
+e7/KZ4N!!1!N_Ve6;/\%_AWh9%@d09o.=`S8;Os%ishue_78N5^"c?")(9^8dh*pT>F0WKmLuk&rK9ep
+qVIM4]",IKKh9aV%4TChs0`/FRdt82gFmP#f:"@uPWc2jc"5#`d)R?0Wl/RiD<^-_QCILS^2:7fAaLqa
+E,0cV1ZFpVc9!7o&`:t0Eq<fXV+S3]+R45b]eI.'lMtlpk/8-.S\O0C.57?$^@CLQ3MTsr,^g*d@HKPE
+el$bi\dIf9nd'h2j7N*:+cW;eE3p\7WO[g69cd>A]<>R?=$:SWK/ZKBF^1%A*:/%sY4Gk.B1^&UE?49@
+1"!mOs$i%<9]bNj'ChuLrQM]%ErGik9+6<)?VEYri<\35]PdYH1<K^HI&sE4I0GS%NB+i\eT](HT%T.i
+DeeQ'1qB$n^a`Eb)sH_,[#n<KqW9q7geA3]$'[7:.,WTC=aK5B*,nA;n;PbYIYWKGoK,I(lWMIpFB'&j
+:F7Wsp$"L,r;)XPNkR*uh!"Y+fu1.@3C^/E,=n5FSHMba%n2\b9(+.`mu-Bt/8$=\/7%h#k*@Wodc^=K
+0OipdXU7>LM`(]ETCnN)(5mT74tF@<mmU5!A_/59b6U73!!=HrBZtC,mE42o[U/"V6T(iZP)=-"S]Gq>
+0quU,N4`DV'gFA;_2+gYhE]]0\D]Cl@U^g@o]?DaWNDU&fpt&@>ti!qUG'd@b`LNo^e64&L9BF7'U0k=
+&V;4MQX=s9/J>te\iuoJ;m'5o3=3-WH5BadhgNeK]V9<nJ>)Es1p11[o9D7l,q9.t9]cJ]Ei_d,CS:Qg
+($0>'jX9L1RGF+US0%OHZ@&bZM7sdJB(#c5_]`L1i^`CX">@2)BU^sfH.u_UcFIs]EA#<&WX5hd^Y\TW
+UEK'lrR!QUJJJ,<2V-I#fm;#`<RX2gSKhDBh.)JLnP3.Z)'\J6\">AD:IMVnb+GAe%tm*8FBpS)pQXG>
+l0\&_>UP!JahuGEM1k!<?4,<``W:/R6b.=,eBS(0]Yn78\bDZL!60R2^`Ye(o:DMDPjUOuld^XKX(rd<
+MPe/ipAJ_hNm5`dF_7%m1?EC?<45!O:ZLW0P3^>N3Plc]YCM^@W`lZP8_'IPdV<NbZ?O!g4B`ulc*J_k
+jBNb"s7>rf5?jK*9/ZA!qc;Tr.M;*T<6gJd6gHUI54"riff//lWi;6N:jXb^ce="dbZc/G>DgR9ls$-0
+bRm%;g-^ni6*0B]r>%,P8%Y_OZVlOWaK?bN5]4-I4Y.4Xb"#HBDGVbM@]"0j0oat>lrp,[hUn6qe5UT\
+?B$e64-5HZGAikG:OdaE\9OOog;R`6P&i<Y#o$(^IGJ74g:knkEd<'cl`Qa/W8Uk\f_L8d,9!lp=BeCj
+BKZ\=UTL0la;7QkF6oY70IJ?7GAF@#GJ:S[ed#ce/k2$N&lOH5AhcgNT\S_YWY4*oe)8fc"q78(*iu<q
+6Ss;g:)"29`a+mD!#0\hAH]!?hFD$hVq:iHl^POu%*(:B_I-i5E:h))\5#t?S=Qt'M7ARIObkC9N/6f4
+jhVJjk:bU(qtD(=9.uiM51=,#\9XgTXCk#f-ULi4U)`-[`\U,PLtIF[bU!-TUiH;(ekR4OGT3`FrdAT)
+IJJeAKLsFX2LER3M#B8%s56Gl&WVL7mt:T6deZ,d:Bp^"bn9rAo]a[]q\SE$T00O5aurDV><A,fjp5N_
+^)!G@rURO1au1H$FL+3Z<9jWpEO<34]cAuf&1`/%T@rS1PYNaDd-SsT,m#/`FT6Kg6EJ%JSLjGGigkp5
+!O6lh!^l0giQVY5moXfr"7R+#''9'pYSbonJShrm@#614i"tr\=qB`g(5+QC[$;o#if!V"fFKFT!*[pg
+H';QNI%DNpLlCh$eh4JF:9BlL.<>4[Moq<g$_>"sK$\f:]kCL#`\nn"08JV=9pA4_N)/Do56W]3idgHI
+(7Rb(^H/_!AY]d/R,&V\Ttn97qh3dmN%h0SAqp$F/W"<__F!'t6t]oFfQ%Tq;UlN).mRA5A#WAJ^e@3S
+:mUQ9,AYOP3s0^F!CUO=/8Jl<af4s>bBELU@#?;.M,itRc.dGm*9o)Kgs2?^mO>C[rZHj!&*:$"ZH.h'
+#AU_dD_ltO2`=V!$N(5:CVb7*YC6<QiU=+Qauc?M=m6T.0>nhAnmg?gkFkF[!!`0Nj-5B6TCH+Nb3lRY
+E<q#e6a[9k1E]rC/:3RB,!$t`FrZ^G9H\8jf)b^8e?[`LK?utt'=11X>I/+Tr;#[iJkXX5T86-><r"ut
+@t).5MAjbaUflpuOslpG,9dO9<B^to&t?;e[b,EV[AJuJY";dX"2QJeN0KOn$IYBNkLWs)::h7f($)_0
+DbNGPh8^-Ac9t%B9S7ZI851CTkG8_-+eGc@E%dM\573SL48?C?N.$lkADaSBSE7FHePP#[KOa?D6p]V3
+B.,J,NSs1c&3`#%p5u-C5T+t*.9E*_NHG2HYemci077^A2)M:TW2+#lql[l!"D^`sh'0ADV-WR#7gQ+k
+es:o!lW4,YlVc*rS(+oLiTgB\8m@fbDDAi6FpBO8lN:'P?QY[3m$kf6$6V/`f%.pqqP=V8mZ_KbStKkp
+47eX%H)f?-SgX["cHou_r@Oa+&W-7i"baQL2XkhWq*lP6e"STtV3lQjo#743g.?o>m$os*o/Wu,1b9<o
+cA`H7*[lu;._%soUpHf.dY^qW6l5WPKF6:#H'9pLG+(J0,et)@%5guXaAp)`MfGBI@Ai9'V8l2I''K.1
+&6FXeaUa'<ebp/0R+P2Llm%jA4J,Z^85gBK4bKg/V%7.u:cHH$E^Y(!cY%15RO^oH=o:069Iq>_V_]r4
+Mm]=iIJmB.<1ij^7(`GJS7jiS!sg:.XnbU]r.S^n7YE(rK`g[RQRkWpotpc1a[bt%I/e#A<4>nMU$l$g
+\o8K,gH+#8EM2.2Q>fCMF:0OXOB^>s8-&<B?U/`3*7&paJ^qc=%5*Q<5DZ=Q>L9#l;Rd"^al\E@MrfDn
+\a3fLn@9F2l2pEhIJ9sXJ18K0P;5A[Bbr#Eai@`hZ2Bo1[do!:&^_'8_a/R;3[7mG:tp(Ohec#AL:4/7
+QK$[Y9C#;(.&"<6Sb9tc+cB;a+.G3:)P*igWeOWY-`@uOM<G;Lc@",i/$L%TZM4$RSre6u@8#UPK22u%
+i%P^Dj;lWcq"4Yd$)B*n+G#o5(SZVYne[*)2+08$%&a*0HioV;(GrQB_QMAnSD1NiHX(p[cZQ':&Xf)U
+Om30+>F6tQ:mt<;h]&@MVgHlsD[g(^Efp=W+HG:$-\";oHB-9ck$"SW5n$2fQUp<_pG#Qo<nd_dOm3VK
+YhcPPh]Rg6NQ*FiLqBMIL`VTJO*p4$)%+8-W)0#E3Gk5mma%D<jdo:E+^tu"lp[1i.)p?LbTYc7/RF*b
+@#$X'Y0nNEn,0I>EpJ4(J3"Sm+qUPIUu)`7W/Zac,/BS<n!o8tlB-?WKN<'KqMD^F@?hAAAY(-X!lK(e
+SjfYLk#H-4XRkKoR"ke'^cZf(16777.opp<G$nXAC/'$0C-@qc2a:GfKmF3PF&:(*,4I'RrB([CW2T9I
+#gA3sMNR2$GB@,u1f)`p<@MUpRahcX/utV%Zu/1S=en)Er4J-;<H6mpp$[h@5N'7Gd886`?8udO]E^-D
+a&_cHH.;6bMhjWn8k&Q1-uM,O&*4jG6^INt=^crhq?Y1Hd;K358TJ+]>,B<R4?l+]i_+/5`ja-m/FI0`
+kVli#ko1kt-Q]Ym'bH\7rKE$TZo?8r:E)7Fe/5>UgVKL`SYQ$J#d?JC72uWkng4*/XS>VIFUksi%"Hkh
+A?253%b?!M1_<r4[G/J7cC\MHW-(X-\ec_90^B-i(g(\nY-2(ps1$!Dn/W#)>@[@H:="PmLf;aQoe'+>
+J\6"'a!Hu^>HPg<oCHDEH8k,Uf&FC8qAO9`Eq-.'3'>6%l*$NWj_g(]%dREVQ-I9"8J%TO_OF-Hcd^i@
+p3>"o]j%f:F451]fU]#5o>UE-$%oe>I$%jm'Pi`kWap;:A!'aN^:Ap)AbHA]mSQ%W=]#^6p:$d$iRZ6P
+Qk<UA#a9(B/bHa6B^J6fcuBcFhO>l%m-?\4*0RiD2:7l0P7je/=q@joW/:/:;(r?74pL\agLE_;fbMfa
+HjA+BqM^("nfd\(!"lRZK)3$6.EDQkhGDFKl`(f$*kbu+Y2buJS`CB&SR5F.mP,=*J^,>N4acsA7B6*k
+=/q,PF2&cWa9TI$2j=I^*-X;/KMa80nRHRZ`Y$\?b-,no!TRf7Om9F_-q()-Mf4hXC%H$e*"QJlkKXjR
+9&2aV(JMbm]p66c"6rUW-;`"/UO9D'reM1ZpVRR_o7ihIUOe2l&!8,^<kL[h[Em)7pRU1DcJ'5`3%KbC
+)d(_Z42Bblh/XJ1bVsUU)sC%K;/Tu/"CuV&JOtFY_`FP/SVYA4:0&c82+M^Vl-T31iN49[SYF_M(4TYU
+SNd5]T@M,i`A06W,^`L+fa!"Vl4jChU5s^9g"2E"5YOZ#UGd!Mo@As6gs(Uh;E6$<h7t?\E_q]CYoFt?
+YK)NmpDb&j&Aa&@rHbh7,9Ggk&CM,hI\jJf:?Y\%Np[J^4JlTH/KekCrH-C.3<E[]?3\nC;CbNTJg/AS
+?b]KC,_j-XNDc5p="MZ3iiLMtok`II9Oi?:heE-Yhh=UIm>CLXgt'NYIVS!JpZJ/<UhcY#P84%6SE2-e
+':D#PHW/M4%6]IJ@ZKuUc=Dt*^,f7Y09Bt_G1AjKqc;:#[Y]'SlZ')JS1>BikAi,WS7MW_fpf]i'SLb(
+YI]-,(g,0-@mb)T3EcrXTo_=sXDaH.JaSRioeAStQ&,=g!s6q9&@;/D+&s#"6fe$Z0GIAcLbZ<3hILYt
+pdHR66L2H&\#;Wk0VZ5_#N4n)Ep;A]SHC?dM8Riub:MPjJJA7<U\%7*qk]nqX_-GdiP=9*JEC:aX7a^t
+JA)8jLU#\+7\/ei4]ACeJ!t[XrcGQOB*G_*1EVbE(f#ldGJ-t`@PO#$%-=^^,$oV.D3B"dN>eP)!Ck@[
+H%"8H>&U\WVo5djLX%.^=<W@4onBs(DVf`ifVG,2&nsFFi;.n)0c8Xsn'B^?C<TleU]'L&2#A'PreON<
+GC7MPf+O4S]3'Q7n0aZtf:,HZ.'dt9&Z@IGM!e]6J12R>&_s$`/ll%BP%,E@"51(MTtIWd>631%WcA*9
+q:pO;r4]r!KP?rWpfrY.*bKPW:Y3H/k?tG*^p_05?aKn!+RV>@i,bU(h\Cuse8P[ua-G<J\S.9ZI!Q#D
+:p_98$%PmU"MbhGjDaI<&qCX<bKXf@3`dgE<*bA[V"L&kOf`OVE#iE]Lf>J^qHR3(U76<YcIB9,%&<Jd
+)W4oDns=d!E&]*1Z:"efaEqSD^B2*0`0s<u2h,sDRerTVp[X%uQq*runAL2"3]Tn?9Fl"U&_HP&19oo/
+&TO@#7&gLd/q3N/_asGBH_d")s86p>V147bBB'ZWcF*6tZ)ooPS4BB;k2lr]s8<+).*Qrqr(P!g1.jKj
+8B7!J7/T0'Bm5ZF6@UoF+.on9YsU`/U>q\32V5P%fB@8Y^]%&bLp6k_LK.bHRsU1qlQbnHQe^c5k9$J^
+Dt&m\ptDpurV8@CWEAN_B*_N5kgSG0j1d.Fqo"]5<-(,e2AY!-#^ZmLoK68GgHh@CVjT)Ar.)gh52^4R
+T)(EE4h6f42(*!IHo#^C1eqV/4g4\Cq^7A7e51$Eed"='[H5q\q\Uk;9;KZ_"R\^e"LZ_TY[AOX(JS"%
+D"AEBHfE$[[6?D6G(#p>U&$Ze#GCo'O@)0@;`R?3OgQd`?rOmj%a%L-Cj*D8N00=ldmEuH/gFt:(=/uL
+dX_X3P;_)h9q0\GaTIQ4?n:MJ8VT24dK*DR\1s?e"UT593L3l2#L!R?IE>!#]>.=K0UQ[PZj;[ZkW&]h
+)*rpE/U2+rfr<P`&9Y8RI!o,@](^%a>#Kbj$L$$m<6gU:*2XTb:tiB7U)LnuSHRa-d,&AfXkY_c2:H41
+V.,T!0mMJ2;Zh1"&a0#Q!<fEM,'3k:60)a9A2C9b"\b_DRF@_AB#,L@ETk(*;[lFoF1X;ci9TQ9S+WfP
+"/b>sBq-Q.ZM7oo\*^"ME"g1kgB9lF!#6(o"Ku06m1X`5DsOb!5YYTMZFdksh^!R8qism9c-%j4=Y]56
+R9<f8MF9V\cU$17f4XpQ`_>F]5Y;?<o.(r&YDdT?`#'A"F4uGYgSi^>qG5D&K^RtGOMb3WPhT@5X^/^j
+[=1/Q8e>?R\O#*m'J"QYa``YD)nQ+,qVb*\Yo9uM);i)FZVW0Gmf;b<8_!(nRua)I72^#LPiL@a=8)#Q
+GI!r1d3MIE+ai/9)SAka\a+a[+gufqihMoI2R,7bDLNUN0#mO,3T]AhLY)kg^lelTcSNS>nq8k((PNol
+>(%.`4IldkMp+ic%3u6;5*.&:D\I>JNt.LgINiB8DLa\AJZt-'TBJX3Qd<n`]Q)0Xa5dLak"kLZ6MG]!
+T:OAFp=Y_@43Z!$GE6WeK?3!<B=mRHo!KkYG,r%DcKIcQB8T+<5=NGtOJo^=]d(bq(^jS6V"4?+gfd!_
+(*uAA&fLG(:mKMrY^lR+f5Q)4&@^(jYK(Pm_ihk\!rMWq4RtlnD]i#oq*U#AP%35(#fs@T7FMtd+>jV:
+"3.EEgf3-hdpkYF:V2S!@AD8"hD':&Qo"-7!`SFH!A=CtWK5F9=@hn:/"UM9"#4I?T2'6Ffp7q<=7k3-
+2ZY6^f^9%63d8BpmlE?7lq_!O:@s$<kDg0?lSe^eV@?.;0$BU*)UI?3i<V)_nfQ;9rI?+=]0R]un,]/U
+qE)XR%:3B&*J*VALp2RD@"MDs!#nm:_J4M574!CP$+n>:=p%lj^ouK9+@6Sl>?0c/N.=<D[u8r`p4Znl
+14^)tHO(%9ZeJm6cX@Ek3?V/mj9lP*!ortfEJ_gf+,E8(jiJsqB3_Zje89f+\-Tb;@F';8,76#lUTVlm
+*_S\LJR%]Ch9OIb:pjog]YK-lnSGasQhr-t#f>DQek_Nki*s@7I]fFON9adBMg`9qO/W1s:?AZD/tsE@
+rVY\VW0!5"AQQ:`cU![<XPe2Uo`oiQh.ON2<a5pUo+='KD_.]oLs7!3hnbP]8*S]4P9Gk_C4*uf+C$l)
+HpTia,gLrW9&)ZP$!P1TfPX?^)n:-fhUOs5Nl+j9h6%p3jW/5SLDK:u8nmc-$rIe0F'"<>3q3n?W/X10
+A\B0^)[L+jI!F%&#d@p&3^[oIG0Ya(kq3?lC4=ebEe]d0M0Xgp9[J?75--Yr=Gopq@UY85FA>??CcDL0
+mpGO9_9>5B:d_V+0-DarYsY3S-OYM*#9<M!D"`K`*73(Ec0)jpQ01ti#dg4BXCEa;>3F*V4"1S?A)VkX
+6j'/2PRj_cOor4^+XY.XIN93E#NBJ?[IJh;AZo%=E7m=(m.2iVD9L/`ZId/Q/pkjf5a,!>-3X-5qEQUp
+U7"R?:2oI\>R/T'3!7hTNN[=1K_l\?o^g731-C3MKh7nsW%u70D3^$XgAEsNJHq^u5d7niZGTm(p/+up
+eUe);BUrm7Fr-r8&]-QT15,K+iJU<LC[$\cHuAYZe0cG>)7%lN&GNM:#0n0^BoN]+f?YMbVG8Er)X(;a
+<4)r!]/\c8EromE!l*SP"m/emd;):S4Nsi>gBDi'FB%\nD6-+T[P8`&U!mQ.fPE5Z2UH:<"KPF.AnXLr
+W&ZGu%3YW@bgr+"%gee@ot$Z9qN;0)T<mDjb&,//6Zu4Rl&oMQe;dhJ%#_Z"'PYJF;@_^UP<UFH[aKeO
+,\N=cO'l?=Y1Vqg*sc/D@CtXSG:Cg=Eq2@%)q5.?*,!Wtp`@KWqmoF=?#]XgBs.*G<R...]V[SjP50om
+_h4=V)`@oKkcsg=Js%f3m(Ni0a1TjLhuW]g:W@m#e!eZ_/b@Gun]"CcaTO;<@.=i+JA>_bNgQ&]%\IE$
+(Y4/f@(>h=pkE%3.Q@:8<kc:4CKsLC0iKK->.SP7W>g2J6X*uA6eC=jm=6-:Arnnc+2`Q<,<BmcX[9ls
+coG7%:<YDjDTCZr>FQY_eLXL?)pmYTa*"*dO@nUT[-o8/PO!fC_1S['bXgWoTMKS\b!#*]'3pObi-=&i
+b(`'8$2U&eGn+,jq_\EJ'$4:2]L=&hTlcA6kDXINAt=20@/,s<kO\&B*K]\0GOEb-1*su.PpDb?#=780
+,[r)R06#+[-Fd6o]3kKIgbSRt`]j9KSH4bqbD18,d!&;uQ9Z>Q4Yte_f3'4%V#/j-@V<9\8NCQc!DaP8
+F7er+5K?LLmYmf6C$9sS)PtZ^L!-a!i%1C3l#rVKC+'!=<6iUE_[Urif0F3fg5Zoa^kf'$=u3$X)dsoH
+3f\m82skdP;(3@ZYJ/<u-V:$!Wq%<7_MfdtBP2Rg;2u%^+sSd1>@7SG"=?^;7WLH[,%qQ&loI<A\R.;&
+AF4*")d9O*dHH=NU`BHaWPpdr9sX="Jp)U'Ws!A:dZ19NairRgG=,_nlAM#%Si`f]R:XRS#]?RPmY7_C
+h9ZSr;f4!9S.9FM[bM466ZE9m9,=ZVLm!PTa!ENO@AW%MJs-O#+%jN37lReSf`#t[$!oPi#eH_+_D@l)
+>)LNk\tLG9'F1ro*m7[C7uEIr(Bdn&;dMm;Tt-K9%F%7(Kiq:d,J'QZ0r*f(Gg5Z2AkZ^FTpb3Mh9^3l
+!*?5cXPcZ?!@r?(g,<m!^=kOak?T#SgL-*^>-b>cc&%.<%VW3N-^\db.6&Dj2tShl^\s&Hhg<0<3$nU&
+DZe&C`W#dJSYlFRJ*75lIh1"Q&(C;L:\Ob9mg8r:hk`7Ngm>.To_Q]2n^A(5$c+;7#d<f[hV:);6@58O
+ndkBe0'GJf<r#"*'t_]ZfhNN'Ih)14rdAT)IJHBODL>@2qNRT4Fi=4,dD'\>#5]CpD)`%!j%K3WLd)jF
+h_/j8SGi%Cr>B8JigUnS`:GgX)-tOC`suSLM!h+a%uBi*G1M8:I03p4)s7H7>5VXQ8C2fL:qLCZ%Td)q
+EdO#>[(ZkWa'W#_kJSSo4(:s>80')'09<Oh>b16>V![,sNmJ?g:<dSW[@ZYd]m0U+^4)*UH/a5JFq24/
+m5mQCoo./=1%I^GS<QU&,SB-9@@RG`RV_$-l(3!>Z6MCTMnK2KA[CMQQkQ*&mh[h`>?:3!(?Rp8qRCC+
+g;&BXPTl2T)5I_ac&B!k(._knF^Db/&/0lFTSur<:P/nY"N:X:/0::ep1As`>PEO[IQ](I%(VDDT^Mk@
+e2'!9a2g&GY!nbK(lg)g]auP@g?H1WeVNYJq%dTG:QXrMZ%GZQN.bkL:&/h\-R(F^m\;8(#W'DDGea!L
+nM8STJ;)osb"t8Q)Sf%=e"@#sZ<^ZJ(B]Fc%t?dgG4.#l1V;,+"^`fJgWT[kQ9BP6H=ttZMaTo\]n<n_
+b7Sn4Ph1AHh"KOVHHt63i7F#jaksaLdL,@<eJ]EsQXf*e?qZ?@ah"*DPfpM;kB+s>k^P?$QLCk?)nd8+
+rB^l=T`[L;Z=dt`Ls_W%HU."Pi/U^!s*DGAE(,k@QWQZ6$9kZ,iQnh&S7MBclT%9"Y\u2A[U%O0J0\/i
+U"mrfX`ak-TOMnjr'?^=g'g"[8)-/Bj=Y]S:5$X,g);tT&!Xo^ST<q`dl#REX>!08HlkA!Nk"]##kK!g
+SX)[^YZ8TV)+9nNe<]YkJ:!qR_1g^q$ZaG\,&GfVa7.HeJJIJ2[LW7FC4'pN4p0_HOW?*.<+/)g(^:n,
+Vk!rf'_q9WEncPD&>]J4pk0YI'==AN+(KSNA=4@.(40tJ_bd6W/D.&,-uTc>>6;=1Q\BD(SFDR2)aq+^
+jF5r8T89TIJ8#Loced.4H0=n.D6kqjVd8HJ\j>t^juDG)&'^7k\"m.^jq_ue%lh*6E,Je[Sb:8r"gXO0
+CId'331k'Z,--5[6>&97f7d=?JuSPpl,@g2r.XP'I3L;kE09*,,'E&F=j.%/?(,4L>)A&L8+<2Z&V2eV
+b6L?SZ_M?K7,)<q_,9oZ#i)cN%`R->-Es.FGLtMiL?c]SpO\)WH'D(N[?2$M<iSl"`n&Js@LrUTSeKTa
+qfXeB6Pu\Q4BI#spLC&VgAMioZ1SUgVQY32S*Cs/gNOhu2V-I#d<_Go^@%4):V'$,Im$nBCG2Fi>-J!Q
+1L6/gY1kJ\miET\0?.4[f"V8l4eXA/hVf$N);p)"=eRQ`rE'%u5nY3eHBYch=9)facdP'(H\E%NCPLO^
+esEj0&ki@UIFqoqRm?GS&0)X)qoH7Z$;h"7GKQUt:=i$\YbG:o029,e!T?nC\3o]uE@2^+Hm2fo2ENd9
+:"eln:tLqK]#f)i!m9&XNGCiMW/AtH#F\q3IlWVO\S['mLqenKYWP+Y!+4Y$f00mnV2#?1Q`R;8S#p&`
+P[BdMb.`]7m/+2=3ArP2aCRAq1=rfYj^`Y#Y-Q4mbkt@hbArg4#.V/PenEFY#&CAT\ELC&gRXd#?_HNm
+ken*c2OJ7.#&C@KBS5j@ZGG0PfjO0YCbWfVlqkF3):a2FIG:&+_q2BI)#?_kp3fS*@Vf7@Ee`-IAX;[)
+:_%np\jj8\l+#RIhK;RqIg*dAd8k=@/Ke`g=ASuuka^S4+s=^<Uo#s'W7fIY0?PZ;,LR@K_t[(qq1Jp6
+&DC&CB9Q(pcIkC1Nc5:4mPNgD!DFUP@k!7"2A2(_#P@:j^]S5W)(a=0gTro4e@WS#S^G%ebb_o/._-1j
+>;ee+J[MVX<5U<*o5HSBb`9!F)L#o:d*WGMAV5f\33WITaEZg4+h-9?[5I8b\AD4r,Y)B9:]co&YB"qA
+*P2C'%d$I(,c<2!5b<GNG5LtE1J6Mg?SO]]L58IUElHltI;bL<doeEs?$3.f?eQ8'`Jd$bI^[!l.(;:W
+X`am#6+c*<#B[@3M7'$qMo%0JqYp.O(^@:qYXI1>/4;Fu=[_$kMH)hOWq()i`oqKag=c'HM)S(uD:jdA
+]NK!@C&DF19hLC]p?$P%aslgekiFBdoFjQ#]@P5sjiV5C+sK2(.%Ba:cd*M6B!ns:CW1lTc7RX<V,X;n
+Sf8LV=HU'p/L]h5GYe#U?7Ye:=JB947huSZNX6_BoR6mOYdo`jl=4JoWJWr$LpK!>$XGSCUYH?-:04@/
+0D%EP:i9?(*mbCNC;s'gF8fg[PO*o]iA:d%g?nO34M]r@2hY&jk<&&rc?&S](*A#0KE\"I%'=n"H9c9T
+H;&K$N8Fck+O_X;`JYdjjb?gj?TqjBG\1^@qKusir)J$K'so.hk((KjW1>HW6#7[h%`,64E,RSg&!.Z<
+6JstSK%;83PRd#K_@7l+I1WfJ^WXDdrg#,)aT5X.'+be%,&e'PEOZsT.1k'ZigI,E82c,IZ;u;tj+*Es
+I(7f4;SK6E.^pD8"83.BF>YCR8*_s>oG-JGZn^gi8n8Y\EC]aGc?;P-33T7r`Ho>Q3#/KF@u?Y/p;IeM
+lg.L%#NT:<<!(.G[of5<kG[$[8d8>gSMM(qkkNhrCD-IepW./&0JeWTEk_ZbT7uQhYLnIqT85j2,dO_u
+-c/d"T87QV_uWNGnl^\]"srKgJ-'^C<c/eZVBI9O'=]Z7<ei^Mk!f(3<L&KH+D`51*12bPdp@dk2KH+c
+$-Y^H9Eu<UiogZ6M]`\HKt%7g=?,.LJZ,O<M(lsII-24:QsE?+R7Dq>P.)HiHltaO:ur@1RHFi0c]7<E
+o.h5sb]?Jajs;Q"@U?oVG35bkc9*7&Y?9m1ljg#<]SuY=jqTEiQ[)OA@\0.@?04-qjq2S>;Jcbi+9J`C
+jV)X%(HDZ]jX)iDD83lLi5$>,1YrC[X`p@ML>M/?>VcVo-Htl4YY7s>SQeOo^b6tkgE]ZW>S);=^d]%I
+Xa&\@=jS,pjYe=jQA>pOU7^liH'BnUn.QBZ&QM"+29C$YULe$C<V@#1:(:Urd^pD@fJ7]j5\X;@P$D(p
+ijmQ@Icq`d#"<m\?)`X&*s*dT\<HaUU7Yf\K&I"t9#]($IpGH:I)shjOI0*r-[;IFq+VccJr*M-3/ess
+Ga.iA>`E1\]S(D^>E%JlVd5Pbif2I;@Jb>tg4CgnMG$KhJ@&E2_NrSSY`/.U$Z&)U"CPk#&:(!+*B$@2
+kkg+Rd&MgmHac)9(?uEnWkq0W]^]DpXMV?KC0O4PY3(8R@lck_'<-ZKYc!\u[Vk4B)*n_<rMGQG@DDPi
+\FGl!dCO=q_;94]O9g_"b#MT%V!N4%B3/SRR[+(<^<PC6KP5a9NA!5[L?;b['8mfu,GR<gNjJ/tX"Mq*
+>3ffTDVUF31KaOB(.i]n9N</JWN_PS(h'W;FEWWKW7qLr@Fp6id#Bu,C`0C_'[M^<@T&/$WN)K;)-2:F
+OHSjS<2Oike+DH-R8Q-2APJ7I<QQ4P?%Jrc1'K^[5JcK+f/,F&^[o]`;fDTdU3[bB!MP,3g'[3:?3Oo,
+)ao+?SdI#?,FP*jm"PsJ:ek.C\B3K6BU6sBm7g[P%[<XjjB`NW7W;U.5_qG'ZL\0McEGr@pK.]FTG.$G
+_F0HWrS<I\o'=Ujh@I@BLd1Y"HXlW1r;(:K)o2^H93:QfZ2&dKgj!AJ7RYj1<Md:I(dC[.51u[_9b710
+LrRKS-5O@KY`R1G0=Dm?Zu>Acp(lG;!^re&g@<9Shte`qJ97':b]pZES6>0"AI]`-QVgTHP,Eq_kDjD2
+DGG'PpP@Q0IBr=CNHa*hFknq5?cO>%pMJCJBA^11PK%dhD</@o8X/aL;+.r(ZW)&&loXIGGUi-;mHdNT
+_@-Pa=``-/6L`4=OgoIFh,uuomK]D..s,4/5l%K3PZO@?,=+uN-OjQEj0dp+b5D'ehO@[_GSrf#AWu$*
+]IBeJ5^$ZpP7\Ik$Q$='Pa1+:SH]Z?,PInF9Rrr*7Ur2S,H;oa>ZaZ#H*hcbcpbok2h[DJlERH:[E!RQ
+S/?A)(8TNP\$I>#WL`\4.(/@AP#t%Eggl+<&<kf_>$nR_Mr!L_;HrK6=I2YQh)SOfg?t9]ZWst_K+Qqk
+Z(#^HDOmc8+SCT9"bF/ONj/1L[;e49\),rkiR^LYp.]XgFFUTjqSjD\*dM*B,`@h,*2S<(RX?WT`#YPC
+V*K&^N'r5@3(+n2a(sG,phfuX(15[p@G`o>f_7JjOPk6(Ve.Jp>7sPEh0<nRDJR/W)o:9Q+uD4/f#ZP@
+V$t*+PXF>uY*&-[733"=gS=]^&6XI/[eumr`)&FLWdGqL30*3SFnnuPTPRf:!^)nR3mhaTH`"olSs_.Q
+p0gAJPM>ZTH7*cH#7eOO4O#1&SPs*5B-C9W(t`N;7+FapGtqlo3ZWY"ma'IR0(\,T%gU=?7Gl#apAJ_h
+Nm5a%nnuQ8:75Fr#pIGkg4lD=_eSgO-E!<odW.=^!^_2>#Fa(6H"/&pC3o_P]sQ/d%F2fg?X!H?pMZ'g
+:7\B<=6il^qkJqMO,)!pkcD:Mbj>M5h0BIie_!HaWVPg*oo48hI<R22@oGBXY1d*7)-[p=q"7;D4MSSW
+SX/_t-"<cs^B27n\YS,%*/t3_C_7]@*3ef<F9dIF99F(86lN"2l,dkqC^-2\U.^:a<;CN_f/7sh!Wr7b
+".:RLRnf4(H?$a=CFBu5R4duNbsr$0<.OM%GQB40R6o4C&Tehm@2daC4V(TqLq<sc!!gYQNp&R(@="tE
+/sH0;6esV=!),2!e+X`9k]W`.eTP@dlT6QsS<7/)?l,Nm8T%C65m\fX[_*U=U7Cl\d]fap.1=8*c:EmT
+mj3p%p8'>cRjc1&Y,1*eRg,EqqA/$"f)BVh^qLo_[N?1%!\WJ#aq"Rsg[da44&KaZH7radl\,gbK6]2Z
+@>*1DqQ6620\d<,R%*N##pH52U_./.Da+g$Gc?S4AjXRa4)X84<CHTLn_*pPDiF\IB#o,-\p0FYL^7]n
+__3iYPn/PJr'_KD^!12E*"h.f1VMmII3@7VI<oZV%X,Pqejoa([ZA0#<>fhMB#p'Tnd9BWp+cD&Nl2@:
+38!jefT.]Ih]r,2YlEDc\UQo;rfja=Fb\\I]AAQ^nI(058I]9@i@1]-:>WiIn8k*_fVO8=&9]/@8Nf;@
+7n5oDZihq3?O2ddZ$^!eD$W=QJ]D=C<Dc*s@6h_R#SHNS<`D1RlsQR*/&Y;8l'p9g\$`'eH69`EP[EmM
+#ls0nf6*#84$X9u`:>A]?.u,K\$sJorc$$=`\=<+a/-eM4*Dsb/gF+j\)3cKQaa="%+D9JG"hM5B'<Np
+!RT3*::Eo@9.#5`F.A\E3<HLI*G;d8)IpG4*%51<V6ETSD%imT0JJ*7N%>Xn*Z8CMC`Tua;^sg>lKmci
+i$A]r4$X;KN6TO#nkmLF:hE\_F@+-@f$e3K.(j\d';.>Bif)f,W71J37cjMjN_mIa8UNLppBREgDYU6S
+-c3.oRDglCV(lj+0E\K\9MP*JKhRAT0+?]rBa3A2e[5LWIK8cuG/a5.a4\P=dk-<EH]E8Xp_U4ikj[R=
+_edTFoQ;i<D+FpP#cP0a3+M:;DYp9UA1/<'8nHnU("i8]2)mKIa2eJqZ:,Y0W38FUEhhSg&(5SW>^Q-O
+VVc44*ETo2_+QtK5_F"o0fm7@*lG&EK=ebqmU'@0W5)%W7r0s7C)=Wme@$!IY+k%0Fa4u(L0NBFn%,m^
+&0)e7RlT9!P&n(bBs$tZ8fZb!h,i;]7Vu[0`=&^76tgD<Xc]CO5aeKd'Mo9fF1OiPP8245_XHT47,3(:
+/Z%Me#RcK;,*ijQg(e2]c1J,bW/*E^fOR#?Zo%oPrOtrqN-\\M"a[X&Tkb>SX<[Udn;]D3^NmW:g>g!Z
+bYM/<\nSO&p[!60;K_n_L29tf/"?_%4n$gh%Xp.qB8:LhaR,@S#-p%t0Ws.64sh4Bni;JY"%V)H/=sdY
+*]gK7F8l=sR]aS,)]smYa.t:eB]%JNJ(Ee+[qfBgh!`m&P&BK,6_8(R5-YjfRKZ$!bI<1+SE:U&L@-Op
+#Nr7bo&<[WCSb?pZMX<50)cZ2g4aT7+TD;/E*8K*3%%ss`>+F*Q9Co[&W<h-ku_nI?L7$7`qR!U$?'R)
+qs5R,G?OiiM#RXqj*tF/@M"Se=bG<n/,o;(onJ+2(MMt5!iJeb0;9nk&YmjrcADRi>fIKX],!;X)#q2`
+@Q>;*$]o",BngXJ+0C5K)92]ZWC(jKs/sJr=2^-%JYsUnG41A7ArlJs6A5,@n1hl]/sH/DU&'UJ!O4BC
+`h:i``_V3;i6infN;m0SX&])d_?ut2ho->Gj+"`^n\8l2J.M1ba;NTT+:s7iJ]B*EglB(@,'8[GWrP<^
+GBI_J1&cB>D2L(IGBI^=1B)JT`7cpEGK#)L,?<dAd/bDQG=:P\hh&X^$A>fo'ro(Ehh@n3n\;-qkS<')
+!-OT2694%T(Q:&es/tVl_he=u2`ACEI#p5g+.F<dD2:N*<Umi)@-=0P^T2UhnMt2`70bu7s'5dUHAql0
+I(>"%^WTum@Jm<q,Q;m%S7OJTG?)mm`rE3a]ktnL$2ot_8,Vg26RKbO0"^X!"OhfD.Qi>fjTAq8>XlZm
+5nDt)-(g.r>uMBSptpcqI22d/1dq6'_7Tc_6ALj.c@tc@X""nd@i5Q5s'=DZB)M+$MR6mk0.rsff\D2(
+"<>pVSrU;`6+HA2iY%MV4qL:/-kB'9idV(%M""F^9`'[V4^jTd`+9u%@NONYSU$%k%ErlfR!;B6HXInH
+Gq\d=+_RAXQWL8/&W$I0jrs`UR>5)4^cX(P0b<5bc9-]FGsknh+Pc])EI#MQ+,J+QaJh]-n$8Uj&HB?l
+%mgj-/$6keeE)`20q`YhSf(tG5\c>L^WTQ+)#rp`M#YHG^FT;-h+0TFs/sA'7a?h0EtO"005:gP4CYhh
+-fR`BX*c%iCaU9eY0+X#pp7$ZFG98"d(:2>fht(dii;X6Ws&9Yr[@7,!B)?0?9?.$ho3Xl`2qtRaXl9E
+q;q#hrcabn']OUDoofd%s%7Vo7.7M!BZEQXjS92CIol<I;uXH!FD&"k/i*FXb@qbmL>4!PGNngD`W'Bb
+riZ%Q,9\Rf9bto@1nO\GJ:e*"[d#a<Uac:efdh^4'kOrnE6J%6eb*Aej+"8oc1p2HH00tYhpiSS]MtM(
++le&lZ&QfuY/0$dJlAJVLrC%V#n>n?b<a%)HQGgg^Mb+'n](@]CYWX.\(ih$AjA$/IpjdhZIAL(GK'Tb
+jX6Lfg+Vd1ZU8$Yk#fV&Y3DY4'8mfu,GUPhlppZ)l;F1L[EeR)CX"[7f?7lj//Q0&oeDR9[ch2U2V46l
++!=e&Lr9D@agHsqcZErW#:!k()TBd`Wkg]TptmrRDm//M&&OCpD=-V;Cd7/q239k!adgYNJZp7``qQ'_
+Yb#5?qK[/"p:K=6=(Q6es/t?9(5Vur`<3C.#RUnNLI%Q/VZKMoOd%snD<mF_K(HH%d2YL.UTSp]s'BVG
+#W]$ppN8RT&aoRsMS$nq\-("Nh_<I<BE)$1miHCr4V3,.f8ju5<"=BU807KC?Y$d@2BiL3n#%+SW]UoB
+a&*S42K1t4chGc*ptq2rZ:"uQ*kUsW#LOFYqi[KP>-7jqd"-N]kUmPlMK3M&a[4n]V)/M,<U)B)>6M+:
+:04;?".)*$0,8NI=E!'c!I#"2jsH<(]SK1fF(WKF>0kk81%BB;7,Bk/6_M0j2$Fn&-pJs&KcW#uP93r,
+5U:4l*4k]A"499tOU+GkB;`_U*Q4i$3_oWgG:kTKf>-L,=GF'C;%`hD+G5sR(+>etKlW+O4WdnOIF:)u
+gXe78[;Urk4bR/+Jq4M%/ESFW2PO%_s(asZRh$0q$Q$<<a9K>#MuP(O7dNWjR/ds>NQ,.B7T:MK#YY8E
+[!,!XTMl3^NW4.#7JuW4[5*]f[F)PV<\pOPfp\/Z*^D(g&K1%g0`K\"[b]N>Ed[hZpg9@k`;dDJZL=-$
+Lp=YT(4ggJ2[FDHho0aPm->(YSJ?Rr(CY^>@U]4Em5+<^>>N^R*IQZlLV>cS,Meun(qsuZX[h4m!nS_'
+&\?PFVd`O)/Z*9+k`[_&G_ZC>OmDqiCEKPE\+N!jHsO(5IFF]!.t#Vc`qG]obZNE(5/u1@5k9AP@7I;9
+!(5Y#d+D1L7ul.&Aaji?*;\f>NHC6O^W*l,idXIuo%OcEqh[:)atk[)qAmF/p#1MU]#V&+"Hk"Oc_=[D
+'?p_9UXL,<PK!6;S\g2V%3.WlmH$U]gfR/`k#A>6=\)OCL>mOj#IG(?SeINJ77TR8\mt&..DPlOY9+7A
++cF'k"75p8H5rE@A)q>XR1#6N_fI\$\MQE8G%,?c)_aos`qWmNkJmO.]p-;>]t_6(m(So4$J&>4dJqJ5
+_JnF:"gWV_EDR.9l*Xg_%8RKU4a_Z?FJafQX:SjggI#i7*3@_pS\_L&0<oHD9C2P`@Q68!a2kqP.!&T?
+jn*[-RXKP04i[L3"B5;G+F(p4id[SV#0f#nF'5.tWZimk9&("mTRNU_^Kn0oBDc[E7>V!:El@tfhXADX
+?Sd-.h>*'g.5CY+AG\E./ue($Eji/9/u$F<7/X75bPTZ!c$Fh%_6ga*?@usF#H,i<\4Rlp'K%jY2(Aoj
+s)g1-Dq2ich<,^AmWZ\F%W$;JR'uH>&@%TjBtJ)^";(SPPQ5BAQ%6jRhFVVT^Hi/Krn#=*s3"QKpg5iP
+]2KK.C[%f2UW"qT-tY45pRpSg/IfbV1p$G.J`-/SVT1&C%(F[>IS:H6s,@[@57@P1rsi@j`V<g:-6a5?
+:'\3boM$8o=O"0"<StX2ptt"d#pH4'iP*pGEeHM\XE%T&+lp9jr\q?2O3dfPr9k^7*?D+A6Xkn^0qd\=
+Q:J=H-ULi4UA3W.nh^93LtIFXN"Z(WW(N$K]aajHo@m[%T8i6507Qjs0<'4a@P<!I;?(b1D]FW(^N$LB
+IBXf#b.gIEa^G.Vn\>*e55c@3s7-s])O<p@-IlGDkf4q.b?"oAC`m'*kj[Jr^Q;k_#hlmnI#5\*i5HKd
+->G2`+iA>=<.6a=.R&U"Oc1T,p^7rC:*j5,4eN["4H'm9-UU5a_%"sbXI<<gS(@Z*l[3Y=I64K-^3p7-
+U$`Z<1%GFl9,X*:?[k&sNWRPaS??SrKo@@F:G67?&_T)Xab[kO1:g\YNLthjglcu-(3nZdr;meX/SK+P
+XA+#OmAqWbPhWXE2)dgYMNpR_A8IKC?E0*o@qGYI^rm!-)WJt?]CU^b[bgt:%"=b.AZ9U\S5ObW%*S.F
+WLP2':kquh?VD6sE(uME[I](\d[cHK^!-i$s6^#6D<cf`,"hD20oDAH*sc[`rsWal+GsLHfEo0ER4i)e
+CjBR0cn;merq,DXfQg,;+i>oN2/scfl1#!9kXF_>NRiK$k<)nPn8/B#Y-)%pMmHV5>3.gR"Im..i'atg
+@o]#%;QKKT04aS<N':;"W&<(Kf,>R^/`6>K*e?)q?cXAOE)?"F78VU"R=(</Tmp[pklm;#"<)qFDF(Hf
+Bet:Uo\3)e]-UQd5VAU[:+RPLk8nD_>TBfqLVJqeYOaMkoo0KGWpdi4aB3-SQDY@1e(l&D63^G3LRMB[
+/lh'B)$DUfM;[#cRj2;.9Tq7.HL\I5..a*IUcV^ViBo%\bn3-X<lU!7#JqIULa[Wo_a0*!L9OZ(.pN3`
+aN3Nqq@"5pA2pM(1*!PgBYF"kN"!t_SR<<c*g-U7V"Wd5*W*s=jJjo/r9Qu7[6m(?!86;![,@<_5.S;l
+=Wj2XpG!52?V$8eIH6XFH*4PmM%lI]h-\6*f[]92[k['hj>MV4+a&HZB%j6UD\1)6=^[L*`:Oj$\:;EL
+4#\JokP![jgphEt`u!/5UlR?&3Y=/FZXh93Po'5JQL/;BjANe(<O!^_f2a2eI%g9X]*r=ZZ=oJ/<Q('C
+LF=]l-rQ^J+5e?K2H2aO72GUD/u$81nLA%c&A!\M%kMIZ>;&_>'b@Ia:!HGjG[!U"\Q/DM`WAX^FR`Et
+plhVs`j1"%$aF#]MNXBVdj]m&f?Muq"OOQ"06Z56rG$`GJ>WgG!$f;q:jLWt2419s<n'X7?miAA[J,5X
+O'H)o$?U,4"?!T%;cg!lTd<iKkN2:")rH!ChhSt^_$qTS,LtNq-\KaK(%_Yr0(P+-7!*s**Mh%]cMDg;
+n1p]=@iGJ&Rj-E(F!2-sOMfl(]?.$NfR#R=%;]qGF6k]aiCG/sO'1k-T25K4"(f#8NJ978c8R9[?:GJL
+^9Mj43MP(\ht-KDj3BjW)f6\ih/+C4YBY?M3c%.^aHgD>KFq*7_']k$1R=NNN8S1l-=>PBrH/]R1%l%4
+IisUqUT/\aljitA!iZ\FH_n6Jl@8seKlS%\N%/Z!+-7C-&#.FPBM;+A3"Rg_c[]sTe%$]K&M5DT4:+B+
+>QBb[;sBYs[0+!&1USIZ]<hn2Z?(]/"IUWljYqug<*"97J2':G3COBI?RG;,&pou(dB!n'i2lL#@$T+*
+lUuNDAqBaQpl721\+2qcMETNf+FU*tIfV8EnH(5BQbqoL.LbjALNo7j5rR-co*'PVb$1Ob9-It$WcmQX
+(MqnBUqX"`2qU&=5kWqJABW<iN+5!#VWDr):Pc@(f+Vc0qF9uJSHt47[5E!6)FYNm?'NN.\jj8\4]mj=
+6rC911068k=ss1T%h5EMI#+]Sf"E$GFij24@niU,7gQ+keY[pul`Pd2FXh(tNTs_rGP1sp>S$,72-9p[
+h*J-sHAChsIj-6.gGa[8]_R`b*LgebjD*L"UT]l%lC6uUkmgbP1.X4kTn%jd)-ShTT+?UgRM6?.)tFeR
+/p,&]_>-P$\7&S1rO@K1$Z0%i2\H<*YnYRB/J[%bmq,M[5oSWbX[U+JWDX+GD*cm)p!]\]T//`_]!bWU
+Ah1%tB#m_7B6:G%&/ArqSB0Egku[]9#/MW*:5DQeJJIh[iAsq<4qPFkJr?XWHUNu_g`EHFGH@)9ZM-<8
+*YEfK,DY&?7Z8@!L2mJmARor7"M6nAOhs9RmUAeY$8tU#iq@:C&TEuDJ3bCY4CGDi2*;9aXL98c@f'>T
+4p5?[nIZjFfCL-sHNN?W7X`H4jC_sHTX>CS![0meJ4Ij1?Fb??Mn4%WMF9^.KD-N#^4t]V9@&AYCfkLk
+A!GpqO>Fo9&U\5b4%mM?#ipNp+V964IjbouQ6VFV499OG!jRf3i7Lm`%5.c=M9I$O.1bq<&-s`Vo::%Z
+&WhCQM1DHbVo&F./"_V;&0$63%tP^>1G"XtndH@lJG'E"I0enaNAN\C%kXZ:*WCAq,m%7opb'XUc7OBr
+AjcO@92R8rfkC-`*tNqTX%N+0O=NJ[#\]9+D3l:d_F#FNbfj?C=l>JG3PPA&7@o<l\.Ktfg@JJA+cmrK
+O,$!eJZJYZLct<N*s*TVq6KFKp^kLI_a>P_9Z#*+pGWVoX<Tn3@W*U4LHnW1iusL?J&=Vrp?'kQ#fN>&
+)Bu'+^;l!o%$Y!RJK0#pjd$0c+1i&7SBa5<!jMpk4p9kuI`Qq2"?[(5iuo!"Ish"N2i*#0Jm7=WdF.V0
+&F)h5!kNb'&^Y@>p^i6U[egVlBo)Wt#f3_!+Ws)^n*F&>Mm+up,*W@He+Gm-@e5M%#F]Aio*\-9f)PRH
+*tNojJh/Gm+,EQh<r##1k<gAP\;>`uGslm-aK#+HiqA%*h@Y<aNX-/H>io05?t>jE_XJ,XAY-lF#3N0X
+Q[(o&?EqXA=<c[7Sg=GEjrli50FnN-R:f"MAY+O8LHm%L.]2,/ipqt,4qO'+O]*tHd&(Q*#fIG)I0dd!
+*pcPcKg0*&aZ/DlY'JP;&ci<mcS:9hgs-#hlUnIX$B>XJR-(mhJX?e:&+K*#8Dk*Nr]Uo['%t80@QY_6
+0gk.g">]7u%tU)tCd(1i,s2=iRT&9fc&+p)=DmcunKAGGj$OrD\.=/[%EIp2">her"@DOr7)8D`a$V!4
+2ii_ZX:g_<g:@?:6pTd?HjIY%pE:)TpCJ8[ejUhchK%==,<c5sJRFi]f9W6e01ncaJB^IFL_u*6WrU%)
++=9>C+V6FBmR&+/@d#.<=:C7G5_A*W6pSK5WC0!-o'Sjf_(%h_KKYmInd^R*49T+?Apam&[KUpKl%B6I
+%tU+Mk=J[[>_Ri!5W@OT/Qt+$37q&F)R@;:5g3,Jb0Cu1\"c#`G6C"ArHJUdoGctY,m'Ni/iU/CjnKCC
+l/1TmR9*[oZT12P'!-@(!o@s",VAVM'1>p^@j2XgddRg(m66L7pim(_>a,$rLcoIo]KdC<O,$!e6-T3;
+LiNAW"N&D+0`kh$'Q55ug,#u-+V9j;q[a$ENhigCKSMgQbjQqSGR/tWm<9lYRX2RVJXCcTHWDXr:j<9,
+l78Bq#(;eBJ[%<BIDp0\g7Jn,=R5])&-EffH?E4]":X.k&9;$DpNQ$&J9X0Z'&6t?gjqp=@%?HNZ[X23
+n8&=orVHN&+8@t]*]TIM?]SF,Jd[$FBR;`'UFS<mDYtp/LHs-nbMsb-JNNj\^45j=#`+Dh6R(GZglbaU
+g.:`W&:;q)4p5oAlRiko_F#FMhM4?%dT&=`j5ihN)_!rR12r9tI@%934E>fTjNo#3"@A9)D1kc3*t<!E
+^5]t[g[cR"]C,)N"EM<I&-tRIL&Fkd,Ob.GO97Zf!jU=eNF6kqnKF"CRE%Z;Vu6&raLQdQ49T]?n.<YA
+Dg'q+$4l,["Cd_NnZJ@f4q0q9-kXhLZ+W(#01UUi3kCLHRE@J`IM*=m7Y=kYGSre8NXp[L>jCI.J4Blm
+o3jt+_a>Pi5c[CKZ9U-R5K_;Y@c-]!O9<od,39;$0="smb^C@[)=bd3K91gU5Y3O@!QT=8NKj87&;Wo[
+DK2B"Xp=`H#fNO)M1QJLXY[?@Se$C^e1qV4;Q7CBe2#_&bE7[+C,7NiKXgh&L=f3[?b[,&=Pm9^Dr2QI
+*WiU/cd6ue4p5>Z]+9Ht\jj7q=92HX6pU:6WHaRGVWqI/@Og9VnKF"1/+jmp_]aX#I]7LK%tR.&ip1*m
+LHp5^BfJ<>Qu(sI;_p<o";4p/.\D22kqLsQK"(2:jS0;-*B@>"c\Fb<jj5raCS^hP&b,9B4p5>=rl'(G
+4qV9ehu3<ZU-B_$Z$"Bo4/B3B*ZkG<P0rS]3ntSB+V:P*PNa\)Qu(q*J?^N)a&Kb"T+?KlmWkPaW;eMt
+?]udMWae'8<Q#(ccc88OUP<o;j?9Gma8VuRkh[hC=lempYB!I;:6"$T$pG4F,U&kK#UI[q&Lf%.Z.0q#
+J*o]IFA)/<Ba35a_t>uI0?;/Mk+"3o"=/P=81\oIqY7BZB/6YU5R]"C!]j\?USRYt_qiUPb&B>2G79f'
+/LCNBaSq/?b/lH/pJ5$I-3?27mha:akYlI4+VBP#V%@7ke"$c_3P,(\`'b_6MUC&tO8LL[e6Wd3Y!aE3
+og@r)#fQT]!Wfph%u*?b?LC3(2e&84p=_Wc5W[fi<$5TC\+:FBfNV#PieIX=!=p\i+J?jp#e3/)l7INc
++;kI;nQ*+#!IK`]5fhQkr]#]\"d4Fe]uNM`[S?Sj#N1jQ`0e>3"EKk0r-\Y\5Tl_d,7m[fR+c:nG9RUa
+mR[OjCcK?:mPd_DIbqnb6R!(S!Xo2o9Rq\Ec3+[akaNRkP_TQ!&5_Hs"DfS8!pSP0>o3hQl2E6/FN"Dm
+R9bAo4l;)]XGYLan?bN!RMs22#fO0g8Ha&l$3C7G7S9!I^d,]<<5c<+8+/ktHp&_VZ+cbs+P-;Y(m>Km
+$3WJ[(_No-.IPO4.S%#.V)DR9'10j2!We@.GCB178g*&]P2#J&&0fR^Br;i]M:be[TccGMkG+Q:7'*Xp
+aU9hqV$LI^A^6],@(D\;rKha(af4o:r4\8bY7I2TIdQ:^@6=F75U\8W/HY=3FohA>^A)X@deGtjn\Y$<
+0U^BM&\Gkq:SkHr87a!R"!Og;B;'"k\E5.[B6(rJ5\4k.@t#Rjo'ZUQ:%u+nq4ITEs.@GQA1!S"02,9S
+iDeH=Es[Zm<&u_XDDrF[a$#!rNqchWbgt(,9uVFqQq^QT9f1tH9'(QfMuWL;N]=4Br4Gdhqp1:-r>jb-
+BqPRPBh;`_3?gV5ko2\r@LHACo:VSNfF*)ObQ\_R2u#ETG2AX>ptc:73*1fW2qP4Y=oI!HmsmZF%\)3@
+fu>OkNo3*mcljU7s41UY(jC&qpqK!:JQGUM_u0LDo_]0tU1YZ5gP%WI=cWg.rWU0>I.ZZqS)_78bgpmp
+rp!SZr1Q7rGX)$;RHCf1*!7D__CehP&Rak9FF?O/doLOYhb$.e?_CmN#^sZ+D%dEB1?8D<$dnnVe,FpN
+ULF-Z`1?82'u!L*!D5:e-s*;?]#BpD6<Q"=MBG@A*6Y[jl_SC1]VYN8(;F])*NeWRa'mo$k<^9Vbj\7o
+6RW)Z.h#\!i7cOK7eo0!kj:K:\I?m=qiUq7D7tqbT6X3JmrQXr?[m\sf?WIr];aK7h#UOFR7:l&e4?h=
+98u>MMYm)Ka'?`)OOnC:nRk*<4CCor<(rV:DM&J'KV'lY6X;j>gP^kg>E=S>CH_J6k.p.,Doul6-,+.6
+QPiL[$,k!@q!s?!C/l%WQNpoD>lM2*]mg]OW^fl4L<D+5V[;FL[EZA,gGZ6<D)rBTVV[M=jfu#TWSl>^
+*'S5hZhj[o5+$9E-lKY^])<3"]\$(u3IDt#_rUEhnqj=(n]?LPL?EZjn%K:9@s@/TRuVc%c@j5s;;=pD
+3OERGWC%[d"V8IQMQ.YL?/QB)C1"f31HI^)iSE%($W45.br9J1dY9nmeI.*u*.fa.hfhI2lI7kE6QF."
+3)c>0$YEcmRlk`Xdu([`(f,?]m^97D0.`?9>R1_#M,io*./q(G.O1Zs]HZf^A)<#m.=O1=TKZKH)+iSN
+0-]E6&6^i;Tk/u@HF'$%`cef+9m)(/H]q4ce%@1iU,.fiK/8c-5gNpc6q'e"C,>W!.3Nk?g<Z\BKZq6m
+hYi9"^5Itg6r'GgBbP$3_rl'J??J<hl]rF\oSqen3tY/VUY8BZUt.]*OM3?iZ#?@PV#+5`$LlkYBOM<^
+`:cKu&]@hAo;o@8Y[K)_(W*I?9hb9'aC?Ia%#9Y](ie,-82FI7[)LXBKW/lPi-[L/bZmc6gi@h5g6USP
+[(abOjBl7)b1S_)hKL,&2V$C"g%qBN^@%4Qhjgj3m[/l?=)kj+`X#qo3\V^[mQ5e^RI`Ig?4ct=;rr!4
+=n]GcB2St*f#>Fn0gQhF:WQ[`(NY@!58bu0H2Geu\In3pH,gM];ZI1g(EMJ)@m1G8h@YP?Yf[2[4\CDe
+bSn/,a@p9efj+XSpFJ2/&Nopr;4^=?QHosJF2g6ba@=+559Pf7>:B*9JQ"c\#I]:hS?*/HJ-hta6/q5d
+DV?^Mp.=`^9R,7/+l`AAQH=[sdFT>ln+KR\,[(CrZbQV@i]8l>)`O,8=3<VaquT%[5cCRrTPfhM*6#k!
+Th!HbKEs_,Pn-8Z)7J_M"-1e@L+%^VC)0S=)h\C[6ptK>XsEP[@^2E5rgPaanBid6B/*"1CDg_R_r`H<
+$^%$]LN:"oYhC,U_O<ofE_D+@_lGKc=^0f6q#[Jo]NqkobdI$UEL$U*Hm$^(C(5jZ7V[*Ri>ZJYYHDji
+208*XNRV3pY`7*%`QF.4CP?f@4.LP#`TD*5p*0GVW&8hqdcVEAcM.5m*7=u6,O7D-#@*0NGp?R5;jC.3
+#NZ6m=a,W2g+5VBh;B,9f%l.jcFI:$6l="V43k(BB_rN*,[&_25-:i*&.KuqADQ(VRU+M#i(QGfh*Jf?
+9.]A=%dX5;\dh?`Fi5GZH/a5r!`;hV'-UNQSgj$h@a;d0":u-kps"BW"-J)S"CSJnOG+(;>phmLQn8^-
+Sah)l*\!_H+VgSH5T*Jj;;Scq.hdGeK=!UX`@'LP^&l!6-@e7Hku@ZYiun77&lfbWhR$Y4"Mj5b@fe=h
+7ne5Amn5hW:)On\90d&S:LO"l`#hJNWXi3eO*s)##5P<3W(/NB3%,Gj,@CSGl_-uPk2Ar>Lhlq90!m%m
+@VIWh/\qBLY`3*0KMQm&O3n*7$!"6=q92u](#.RUdP?C\i*L#')t7`0-3/c<aTOkI;4.F.\!p"$pM]bH
+/F9@/`T,or\j6/g`6>90Bn'PN98uXn<l#Z-m;*iB1'-#CE/jn`I5';VH#AlkL_E*WB'4*NRbIb"M"M%)
+i7)4D-<O,PJ]Ds.3N#n""QDGPp)R[WWt<Pu?6-';2i,@]=QL4T>d.b_dKec2.G4[hM"=bMq*[o]*$P*#
+@=b[s_I7qHjE&Nt?7=!?-X?200IiD8nEYM"3-b\e\TQFLY<ph%4!hGRG#H,AZFpUQ_#]rM2i&>jP1Z*[
+AiZh%1(MD"R"T-hY%-cAIGo(&FqaWpD+)3SAQicE9Z+oC?=6J/^G$M(bZ8%(6_mK&:hcCsqe"J(<eCC+
+(o5tjP6V4?QXN/Kke(S!E^$]8=W$h8JFI-F<^%(cIO?/P:E*a=@*U`c#/]_JJN7gCrH]V8B3SPU`6C:i
+IXt"3,tWG7mk+r+J39YF`1Mh1+]H/HOQ(*CiII!h]KqlY/5IdtShB;A3Dd6E_e-Hq(i%A=fZ7Y;(h^Vq
+h\RKE$^%q#1+^oDP2.6LA?F^IKB[s2QgGXpB:\pc2d0:BQoUBiWE,F6KCV&<pY6oYdO:8aO7":5_T/PB
+N<QSaF+$@&dQ*V_jR'gf=5(-2.mD;,"SWpG43-&](F^DPfg9LN3=O<Ioo@QuKoZPdo-8+k*\YmO:7Sl)
+mW%Ti"<P>OJb&+LE:iMel/(BMN0,l=0444eqcbm=llP*L7O*+EGs(9`o6*p"XOKXdPW)j`E&(=Ho]>Oo
+DJq_AS:u!d9NrA9h'aL9ol@*MmsLYVRi&QIhV!,HNO#2QmdcL[VK.^0hj!B^R4Q'bB=R.4pFE.'j$4)`
+B\/a^TV@9^9c'E(L]@VE%XCZ8q$J)ffl_`$3-^h_Pk1&H@$@K36'dZ]JddW^eiM?4MMF=tSr"SAfumA7
+mi5HqgnIC3eq.0^_6C+;O=KSs^.Ifdj=)b1:e_M_7*MJdBp1^;4(7p_af"T5Pe;/B2T\=HjBBYk:a4P3
+C[[&h;l47T&'%JJ";t[#<q9'lj<9?G4MJ+m()EA;h";#==58!s.sWW43F")f)+shr16<uI8S1bQYj#>J
+&?_:s!k"33Y83+*:K8jq`oD6qcJFmqQ[Se_J1L*InY:+CfVt,Y^bCdsiUEUCP'H^eX[Jgt,skEYJO?>N
+--pTf-qQ:-W&&>*k9[@qVaE<4Q1l3@'A2nD7g:TBa3EMk8iC8ZC@<\uC*hIej2rkpQ>7cW[kY:R#NpfJ
+Or)37O]ok*FaTTXnhaWW)Rk,UC-+A'>_tcBJ>J<1aYWiG4N)gi@N5jFWihUL'69g_-.cORisb]in=[;H
++TD=0LOV_#5Q=7A'*%^@p8ZC;qVf*_iOh02rVQ$irNG?U=R[@rklZb:5):\AWdGpgj_r;,YgR!QoDp(D
+(HcsEX*c$h-0@fZ%;Te:nAjbMa7doI^F<4cWHlns*:c-7rT38#AgHM2LkC-4#Q+%foR"M`%/+&QQ11F1
+dpLAdhjc3*i3g0#4mWtjGErg4'RGTTWt[bW0?!\*A*3S_7+(B6*t!f0ZVdoBJknXb?_CmN#^tf!i/@).
+9rjWhpof2rP[h1l`p6<H6Tg+=$Nk7<8ddAUk2u3nnI)UcF9JSn&9,$1>DV(-Gp[B2AI5`9B67>=p6P$]
+j$Mmi^f("l4UH4^D.NBi4U,*6b%#2Hm](Y(LbPro^)/@<!kBOL6Sjlgr#A8M&=It/K;@W:ZongP.EG^j
+[MaT<a$*QQ[g2Br`tggUm,q*HOZaK:@tW%uGX:d1M,#aOO9H5D609of`@;Bs5b"Or?6=g90b(J(nD(ii
+:LgLh&RYAK/BR-@c`"&<ZqmSug\a!>lfN>'?ROrP)6%OoR5'@>@k&*5?OR2cO#$1ZKeQX37l*t5VCbH5
+IB[Z6<<EVAL-JaS.XQC#Ph1=7T%\>kC98!YlWO"/_T_+ZI=j1N"0#4$[:_2;%Un4Q$Vr,J$AdrG*pgG-
+:IKL#<%Y.u,)T_$4U?Dj(LjhTJ*(>,fR&#%(YM<c>rJ(>JYoq/HRag/(HU'4&DmNIQeKW1<$J&hYV_]L
+!O=YsmL+GeK7%ZZa&Ea?f^$8pN2a8#T)]Y?mOQ4!aP*Z0-R'*:<B_"#YPVW^`Q?#46RAW'B\2=iL%SJ)
+aUBo51_tRLG);#g@]diZ4mgdpp^9`&)\E8FjlDuPR3KM2P:aEVa*s8"MB:",6,^Tfb?\\@GMlqZQq&hB
+#'OfP1ZXLG-6KpQ47#['gUm1N\JO$*m?LS#i`qKl:g?thDksE+lJ<EVHKAZ:ls#1\WkMOtHFhQ3`,ao*
+Vm]`'@dDgnqDqAimi0*lG9Sk%B*B,4><eA2f1!6!dl#SP.o$9CmOtq42IUNcNf'+3Qu9a!.E70(S,u"8
+_4D]nCTH%$(;M^G+pq"0Wa5-]03^*S*KBQ2*b"=Q%lbYk-eWc>eZ,<ji]L3-"c:3&T6A???_:rKoY(Y(
+^'hc^WO>:1,Tqq!ppsB6I<2th\hd%_cg->s;d#nD&C[5Kn+trj!:(%`e4+Or'=6rrY$GP/N\>hLER9.u
+^e7[FJ^ijm'9WhIO@R"i*3o4GDk@Sh1*5jJTO+rPiqOap>G;hkE$&-V5a7$I=r[!pl8D5Yr8+]^o7Gf"
+%juVM#WFigb]_MAKF#jg2fn'm6&_I\q*&<k\>auV4CP!uFrh(4bVd(J0[+*Mbq@hD.QCqilg"h9,i\\D
+8tsh[9GE%I%GWBDc#-#E9]YP(4r<24_Cln&Y8k<\XF6sQTVik;p%1K<SLl"q@UdVG:XCl*5L.%K@ZHsn
+fd"?eWa1F.,0ku0JAD2Fa@hHPV->QC);0'6:^Rd9@`>=phW50+jT?*:)7tWQiZV>EBI[Q$n3q=t$jV[*
+WiJ:8jfH*ASFC(]!hK2o_1P(^Ma'#4C-6,#FWNp8)\4Cjh%)5"=Ieq2`M`9ppYKBFKr;YV)5!!lMu,:I
+k^=8!@oI6)>cg)!oQ=&,I1,HR%XuBr3/?.8[jpb#r>K!'XE])MjN+?Z4Wiad]JQ,tAForLE/<F<U"VUu
+f_RU?piRTEm$eJ6%EB!aR^DeXaM#7hkI%AH'8>#<79KE<Oo3#l-L`Q2+uhL2k/c6PTa\[gb->k[f1:+8
+jM!rVHBK>[Y:9%LCn;31LpPda`Wr7&c64j2r/L%6_:dD$NsVR9P'-S&9F)!&Vr3^$1BRq2S'O?N0'_O%
+-AdI>EHoFVAg#3bW'Z#NF<;FR$p=jbX<&ST9XiW&kX1*Uo?t1cYNNk0r\$E;I6XVBa6)J#\W/pQ-G(W\
+.@5>77CqLCpp\B+<caHpLQDR5T<nA94(Rl+2&_-?-guWjKrr]XJmTY`&Eq%F,14#U[IHeu\,LWd!e-[q
+NV]N#rCENQ_H@KgOie>L7^]R%rf[eBH:D=$K_h4Q#s8kqKXbKW(8Bjr:PtCaf1A!qmEkOQS[\1md^"gG
+N[X<f@K4"aN\SfV#ECO`Hn2F_Gr:sFe6Up0js4H+h599:AR!/290AV0q;ZkMmc'O)F[Nm=3#,a-O(1ki
+*)P%Mjp2jRXMQ]h=`_WNAtP"$[,%9nN+qD_EK"TPmjA>eO>@ACPo"s]_ms6"A5"dLP%.1\B8;F[%\@f;
+"?i#kPG&"p+r0fSRCi1EK/mcBD&d'>mX'l3Zoti9fQ:;YFBL\"fE&YX1hEb?DZZ7;qfXQt0=aWMBM8ei
+6J@`89Jb"XBM:59+(L`kUgm*aGhMp1e''%ML@QnM)es"*Y;2tl`&u$ro<p^"1tr)ZR!&uEU)dQO%YAu#
+l,:n!,0ge>.NaHk+of#D^ThOeTBRW\0;%K6Xkr;$<pOu+NJ/'W&[Ccr)nX7XIUaUo]8^j/hr&-Wq@.3d
+VV`L_kr2W^1&])rYOibQ&^kT60VmT.aIHj,G=5!:Z,)NN@up.P^Te@orPh/N6)EH]q"9EjDk(ih>2!@T
+^Tilud!cJ2>+78F`pS1E^L9Khkr2/$ms!L)oGa=@PC@$7kK^O+M$T0A6LSS<VVg$68ADFq-bb+fS\/>-
+3U&I<T&3KCNHMpb\`_Sfm:``lSFdct@orL9Rt6cA_e=:I=8InN[#fasX<-lhf'i5M)\LM:XO^nX%>+<_
+>j43,Osd!CoG\_Xkr8>4^X@%:6qG(t_2s+u+P2s&=65`s@tPs'"rl$#BBprDL40#rhq3@hdVg[)pO*"7
+oG\1;l]cj.K-C356?57&dqE)tq@*O&q@/#rH]@-QI`"?mdVnKt>j41*,,F+86=9%BVVbK;S1CJoYl;[Z
+)o"\g457bn&G&Z35sG+.kr4!<,5oMf]iY%>gMA89`^1k?jjG:H'fr_ioG_65Z:[C7)u`8'AGQbiXsa1f
+3fbX4rJ'boUrKY<QOCISDa]1N*#p&V6W@+^5bpL?L*KIiNAu2OGUpjHnJam0ZYfUEE@0!D+oTEK4G]&,
+nsgAJoG_H6*pdI14E\^mO,,JkW"KXq#l3Q?Y1b6VirE5+qMd:Vp6trJ49r(^)j)8Q/c8#$457bn&Eus)
+ED7Je1tYigkr4P5Sb*lHooL5(+fXW@IQf`2"m'eF2M^oD"M`m&@%4+7oGd`):T!#'(*(eA)!<mC2iNHO
+$bXo+KK4W7lR*mX7(2W:W-A(I'80-W%HG)KrJ%SoR!rNge*9`+hf-jiEg8`b7P$LpQC*-=^mKSg&1@F2
+II*ce0JKB]+FRbrNW#=srPni]Q%$V#Sb*l0!goHbEacu[)hp?:2uMGuqMfGH,5oM1Vd*22q@3=F9YY!@
+iCUdm.jSEYQ%!3f6McZNL@cFnIU`-_',"(:%21HkqMbqjkr44TNV"/:Un%&r-KL`i)aPs,hsj0hoG],F
+Q2o2lrPiFe+oTF/MrI:B@Bs35^YoS-kr2jl6i)cbgi9QlHumB3GA\u1L.R7WrPnE+H7f)MZ+H3K@tRkZ
+%1:J>5U:G1Uu*m*4MsRh48jo?9?k\<kr42NO7XBhS.^Zb0X<Wsq(\!=-YZ,dZ&i0OJlhdX;b^$`N=CX7
+)lCZooG\_]dVmd>TCa)""i^*Q)o9")OFC[a6M_-q<@@_Lf,R@fJ-bBup6o>IGbs;j@/H/P2iPG@oGbg,
+@epODO=1"HiE$OJ:q>%n`:=W;'ct1K"r5U*=R.@5`^88A2dR6JDZjoZ#Uuq#[W1C+J@O$G"SGlQH)KPU
+)a/ZD+/IdrID4t=IK!`iIS>J*9!<`p]@(W!RIBbeCR.'\`ia?YhcOCEkr0BL&G^eTCeVUKIrhIDfY=uF
+Deqg4^TkV:IUe"3qMgI?kr0#5kr/lG<SD6.b@)P41T''^6b:]aCd^h/Z"XctDic6\N%e1(^TiV6dVisk
+9#%WF*7AbA0VmSK.'9^Zja6'p`:Ouf][C_#lR2YN#"/6Hh3fel`\,$SDliokc:PdU_2s+UK3.mY6_*cf
+)[tsi#YJa#U"n(7fZ-b`%3&MF^L=K2kr1L;dVm'\!+N$sI`(=@Uu/CF&CYRa<>j5'XJ'0mQ@=IZ-=U9B
+gY+k]9Y[jK/,b2G:ATqZL@cG?&M`GN([4N+iN!aY2f.%<+%hX"7sCfeYZ6%uDqM(\(O2e6YZ6%uDqM'Q
+kr4Rl1&Zj1>$*q9<O2(+eKVuO.5t]'e?2olq+e\5?U*d6XD]tHVsfWOkr3G>U%P\YoG`R+kaU$Ydf#bp
+EMq^`\OQ]0?TCZ=&QTY[B\:Hhkr1L;dVm(_&<UK!%AV3?^Cb1<YKn-9DtopP<;<%PMMkCsZsuK"NS(hU
+P'ju-Z(lA6^Cg>QKT?SMIH5'):^19Nb+W`Kf1>Y'I`(;#VVbLNh:X\M&[U?I2L^9,GPVb1pJ1Poj,,5_
+L64$ah_;3WdVh+!Ohr<d!)d'l)1\q>Y(q5;D$FJG%IUp%9Wt][6V+s(B)mam@epO<rLnA(P[Aq8f>i^3
+2gbh^pVZY`2D<+l_<.7C]<R`P_t_qW^TkNpdVj([A,6WEk>spER!usK&s>qAdhGA%r4GCSM?Q5rT1iZZ
+OSp+]P_3UpmDJU+qMk+>Idp*_4r";7dVft03pAR_1[Ie,7h/tb`0]-N,K4V<?B1.pm3TU89#'=l5D0O2
+2n\T,rPh<4kr8<TYOibm@[i0cMWm&X\O--%P;ZnH%?jgfq@,Y7OFAFY,"-3m3RVg_Gg^M4@kmq::$,$^
+Z,)NNK7*(PO+Sj)qMi0A6i%8HVC2=s0p.iP_jJ52^N#XV"&dXAKU'V(m*u2N_ph`Wk+QlLZJh!r_q8o=
+@(Og*(_\mn2k134Xl-ttOFH4D!CXWr-F[4E^]]aJ_on0k_ePh9)^b'poGa%_I2S"J"n,W,1&]*]?0O;L
+b"9@Q_2s,`g5kJW(7luQan-NbUY%_MgdpZB!0DZIC7k,;m(J4/YD;`hf!gil_tkG'Df@BbrC5/PKTOX#
+C`>mH'&k<GXE%8r+f)b*rC0WPY0[)C8\ae>`0Th8&?g%G+MJ@q$)&gj#Z^]4@S94;M_,t<_3E.#T4aE"
+`(6e%DsbKZVROC%^Dbis?iI4\dWHnp\]O/nns?,$Ruo501^s)'+7.%7ddIct1"^t9[e)f3Vn\\R^HK"^
+61$MVJW,o3A"d>R/qhhm]$_`GquSU2+,DrQArK0f[0n]405#dIRgB#t48+6P="K0M*g#2`b7(+c`6)PX
+qr#$tqp=_L]35mTlnM`Q(>ID)]\KnXL":d%1X)<8nXS&4c0o^N\f2],#+olgD\1t7UYcuE2!!bO8#tut
+(/.dQg"LQ[K(XkL*DY$LfFYboh`cfocC+j##@mA,Z]djf$`*qsm1&(*EM+ks:i('/&EMJ<S5MADWsSg7
+[5;;K^H_3Q,H3S7Ecq+q9`pk;m"M*8l%.aS(=b0D+-=`dl*h6o4!\t(STu@Gf^i7H@uVi8H%YsjE^X8\
+m4'WaIU6:X,NVks^>7!!9<jfu.Q61P4U=G%2G'M&/\c,n*0%,]Poon]_hA5%n);Ja#<<NEL@QLOSioZW
+ll?Rn_-[lkn9+?u>ZBX$IqW%/X7'EaKAi<c;jK2od0_Un5C1?V[e2^M+W'Vt*sa3XNekN,ga<lM3F#=4
++3hV:f!3MK]BhMqAtZhHoD36gaPfp0GE[#tp^RS7'`Z$9/.d!A^D)`=0>.*u@)r7u^u#t$nq"h_(9Ug&
+JH)Q5J+-#8-cgmDj!V^#W[dHC9[*8.9QBV7&Vs%;Gm,/ebS;DSc!#q=<SdJi=Dp>?Ld'Y$b[@Skp<E)b
+l8H5J?h>&S$\Nc$2nVVXq:W"pF^Dg2Ft"4=EGu>d>12.<_N4sreqHnFj/-]05)'!/8_]_]?3UX1TBI*4
+m=GU4K&U#9@;JoNq/WWA[hIlhO7W#FcDJ;b4H?AS)u,-'>icX]I+I^t-jd"3BMW"(k/un94(.b!]tDYC
+]!DGW\QX4"kj,%7qF8&&FT8qL_YEOPZp6NXN49C3,\4h6Se!XCOg5H%WEHI'OU74p[KE,[&Aa.)<-uE?
+=fkJjB_qQnUl>/i"&=:=")unf:gQ>1GJVu8hVtI+;.,CAf*<;*eMi%l)%f_/ba,[G4H[t@SML%&.Asn:
+Y*&.>MWWKO54l^<!i"@HfkrpW8GKXked3G:qs/u-.-I`f8I2fp"HBjNh48e9P3KtMetGrNUYF+YN$AVh
+bRf3\F5^NU!A/u2JR2bZq*6q6;3_Y[As,U+QO/=jQ$9`p9Z=J):2h:`#;8Opl2r2]1P#D@5m1m0db$"P
+ir[DOqg%<niU"qTfd8roL@5g]Zcd%+@7&!'-O!]&/VbN?JXBGUTf0F<*Z?nVVh6[Yb?]g6Lk^/D6hj_%
+o9pSGV<Qq?+jMafdgq+XC<s?C2:bVup?UYD!:d9=@d9,)LU*3@4+r*=NIE"E;GliKrG['<=Rja+Lsl^3
+Hm$9L7F[_G[W5uX\=%$-X-Ils,ZA$\SS]Eq=0B7O>;O#_0G[]FVUPu?<///Y4'Vu_F_omXi6A(pVMASR
+"+/jGWXVi?p(4=IV>Hp5n`"L381O-jS$+,NaU!SD=quuDoB4pqqg"=A!m6E<:M!oU4#9#Vn"CY/A#j!A
+I(*"H&ir,6&@99)rIHr/KiL;Jp?Lp%\ib89^cke*r\]34om,Vb%/Q+tQ0aH^ToJ['6R@S31e(*#nOuF4
+/XVY.hkOK(=`N'Sb6cHOpMsbSd""OL$[]Y_>iW[Jiinsoc?!unI8r!H,/[R]YapHG^dI8na1?fZ=.JX`
+EINJ1INZpbqX50'KBJ_V@h0-#l.D2krH)Xjm!0cH'VTu\%Jr*D-"6^2IQUYBhM=aVJ*!N>hMC^"Hp&'`
+@]bS#YX='FG5)dUm(@Z7)STH1?9H7>fj/A%lk)p@H;K2)$p%K1,sO:/N%kP'(d\6D/>p7<%G3p,V`Z2g
+S%j`0oOY;$fZ3460aA9\PZd5I\A?5a6'`qjrD'sAYetba'bK+Gn&KWcjV*ae@WBbR1<H&2H:jmIQREu[
+Q8R&tqOrE["7m$,ljtF6D15K&!B]Y.!d:YfGE#chOOO>PN+DMaP8ngtGlFN!eOj9C<:k%b7eu<mK&/n0
+@KeRK,U\/p$uElVNL9/?:?ghkVs>)O++JU@;bKB;e8#%0m91/OkGK<B/RZUa3i2MH`jFCO3eO+ue(5>,
+A"`]k!RWbA];[Uih9sjV:ekp4TR0$Dm1#b>*<WiTCb$CEZ.E)q!B]ISjrR/rnb%Y=G'l!Xcp?l2h8b&:
+([<lZ&?s(OJ,c5+Qerqj\Y*#L8*l/s)Zb\FJ/r!h#hUlY]pc<uj_Ajh3=5Tj*AU%LU$l<kiWoqEnI:2&
+*H"p^m"G=kJ0!NS#c;Trkhr68'6+:5H#S-RS>`IYJ_1Y-rB=.7?me^@&8DBr0>Bl!:K6ErE@+He:7_XU
+SB4E;n4_]tK_3,a2qY:T;hobk*8tt8.ZU``SMPNtqd#DPH%>\NO[3[Obl@W8Sj8o1+q?mG\)7M.k=S`<
+&3bAZVII=N\*=:PEAiT&SHuZt?@:_p_^Fk""*P/f!B]i7gdEX$J/r8:#hU:.VMi]dLN=a/#\2fo>^s=T
+cDklE&>/P5`*%q3ir_"G@Q8T/aabCPhOb5/+Y2%JfAWe:fQ#4$jQ_ML]j9`:>[X+@5;2=P02MA1Bf^gi
+?aC[RG3h0UIA&*BW.KO?T+q(Mq[,U(:7T`;04/Ke+9+@794j1H+p)p_\`=sccJXNPD7X6@CcMMXIRlO[
+ebVQgPS\rDhS?*Ls#a^57%CIm(GQK*@pmka-1?.re*K>]2ME=^I>ZT%'d@&+&19fbKh)F^58On'M]%(u
++CKu1SfF\VZ2\@MNXKbs&oBWBdI)$o8:hV]6V3E)*@\@5!B\Tp&>*I*8!1/0rq6dh.cSfqJYFE:-H_!c
+btJ\p]sA2\([a:>,=q]g&d`[]"RH87O+88>$j(GXlo/&=F!2B$13b]3$:S](pDlO&K2uqj4l1D7Ji"'E
+-LPN%Zg/3?7aSFPYer=GkHUamqNCq?LIiQ6'AZ_+Ck"3JkNk^F%?S8;"&:SlT+'@4%-ZXSl=V:n#5/1[
+,e(>"TU`Q7nJ[7\rPok\M?,g'BZ#k'il_%d,Ng/%P[@F1p"0jSTFnCA2gYDg57#n5c^#5r?;JL(d-J08
+EU!.m]]o+d?*#!mht6cI%,Zm=VUt8JKH$&6?N8q[ggY[;fWj?/]+DEh$BcDPm)6[QY[a?,$^h8):UG:r
+`\^=LWfjJ%Pns]0`V"\TA!(G[O;f-K$$Lq&:?5gYe";a&U.Q.emA>r<p%IQoarl>Vc]?G^/i*P)*]0YC
+Y&]K6s-Y*CqOcpo%n?c6[QdQXLk/JhJ(PXj=UPhC?jG+q;Yb?bmD^>=$irFX-t((\"hcI<dTL320A,Ue
+(j47_p51+17QUe7(nkRFI3O?;EC.'so_mcbL(c;OEqpm`8GS(g`cM[>7'*FONrW)WhldIa6kgcRU.Yt<
+M`W+PM6MIW@)l>#!d8tA,,?Qe=p43eW^T15Y?D0"/4X*u,%/G^SRUng[0YFT<JuAJ?^9JlboD=E:3jhC
+WnN_rfNY726!l9)OOQ4?hY2YIIY?EX*tr]t;OlJMPZ-I1f1>YFWH_r5'A(-4,@neA'-T5AAKg-S<uqE`
+HsJes_\&X.kG[5)et'8G3d-MWD;<%VSjQ>u.3I?M?0bt^X*+%.3FAE6dHm>fn%0,NRqd$*C>C>6YEO"l
+gN,$C`sjt`J`,>^$A^gC[j+*"2[JGHhm&.O6pHLDom6a`$lf7?(!0,R),S/joaoX4'LpGBQiR?/S/HR!
+Dt'`e<lEC"=a1#"b@7_VL5:4qA0Eo7a]J5e]$Go@NZ%?#;0JI\aaO+"`l<%Yr"5Vp<F_iK_k0kQ*Sajs
+D1+0L^^c.k.jDLt+#XDMJ?Y9R3=rXYk8f.XSF7Ta-*1te`LLu=bc^s$>VCs"[CcJ3cPAf@Kd3P&W-3@E
+_SreYlUf#70"-GICZ^"\/D%sG>Ej-1-d%Q%MQU+Jim9gmlklaVJ/oTs,JCo-NJOOo>Z?2/H,g6D0lTYq
+WBH@?\L6^:GcJkP^lFa+?meP<6,65VU<fUBMaI[L4%Z0m,?CVc4GWOU/28S;FD8XUAZ1eU=aOJD76+%,
+RR_A(7.(j)8?em(=+aCY!n(,q67pK;WK["(R"0hNBZ%M*-@gUeB**q@pTp*/R3<o=?uj[BIph;U-@gUe
+01Wg<f1*Oc2n:?[Q-7B)N@I<mn[?YN^lG*d#hZC3;UYug'<oCJ2&5.f"U+1^NUh%_d[>t@!$G\4CaAU+
+#d#IX>5@j0]*f+h[t)[Df3i(':-+i2,H*FR4t!mEFV%H`]S]ZE7o4J@^eQrUh=]J$%G:JDYoYQ$iRN%+
+@3OVl+=[t0jTE=KIoF/.X1e@B%+l`_l@Qqh<V\na8ds?4%A1Jf\&%4A(u%Pfrhb2d;Y.i2*:b.=s/XP^
+bt&8qM1^65#Q+%foG<>@&,'?>f_J>9kq?ZBD\(K'\-+]j7VQ&CURMI-.Sa=735U0]H`@TE9r_*!?9AL?
+qhJW[7%@Vg@iku*`OKU@OZBsL!b06,#1ab*OD\L;Ho`R4oqrFo%=k%&b_5*Sr5l<Lk.so?lrBQ2eW3.*
+WN2O)kmHkmA,p+Lp@CtpXZr5ZCp@p&*=(7g<`^Gfjou5@F)CE2UG,_W14'A0:e!aO?_C(mT#)4tAu2WE
+6BF-f@lJbEb.E9g[.3bN:Cg)UX]0qDP[2lMc6JfI9@'c3JuCT+-8\SCE:tGV5.h!P-62Z+Aq:r%)<Y"k
+EJ((@)>?Y!ogEeN?Vd":FtGMm-\ZUtBFf%b7E+8L-`:FbNK+Am4lM%+nh_ke6K6EJaut`]-'gK]l`AoI
+C1ce;'CkDE2'PekZsb?5)%8mk3j+cCV"k`;ohWSnaFs,8E3$LKHm$ufU+oEBqtdc-Z3$-X0p[;cgSH+q
+[4Sln5uD64X1\;_*AV3"\k"+M=c.X$?AJX!)?SlF_tVae4+GO/:]mX,3kW7%e=l!:-0aSjB9I*1;F]OT
+:/k6h5\)%t9R.W<oN#f!P+-8i8HSDXdj(.KontieH87Q@!UhE4XL+#a0/Dso%\dFHS@inGNb!qP(F<d#
+],u0#1W&J+K8>.i1:Y0Vh/Nkii1b7ZaThVTR13D,]4911=Ad>L==%j?)F8DHL_r?Cm7itp3^!WDlWb1i
+)q^t\^%,oU,HgSIe"1;u$Llo`2D`+Ne!kbI@+*A4SZb7ED2u76NIjB%,uAL7FH(DB\u29S0CBUo-CB9W
+/(+3;bkVZnW=Td9L#SV>7F6f7_ud2G)lL*QXs;*(N[)dFL'-j;7FKKuZpL$2QkrkO5*T1!qP9S]^V7CB
+e*3?SlFS8p2V$s2ebYsJ^Fm[6Dk_$C4(G15?CM,I@]'F#/7:Tn@(F,)_]c;t_\!*U#YH'/T22ptA4-u_
+l[TGQUlB7V?eiY5/(pT`KmElIKBrkV"!c\9V'DN-GT.`\7V;6Y$sF:sj[+l_'%2p#>pJ^s`K_.9B*S4*
+V7N\M_bFVlYPeOGGl)cX=*\Q>A).BBaFS,M^HMH9XY,FVlG[[%3+*m6&)aTP.ab2OF#q\]%7Pn]Lc43E
+j+Q<P>1_:!=6:I]r.7*15d7.%IZu7fm),FR8#Zmd%E,d%MZ(,#\Ib$1N/G_pFC'dG"6`^0hF)sr+7'oZ
+ODQNJ_Jb_bX:dZ9Cq@@<X"],Qd<JeS?&n.HFA6#4FpG:iO.LH:=Nu:J$\hQ#PR9@J%El+bfkmGVo5eVV
+j`GquX0:&*X\:Y)U.i59P0QAQTX\2kN$"`OR%_!l@n^7m0rMbU&6.QcOK?*_<I(I7!RCQDZO;4h+QW)R
+1p@3Fe*4UGoXoL(la?RW[);]Hm3bt0%BTL';"(d(-[VI<YdmrVZ-O3.)l-ki9S\jmR6"_6emO8+"?D&t
+&];rep#FQQXQt,^0r(rDQr2b^Q.1$@>4+Ymo'F42=)8n>CPd)A/oeH@Mga=l9GU+L8Cp3K+U1rHF6,?6
+e./\QJQSNM$^'_]pL8R;1Q/<SPPt0%QIA%WqH:H-G2ZVQgHt@D_08;'a6YHa6>d[F(itCr_keiucCa\9
+M`_l'8>2NE3^h?f&4_O!oa+]3(W)$/.N\r\+kKCB^Ej]1lQPBg\.R^/r9T[f&]B)fl(%?WFj<"A]XRH_
+3!W2rc@2HUjMkb]Xg3BLa'k),U:N_sq*IcX]8?)Y%YJk"q_B;6O&-d9]XKKtWNUA<eMf6Kp"^KrY'5/F
+bE6P_+2V58P]cco_HkL%*AHa@Z\>Y!^NZ0PFf,Y_0$;_6Y*&-ZpJa\AaOR+1p.nr6qBn(fQrm+4OiMQO
+]%gX)o\g&V(96)!Y\Mu3YeEj:SM)eQR0p4ngg(;rEm!(84^DXXc_hk%%&hB#oM)"QIJL.^I[o+13En_4
+Od'4\l?Zjq(YtK'0Y:fsVEtRGTrGV/n.!2n$:gI?Ij'R>@Y7V:G_(ipc6.I,a)u($guTd`e"t@5s.*WJ
+$S:ImItQ"B./plO/*IGf+;UgAhe$N4f4VW0ZXq,qhAP[](IE>_&'>i.$S?t!c?*(lM+Kkp"5u@!SLJtS
+["HH?PKUP]bqoIdOR=$\]GF/S*YasjW7XZEfDu#X]MK-WR@[%?,5]7RO^j`CB=H-M#S+#Qs&L;MYA%*W
+Y-s)[#HkLplAN:.G$U9p(]1%c)q"YD3Ua&lm<dT1-fSKYO/[!!X`t[rV[2B-ZouSo2%sL;?fTJs&BYR<
+mNIt+3dS>A@CuFI*)YhE\N!31bZ($;je9d-g>:1;6YLgFZmZ.6jB]n>>*[P=ZW@<,@OUoZ>hXU$YB![O
+e[6.?#V)>f+IIm;dd@U=mCFum7!f=4r']%e=<+\SHKW5U+")`Mb:c:-[(RpVe9%PTm_YjaomWWu0u%!-
+QA2tl6>1^-@A'ZV)'D#kKF'2MKg#bHkcPV#&,!H8TF-D"G5.UVKXN\2RU.@)^!Ar_!uI]H,O!EhbcF#9
+5=YP<FNY6Lrb0.#ajV>U[;H&V^<k\+bL'):"88V3[+O%mM,B_UINiD$UNg5lg=#h,#]3ceDuK`I`3'Dt
+D&m((mG$(W0[%W?D(E#:>d8&qB*bVCB>@-7>2pd5SZ\;_f-'^nmdC_@SI"?bTsYC!nL5OP"47j.U+2c@
+\[a\ob3:nkL8#5_B.++\m<"BLksZ)UGZY'_@Y^t85-&`ICf[b!#_p]H6Rd\s__4Y+Zs@m6$DHS\;L#8=
+0/.]\Vi)[VR/K8iU9_oh@PE]"R]/B%p.V%hC.7Zk+,JAZ<r#/Yj9`ZE@gK1@cOeedH-%FXr\u(.RQS.r
+puH^U1jP,N\Pa/40SEJj`t2EK*Z_l<jG?0AnedLdrX0-`gZ+kf7a-<(c<RWs-c.5acI<k$CO@Lad#nti
+KU,k=+eHug'GGf8BAeXSTlmLd&Q%QtU".1#6JL>XQQ`_!l0$\2#^(2B/"#\i(sJ*dAj6i>-*kYu_KZk/
++tF[P.pHC'SgM1P&c/m4oFP2H:6E^[X$UJqGoIQ%kM+>+]#r3;J]Y\*ofg!3#d&5/L=#Wac@67r-21H)
+)s9a8ZtBOrKN;%Jps08lHE@2(:8qK=d3An;Vs7c6O=]W9KF3k'+mi\6do5<6Tg2G+X::"RIOki"V%B=c
+bmlrQL!Y"Vd\7:VQb4&"gTtQlZ52L-Tlm>2+g`7CQmb@g6DT8,7,/,8:Xq`@6;LU$(rui;lm+qr#VC`h
+L![DMkC`Hu`R^;+YQuLc7gc@SKXSK'ET=N"=Wsdhd2>:*h48oB_k2@OS0:P<C?f)oBC#u!F_P/*ZmqtA
+U=tQ!Y`FW?4]$=tfhub8h6D)>0kPS?A8S;'Sq&I+5p'MT<Q4k'>*((_bCjL=0-GUb;?\XF+g`j=.tj4?
+YsMuJda+u#;#\,=@/JD?BZ8ilP1TV7!f#'"el)ik4&P,MEpOSEH^l<L7s8NA@P6`-$DHS%/m`[Ud(2.%
+M"c^.anZ23*\m!GYp6&0.tmV4o_@*h(d^=,RpL#hJ"YE^V^F.2I`c*JIkfjQqPhA)CA`I?WLZb0JZ?B'
+eCnR(&DF,A$qG"&.b&N?$2ir"2!Yl)3ji</833_$1X,KA`\_<kWfjJ%Pr"5=]&%@ISFm#q=qL%rk"[_K
+Cl6F>fT3$8KKidrg-]U#>+abnTa\m;&c/s(^+].bA+O`"I*#%^b/B(+C1pmpSU-.YiO>;*%`A\f6%kit
+.KJ/Wl2igT'*qc!Cg!r3S[J''7@eRUEe_rd-&oREC[C\N1"r00ff?3kg+s=-1k.9]BO4I?m9(/4U"q@I
+r\u(.Zafk&"DT.3<Go8c!\+.FIiV4I.pBfD>G/ok3,p4$+.RAJ<sUBZX[6^!/!k%k<N?[7Y$-P#En*3!
+@Q@mGijRpSC;"bl>(t=D>q(GmbL$-hR8]KQb3<lEg:VShXj``3Y;8RII1tgm(P6-qD2u7iF7<`1D$J.^
+DtWOFFdH6$.ATIBWgml/Z#\qSaOO@XJmc.['I(_Cl(APWLnUH9p:OURg?S"V2<l.TPksfp:1:.P+226Q
+)KFo?FU#\IlO5%;hZS8_KkU=.M'H*f:)SJn-k<nt5hAR$4+u2I/r%`u7o-$:@eLJ/(G3;B#@\am836Ko
+H6B/+`Le2"C-9mS&3?&>lRC&B'NQ'Nc[`l32$8p.NW.r@\Xj[HKU6:9/9])GOme8\6rWmp\=U1t1SCof
+7:):qe^Sg+H5`9q2=_qXPq&q+auka[>+fY.7.$Dd4+u1>'16H@pDHmrcCdF"k8XgS-"g)B.J]"@:n>$%
+;cUAQk'8`Jid(r`e^s];1EFtE3.a2LC3osKc*@65<Q#k0[Y2A1k'Utrf>t!:CAYNd"&Y(`;04,1N-)g%
+BP6L/$]#t>_%_lbW9^NZL!]5mQ6FD/OYnR3[0L_:pLH"3egF*6Zn,8aXha1b[9T2,Vfd^?mT8_(S;:=?
+gZNN>9'm%\jh=\"/L;Qod(8G9&6^giBcbIB&k7`nbn?.10SG`6PI>cQC:W!$6=cuY9@PtKXpt,SR".M:
+aTN;EH^59t1W0D56E<i+&6`]J$DF#.<g[1)re/Wnh7G(gG1J0UFs=0e>%Vsam7uMWL!ZjBoEInPeC;40
+K#9`3n'4C2"Mkt(\c`"ed'C)HBYAPBcq_%qf\H`.k$+LLAU"E#LX<UZk(rbf=fGC+nK'FNWgP*1]Qjdb
+X*<0.s/1Os^+$T%=h(qc%FXYqJOPAhKk5gSCBk6uJERPQ?\nM[=N%r#IuMs"k=+S>nS`o*Q_0d?^W#XL
+q7/t.mFQ5>!AXP"5Titk,Bi[NFohA>^A)X@deGtjOZInL\:6JkfF;_l49&F=+s.>)49&A)MM[)BIi<SR
+NQU9(rWXj!CDudP0p7"sLi!G:Ii"CMaY3YnWD!h(>Ka?(pP-LVD*/QAhcE(1o78L]\R#$'+"##kJ]a#J
+>H#cscBnk7k0B>g<;90-o"RfYJ*Mslp6Ue!Y>tM57#LlfNqrYphRmR2H+NpXPVm^F"c-;5AE#Zn((qd/
+Rr80ZRp@,M^gs8A?cPP".j2Pb@VfPX.^ZguG(%[$`t!M&"L9#O3=?ZA5P-sfqfkG_Lp6k_LK.d<c/%F[
+qM:hP3P>poqiB.r2u#p>I-oPM^@t-RA_.6D^n1m4q<69l2ogDTJ9j+Lh2^jf^B29Z>[FCi@>N.ZY?j!C
+"s8HgZ2.(*hGE'rrOcumG_:Y;:VBL[JlJm[h#*Ct*LC?^-)fr4S]P$7HY_gc<Hn.RXT4fs`h+2Z17c+8
+`uD*r]bCR\)[;mKLa?D[A]I*"0l%\pIAd80[E?%2^Z^&7D8*_Jc#..O9BP#;EuW8LNGcL_TNB=*JR\j;
+,MDoZQj9:8CY,`5%rTeX45noRXqrB'U@Su*I?[H'em`\,*^>N\50u5]Ka:R.",FWpp>Yu#3o*jU^rlBr
+1MUQP-.*9qrHS4O4P'CbhCoHEPPOKHXThh8r#$q6o%%F]Ze42lK/&HD1KQ!6qdq'Q`L7eqc2Q)e?3jcq
+Vl;=4#1b/PVN;dqQArtF[_$GKL)"()9".)uhqjbqZ6:uI7)dIoXt$3j_h9akC^GpSh'"'`_J#E5WS8Or
+V1np%RO`7s#9r]s_q]'&[hQWO<@($\WU/Ke2BX+<cc*]*Xpo%fo[p@h^d`OAlCcpdSks;Gcl;>IlpP@^
+>-juE$]t%K;>cDTdF;d];%85Gl@g'IU7LWWMVfPR%RX6A8*n`8lU$uUC>bUa]/6AWV6rsk8&JfEA?*`q
+)/]':EP"+4I[prL&UHF+2N+RT";i!f0WSS;2d0?R0eaoA<DpYVi-T\Pi0+4U_r]4d(Rr%XPk7%j'3/$r
+&<4R#4]?I/8N7,0O8H+FjE]*8Z$Y>N^^Udb6*(:ilYga-@>IJWJo/.*4@5^(YW3n3OuB@(D,Lc/5l9<B
+L`sWSFCm79%9+<HloRJgn`EdL/2YE$gDWq!le<JBce#X7.%S'YoY(]A(GoHFR&>YINXYYuSV.t>NjKei
+)X76D9uYa:r5*EE.>7,^NG\/no/b:90hd/_AA0_&bGQ5B%X<^qKO%r1m9.7<g%qBo^Q+OkhDZHTRYhkm
+Y3&PeI!>(6I3(873P17>Y9Q6Jq^1e`,9f**f%.pqqOn>40$:G;U?b6l)O;F8*VP$,0-E<QbIGmiJCJ0k
+1iVF:A@_RtQ$sSLA,/p&6[W^H9nE$0N;fg34ETuV2DYNkfT$"0\Odk^1&(mtWon12R$^:n&^Ip.Lkd(.
+_`:i\'/:g35K8I;+qK&X0<8JYgLK397e#Ob`)<``a=Lb2VsW-u1LQ#SjdUj;D_jMO5(6hJOY&At+da.Z
+j6NNCC`&]K&ngrCfr5A?^,GU#9J&T`X!rmaN;951(?G&ad1?"r@^9k*%b]L-K7tLk5]l,M`p'=1eH;;7
+0TA*Z10a<!."?K+n.D)""Fac5'#g5@>A#%!T%d+V&T.75C@[&kriN362d-3Fk<sLsdi)T#,<<*4N\+Tm
+ff'LHEo+qDU/I*1L]V1Kh!T;H;XFgFM;lL7RKh$sGjsgbFSM'5]@-h2Z5JV_'4Y^Is*J4uA:Ff]OJFc:
+$ca*[%gS#jWF%^K$Hr#LX(R;NB/sc3Cd(N[59MH.M1J`X*eA;8%.S`hb)D.]\,n.52ERD4!l/0MHCKbt
+@j8\K-KX8X'd"UiUC+qujj72P]km?g2>6,YBcVjGCtO0Y9>@F`3AD:O$*t8IWVrm.H,.*4^YU),/!^"9
+c,AFV0.IuCA*[S-<b#W8TtKAa+3*".;`kM!B8Z=M!GE\1,M2TjS@Q/t&RC24TU)GoO$!]afgXmoT.9&b
+LY8.X7qQ=nVKD%eV#BXVm<rmGNEQ\N'9%$Z^A'amefdN[f,%2)oo3A=60/BY%=7DUiDnb2/3MJUokEOq
+mi-t"p"b=@NQoY9p_mn"18/i'AGA4MWkLp5F"3%a@@t^5DMSe:MbMF.Rjk%bD=;t*o=7%EO`qOD]b)Dt
+32U.[,td"&]do<Xn<CIRNH_'W^a*A,8$Wr@5\efWA\MN2!m'`U6B'aBmlsPN0'#%/0?5,tJ]:E>puT5Y
+/r%1)Cc`NE!%%q22g/Z0]KmJT3&;nBR"9D[P?S!hAP#]U)6dX2=N-71,4j?dWZuI^[L[6?dFZ54Mf4c4
+p9h2p+"fc<T`dsPPXG6L.<r5D"WL81UZK<p;_W:iAML-\f^f5oP6g\d?*a1\F.m^m:A&`:Vs9cH&c7%P
+(!#Iu:#+0;Nfu4NG_pI1S$!i.f3pto:3T6t@3StGdh_aE?k`'M1(*bicebi5Z1-D_T^!7(<'DWN+Nq"_
+fQ%j7]@@S6:KPm<869m*!H3:pg1NY=0Fk(paj,SsoF9![q9C\)MP>lWWG+*@@&07dMd2"`Kp5YPi![.W
+b1i2R6g<Ne@nj8UAFH:hZAh+FPZ5*MoEjXQ&;E"j;a6m6p1]!$d\Je2@)6(mJ;L-N8!p7U[<_]>$*MCF
+SYTFm%X&VK.@&Bu,Ml<+MflBTkF3'?X-8468Y^C*/@LH+j5J#3VZnikpA5r)r.&H;+gqpP*Ab.^K@&!b
+T4TSR+7J*[i5=0pE]@;oQQF/a'moS;S+:'s.p$RgmmScIY3c6E/&XJY@R.9g?giXCecTOg[QNcI]iPcP
+6?R:dOeZ(@"/.4<\l/_2Z\P3&"b]rl*B`Zj@4u'FLi'r]@-=q7#"ZTq?n?0Q>*kIk]OR<g5PCROO$NU<
+EY[HRQS`=/_>Ta&Z),%BC7##[UV(*q(mbo'[WoW\pNk48CQI;-_tL\-P]$hA`#DRZCW*j.<2$cjCa40K
+A)8HsLN1'Wd)&P(d:]uk9_pn(P]tgW[]O;jho*B+UgJaWDF03?r!j*RI@L6i]g\6+AHX6\,CI:Lb)#VC
+O@@Tu]Hc3flNe>I2b9LcG!p\]Q=\"jL^m0r,2EXNj2d#QWq561m#W0+*T>JI.VDmKRm8S4[%q8O416Hj
+GfY]q>DCK/,OPc8QX^O;PS$uQ5S/8Li&:ohWiCFhAAl/oMU)GX#]G.l*sBpE8s;M.oPkB!g*!He!8_X'
+X`sitMK0cR[HN,^Hld)nF.PNj[R,8fAP_LLAEBDmB8ai[!:QhRl8aA&%\[qD$fM>p.e!G@O7U<4cdd7?
+mq6Ch3IpiSF5n7EHS?rk^pV&QU[eV1#nPrddIW=Q?Fo\0\.6SQ4FdV3!A"?ai(A]`#Om0TrAoIEe&Jj!
+\=/Dufg79Rp;f/cK6fhPI#U7rEr]9F`r#fh$[dU4Ya,k3i+na3D/<+RGQ?>c`X4eXpBT/-J8<S%)%YYo
+E7Mp;Tk<\Qb.$#d/$ns@ipoXVkdeG^S;P>a!3T%_'=OHIK:Ksa\2L:,IK3`-iQe_WRpu`\Lr&t'>FS_G
+1^*8+[iSjc@B#M)DuP(QrEoBlmZnO`H%fg5j\;YGBgJTSB$[mZ@Meqt"Rl*,So[KfTFAYsE:13-TUEP\
+*:C]oT*R[T$93s(]g@nRfIIZOr7EM7^.pfanFDI?cVe.Co(@q(+C[>A9f!(i)Im:`[csIH\"J-0@gX\'
+;T*O+`7a5cB`fV>UVj9cB_4g$#H-,lK'jA=cWSq(gG%_BYb;!bkH#T82-=`/G6bH9+H<oup^H4,$GRb^
+:f3L%7%!.-)XiYF<D(9-o*=9VKL`oY)kuYW3=%\fpZ!59$teONb\%a8*9kD\Zj<!?bll*O"b+/2'IPP$
+eT*2>^9+P&gkrik@"K+X=5-NkMOu=kdu(mBIY&;ATNgps6I"cA*!"`)`KuVeXn]Ftg)97HN_E3\hgM4]
+i>+r58[+Sl'n=8BTJIoLBA?>*MD*>Yp]j)fl(T3>R?fBC[,MJPb=8U]+P_kSl;e6mr1%;c.3-=$][\k&
+)Q`]obH?K2;BQMHd@B$qKQ:/%45[%'QPG"^mKP1jmLj:$4:p^WHm*1BcX#,KcIG5GjRXL&Yi6n_b&+-T
+c&9c&02f=qruc!o-UPi+S>>gg^%$;LnaWQM>OaX$K9\XLOQ0t&SX$k#\tm0]gb(++Y44R-hU)^3r8WNs
+HuFteMP'j-Z1A.<)6EVDieGsbppo<j-0sF(Cr)5&!i_d]SB)#4;Yd(tV\(JH'gF9T(t(7aFY,-C[I3i[
+i8__kYopuJq).u5Y6gICl/KJemjU8H7>LD\KTY"qW5IoIAF*.h'dr=$#[SDG5rpHeI*dr>?0;$-%<K-@
+^8@00.mou4diFRa]YdUJbgZD>@at>PXR(:rS&OThmmeM_fXs=>qN$l/eN8u5pDV3g>.92N]'l!oG(tgM
+?)%a=#t8o$_o$7&`aGZ>"I4PSM$V\B<,TI*4n]eYKcMt*g:#*:D0]-]7dBI\.?OQ'1PPI9aoOU<6,Wk6
+MR@"VhQ>9)<&JUepbd.UM;t(55A\a,-:sG-<M$$ZR'<A43]:3i7*rr83"\H#\98!5aTIQFeBii@7'JK4
+]H^TEC?RHm;+`_<nJ`[PThe0=&&G0cNQYAR;o:r.T3%Wp.sFXh/VP".<`DGY/;&PrcS%!8UP?Je_cq8`
+TgH7-WX;]m+%W#%6_>R9O_]Se*)].r)P'*00JflEValf;9e'Ia(^&U^47aBfe0[%1oN?32Y_=LPePIEf
+L*D`%e^.C`FT8!PqTta&DZ9:d6=]V-mSl3r.-<bf;M[!&-gN=W)G8.E%Fm5.)L<tkXuu,U=$rSgY!=l:
+agu!eYmN\YC?V7HFk"d9b5'>mm0d/82h##p6$\4u:,V\&osh&rRoo'VTau&pW.lM!/Z>Ap@"&c<oj@2k
+^DtT"rC;W5HF?'<7h4hapV6E^kl4+9]L>#sKpDT5mg8rrk&oINH;@4W8At6gA0Fq6"/.2o;dMseAJXku
+&eVa[KOC&UKW;u'Ni-;-m!'K9o2fH!kf_kJf9+QFW=BGa*O5TaoPZMuo/an-54=.&peprOi\(N5YNC!*
+ch-J*B(k]=lhHiKeb0/@9Me64q(@$snRCf"5gOu;nea@]r7(r&A#M8[nUL*5352GKE8F+Cf,om1536Am
+fH;0Lm1i$)SM'%nc'd14Z6Ra<4r>)<PC?7pBDDZiPo;YeFPGh?IgI^hk>"8.KQ+Y!O4Ts3/5noa0e;jY
+k=ZTaMW@58qAPE#^<@=Hn&K:LdF[#5Il:c`(\o@0fV9$/J4U=\6=`&?5N[aH=9?!-0*;G.CQU(^e3RI+
+f:W>4IC\eZjOdi!`$r19JISEYE<]PCWPY"+Bs#k9\,q'Q35a4H1R"kk#a7ios#:ba<g_8S``D;NS/6qF
++nd-"68%d]R<64aJ=5X'\Z/O;jlrq=p7SM[WejF59VtIqD7PV0!eEqZ*=#I*qO@O43Rf^O`oTFgdh#Hg
+c%gjU'@AN"51G2\K`MFU[9;i`UE=]b<J0EP!\ftEb(_c<l1StTE8%=/!?Ag\M<G6<8nJOA7eFK-qS?6=
+3:D:aM+VYnNr]\<ZNrEj!]^k=#j!CM(oTAAVLasEn61@ELA!tF0FjlZGiMfr0sBehgIg;*J/F4uhd4Z>
+rXLYA0DH#Wh@\H=X!8fuL**bmfOA.Y'ut?0$js4Mn&t)QpI>>Mj_YqkMl/`3Cc;s`!C<LIq8,FbNKjcj
+4_I`3@eNsZRtV>DQG#0qU0.Hm2JUq5-ip^6o&o\V#\""8h]ND+=lf`o'D)/d;flt"q\mC^JD`_uh,#,#
+i*nq7!1q8,l#T"m>)]/l`>/=Bknclj;2@W$>L^r1bOF)(ehm`JShiNAd5S]Kja@AI5OWfA(J@&2bJOrs
+2c&c2F`Z"oI3X"5mKea\[=.+1#>+IpW2U!Dolmtg\pn!a@=NabK6Ajd_E<,l-G7]tSaB@8?fq#q9q&8m
+h)S[=joNA=Le'5YY]dIV:u47)5dm<^E_d\RmMh3:T8Mnu\%mMmDCGccm=hN9lPA2.rTb4HOhGZCWp`8n
+CoZkI8*b^]ppsB6I<2th]$nLHb[38raJAAn'HeHC.lYE-Y7>L_UrTQJr3NpmB/RlpBOCpE*42?!]`M"*
+`4jdBbT4m`bGLK&3?q[;SiP_l[cY#>^kCYdKK.Qn,d7/*#j32-nqi_r&C&lAb\#;pe-Ihn-9IdV<?n<h
+Qfpb@g6mL.\Rq30&G.UDirU0['3`jsLPS!=Fp`t6AsV-#RA]B6B6M)qB7fJ[@Y@I#`dr%6jNFBI0``nk
+C4$_M&hG9;HD.9[^b!7&K.&:s!#sb'T;8gP$_<^HCC=KffW&nEbRcN=r5)j]%-7e)Au>I6A]Po`Q"3+/
+E)`6/J8D)b5PVdA`VhQK86A"kmH@)&,sUMV=amP3W)c(nk%?rt!lDJA^AT\h/uE"sOK?nDN?0tpBghqV
+Tgg%$1lGo-8pB8%m[!*Y5On-_q6eQl@p&:s-G+"/8?Xlo'";D83'%m*0u2)qokf/eVM&VC!449&RDGM]
+3&aD4`:nt!r=&d/m0>#Z`'H<q:55aKK5"4?"+`2#3*G1ET;@Z-?]HXlnfi6h#L+eZ[3fH8L;r!28D=W2
+@PKiN\Uqhn0C3$%KA_&f,KtNuD$:b,;60l9UmZYHR3#80V8,1``U&*&GL4OR&u1WI0TQR(C05G-l(dki
+/g,7^I_;e0HM/\UX$rOif_`r5!>k6aQ!(?I7Y[XXS@!-m8]f`<\Es+4^u8b&rS1_k5NV%H@_7@)j9qkH
+*>=2giU[(FphXGYNuUE34b,a=(iEu@C['R7[#RYBm-".iZLcB=-8s,_+#_ELGr\>(.u7+NffQ=39Ys2M
+OJ$A-,\3&pPd,prn2%1"m(.C/0!loaK%K?[N,4Psg?9W73*j#a_]FZgLrl&B2U3_@JSgQuToK2WY&[0k
+D/Yf_q&VcP6EjF(bZSE5Ici,s$=gHh#'T_H?]`>EDWOB@E,;Z\nE)A.(8g-K-gp[3nEf#_h$3Cm@+Y5,
+MeupRELEi^KPWPZZo?.;s63&c^%""5Dj&7Kja3lL3-X"C4CYV\@ph*OeYq^<JQc?DWF!K9bf')SmP`'@
+l!SE7^dC$<TN6N,VG]BV"iBjVpu"P8e`R\q3[-#1NaOj!B5+E[ML)[;jb^AMaM@tI=2cEKGSuWKM89Ki
+edV6-&J'(TRpkC=p4kD+-9"a2I<2th]$oc0d_$T=^B,U9L%cp^1a!o+fcdS`&i?S"#50<fBQpH1_Q`X_
+12Oj_-ip6`@!MmJT!=Y_Si8GaE3IM]#+ThRfFrF7G,P3<En:O=`@J)s+j>Y(%eBe'f5CD1&rX3&WLg?=
+X%rOnG7)9,gD`:Ca/('0Ml_/f<'$iZPrF8k8bJ*d=_RS<13+1*p`*JGX.KL*(9$EEaO+-P9aG%:Fj*!E
+bML0J9p=l8dSP.VN?/V^T#GbJSlB#5c7gCjn,OSB'7ETbN7>=PR:53"Lq^+MrjiZ#Zn4^=\UeTd4fr?g
+3p$RWo1+`afH:uV&:AZXO<F>j._u@tH+]PW`1J]3]jg+:3R1!rX7'EaK40/N1b71d`A)^"2@:#fWZRn]
+oKWD_OS^]r^`iZ:321V&_3,NEH_.g_ni0"2]79,_U;7+\WW7#Wj]F\Xl59,oCHeCM<2a62Rad;"d&'\s
+6p\;m<-,ZoRnRr\Y$#QN.0"Q:P'^nU-o.ioerRM#?^Ep4I?V(<3gZ^$$L[bgSC2t'5L:fSlOPnf^Ad>L
+6/Ms>^,t=_la;J0U\-kiI,-6<DRr<KIpH"3eu6`F`P&qU&Vn&)VCWdGD4!!ko@PGnZ6?>I"OD%?TJ_V7
+AW80gcQ`C0HsL!=I1q[k<&bDj7;EFq<RrYLY0\K.p"ErHSW&LEmIX-2R0k&n2V-I#g%qBN^Fm[6DkcPd
+G:$?dikj3BKeOm$qF.=>+jO[Mmku72MO]-W5L];mP$oE-^0NLQT<<+!%'?/uG+h@"H9f8#&),>YcDmBK
+Y$d6c@;ci?KGCuW%RpFlR`AV4cftNT/I"#@Xju4'fQruA!:fC'9@u11fd.VQp2c2;b;"%jZ:LAtIJ6Z$
+H3rgc^#YX+0?%P)Wo_7Q%#T\$hZ"8pc)IU#US5tg`#Jl>eRrL93<UC43<HH?W"%d<\"8nmRW===jVA*S
+pS7,BJdVUE6P/tF\@)^G=20ja.'GN#c,"Co/nu4BCAZ)uV9l!_bXf:=91RD&d/?V/imTJ:^B27ufA'c7
+MholC.%>-P2HM:f0$7e@<h8jfSh@XlH+l[D(/jEHcf0k@g![osU23Ra_W9t]8.[[VG2"<`'P2u;;)UZ6
+S6Z)XG.!14\=O&%CsGii.E^Wb8`/U>8?3sKJ0KEa>spA)]\iUe;3]<mf0Qig1?B:/Z3#Gk&0Z%U[3`uX
+Y%MjKj4HL))ogX-^<(GY6!HS"ZB7@F4PsW8G>XZjPpjgeUqU-Xlq8KD3Ccs?+<"rul4ITKFt9$UDmgmL
+Af.<iWobMIQ_H%D"AX6]rJ#&g*:>H%k,RIrpb`b2(M.Z?gq:M(4bI/O`XGA%mAu$]"@'5K3(F[`HluDM
+^KJQrb@K]e70i@LRE7q+8N`E_G&ji"Z\j`W.I/3fm'FnUY&J,UbP;haPnnJF@d_S"n"5RWa/tU@16*%<
+P8VD"=9ph_]Qk!d^#c^/F>AmFDEmdqq0_Em/EX]N(mI4mV:HGbMd#!hiJ$L>GFhVpR$$),4QO)(N8pfU
+-X.V\B10c0JN-[,\N-PTc4%F!\rGi*0XUm=H)M]NAle[t]9mT.oCsgYoGkENnpqVYYqYC<KP/OZ,\7f[
+K60[O`c5dUl.!/@WT*he`c6SUWQhWh/`ZU1lcD,(+$1@]3_4!g]V)X_J`gYL]'#ImE!9moEEbS2*S.\l
+VT"MS)pt$mIP\*0i?No4irnBN<4V*16uEg8^`sX5a#@*q`pjLQF;Dj'2hYHu,NH<$%jl459d&&SF][\/
+='#[,bW*nf[+Ne&3Z5sCjSb]E0Q&u0PIl$dSTu-8EI9"t8S;QRhqQgHEKG0fK6)m:7XI<>N/Zd9**O.Y
++NIeu\RcbiO.D6i)q;dC9;Hr1MK($9[I.PEnPS\%c!LK[_V-%QSj*,__JC.JTumVW*7\uGA6QFscMBrK
+nI:eOESNGkT24kT4&^pfJoes`F_H;6*e`ug<B1=pI74!D`c9b9I+*>6oSFI+I=ECZ\FHL=^s:;"7i[+S
+*#p&V6W@+^5hO#&^X#m'3$'H.#]Bn2]75Gm4^jTd`0i_X9IBOP2,%=CK4jb<-F`O,@3-J\=iK)PH0UJe
+Se,P;=QLZ5(@fL>f^G9AN!&-7*Z9VXcbaSFj:OM<8&QPVmOg^9B<G@u"*#Y@c;`"IDLA@:N8qpG-9OB!
+)C2J@N7c\h3_R?L>Vf_7XuIcMk)aSQi"qn(D%ilgcAXWmmpdXOAqmZ&7T87@QFJ1'7OPG1%abkP8!)YY
+K/bBD<B^ssZ4kZl)0]SJnVSs^EBIlLB&!bMNZ2W%FNAQ)HH>3<'cG&%\^?a>nK[)(2>67sKrpu+is'OI
+&ke^CIV(NN*8`/)O;">S1s@psgma_M.b^7^h8NkXAfMnXhMK<5mcPWHNe_Zf)95N5je</<$lR*f_d!5P
+*3=iiSnDCRo`F5nmYH!@Npd.8#hl7ZPt1rEIW%V;H*'fZi(t17L@.iSRlobp2]Z5p#)@Pa=1b^5ac,7G
+.R_;HJTkgW18D>cOo5@YajC;6;4'pkOFqKraC-Kk+q_7>,\.m=i@QAS>bp@e:\fV+.*ph'T/W\7+TLKV
+ed5`\?ZEumZTJ.*_?B(@+;,r7]m;lX^KV$YAPW_MB#\8Gl7AcSA/l-.4>MqhE_7UprKa(MO,6gq8]s[[
+^;4Fc:sVuA6p2F.2jik&]JtnBQp*g!"]p%i<&O+."=^"ScS\^`k0NO0S6aBL0F"p9P56V2F!Pl/6GE..
+M`=5r`#1NYZ+1:'h"e3Hp,7=$Jd#:`#%S]<r!HL/JY,*N^f[00^I$dA".c`.E(eO#UGIsOk;f`')97@f
+/;+^=-5\sf^*?nY<>ASrKl@26)9:c,O.Z@U)9585DgFPXJ$%>sc?D@Gf6;;p$nD$+`?ZW?rA:=ipE_b9
++f<8ZY;FiJj(DlAnVq!1$R(7p_3#U^,9A2[I]_F3@5@<E!dN4K9Z5%4^;3S#H8A9G<0d0GnT)hKD66a%
+flZTOj^HI(N>O%^p`?_dpC!4D69m(O@_;>AZ3Ic:,3e.`bkK]o]JJ*IOf6a'mf91![]=e:HmCBe;J,\C
+rhS=?SePbbFYGS)F<>g7_\(S"di<QjU+jX15*4]GnWOj22qX!``&'kp)X`X>`oE2$S=juT)9V?s@Ja.e
+3pB1-G(Z=D7_8g-IiIq_*Zu.6-A%%f5$FuBq:n+gNnYasj28[4H)TZU,&>]Zc%Jhg'="_2mDmVrFHLQj
+K@=nPDp!4Bc&f*A,@f00,@[*W0%,r'gfH'_Nn^Qs3PfR_<bZ(@8Er=NO\pK>US\#PYmt5;PS_]T5H"1J
+`uURfgfH)U2>X=`hp8;k<prt)3PSAWW^Zj(N8sg$m:73G^5WM"hhd^[^KA)YS,mH>%p*oCFf-5Uk&cT)
+^Sdg:iJ_$&F,rh)I,uIuGZ\+YA[dr&oN)Fd1'd:W#Dg4/)lu18Jp5jnTImlAi308sBhrFmI*Wt:pF.3<
+Z%_,[=6o!KJ%e+OUX_;RU$kB_CoH_G8*b^]ppsB6I<2th]#Tci]>@/`j7qh,H94I@4qU0M+KG!h80N'&
+_"sTqA@+Kn#/e%a3FF,-emn/k)]LVr`=.u+@:\a81OuR`B*KJ0MX)E5\?YNLb6%DJBLEX5\03'R)juLR
+73Ar7\6?pEq=TMm]lureU2QJ$pAJqnNm5a%o$6<1Us*^-AfT\6aG-@'mhEY!AB'Sg*6t_q!PX5#BCR;/
+eIJK+no">MLJ&gqcC>4_IkhNCS2_u'ch,qHlZMIh]nNZaMe=)m;^$g9(=_c)U?^^i:99V=*5]FH0<st9
+MW*4#*$b43TZh,@Pge5Q=8)$UHd"I`J$EJ&nbjD=!CYqG)c=G^&s_W3lArtA8VrS?,#Wu2p")4Y:M(RW
+X9]]a]c7p1D5/dGRZg/Do&7;U9MB$d;OQ`Y[@P]"FdN_C$7%BegV.4$-H\*/?`0]A<4n**gn1?e3"pO%
+MB%kb&t+EP*6s;<XmVkuf==F6.TmdVc0Kn`M9&CUn!Mq,$t/*L!QNV2-@h'8LC#(Oa#CP?*"P^C)99E1
+)98j;XUGiD49sFgP4$XO)Goq+AJR(^Dj5@HWSt@UL'AU)l%FJM4=OBdHp:b_D%so"LQ.NN!<="XXgZ*O
+Vg:"*n`s.^pYA919WEduYkt$I#31>m)97@V-A7U1"e3),jTnr#=QQJn6:cB3`po_Y?(_(fP&^EgGhf-n
+\+`XJpcaK_KW9DB<9<Rpgnd5RO1PB(]9(pA!;SmYb4W9&2sc0Fh?Ma7C2=u?q7@\lR:cSmS%Od&Il[A7
+)7^f4$%mZ_#Q+%foR"M`%/+%WguUcJVn\\R^\Mjc9-j]1Hnhpk#ih<05k*!!hNWd>5_uLiJUHd-/sR[Q
+ac_0^:VG$WM8uAOeq8U.jU:eNcM,[$<U/[;VeF\UUXCom`s0dmNSkR9VLD9.ANA;@:9['J*<(!m&0Ai]
+5K<GkPT!XH9e[O'>gNNboaK#$KO:+Ui3^tTFGL6b8c_(0-Y5kqO\Whe$p;Aa@.gHm+rUPl3s:4KU8Ps]
+DgA"&#jHjr"9TRkheXu&RuW>+6Vgi;][Gj%#qFE>`tj9GL.-UFcSK+*%`c><(meZkXp.XOF=S'B*YePO
+j&Dt9kD*9f%O)kigqZaEchh4.U1Ma]Zj<K#LbdKsiHe6ZE]A@3\M2:NfPIq:ppq['VtEb%U^1!s[mbs1
+##:PE#;1P6!QN6R[355ZXP(-<lUh7ml&0B/IAdJF'<TH&WFkWSb@T:5Otr#Y=@C7Q:?YV71BT((V[,JD
+QR8F_Tu]R]>\=8&KcgIgOdu.I=f?Co2OKj_n9Al6+cp3+m?GpCMj0B9N@lZ?Pg(WFN5P+ggC35i3kX`N
+JakShi%E[pMhZD%%C#d8JM=G!;rnZiGr$NRk1ViSB8XnEM"Sbsb9#Tu7TaO7L,@s!\%qMXn-^6l%CG@O
+B-C$m0gq31"Q#OJ!YO*#]8n,\gmcPuNm6kC&ZRm376?qCQ`$hAg<YU8"DQ4^h@YOAXR_2b]]?e>lJ&WP
+;*@;ActMF2[TZ/L8oDj#7EbC6r,0P=VD%Q)1<RfR^nQUWKi"^'CGX"e>&WD>qKg%_<Sn^$'j'93;it:3
+Cb1A%U">%j<G3DX4oTS/M2`'9h64O/.?B[pdsb7oB`1b^?Phhh:"Mr1Y;d9Q*cbc#.aMZo^iI7S#V(AM
+&PgW&X5;[.7>Sh<)"t3:T&C6S9OY$)kZkRQFZ/LM*?:/hdnut#pecd$n4u&N47V#,MXtP1_I01C:Ma\:
+NSs%_&K9Dg\HsK&;TjiNYceWeLV>cS,Ma4o=E($u,a%c".l]UpqmdAKPTSR]5670?e/oaD3YG='0sVOe
+r>]/3?J`*anZe*q2iI_1Y1(Et;X#/AHmJhRQ@<]Wk?K#\(4757k?sPc`(2p#\!df+Xu")Ip,*qZl0tAc
+NsEV_[>Vcg4@r%R\RqMp]a)d^#b%sf=td+e\"?Seea+RZg`iqKd9n;21umqO.mCLr;,&AZHZ7mZ7-8X%
+[u>p[]5CsN-@L-Smiq4.I.&j;C.46K150BQ#Wa#/;mqM]Lp&78pOUQD88MTS_OncPDbYdi(ej6sH,eNN
+N2TImA]d+mZ*WtJgBP.?B(p^Z+=#'`n:6UYFsL^er5<CY6MQ^B.j#&/MBcR1@GJKJlQ7&cb`Z"HS1`-^
+2UPoi1a;taO%Q_`FSESC(g&lp*`.XHpeJ8bZt.B7f^Y\,V]E!]_\2V6*XD3h@%6.h<K&Zb=aJR8hAm%W
+(E,.eL,tX93!3=:'Fpk%$^%*KBSQ=p8"8H78XUtF>ebM*D%fM\XeORV5VC+IK^pDFLlh#"X)lEaSbLBR
+_UnpmBeUkgaSR<p)\Me(i\qDdk5L.Pnq4TS!n?)!hE/"]L?eABAunAD_`JdLXh9$P4gg!jnF5%S,TSi=
+.cLg/XD;'<h<UXuZ:j@13D5&a4usajW!HP`Jg0g'AXn_>jFtLo_sXm9&=5Esr=F_?hej<HR*+rViGPdu
+*&uK6WmE%=druc/&-nu6";\]G+[l$r9;Yjcog`gn?[iV"`4h(&2n("ck:js=jh.X$bUWDO)FO>-8@cbI
+fl.'3+[u.d0ss9:1TbiU(V_2LS<"[F(_]"cgkhEF3[*KVKf%<dCOh"aGu:l?&N"A=?`;6)6V_pH"lhot
+>D#4g/7/[qJ6lUrXl'7Y0-:m5IP/qr8]:,jIgAp-frCFcDkZpH8!n;R3>H\i1:fOjhDX^]]N]<ID.8"7
+?HZ=0%h?)U=aH85&dQH`iFb:bGN4n+#FP_;/c+<l4CT@;%bKu;*7k];!ZN2DOA+2f/t-lgAFpH-8s\iU
+1=]J-4=`Wh;gC3&4Q&6/'6YQH0PIV<Ap/o!0G7d!ms;.eeoj4<>1ou_iJ0Cm6LA(b*\T+.X"qtMadSns
+E^Xk_Wm-[,Ff1240$6=t$NXNXh&2_FgmS;`7>NE/?8KO?$NY;5SV0;hO.K&g<s"kk)-i6cD,$1K#+m5e
+Sf^5uWk>uG\M80+X\=3E)<b0<FrkK("Xh0#39prhGZAN\LqZsg*mCcP_])MZ5%*=TMdP-!6`5?dkHrHZ
+qdG)%,a"O7g:F(X.4qKgSnf?iOG]CRp1Zi?<+SScb2>fPg(Qa'UkBj\YO:.FR2[sB/0=d_6K@%Kf/75e
+*_LTYj5F/`n_?E.PYetcf@-$ap=pD[11K.DAbMs2T_)K!Eo2KtUi!tXo`m9l>'KEWf=kS<TUpnl8[lAI
+I,LWHb-M5C8n(b7EC2NP3Q[J%ip]@I96dlS"\IL%q<o-2MF=_c`HAV=m,GVCBt*$[MRRk`2sN.Slp8kY
+flB^SBO-8TF9CO5g[Ng\YKpOKX35[&#[IVN6W_mXNB9L/Qb0R[FEL;;0@6V=9t7P:>YP)/&=q&tN)CaE
+/VcL/m")Dp*kDsWGWS5n2e_sM#[JbOonPk8:Ur3r%2K-pg/++5_\p%s(;i$Bp:-uH4qc*=F$gdU^>EXK
+Ks"l+:[%(k&mkoQ/&+A4!O4?Bc?RNkM-k?;AqPqh\Yd5[KZ+HEFEN5$1jW.H8<U^LpQSnGWcb6<;!@3D
+)#_en\nX#d=4Vf5^Z73;+J[,5QtB])kc1g-KW_K:Z(MA.>m%en$sd.kNj+Tn!8]NIPR[rgj9sAoo>&^Q
+]HZa:X/l'[E&"S)<)`#GI\W@'[B0brqQfOh*20F6d:X?jc.1UI)54+31"$e+RJh9V`jTYadKUjG?./Hh
+*kJrXLce%+?_ATSpHc,J#`#+S$YB^!XtGD36Ws]8Z.E(fV/Y)q%N`3mRW^;N=')/$()K"<IBEAsFEQ9#
+$6aM6fi('X%eLEC#p;T3jX7o#$f6]bd*URnqF'Q4?G6!l6KkFd2S.C]J/6jt3)kK:hB=)W"2]8cWZ6\+
+N^P:;e[?u<Bt:\j[t`70hd6dB>mk'_#>A8bYN[5:,#pi>LT%<FJ]N_?\7Y"5>n)ufKX\fXcqhUE$*/Fr
+cK$tePD@LbT00a\Ng&Xr&<gb4aI,/K6Of67%Y`"<ili.<*/'/]BCa9bIjWJ]WoE(WK/f'M82-Yu#;pcp
+*.f;2ob2?-MH)hOBCb%U?(n=BOpm,me]ioo:Ca)!id)$8>g3q++;T#U\iV*X<G[\hWrVPM#[R+DKWZpk
+B#2jEFb7C?]"4+D#@XH%R;X(8=[-7Nc4M7#57hf\ZAfA_PO(^;hUUh&LsX]&i#'P^eQ)Ea[6dqrp!b2=
+=m7)rF&n$uL2s&-AXk;<=',%p6A2KoBZ`MAeRp9"gK?a*Z[7D/Y0+p)7p,=:`a^><"r!(tZsfPZ$sd.u
+:W4f*FZ#5IjNf=s'5*<f,"#GFS8o3J]iF8G(;q"/'7%%=q\BT7h('aVTT\"g6@!/M^e)mJ^#?-L#[La.
+iadT#)@VU[ld#(Q;&Hlj,]AF?/qunPFEIt:FQm%s<63G:`UHZXVQS%N4b>FM&[>KY6YG9W%am<Kj=oo<
+A*1[j&A%/D)a[VYE/29LEoW7k;.\sk8W$9r62jCCgI0GP=f!%Nc"IoJY!R[<"sTbQMBX*$gsDQcPjr*V
+1UY52Qg-,uFbHn%Bc`tKVq`O1X%d6aVs%V7'i%XQWT)SdqZSkg$78*EWWV0HYA"?He)P*T&GF<W6W]D,
+jekFHfC\DrYeR9]qZ_bWY3@"jK3B$^r=l@oP.CWjkVle`1Y3)-S6+5EgRegY?&c6(]"61.!4ZE=eROD*
+&,ZbnFb-/JcG3PR!l(H3q=7KV@P0@5.!0UJ:[."A=6SqsL4qUt2;gL^Edg8):X_[&N\"LR\,sq%eZdH]
+BE(9]l?q0bf+[\@HMpNL`Ar8CbT=%,?Y"5,M24bS1tDA,ja*\:+qIbRJoknfn"5T5X8=iVK[A8+oE^>A
+/;>"#<IN-L"qfi#,rD`s/n?*)SqY$/.s:102Btaml*Y+u\HS$tlVqFR*OBW5(jrn,m6#YOQ&4jXWs:Gt
+b^<Y_[?73;>;,u1&AHH.'^D/C`3JbYK,hoIb4it9fFDJ5Fe'>5j1FWO.j*gch=1X3f9qG"I6,V!@-0q\
+f++ScAqF5s6,I_<_usQK;!@0K.jJ3K&h';nL2qA1Z]@8PPM4Zdlh^jmlTZ)P]"oa!n4Wrs&"hNamDiRH
+.U4cIHl,trP7##UZ:Sohb^]gR&aLpm"/(6ld9-.9i(^a=WGdEl8n*&4L_qee7=%:%IFTN`Fn.t##++c*
+0bakdX#'A>7VM'tI[^>#=@-Of%1^TDhpkWj7?T;j=+/UCFOaG=qgMQt_F%,0Z"L,nIjhhV>%ca;RP:"!
+%ABbbDoFb^qX00X8CrP)gdYuUEE*6NGKQUt:=i&2HRbm3cG9*0pBVi5Q%S#CYd+gfC+G@K$oRO<\H7#1
+6U\aX?)h3*L([Z#[)LYe@\`ZlHV.5qHOf#.VgN0u-A"$\XkT-!q>/$i<o41S^(^&:fR&r)gN$OlYj\@V
+$!]aqcS,^RI)qU"Wb'b[q01!"[2,`iNnqb^%rXQU?L'l+Og[YL'M7hi\ZrPSNnuG5i9QC`N6Um=j8F.,
+[C'5*lfs(0(S7YqJC50TND871[N.^<Z[7`SN<q!l^)7ELL,)@aVDDK$ZpFF]a"Z:5Y8)S7BWM3$78Z3-
+QeDcTBbjUsfop4:3=JeRPik=Z+ApKulh'B]2s&(%rq3T!2H>]1/&8Cpe`5Gt*]%G8+^sMTQ@tZZ^OnHJ
+?LoKWIP9jN]#s8b>l`9KKV]esJqN3.S&0a*mlS%'St\>MH2U;t0QH-OSi!eLpdFd;ZIS0jf>iMUWp!(f
+JBYc4lU4c2.(1A$k28Td2UNh24h)?Sc0I**DnX,WjmZ,Bnb#.hSq"K4rH;IPaN44#!K+a(_KGMXBH);^
+_K,bFk]-_mEP!@AJ:/5`S[/3glfpori4A4HE*]lGi\mK44`43=SQ&]uYdOfR6pauN0'n*8!>;Q9k?LUt
+-81SYon6e1GR_^':7"(p#UH(;?U@l.M1iFB3Z4g%HM1ojR>YT8HrZ.7O/lA"bLciPnUGAm3Y?o.l9tj6
+\f*uPSj_V#RoF_H!P#:Y4^;'j273j'XN6%2Fd:a1CnjB/jEmBPY,_dQR;6Lt/uF2s<D(`)0R3$D\nX`d
+ooF`7%sI\5aq"[VY,dJCSE[W-d0j+PH;SW;YSW1Neo7*WZ1+.)mCIU8@KK)6U8Ma^<=WuaMbQMp'0sDR
+>ur]Lmd]!1EF&N1?B6VgV`,t(iP)h%!,D'/:m8Z9F`lg:FBp3N*^Y3735,K8M(u^9F&06W9K)ogDJs%\
+Rp9$Oc1'j(oK&ZDG4mR>EkAL2P>/6EIJZqA)=X-;r`.S#Iq;<g>M6dEFk,!-+N6mVjoE_jS]u`W!2R!(
+\DWXiIA*%!2R5Lq/mT:DK'MeJl/[`Y<SqaC(-Zk;8h@9X5lUV6S-2mJpt3ZKiqB:1%6:Ge*irj]d<PS8
+]o7(&fn3-ao9N3f6_.o8aO[mm!g]?b#,)F8'7`+.c4p9Z;FkhW@7*fU]VOo6LP+8[A4TDqUm*`nC6do.
+-&hWf.n6D0HMagdA72>RTIeD=lJ3dooqm+"XmrY+A\e!FV&^cCp40@f`Qh"=\QQ1`J=);#(QT;A%2dal
+FP!Y)(k:*R3su7dFjC95ga5PA;AL+]>_*dSJ[B9[YPN:8O_ATTpP-c^\BcO]$aQUs4iQ8"`T"-s%591=
+RU=Ajf)lSAh>_BZc/>1IaicCBW*BV2\keTsktWkEJh\70TQ1>ko,nYcoSs_Z.Uj7oVW9sIHB2P/BK68F
+eGNM^+_)B,27FoPOn%"I!0%5*6.f7hPd+3K6BI,IHug09S4FXJ'GmZk$$97js)3cfjIh-+I>Eq6:iZ"W
+=b,LhFu.kL!RMP58kn.B;_R_C^lq'>:42UEbq*=?ZVp.'TP<2!haO%,!YJ%(7`?$H"W!D7-im"ji:g/q
+!Gi"n;h6B>./9X4ZWWgsY1WcO##,a>l2h8nEF.FHgCJs6n9G*=;Q%II(I6CnpLC%-!Id"3+?l8Ak5^5=
+XN6r;R8CVJS0F'B!V@Rf$>pYp/bjFo3+sLX!B)aTP6r^bI3Acg$TPn=116%MJY%8U<j]WfBDmMIW7D'+
+5'e<\9_A!$)M,/=;.Ct=F(9"1S@o/>piU"_^>_$>rpa(t$^UaF&+\:1qu4hLa6_m!K4+!,*9X_hNst0f
+hB9=PfEnSqdii,II@mY+Q_E9F'('MmmXrSAA)gRcZ27OEQL\9]]#sLHX4F2YkLKH'))p`QfNrNe0fC\"
+ljghd]QN9!B(+#Dkj-)*`o_NZnP4$#M7]l=l0UF&!J&Da'9[<E)Z&^E6O]o%.F8K2d/k*5%[R%5MTq(Q
+pMC+C?GCXV4+f^JC_]!"n)UqgUO,g]]Z*qk[+0/H.+\cR5Z77V&EWC.Dh.,h<49:t1\tG42'E<#6%gm7
+A:pd"N&8pcXMC:7n;;t5-IaqN5Pq38k0)Z(U2"fhs3?-=*/q`9goCf<\-d+6F%<G<YIO',]\nogr=gWC
+W@-21IUn2sqR@F\nEFZT=mT@B-NJ,r)VDt3:Y#[W_Ql966NqoSO^7LG#^[0lR]ofi^gu$/l7K0n.eG2o
+79#E&_\Z#!MLnc;kk?G(cJjrC9E=:en\?.I,&HdFP=_MUn1CPEh>m6`a)2Ri;4(1oJc8aqX[RDR1TK6H
+6H7pWKd4tm6ufa#dkY5]l8pUBH98;?/`ua?3j<$/r$Bs6Ej`(0V"p/U#*.bgOmFJ_$$@5$fbberTpCkr
+JM.t.B6qDVVT@'6;.Y:(#9]oL^c^gjL$=`0MH%12n@jcd?8?^1s/r"7HjZQojD(@%Wc'(oRAaFb`0dm3
+r#B]<[YUd=L9tl@i@a*U1SO[1i3!GM)HZZgI3'/qIC4!T$jp5V=+rabg//s1?859N5)E*E,OhPD.b)j&
+;,5G&^98IhMVn=16i#2VYEH1b9&gk.HH1RS,,-*e=i"XiW59`d5`E%u3?,C>"%CIhUV:Gt38gqSo`K!I
+"EJR8DCn'B>*K7aAJOkGB-..%=<-mE'VP?\.;S8<Hm0f'e(4tTG;M4@BoUqI2JR-0kKJi3Rch9foDT)<
+Q&$\l)0JPrY=q@B!5Hup_PqkaaS8kfRQ*NiQ+C^b-gpM4W`GX]?2eL>WWHqfAU')u'GFoA=QFQ7<VLf\
+e?^@:\4lh6H]XWTL/F6$hL(m]A!=DmB+-UC5WW9N7/Hub_LYf/gJ]pAFhC$q<Vk\"No=TS\*tlS\MJ!E
+3Q*=PgXPQZ4HAi[MN2V!Tk\$j[9eb[GOm6FnlWMH>qo&315.H,)GGIurb?Y>Vj\VZ4&,GQ*#8.LFGc;m
+qRDEfo,Y'B=HqE>UhXHlXY%N<`51pM2We@VpL$t,JcSe5GICZkaHBIcEO4lCWAhBmA*S;9@jaN_.l'i7
+bh7>NVTOdlE\K=m&mb\/%.ll8gB,cM4THbd@u)MG!16YooT_i+Ntj`EX*$ipWRlP[W'_h_1E,,.SH0WD
+m%`hr?DA=,D[-Tfnk]_up[)G>$f2.F@O#9[\T`fZobq`&On$!,5SaNUh$C;@$CJ<)gO<,+Vbl\^+I*t;
+aFO7G30aM^_<V>nLCITiKPn3PKRk<_0Ip,mq/sOn<(3,TLRU`b\K+=tCrUQ?TUAZ!7f4+=?1AI_[tHd\
+UjKj]7hs;97)cZ?B:%(0Sd7?1_@S?Lc!kM`2Y.JI"f(N/!Wbj1D8TtnQlUgZ0b8dnWqLmMbT"]=B\aq7
+P49Dq69FJE1Hn22?],Z*A*Bj68-^]d8nWC5!G+d9G&9p-rqWoV133utc_"+8P1/`E06]U+,Y0*hkQAg>
+8HB^C4'hdc8D*si">A4?i#[YDV]!i/e;g4[$0g``j&d3EpA*DF]ekUL-:3)c!7NfT!^NiUetk6jX;d%^
+<1[F^9hS`Y;P#d6R4703;pkU$Z):Pc,j$=2`K2g+I,_&icic3OA29-@\VbjG!jK_;d<adV=7<;Qdat1g
+oW_8_V6RY@laW@dX.G)b1#781P!f(j_q`5r[4::);'Fn(=eQh>-0DW#&f7+o1H<Rs+s.no-i"^cY_UGR
+s1$/ETOQ/BG#:81Wf?i]$;YM;>>X4g2QCVVF=bq].hZu-.`OddTQLY6Uic99'q[s&7ijmS9iR']%k?2B
+(s,NPLa[.M#(I^^R#rs8(LloEj]Vr(T:(<q[@gF%42<l.3^d(W!7DX0P;e"+lkdGiQFb"VQonZ@So8l"
+e0P^Z0$UusYf=@\QT,rlJT^2)KnA+]:1NpM!,V!uMDEGUe6j,FM0i&R)`$J<.+g*S":rtkMGgZ?^_,"P
+/37,<N`7l]"%^9->U`LZA,bhqD2VJ8%V)UHLl&I[)h:YcDIIC'FdkN*O1NT1V!@%VTI,sFI>[sn3<8C6
+"L9SHk*_<2Q7RikoI`f1<f)=(AN<Z-ZfpR-!(MXkRL4?5mK?EpVa=a#,6?<HSNrM2X<1oWd<^VP;t&"b
+ip.V_?=WT$`_M'H2Io%0RBuY'bRb^&b`*uVDnLQ^QGT6r^sG02.8G#ER4<1!O6;%gU'RU*AYuBa>e,_H
+Sa'!*j3MC5!it1K!:/qrclAOr2od!#]tjQglSgd([Q\/.\pLVPmlpI<$D1O^9gp/9!1]N^F6;aN0XISg
+>23`MdOmcRNhsf+QL2t0$K*9g6e_MG^fZX!%)n\LTL1`&VtQ2=^-#h,d$Y*U!9>1/l7(&J`0@0!HK8&r
+eGcf1q-B5qqEe'I.nP5_XqJ+9FEe&ja*lNsp@kBgDq/bbQMrLS%>H%M@,`T0blN_f4f3RGLkcYZO]h7O
+jgkIf6e16,@-Sg8BE`27:F=1_*bG+OQ6Ke"(\#TQ$fQkf,Yn\Kc2nt)j*]C$0[S;nAr<dp76F$nFL<fE
+F#u)jeRQ4>r-+'-Zg)r.FT^Rr^2?KJHMP/F7*W.=d7q0$"0-Aod^?2]iggJ(2BN;(.uJrSr9PHA`d6lN
+$l]6^_r_Z"!b\%<]3d'tfGm/eSBlM9J"qn?'-TE0Z+Guul=4H_og2rR@bC=1/>\;6djkiB)8i=epF(cU
+f>@cl1FXb^fUUfR4.i(]dL5*E+IGjKmK-t=,X\(%0Rr6fGBXH7Y2^87k/`)@3bZ4>!U9j@QulirQ%F^^
+oG4eDh9_'7Cc^#W1PSWeP:pFuF?MZ5L5je0L.uT.;T!Y.X(Q?=%%CR3Ne&$)[U@E*%I=5=a>ekj2R.TI
+`g/_8N6U>^'%:M83O!@H`51dZ`G5XG107_2\R,>jCUgV-2`HE_^O12?_r^qKir^=<Z7WWuiq4*Vm]SEO
+YD6HD'^7Y=nFu5<IhI'Go&rI>+DqBI2Vif.!)q"l&]<`2PZ@?PAn<nj%%C13iMegG:`4iIOP6T,5d1?/
+On$p0YG9s5f<'8.ZrW-V-Pt?V#6=c4lt[d@Z1%,u2@Dk1f**iWs3.\)3VOPuc6#9S-Ehr;L7L8R)8#C$
+kkgPuC_2TSB$n#WPO^u5R$gILA/.=<5QG%6N74gS!Pg3+!$9%Tf>um,ZeZidicVsH?cL*XY+eXWIrG.6
+&.;Y4"!E]J-?"De2sSFUh(`a6`?W0F@6g3(5`C@j?3/[;&YR+L(cJXDLgb?VSl7s,*XqOcnIUd/(68QT
+`=jBFMG4-PIb>MJcbmJAYf+0i%g9`c%rXD@GV$ko!H93XiX!7!@]e;D%1nGAYLFT1`ot^Z@b;NJk-Ki*
+Dp.O43s^sh'Z.Mk/UEN:_+8)H0l0tiT[i/6l<sbJ(tB*NCedjT+9i+rAloP5Ldl/G(45%>W<7O-(rPJF
+E:$&:q$'s\S`o:h(*/DdL<XG:=A7YB7RZM"Z4p]>3%5;Y3FtVfS%HCeY#g>\C*9l=5DIF@-aDiDOc7c7
+]3-tKO4VpqA(]Fah'%VJ2DJXYYV?P?>@(O=+V;Q2G(<)ba?Z+ZVss.DVW7'X(D4P3lG48o"SZI9)fCHB
+fGsL#))P4A%TukQMdm&YUOdMUENj,chKGMdZdq&^JM$sn=4.sC"u0r\U.Uk(q-A$tLgade$A4gIYUG.<
+?2MGQ,)2(3^oZuaoJ9cA]foeR7BaH4$;tS=:C8m%0M;_(`#(CAhAF-WQoe##lA\+g2fPqpHZmWYI.[s_
+OC!c(-pG5S]aIZ^kWT$gi2@AcB]=&*4VeB5]!X:LaJB)6DOiLuJt$B])m9K:dOWSKi>@N7$!#nP(IP7m
+DAi+EX<&C<!!TKm\=4i$-RmUT&#bZmJDkgk<L%j,1Uqu%VWALT17t<Y_oDBZGO;2j79$1b4\&IQ!&?]9
+)JJ8\(5k8S1hUWS0nt[M2h#S*]X_rO"US'\TfF`OKr>k*4\JPc=J%6m78M@/N)38S-?HJ1Z)(`_7%IB7
+0l/IV=9).SJ<2Y)k6hj<0:RW>/:\,TLgb?Ho_Yup/;DEj0602U^R+7^16lt)p![4@ooF+6q$i]J8!+WQ
+gG;t!6FsG68Tos\rp1kabqqJ'`NXoA#t:\s`F&f,O]YBDg\drWTdS?pM[K]=UA1tfA>*gfLured.)q,6
+H:3lm@U2HkR5.oC'Ui1`C/$S%XDhWF;3i%/@$Eg^*X</%]-jN,f3s?tA"/]s3HiB[p:3W*c$Y-4#W'q@
+?=FE'jW1OH^_,E.PJoOiqJme2b++]BE?S'=RUlns\bOaY(cL7O9G[Q`A/8RmYaMei;%+DI7gtksY;S`p
+4`fpAmpktq6Al[<ZSN("Mm3fr<6![(lf)>V/,+uQ+!u1!TR^sZb`pZj_ZiO]`.$4.=/AK_b8<.Y/#%`r
+#&&s8;fMpSng7,M,B*uJknV**]9Y0fAdF_B[IhRR%%GAnRk\ZF`lF!t/-.fLLEM>rA:RtY5/d7PL5g@.
+A(YHrC@&ZM)(3Gi@K$S^6]X!DHKWqS9jkt#`Mf2HpJWfd:-cesV:HB\XOVZ;;28L3*jd9E$a2MGT1b;P
+ECQtK[:^0km2ST`M4MU61p\kC$"DE.ar!/j`cMLMi:tiK0UO>:&)?aAP>PpO2P)@Wh9R(5[(IH'p>-^R
+.9Gto6K;F.s,rG&`>CZ;RN#IHk3P5b_ljGh*1QGDj8BS-AfBEP`NU4QE]ZY>]E..mpgs-g#-dK>M-tDQ
+h%c&S-GA%KWTBe3;@at^0VO<^]ElE6!u!3#3&/,K8S;O1F3o23W\b*_lKieT)H`Ft0iigT8jP[WGHZ;b
+?KCUTY@fltF)5(^NSUS*k,*IM4O`\ZR)pBNQ'fbU%>i\'-N%2o7gp>1kDE^.F9t^uU.^Hp'"9;7\`gcf
+K@-21d\^%[3Bl:ZKg)(c?`fma%1dG?qXsOOTU@;+;@"D5Krlk.eY(QTXI=d9CM]e>)LH^NF)J#@bgi/L
+n_Ss[IU.3[fH,9e`3=dro[a2\3;JMAo)LUDY"@T_J9Fm\"!K+56)4PY0)dnCqkY,f6&HMs7eM^K1FN.A
+@$P\5*tR;`E@3'`+#.F=`XO4C)Di"J^m"i@(cHHH1d&hcn`pL_9o+$'XANjYGrQC$%%E.\^hV<`&]7(K
+R*t8iE^XIIRlREL5`D/RORjq[VA!r7AKXgfYRqIT%%A@@N+(a7!&8<fO<]KS&-9eT;*AFA9YRP^L<]@7
+(WN[fN]5ib8.#%GArdceZan;f1`[C]E8N$8e!)P`qti<G\$H!Q:_:P,3_9(_!77!W.T-=WfO4><(;I"#
+`slORa*bdA:;t([16381+c-LJTh-DC>c_sr$XRT-U6tuohA!jS`4O'&s)3a&o-36^LG9B?m@]d@NWD+A
+fOe]BSB9Nu!!=e=2rI)TrBC!$gF[OJa4"c+i#f^`bKl3F+5uBKIdMFRp3!sm!%e-k!,2H&&j5:52?ES'
+?i7rcC]'-&>l1G:S<2kfF7[cpI3-SpFofh=b*]>3NAWilf*H2$=IoQg)mJ\BC!PUdRJhI4oF8UnK&qLR
+MuRE@]7]#*Y\lJ!B04M<IQY&hM4?*tApaTc&$tg\4t^,CG/3!eAbHm\T('"F3?,$g6Qi&:MWK?RMuWRS
++jTg7:>[VAoB-6^q?_&j1rH&sA2*=V%]J4$4:0BNQ67Djm1UBOj?$rCqg.I9?\$H)R-2aqKDt5?5<``I
+mf@iC!9Af@GF@-3q)K5:on3?WcY:Q'X201,pRM9(>7di@o(Q_pr%WTu!.Wp*fn]G,E6W$>]gMc/&6X8X
+hu@5Hs1Sb9bqq8&RXM7d>WYco'TJpA91rS<3#]RV%U]77-H=mB'*GEbe_JO?Ii*BR""[eH?JB<Ubc^F>
+R&,4;(,(1?991FEF=K6-SfHYL-[I3_lIT:u#r"H"6U'E2DT-NH1U$(8GrDm(6TNi7M[aKtMVW>I&MTm7
+K+1@8@0@KqYJ=(7mjT3K;_ugOHK4ENp8-7]`I\+ZrP2gkHDiXmhQ\X.\qORMZ*EM&(P%)5eQU*Up)]U[
+f7c5FXgkMdnG_r[$BG761b29#BNC!*-hVJk7h<t7/K96k\=*l9[]:7o+lLf3/a^sLI45;b^:n#;`3J\4
+'$7DR8=e0h"(#mV_VVlXqsW&s4FR1o25?aQ;_b]m!M#W_=#\R5g;"-30$Ia?Nn56=Y-IicQ#,hQ"gU^u
+#;@$q[bqOG.Yrho%hAXuE/4^`:Q&kC)NE6HUfLmbX5<J/p2pSN>mWTn81RN@eJ@0o[qs-i[gNq_T)Jk3
+1/R<tr<IiZK:c5/2aGcMF*%q[&r[1a+n7BSguEgi,)5UL1[O=%HBAmlE7!-E"UrcTUV<u]N=Z$F4HON]
+!)W?Tnb'nT66!8[>Nic3Zu@bWJjUEl**^Xp-GX6oQ8pi@+R,ZWFV"G%1dhGQPplK!/N;\*K&6S.apT?k
+JW[YI1fBN;1U`qOT6sppWXB)@I1?Sq,HKaCiV$#8qiTRuP.d"4"uSQ$)(%Br9,7cl3cEo+3Nd\gY,sc$
+#Hnj@*PB0s?@ucHG.-;oUF8h;!=]CNA._3b,.grsK'^lE,['!"!uUr_.TTdoqmhPbF7Y<I$a!d7=s-#m
+h_Yh@#fTBTiTpmhQSMAt3;STK_jfJ?dnrO6D4QjC:`<bIpm>K5bED-00Xb$>#5d5;;qY^7"tqIMaa/@?
+@GFh;FjPC/9-;C3rN"c[ejY/@8EI;.;[D;t:#`umI)n6"9=o]BKj$6uf#fQ!OBS&@AR>NK=Q4Xjg%Im`
+'siER>Cig93J@eu_W!o7)m'RX>fE[i'`f]kKJg#PRgZL;[nP[+>h@8TY`B6\.AqpG/FnE/!qk4K`3"lE
+;_M*!#M@BMA=eo?61PnU5EQh"TPuA]R4JLaYs.4C2L_afp0t>NA0+`?\TieM#jRo5<TMru?!hT)8:;0I
+j6YNR`.cO7WIUbf@'^o]MW*6-+]""npD!\+X=&\TDEe/Z#D74!l31S@4\pT^HeB)1bsE=cj<V(f"%Sku
+0A9k^)3rH)1Q/Z>pi-ba!;?af\%P?5bWnt%mq<4F%]_V!,,t#[Ak&%ifKhJ[7rt%ob]e%^r2KjPOCQ!k
+0'!0I87dud!#F_gFeor4CP,-dSSX4NN(.f&O.C8.FNuXoTFHs2=0PaXNeJ3``PK`!EQZ$D!0_oY_u`03
+5`cg2?tU&d$WF8c5.3SH>@/2gZ%-dNlIX%@%tj`m>A]P!0O,:[GDkR5fQ<M8\r4-L/cbXe"*[/r396(N
+dFSQkD51Fo!:0-,"HWXXQ,?&nF4OS8)gdco4b/C(Rnrad0F,0V:3!c/N]B(hGCB!CA>%"*7)9G8KJIW$
+g1KPW$b!44N)L`N&634AS<<6_:$ffA0Xe=hjZAB:>.fs)`@?iE=9/MO4oeD94.sIfDio$.64?5Xdok[j
+El)4+^>Y62iJo**e(O0m8OW6;2VO%P]/Q]FcE;]?/Y[RL88mK7;>s5*SH6rJo+ULQ..s)m/0M!G?RHYm
+d:F:E-B-iJ^d)G&JI:F@Yh4gV<`ph?p<M<@"*:Xe)_b\Uk*;oo?$TQ?IK-"^JYp-MCOq#/:NM.6^&e-I
+:m3hg?OHm"N4o?2SC[i'Sa0H]((T$$"^GPd/Zam7o4pVonnUOA35,.0n66=3@/3Q"[?TZS=B0)Z?41-B
+r*!3&.Zo)prE9aT&CPMeh>iR820fAD[I@9I#*E(sg9$J@OW*/F@]]q*M6"`;J5*1a?#ERo0"6,8M+jrD
+nd;l0W"XYs2P!M,2G:pUN!#>[*(1W2K^NJHapcXS0g;#4@U>9[_Z>D[f@V!f.I3O@[RZ`X/b[uD@^?Z&
+/rB$sTXs33[7/!dl4/r.[Q7peA)X*Ol[tN/a/5Sl>lY'-@;BPq]Q_DT^+RWLCr5LtpQ*?m81Sk0kY??k
+5qo'i!B%958]8W%.K[2T'+8K/k/`H8*<MmZo%)/\H100cq:D=ldb&XXEpRdI:@nLBHEt\04Y%3PhYV-K
+B'ei>D<>>,0t%YpS=<]'k3CbW1S%C8gd_/bmgm'@.JgtIg0olQ/qBQj]TW3n0TVhR^o#UeT5=&8qSj7K
+'om2,rg8XC--`%KY)K.BOo%n$Y]A81.FO/s%]VCd!qhKZI]h[8NXGJQH_ZH;bPq80TMVD7f"M0TW2[lX
+5`2oNTPRXH\;P%0?p:>V;9!8OK,cHWBbn`>7'VB:q7)XcQJTmO^P`uCgL9MCH5qZ'kR1T!RR^^lA;GK5
+5IUbT)LjA"&Us(P7h6I=>[)eRcn"%#PrJeY9"fG;!8aY#8D%h\he<+qS^rt4QL2$m_re5Q^&do\Be9FN
+ge#a*ADCnDQOWU&@LRHaCZ);Z'b[NR40:@hWG9&&^=*4@fo;?1:]TBTC@VSuS^s7>ccY0;l.TjR67_4\
+XdSpen$H+`B+YBK>g+8ZQ`lt2OuC&A[.!\BO.B<1/hQKJXY4nPA,SVS$r=IF56><2E(Ks/i2hm+]E+Q"
+$\7Vrg9H\!ra:_7EIYBI9BBG_)d\?ArRH3KK-/]qSGNu8QW6`]cu=NWrLIReCjY4AC56QY\\Dln2k9cG
+(7O$h58Bad'-IiQ`VUSsONJoRJDgDJ/&bmd'hTMTXS-c;#%,`4h@X\A`+tmJ:h<!K3Y<[N/8&`]ljX]-
+K+X!Z"eTp*36[:..Kej:oc8)*!g\tEmTMU2)kff>7BWC+hbp<E9HN/*K.Em&B/Mrk)!d4*?MQVH@6(p%
+p7%gqQ\<VM`8E*V?Sgt+<$LBQC'(5NXoa/fSZA\'32W+`H*Jk^SH'*s?qk*I/biUGTFr<<7;o]#1!9X5
+8$YthV1p@r%+%l%G:4[k1"5bo5lHZr>G9s%2JO:J.CL+(4#Li=VQbiP6[hq;VQRBb6PccT1I@UQI!d?1
+>`'RU+#]Yp:K=9`Q;G><^*YeD/tG6C=>Yr.Nu72..9+iPU;kXo4=5]EQ%sG]]R]V#>GD?Ici38n(ljCg
+r:&o=<&l@QOlj^!c`*Z;IGl5G]rO5RMWYFKT3`uXJ..)[H]XCm09okn9;M`\qN\,eM\gnB+#S<GppHG[
+=a9>qXWBAf,,K<eHY8'hY!)Q3qu4h2ijX`Y1*?2%1b8)dQ)^QC%GZT_Q.ocAG=slV#Ik&Q<'FBM$_@gh
++n5oDBhNSB#$ZBSX=_53&W_3YF3-!ufI8G5&Y-XI4NU:J-K2a1OZHA@Hj):ed5QS_.bVA/(P&]1mS@%&
+#=OaV.ea.'cZV$&DZJWK![([jM$A*_cJ2Za-9O&jg@m"VoJ`*]Y51a-QKqH=j)q3&G\Q(b`KfJ?:YA^-
+-eAXY4erm*=,nX`do;@FLt\-S._9X_!:!=G-9jE(XcU&i-0:GLnnI@q_j'&);f^uE)NZ">5GUh(m%j&-
+:H0d0L/_'2-]@'Gb&J/%3?A1k8e9\hSJ>efQ/_r@[S\\r!*>2YNi-_D`tL*+.`]l2clqXb)BaQ0Ndi9"
+Kpg+5SsQ^lRc2R(or`'hOo%+.TLe0h:=9q&RTU8%A+tP3XrJ7.b42!pMq%1J_N)(B!qDt)r+n:H2PqHY
+DiX).90"V(\T0e4</q>Oj`p'RHAiW:Y1l4RQgaiONZV5t\1?$mEgq8e\kSu:\@fD3LIqp^ji[,Rgi7%o
+&fF.ga5Kg5.E;U2j`oLbH("#KK:E@!SU=+iN`sfLd9j=cVjQ;U7<?dVIFjCX?-B3=;PA+n<Ua[$Nb`!#
+3W@\*`om!MACIpP-odmJm^R2E_Dn!p;l&c0*-(isdV-MDk5b-T0i>\pZ21%^ieYS=HO9SJ?P5QM]8Llh
+#BBeX>NO)t'Y-$?^5C?T3FI(pT5K]sY4oY$W;Z%?A*;L[m/,E]%/AUWmq.1_bUai0(Yq/8OQ.')K,j?<
+:]CpW4>ksqAej/C,WtrDG^gQAfPi5I$naqEPV\_RWu0/nqn22Q(ck.1:J"T9'K&d3UI_.N)%nLuYIs'K
+7KFEp!O[ZK^%KYq>.&62</`^nkPf>b`Dm+GLqA+,P\B/^Ls.R@L,nN9&f6.gi,UCPUEuHuZFZX%+bi$C
+;J4l)>+usDC(H,oVb$^o.jeC"A1i%G%DWk0g>HbVZQPQ@3tGpf;*Q5q64?#r6CE#Tmm@G9_a!laNX'%W
+REWO^KG`tSM4rc+@]4E>G.ZaTXOZO3eC0n^Y9S3+Cm=@YL[3!)*oC9IL7[BlFl)e7$Sf$WMO.P'TjEs#
+l@?n!:`u/k$p@%bLCcgiTo)ci>F-JY?-fmlo@CcJ<rKtW1,1S,QaGnBD'H-fN?Es>[i'B2bs`n4)??M%
+\Ho:9B4aN^R^a7^L*".-JKC0;1=EVq3,uCA;sc)MS=j8?(j_(P$ZdEu;Dfk+`mkDNe;?H`O4VMOi03jV
+)"Knmnc.q$!Aj[`5Q=AWqu?OX$a0=jmN=1N+>:Ges7J1Bs(]"<nsY*B]I%#>YK>n`!WQ=unp`[SI*%dd
+ndjg5+hZk]Ig;poSS^POp;uH`ahHoFrrJ42SEsV-2IBdsbm/P8d!e(RQPI';c/4^ZYEOD3;Z7R'S&tZ[
+D"I\LR!uNMIs8?sj4%#A#@Kaq%%6a9]b'Z>08XV)>Y8)-fj^iEpHRBB^i"ZkT=gY\VX""J[a9DG'@Sk)
+ijS3pfl@0gln68oNH#rq4NI,Uj&7ZSJ9u;X-M!W8/=qC.!^/T[/ChMI02,8V0g<lQX8C(alOmB+/$;h.
+&=4f&o_&k^OW<#"0_QK5+7:DiY7G6$kL^!oG;T$PWP@c*hTXQF[G@Btmq,-5?T7[(`l;JHh#Wq+mB!^-
+cJIk%8\i%mbge(IDnLQ^Q6OLV4^44h!YDpc>Hoo[@B7t3d^%Wn^NIZ&%c>HIj-s+)VF/-afESal=-r-!
+]"\Wf*XV3Ip/[g;FI!.W0e>f-7HfQYVUE2*[u2iPDK]\J2ATfh"DD[hXdQNi^^Rt1b].I9l]$)m7]8h+
+Zc/^r7`F&\9W;:e5mB>CQ?LB-[,j4;CKl.S`S8*ZZii=s"r9F2=C18mDk^H`bQODeYco3'rN8,$(1e\0
+G)`rc/9]9%3UTHC&9%+E5aGV`EeM++b\2la]^6fF[HG*GLcp!Q(9hjaf[AgKatQ%`X?a(Ab.[pBBYE]3
+PIc-M5C3NrMNaHVFU%kPl#_Ht-rS!s](E]kPN7<`#@B<hScX9DTN$Y-12HK)iTOC%YOhfsm+ep$^$-WP
+?&1EAp&.u!I\gBP$e'`_F/3^SNRY$^([`5`9_l7"AioSj^q^^PK&;RL6/7W%m%bnE-G!&=BLYVB2J?X4
+Wf$!.7uSEh]kR)5[>!5>hJ)+YYec`(C6R("q*YpTs.+\[HJ9s82YWO8_FVSq?mbk:=l4IKBPj>;ghtt1
+nFq>MGT5=K[W8,Ge>B=$WA]0BOVW'XDY$coOdmA4Y5$l`J4N4slap<I0XpD&r%'aKe'%=A(/M'FcYaG^
+[E73'fHr[%oc(#-S\GQRdSdrs>uYaG,KK-iX^Tf<e2uRV"W0l)\1MSl6+D!g1?4+OiV*=L?Z$dQEQ=H@
+rQ)&\7BT<*.WT*:+]T&mbZgud]ZZR^gdEdl3rK$o^4)o<08Or"^Cu^pKj""sZJH8i(A>HoBTfWBXR@#q
+);O6h&,0M2+Nhq%[gR*2Nhe?q<C^N4D8@ai_K1q;SOH-Zo,0tY^+/suXoL4LYFs0pJ%'rV7]a3;@c9X1
+X$`GV9Xg8Ie2M+0]fkXL]c/Xqg0T0QAmQg:#7/;k@aHSCNFUih-d>]mK!I#(oKN<_q.FX:#3_X<RfK9*
+2l#_;pb&n3O0e652VK&HOfe+.@MQMU@)3Q8o*hSomeaWs:A^@iZl@B-[d`pkL(1\TL2W1h<r?8Nr[peU
+HaI\Gs7n-fd5:q++TmDg%1l(t:UWLg/Bm;C9$n&oJ-L,W840aK!j'J&YH6BOlGEG6hq-@LZ/Wd\Oo(Nb
++fi3T1o9D*&Qtk\P+Wu;HfmG,%]6TU.<D/iPFOY;8"r2"7T^;:fgR[9SHbM3*GLUTk`t(q79U$$+M0X^
+i/["XIuo93;dU=`N9/a9)o,bt#T*Qo/(koPneQ:J%r?WIni,l]FP,`0,MjSbW`FDef?NP%kD5'@&rghb
+rR:LL3mq&+*k@PXcHKfMMDW0aTYpP6RQ$<?`e7e'*RsL3Xh568DMJ\X5l'9Y$:I(&6WKE5CB-hR!E:[s
+-f<F`"3A#Hi@]]30e+m_riW?a',R5r8orua<;hCgTq(OD9K.gN>S&n'dqirAO-Q$q,eX+]3h6mBG?i6t
+S<9/m.5?kBE]WU`m)KUQ5,VN^S1\@K[4j[%/(HQu2:?c'EB_?4:gYs1W[-dnFP^*(iC^Fu`^!%!$NpT\
+)FJ_j$c$K3E0S':r)sY^f)f2'r)spF7,+o!Z,Cf6iUlhj!#_O&I4^D/X4ONY!W;SMob7^mImS=/'j$6-
+@?M/kCLNY<[9j<jJtr4NTV>d$!]WMY"q>q^3)\;f'bK!6A#2H27_A($>J0O<Gi^BOHBU8fRp=d\gnnC_
+DY%a/T<iih"l'/Y2a'QB`JtgaErbc'iuf7Omn9r01B@-&b9"6g;f&-f\r%b#!^QA<XeD*PhPI^PY=#MT
+@tW@Ua"FLH!PHp[G.$b2kL$nK@eb9$I>tN)V]+e$?uA^^0m!%0R,QYN\adW(NVALS;Fi<]\f;M(l4*#\
+k]R0Y=G6*TF=/kf,0pWlBTB_Bdie^[-Z9I-PkQfDQ%'g#/KYr#6B0gib"cPMob>$gH:'C[hVgNU?iMa]
+&n=kfa"@ATVUh43QIme5D!>IK[opGTq?Pl^'[8rPg>rYC/:aA>2F-lk!"/GbJ?Gs`!\c]Jj,M.g]FBZ8
+MNV?I*4='3jO@Z^bP.+\9W>-!1d`"iZ]W))m!\_BUk]5Z\AGW/'-a<::JZ@B5u<T6%,7P+8[Vsle!:1_
+GDgTc$3a;V/^JU[b\d$J\3)?eINYt0CrSDadnhoI!u/ao4(BBBh&KqD*Z3,oS^:\Ge0jaTR1&r7!Z^Q5
+HNZpndoG:F>A!V9TosA?Y&C>EiIA`3<8%-)DVTdYrZYZ]/>`";OE*H&-7J>+B8e&^?2oFMj:)Z64UDJH
+:Ol.+Vtk;if'd\fnV^_(/LmSD>GOPT"*8_i>d#sGj)DcY**`,]2R)1sf9q3.EYl-;Xh.MAL]gJRUF72g
+!r?a_ml,fDpR=KVk=q\UnXe.\r>mHe=l4<s:&7qMn`[[^qa<f");!N0oPPSZ"#>5TlUSX7&'Qld1n-*$
+&%pbDs*-)Kha=5k)K;mP0?*8$-q4++BHV5`;ra$0M2YK9(t6S>A;unR2/`QhmPfj6cC743j#s0Bq`RoU
+p0OYPa.?Au-(UiXhiD!GCe<.o)iHFo!]7Cb\:N1W@"r#)ju>9Xou9',:3Z3g75?Ru_=Sn-eN4l`S,.@3
+9X0:tS#"Q(LD98*24l6BguO]gi>1?LF#H*?a)IVp?1SfP$[N?6>>Y-im-Apah)B&4G<@.LXBP85&0$*8
+@g*.:oRKM2L*7QqHS9aXnZQTH$lU'd5\#!fYIUW]\FqU^R(</Cpl#Lmr2r\&1])5Ek(ikE-q*GHrtoa[
+KhF_"X8T#>d\b0`M00'P0Q>5$$`"al3jJgKR@TctLT-Bb]<`4JH@_hm%M![[).RlY4]C77qW[QO"00J'
+WqQ[FLVCKqSC-!%\D6\PV/'sAl4_BhM4#)jVPHLcDMl@>YCZEY=mK"YJuEc$kgCoq?f;0=+djiQ>1dWn
+ibM_j9LE]DBgKGN0dNccW,XmWfj;&#&"Uj2#6rREleUq7kVi`B!Lp=H`\p[H;a)LB>_a8c2n_l-^q;tT
++npnt;dD1DLHD'l-b[_VR_KBG"n@\l)ri+DM$b*MD\\6?l[aLWf)XtJf9PGKRXgq&q*h:tT[JhD<TK@(
+#OQLs+o.[miU\BYifGN472HP,"/eW]rheQ9)T!;Gm#DCZ,CuHh[h6[SfOc4G]?-EMKae(Hop<a:fSpB]
+";n#3XRRmh(%\Ct;js?kVZ2u0/km`0Mn9Hu^46h6eC3feQ/hOSmksTEn2JEV*GE'.D+o\50GZGp1`+4#
+H<k7k#K.@r-?"F]>l<HWoA?t#qN%^8OYX,inP#?@^i*06Q"CG9Us(>@@OpI\h&b-b5Z.MBAB6:G_O021
+76S/1`REs550K19ApdjFdeX>0;s,q.AE(&Wp(\?)rm#ms'b>FX;Q(RXB@saYMG,K=JBdMB>gY>`i)srk
+;e4t2C69nS^bSA[PE\g^1"l;hE0krp!,5d4(+ZV2)JN/D*.!JNG^/"sV[[5e#MlgtBi-ukXnk*[bbb*M
+*CEhr%g1GR.fd9P+k49t#07TgA("Qfi3;^)\aJ*Yo@/$J,ko/lFI&i&Gd;WOa^L;[4mVG,\,gna#'<Cs
+-b''*Jm%u035.q+D[U_)P;;S<TKKThBm3PEN\e,P("BLW)+%1-cYBoLVeB4HX(@?#nQpbmX.00'b7h\H
+3bO/Y'cYU+>6!(C"Ibt&3=of/<\7D=.9^Q8C4S0CjSlIDWnt7Q;d@Q83:QZJI'[J_S69tXm@\m@UM.\*
+Emk[U'S!i#\Ea7<PD:Ge0e)'k[F<C!YS@q!X`H8[f5umCqkC(2\[T3-_Qqh7)#_#I1H`2RK5RGsYj@JS
+d>r_%:uU=ARVf:4$S[eS%=.&b"<]nNe`7&#Q>5RhfG5i]i370MQ6Ck-4C95?ZR$kHk,;u_k-R2h%`OJG
+&-1;fj7K?C!2/fb^kr67&NKlc;s8on-'kLt3aYEVD`"J$7@Pq0hXUal$Q$ho!$Tm^]DubV5$qBKFNdts
+n&6NeHU2!6*s!::2gGJ-`H)"p0,p,7Me<[Q]m*\<3uCndQcELF]Dbnp%O`)gJ64<[#s^C,a;<1>9uZ*X
+.<-p\#_Xk&V/hI4@ke`0J.!M88+6b6f#jJp!+PKdQ#[gVP.BX3c4s!YBtScAOA3`m:nBLH&i$l-!?/)%
+B99[aOPX"8JEcA[6sadG`4iD8FX4g$4.b1;jiFAb-N]1Y-uL@,b'mg07Yl6W%_-[+qfi3:nP7.AB[fcP
+!msAHOYb5!B*_BAr,i\36ofrRVlUd0Y#i<q[ke1lZY,0H4j,'LGL.YV@ZcVA`FNi9hd^dnQ.LsF</U78
+/_hq3k,Y_qD\KYhOKI4q7"R!m)a:'.dXs2edbcEncE29IMqM@`U7Q`E1ZDtU=h,\>?s6jBY2N_]F`0@;
+5)SE'"B[L@0"=@ee%HRQHAc[QQ>diEjn\?&.>ID@K4C9S;`0$U3U_S/YV>32Fg;%"B.7Ft]?oEF_R.79
+0@k=eqU-HS`T1@";O&^!-7K3Vb)sOTcT!kofnoO9JpGOBIi#+=frKRSF]@)5MSB\Bm*%c`W&3jpR'XTq
+VcZ+@\cFRgC97Lrl6_8fd-m*+TfR6*@lS#F;lkqfokaK3MjlpHqA6W5_3+@`mfprgb)Zj/\4I8tI,f+d
+fOQH],fg/Q9Y38]XN[u[Z#317R"1ZZB]U*YJSk!PB5jm*1NYtUBUa0&QJAZRhf.2m9?PEN5fZ#X<*/EY
+A;5e0GCpsVM\GB.)h8T%NN$TDX^UYML8V2Y0H`h-kufa]7B[=6:scQ0"H<$LU/slVBgp&nW<Mj&_?^C_
+i*L(3]aoiM&5'hA88p^X]lUs`Hj@1Nb9eAR$fD).9"6;0T\lC?6(?eQrCAS^4TN6`lXr9%I`_93U,lU)
+pp;Gd2de%J0ZEfi4_GB.7<<%(Z!ChO5>/QDJl3X$6I@e9.r-A-[NC#G]0o![dpOu*qaN<YK`]&c<8-la
+8]g6/9b]$+SNZ$+k1a=X;j9:eSEBH4g#_FaNpTOO]tl6jjf+tJiZ6B*G.);@n*42P$N9:pZ1P;Db-W.8
+f4i[gU>BM=6$S'NmP6FMf9tNeGjQJ4nZE-F%N)pMQEpGhRe.*?MHpTEXN2XueK2=3^kEV=4dh&ggeT=j
+AmJKOj[HD7Q&nRGf-bhcUGkes<;-X(87KMH/-H!mhJp1cPMfDU<a[T"Kp^LMR0*@Rjk,gKm>6Kb/]<+f
++)V&10!T:6KACnuWqDsNfW/K-ja8XJ6?pPl^WoPG&bYWog9kMeR@nM5W6CSbG-7X/4i_icY3kI'3jJm%
+85!27`eT'ghRi5[)"lUc?'JoElq38nG:bp2U>D'\8*d$HS3=@[d3bBe>J1ngf\"2DN3O$mE.=jp^"PsE
+JJio"_-KZC'4,Ui5F)@DrIl<4N3u/2H<X&YO!kh:"stn0o*/a/ZZD@W=2gO:!Usjof%l9>^%];o^Wocq
+Z0=qr3e$3&JM6;d:2Gi!olok:3uhU_YEFs+`>CZ;RN#IHk3P5b_ljGh(n9RY`k*T6CY7ck5:9i4amFIA
+Him'1K6SJV!/h;4M.![-AIo1(:P6OFAO\ZaUKK8o]MUiP^FWQe@i4IkY8'<KZ<.,]MfZ[F&BX3sU+^3r
+G]nT^P1\oSM"3[L";D4>Cn8,Nloce3[_?Wf.",o8!KK=A*p;\YQoQ??"D3g]&AhZrDb.Mf1?%t:nu15$
+31[5\+M%]:F3u9ZI)"kX?dElP_1'G51L4./r@K,K**5:;B(tgYWEpq%e(;WmAub&f+b4)=[a&D`K4=^c
+C(?-(Z&pYQm!a+72q<!3C/)osn%p'Z0"c4@&%n+tKn\?i=1k^ATNB5E8'lJ\)CS[\n6E2@`].PmAVpj>
+%0.2oS[)D'4:#5u#Z"cVKO5EfSijkCMTWKLF4Vj/_+f2uHKI8^/"Z<GJQJNFR24G1iR0E*REi"";[O,?
+i>@UrP(s^%"B:=Q#cfnHJG\.BY%O-hYu.RCE1r@NJD%N:@R\)&!#0dA[FW&0d/1P65fR;g'*5USqB<?3
+2]!&cJal4ZV^;<\*kt?9JB9.%AT&i<+5<`=DQVQ'+&X!05q+F-/PX:)1it]*9kTtHT"AO,_X&Zbe3=F8
+_Eu4-aq"\!gC'X_cGi+hoKj>.:20O:?(C.M@>)gpMM9)]W"SDURkBO0i'Po_<p&WL+79+F][V^pAcbMJ
+4(@CR=1"S!E(TCbVYkrCq#C>WVrmmj>Yj'EF8q0FO"\h,:IkJ+3WVU_a*2X9l+P:F5=?Idb5lcUIu-/f
+^h3X0Ssc%[!S$3!$Eu>?97WT')Gt)q>`tPg!Chu%^%?AA[_5AcBE($%\$>j:!Hs"</*9ODO'Af/H^juW
+MECt,>a%mcPC<=+rYb3pao:B%49*0bI^cV4GCZ4mQ-lt^LP.R0!N:c7.Ug9b2*cdT,Q9tU+94kjUWFZI
+j@D'UP?Ap`!-ffnbXe^,YBg:U"DgiW%McbXYtTulJB-_YkHbOq1WJ$r!RMheT6oAAk%(r0?SVk=I@([3
+3-V^bg_DBV6i[3%4^r=0-G-V8)_QU)h8o6/+7XKnNTSm-pI&W!Z/e@NH[aO57I@4V$&[Ta%O/WY+9lRs
+?I[U6d+m8W1M?0-)1GkYbHH."]RN&0U)gD&Bb"2\^jZ2p@j8-/Al'WPi9<9?'*&mscM)OoMK`Yu"5p"D
+XVZ(BlM\Z^AmRQHI:[$8_q8#`]Q%YbaFuh%SC]]:7C9K_Iol)p]BN\[*LnY#VID)FQ^5kX`n$S=HOn?i
+lbXX^-G2P3:)AEF&5Abp!h]REYSnB$AC0[!b:6!7OB!RART'#33]3>^ps"`jGBe7U4T`Foa5Gf/c*Z""
+%]b=ER=GaL"d=3_<*W,d.tEh7j%4/^r<e'Jlt8/##8k5JM';?G^/&a!(bO#u#k(+$!\;ih!m_Plg=^!b
+Rh+2DkjNh\3Y`,$NP,2joI^+ZM]*IEb]Cnaj)oJ^Op:ADdk')f(1;7c4tj]^]%uCB>TQG*UmqIi\@\Z\
+SGGahC&$p;4dJQE0ak#iE30jEq?G;;c0_mu^9O$mY7!$p"[1dD5NP?C9AhU6js7"',]k9>.2]kULmQ;Y
+F@):2P<#tXlSb09N>`)0h@OU[U;i.o%;m>*#3jonl"h'Gs.'-Gc5h-=T6U8t73517&.cEl9c,j[@_q$>
+<#5\Pko%%iEX$IQ:X$NA8n30+UBD7p.L,6pV?[\-7^\e?KhH"8;P&^Bm)AA&jEPAd:m1;,;$X3kbS^o9
+@["#)o<@0<gXsLO.Q]3(mmVrN(>3!3r'Y=rB<u^Oeetg--.Toj5HD1<H'haJ<sFH\!#OoJ!#;hEFRD>J
+IR1f"M?gI\Wj":LNQE*(+-sDg:gqc"=ld`4rM\&P6d-oh9`:LthugeQ&<[(.mU.nQH5)Y-blL:U%q^)K
+o'Zr+>kH;\$I5enMa%dbR'L\j(t4ah:`s,CRno\<K1]A+HD5.,\=$*,/=5_PB*P]9(`@;-RM3_C`M(BZ
+cl%T_@o%8MmS=\b+(DpjmK487f)`PPa0@8^X!;X^kC]6=jE=3o?[<`OJZGN]X'lFlD@OVL%pHqC$Dc!:
+n\G?Ib1`1g6XBa[r:=kGrrOlIV'hqhrd_9<gl.JZc)>;n3R\K$iQ]!n]/VFgF<D&!MWaFKDC,@2"sE.'
+q8.@Wm!bLB]QknE^]5mtCg8k@KLu$sn8P;.inmXlinRV4_-S/gJ_AL6^lbWDDZF"/ce"FkCk;j0@"Bc@
+!3k:d&0drpD1((Iho1=REXJAM*:m2&%[HKP!4"#iaQ3I3f(7NtXL=-SIm=A@?6CEDZ2QAQ*$hB@TdWH,
+a$Z9H=52sIk45DuP(GjFa]NEb,H*Tog]("e0W+hE!$o'%mQQmFEIio/82`n%C`E*=%S1uZ3Il21(9I:J
+(>+J/&IKq#np]s[.UO&@iS^ZQ*R_Q7H,oRIi:K+D[#cKPU-DWTS^)U'P]S3^K^%u'?dQ-Z3&f+D*<;;p
+ds>Kt,R1j$+H$Y=ed#<>M;,N"3^&i.`)O\_4BGq5h-U.<Y'^;XUkQGf__lOV/fr;h$@SZ^*QEY>KYEB!
+Mqj=lfIu[L7D<I<Q"7Hp</*fd7,0+C;ME2*AFbUSh>G7g'C@aCkX,<O#@[&Vl#b>:8?%TQT@(t-qa./e
+$_>9nW\8[`_oK&(&=LqK>ML9&H2'iN,STpdVft;OiR`Y]:7iH;>M]BUj4*-!i7C9qlrn(M`ojbVaO9sJ
+LS:VQ$dIoH1159A(V^_hK5$6N$O"E4D/`!n!;;4aiIj<aE@j$:+`T*LZI5q1B#,2[>$s(f"T\ZJ)].6J
++HX_mDZINf*\6o_cj7=bOY'mc?+feRVR";_5Y^Za?#ETM0"2-`4c(VW]E'VcWko?(ZslQkl.VW\rS03,
+kBc?@.O),h2cL$b8SX8bFEL%QO<TpkWL$NOY.)j2\]HfhBtZM"d#&jYPe4YePsoHk`OpN#g9ZJN7sSHO
+CgPWD$..It5[rkUVA6sAeXIa:f:I6#nc&&\$J1/8"SEFrW<MQhl?6pn,:7Ot2<,R:\tPQ8mnn/%@SDOW
+C7a']H7AP/H7OGMH7b.OGG1>>n&j?-nYdKP%DDGQeJc+GHE2ODJPFbK=H'KuTXcYh5$%<)@:i%X1Ut^'
+`RR3Bc573#KKH)`A.]A#[(lk1*KX%R(LUEqd2Ob_#bBt8$QK2u$A(*`i:"$0RJ],U7g?kK[&MfKJ*6g3
+MW-ANqE>D&gl)hgK;o7D^#P!%$^X<@n=olpX$,a'1qn[k:H4a#!D+V<'*Io^s,#9-d:L&O]0jXrWr3D5
+)HqM[?NC%tJH4EPA<&C>_.$f7M*%3FTHJX5CkuG$Sh*,m%)$$Li%Q2E'g`U;J5RYI.]I9I!J7QVg0]K7
+n*Ti=hp-Xpm2%S=[K!e*nMYM[Ql4LTaEI+r2)QkS*+4'*_Q(-*C$>h4=_R%MQ4<*Mos;.)Yk:mHpL+-a
+5(&6?`K%\dGOYS!X/>/7P2D5^.G"JH/fM&/ctI<3m_bs$O3M3()'PLHn,^Vq3%)U0U3ie4\22Sjh1qc^
+XA;W-R%%\]V-VrVCDt!I/DthX&SsUf`<YFR:A<$QGIRH'fCA/.FK0W!QT%1A!4u[9A\F%Vmjtb3g.oG3
+fK,gFoJ[_6MOVS'd_[2*C?qpHF$$_Zktei#T42l6<jkf2+3jrrFr,!/I/Isd1;/f/cnW$lCi"gA;X$Am
+[Oh?ic$f@$#M6Fq(%2lVLVNn'b<$io_K[*V-$G['Ir_T4F!!Sr/GnOC7IqLNq_3r`?T)0>)eWYLR`LPm
+cEu9PH_E*87=?J"#!UVMrdM!o,h)Yg_qg)l\F(GA&MM,k5(&6*Jq*Qu^$3*="/`b?%n-0N/UaJNLV4bs
+_rkMd@QtdE]leAS5&?uQ)bKI5,5SS5+7@$n15E(9Pf$e@\?>nM+HsrMP90di$!SFsBR2aZ=HNHKm_bqN
+J)H@SN8'?[_\FUijU9;la#0MZB#Oe"HIX8@VZ%r.m_bq^`h.8n5/eG[^"<(3CTl-aGnmCHo`PPR/6j/J
+J/bKW(4HK^:X!m`eAH_0>!)l!(]*.*!q)1]9`5D3Mar:5ceO:cnM3.a`QMH?7@R[k*a:P=O2]RuI.7>q
+[:5="R/:hR?H.9BiY>]@Z$7N*>!2DrMoB0\(6<u2L`&:e!Ud@IKASa5(@PS/gO7`<:;>S>m5noiCV6-8
+4h.t)Obbg<HUT9B?Z[B51'dP^(@CQQ7&i3?@=J.kh1psm]7'/OOb`BD:P:8&=U^ok5;?CfGRM7em[XW[
+egmC;F!q&WX/q7!H@V2+gkS1>2+*PL%1JI:P`tOQ6!<G9I+@ue-oMXj5^-f.o]E;9=B_9>g7c:%l9=!Y
+pSMp3!Hul<GAcH0-hW4LTCj?<5]08!db<9V-'`K9ML,m%_q2R-pYi%u?^0@"1GoWorbdeR]S:p`4kOr!
+GSIV+hARLm'iVq+Rb\>'30*?^S2*Vt1:5J$eQ<4u[Vdc)gO1<gmj:QT)IQI!WX>>od3!Tt\3d\9)ZrbA
+lAe5M1dK#,<!?[V%X<SWA1e!69QO:Zaj!S%n%+*rb?9<2W]8\1hroJE!EcJ`'T(N-o^<UPLFZhsrM$d*
+0qL5P-_Sk!JF:<5RHXq/jCDboRQJ6I^$9^Uot_uci&Yr*Q'iGt&,0K_EYG=MNsSgrb:Ot>gk0IJq,'h'
+s3/Z"dM.,(f]c4.Z%ebmgkQE5E#[J1<I(Gt\:>b>g.]nhnC<'W_mXJo]1sf5VWt-qcOn^9<1,op'aHFF
+m>bXr;tf@4m4Z!\Dg@kgIJDGUHQK^)&l`Pe50$*bi37IRZh,MNaXIiSb87-d=I-:;H=E'iXn8e->4lhV
+%V]#F$*Nn9%R/bN0)VHc,p!HP!]8\fmt6(=p7Ji*f3Fqg4TW<_lYEb,_+Up9;g=/hLsL8I$sT&8?Pn)?
+!*sYGPN!58rRoqRpjh)2gkTZZ<6<V6o`-JT/&*b$;p=l[h(6.I:]O$#6T[KB.9dmgM'>Bb_c1lo3Ug3r
+MF*W13*[$mVFbE\.K"lMZP.U]#!WTb*'7A#m!&-:j=[X>0DYclCn!13a1c\b1q0EmR4h1V`6<7iQ^Cub
+98-GnrX82g,4]_*`:i<"9DJPlA_(oGQ-C.GFrDmL0.k*tJ@T"%IFsDcR<J!G'IC)gX5;Wem:/:id^#iH
+V$$3)DI\'u;@Kmf0#h?O"9G'rcYVG$8StJ1gB=[,R+O9]+g!Zf'0";^\gV;:p7o?0:J#$OkU]M:LhZq/
+J#bO1P%`lDgchdoUu=N(],'hPB0("]*'g?:)!O53AtKh8M7^3$77WXD'>a7t5$X4a-@0%YI,R9U],'hP
+^+2'ahmIFNNI"O.7dHpGXPQ[@?sgCZR-jYtQ@0KXli_G,A$U4^c`5ikM`UdI0ZUF)Y;b<FQU6Qc;E_0G
+*-cnp^qmK(C-#oV42d,0T*fa:pV9R*N9Lm-l!2KaM[lEH4`JTJo@.Gi4B&L!gK0C<ACI<?-[%0jfIDs=
+D,K<Y$R]+f@kktuJEFl&RQ5^*bjar8g^rF>c_YU"%6QC_mE4NS>YC78%WC;J!*f8Ne`71DNh.snYk&CH
+<9Cl6MAC:7:9p[P`e2oZOHDh==j4k90anlRCB`Xj)_7"l2CqNF*.2T,Ou*QGlGep4YcU1&MQm3cF:.k\
+h4D;="\I4q.if3^2QhSMmSlu';a"c"l$#*U;\^pAR&f9WM:[X>kcpMaq_4r>FTFms&iq:DJs5PDS&1$5
+QBM6aRti:pE*;8sGiL&0L?GU[:q\<'hl*-\4ruOZ7:-B&bcE0qGD+)\6*]5Rh7cXqUp6%7C$a-aBPuB!
+Kl,se:!@kN_Ap<C]Q.g!]\i.p("pL=*e<K`LQ8%t!&RS+L'B-#*S;pr$(2/F%03r<DPq<ckWXBV,.J/1
+4ktg`on!"EFgbSEh$07J03HspYLNg-LI!5L;a(PME$)70*m8uaW!:"3:+8TDL:t"$9--A%&l>hd+fsNg
+_OR-d$r^>h\\ii__u3$ui.L6UYMsLa!s.51D,oI%^Z[k/&HTBP#8&Y*SN,]m5(!qC\.<pLgkU1?jZZp4
+#qXnfakauqlF/]l<Kaq4+0J0-([f0Gi*mTc>`>hNZ1E<eEau\Kde;^o,V2n7V#4U#i'(tZ)8Bo<NF']c
+f+h/c@;JgYiH!ff_TaHL]+883QiIbfkUdc`Plk:\;A0kk"H`+BpYecXH[PO:gkYokk@r3,ktt*hB)q4G
+3ifsseDtOg+0N+6^TJ*[prh6SSkc0OJ37=80E'[iSM-3"ftYi"D(L1#q_58m*jpQ*!FfqbZ[Z,?gO8jg
+CjMZ=gR%KWJDX&oYIY8E$Y0&#b5U5b_acWd)6krW)fOf_]Iafk>HL>)L2VCi5Kk&@"uN*9<tgpEoFG8_
+!<CNK:!rQiR=3lkMlpe2Sr_peOR\AVO,jP(SfAiE\i=W(dli6C!+X+XLoNm*aohRdVCU[-XKt@fG^u]]
+)UWN*R$iEa!c5U3=R1biF*b#YaqK7&]\G:WmMT4t2E$O87D?/llHL=r>+62ih7G*sip14Q*Fn]8`_M'H
+`n$S=HG;.dY<1n#'<a@O59<I+Aq#+4,bo;*?8@e0':'lRT`6<jKUfj\CrTDq`bJSP##I%O6U65$$sQfU
+Sa=$JBq"hib*[Yu>Lha6Q_OB7c&P$RVmbSq%&5R!]e<:oq:E*\Jj)(.A*a>3DJ8Dn?Xg=Qb;=WPR)@Pr
+Y;b=[DDc,2#1OTrEAB,=nTR\L1p6hj#B_cD+5eXt&*#OBldR'D:)>G(#>:k8M0_ft(*>>.8)oN>\Aoi.
+=1o)q?*&mq+,_#c#sc*Ima`H[-P[BV*KUAO"":/)!L+>SG8eo8-I+j^?^bDX>\K1QGdHrU80,:IksOmc
+!(T1D*K%f7'Q9T^f^7q(6fj\LA5^le'\;JS?1OU&r-b?Rpe2Q<cN'R<W6%E$0'EatUZ99f[J'5(&/?RS
+^&m%o9*=^^&,Sku"M^*7Tj3-C#=eOocq)D!)Xih[1\>ej[aJ]8"/sLB0RsQlo'@c_N'L!%s8*3.52Nq(
+'EXPf%+DG=MY?e=m@P6XJW+lO]Db-0oSMC()]\;D<DouFX[[=,h[-Li?Q60PPn"F_3+8VVBe[2n$L<$Y
+Sl<iaH3fCb^GcK@cjs+Z/iLprS@4+1d4s.PcRi&#%/5s>(ZT#j=<>HGJ"Ij2k./#F6fZ#$MB2QrKZ+_L
+ms)dPQqh3E&Ah.qD6i3%\$Y.m2<&=L>dmG1cb$.t]f.=m%-!AaP&q5oOL?dk:UE=npfb5r0R]mbR"r4c
+Pq'unZJ`<+7#fk$'cTrQ-urm"]'@,!S^nh#K%;bi5'rU)IjV2B)Q7&K0I5T\kR7s,Gro(!T#$g_mfdbc
+X<2,8n/(2R(YGa+/OUh6-f<c<N7fTqWaJG5R,:qTJ:uapM:2QGG?i.Ea1(pX=o,`E72=X@3\,GFKDIEO
+XH/>K;*eJ?l>)T'lH?`!HIZZ+hMflLl:ZoZS\RQej@D?;#fXblcmf7g+FQ.:gt)^Kb.=OBGlqko='SM\
+T7C[e@%Vtk+<1gu\f$0r@X$5iFHM?^*o^\UfNkOe_()QK)'FQ^cO8[<s*S6=!*r9\S\EXZ+^lL56@9LF
+SZ](&\l4ua>&e!N>L3NgMs)&[(IG!*.UN1,<&T"(fYW$MXq^:F\8p:uAg!*;qM_LPVas#$gddE0&o-ON
+^-KF@aSE2)`6R%^'Uc9[!9PpsU%59"OXLdKJOj5<>UMVaa,?bs8XWMZ8TNb&Gh6T82Le?ol.@&Nf05U/
+Ap'RFB>"#sFl\bc:-c`)$/?,`0_gC5n(.a4D51Fo!0rU*#;E]2$>4p\fIMiD1jQj-LaDin(63.b+VV;!
+EQ?:OF8@8Q8`;kZ-k:>7Z!0!/d:OLBShj$sW1lTf3Zp429u_2umc'mj7oe(21RJV`TP;$2=>m$;[u0ne
+,c2Ej!'/kcZB=:1.t%,hN?X';\mui:P1:HFi4'W#l2(#4gQBfmW8Ea_N6ReqL(>OZE;?id&[rL6PhgkJ
+KQhde*iHpqXNX:u;(&,2^][;`q7*9GRrH]-f*)f\\bqk4">]"@5T%nIms;=JNA.sQ.tjo,*BIMm['0;f
+pY>M%.^>frkHuF_djIP0q#TD1DE(7\J@H?r0GWn#`O0Y/iQV1&(gCg3/bj;];]&MFV#+=\#j:MW&AV*1
+fM@XFK"O(YMEAkd0Zf+F[;\HdN49W7iSUgB(&_;Y+:p;d?#8s08#i#j!W6,GXHZ43MS$eBYJ)VqI>Y"=
+nchpS]3EBohQ>is#7Q=qod4U-97Z;nq^/[Z#LFK!7@edHXPXR)V>E9'7[[e\^-cM:%)j\gST+](r%hLm
+](MhBf3@M*e8&c7e9YiqXqa#q"<R57";n6Gk]uggQWR`+"5_WHgN]`\*2'jI[:YHU0?d,'l2btt'sE2_
+O2k-h.sALo(E)KYO-GhO(HVDZm`2%A1_ERfb6Z@T(LoK/5kCf&e4Zcbf3@M*e8&c7\dPn[ITL\H];cqa
+]@D3Q?+g+4a>ah1qLHDI`hoJk>l`00XYk1n*gkp<*HTM^p[RDShAO)E*qW,="p#LT:M?5*YC6K4-Qk4Z
+[K@/<Gsk0,$[f8diO^d)_?>-WOJgit*lGY@gXLR0`Tr_nL\>fR:Basafuf.u^s0rqd[!RV9KCH8FT6==
+3lTKH[(gOe8,_"N[e4A633VO$k&Onr_giUB1EUhgANg,7R2qUdDh+LSD"8(?S,<pe?>`kW7G@R)"8$ju
+igoJQ-mj+g\X9iR$\3n$(CSRo(_kL24OK>r32&7ablY84G@e&[gePheiQHCS/:e+EMjY:5%]"EPMI1.%
+]WQE#jgG.79M&#3Vpk;A1u5-I;TJB?jZ*eTZ:IfXA3M!(s(hpBUCFX'<(-(C'D,0L=?>'h$*\PV'oRt3
+41[Dj[()(1X_hH^+rGN#fk*Y[I7A.5jhl+bCB.P`AHl@Plu&Qm4C4;s4Arn`,$/U1X69[9!1TZ'17lJ=
+MVdA?in&<OEGW5,3;0lFcJ7,Rn%>"+K.GTc:e#j5OaM2",<Z?+_*(<$LOMdE-=Q9m"AY`2i[[Z"eRGfB
+n'nJUUrRUrTZV]s'QTan;pZ7[oe_!G9`ZirF]6eI#8,f,a1$329qc#I"9D]8.a+<%p$O`bqRUPON_QFa
+3#bUBJ:=5Al#d"m!Z!&]8`N`X%ReM1$H'rO'B*@N[]:Rc/qB/!@bf$8!9\+Ij:r5X5QD5S"^5[J!m(7f
+#m/37mXd\QP&'IU/btP;4trYkP/6;bE#MY+WSe59_m0Dri`+&'!>tE7Jj@/IM$/CXV8"cO5XcIl#e1F$
+A8D/G#c)W`$nhSs"<K&s$CCL`\iYh:LL,&S$NVu%2L,D[Jq-*=#cLrD"9`\X?VTAWQQVBra=d\tffkN`
+k&N\IT->jeamS;35EDGrY/)ZikiX]$7YK9[X>kP;!m.X(5]UZbJ/inIaQ!PNf2Hshed7M@pR\go^sCUG
+4N]Oi.!"YUE,KEmRA9Ka1\eOk/j8`Nj8J#C'J9[P"DnIe9\T74pn6eVYe+>gBI>R[qg$tT0qESSO/oYo
+/:.m/bccpiF)3&X=pcYGh^`?+PNqK44?d;Ti4\<NX3JAM],i&1Cb!F_,(O`ECX$+M$B?!Q?'s[)K\$Ic
+D(5=9g<'R"#P\U"I$ja2OIlLh"9bA?OHT;JFrt(4>S'F[;3W2br.WQ%!Bo=$Vin@Z+*K$]M@p&T5A9Vd
+,\U%##c'/VYeM"-Vj#]/U@tVMB#`],)@Qe#<2&rX+HX,0'EhBW5p6!k&2O.S!FLAMTuiYn"lOtt_W.*g
+JQ-Td;\1qfZh"q8;NV?R#m.u)c<br`i1JQ#;;_,&`<-6o;lmG\nEcd<>S,8*U*/s\DZB+`#h;s^r!`]%
+]t`M48_J!2_qqABp4#cM5!*/c\/-?*l4%Fth,'<ei'dA,,EC.8V;H9G!;NBM6G50>.$SCn\Bc1%%/]Nr
+.;*jP(]3;)Gf!\5X3C\74$t!]55et]V"lW\G5sa/QbHk;cT"7^fm"B)#fR=54jC#KDJ4IGmgNOShn;N^
+R\L/QLqTl,1gTo?=mU1M#lm]r+1Q[9&]-S8EJ4137oK'O#$;[LA("(hN*(>d)79s@N2RUaW&"h_is>>&
+856=?kd',C*$MM@HG+7:;Sl(V?gcj/3'nWOckRo6_-?B&6K\n6@!K^O6G519.,kLUQEPHB!/^-?7hLI5
+WkT6<#fV,oRZ*:/0_YsJE"*UAr8ra<ri=?TjM&g@&WZ:m,3:fE#bf?<A]%M2iX#5BJUL!hBA2_9]eOJ&
+7D53B#<k%/\#o`=.5Tui*IqUD*ST01H]C'PVarHM8/r@Y_gaD$O;5/VRYmV^]B^V^pHjp<GjY7*PD]hA
+!%^47p,*H\f_9S0U"[b>qs+<NPYZ)IS:1Oho>f1XaW&$egMXg&%j'^9Bn%mucljg/X-MF"aTE*n9]+'W
+<W'?2[)f=.^e_/&"9<Fp]%f:X7gPR[?]$(MW&XKA5o_&=Y6'Wr5%,M3ifN2\!.b^6*5;RWWGM,085/UQ
+>cBfFd(OZ,GV9KJo+$S=YfRh,(68GI*o[J$iZX?/[<PFQ':f5L^D7>GJR\.++C@53@]e9.!/Ml\M[+Se
+?T`SB>`2)RTuBB$%UV=6A+9g1KHQ<%4!<+3:#5lTGkXfniWsZ7/oeiBlBNe2@J1qGa#HCk##gC(KG`pf
+'Lt])NcB_uA-1j9;Ea"FiTn5m8*GWTG"9@T,%$Q`ZrqBS@>0$*?&&N0N>P1L*=t;p:#5kM]G$hf]>B(,
+ge3@K=pASPdI/nZ/dnf-Mj)RSQW$r'&\@9ikdl%Q+c_X!S,Q_cM#3gL=N+>hZZb['Z+>-!+WKp`is9ef
+V`t.M3's1]VMlbL.ue]a8#V2].]a#)jVfHD]eJ@,CA5E_3'pqI^8SWt=),;NmI*JfbE/&-GK@@Qc"!b5
+T[=mqU8Y:`G3_"3;J-uCDR/[`7B8F"#,ecC`"`fG6@P8k2rb/a-A<L]'eG5r,%M[ei!L>lW$?kXiWPhH
+^N:3g:_eLLLVO3';Rm@70Z.D+9],3O'Lt^<)rh2-F/R,L]hq>2)Bb&:NsJc3-?AWF*21*&3J7k,90$_j
+QjVlp3'obJ&LK->e?=R09GjE^66_a7/@foC&INEIEJ1ur*6I3qi1,df$!#nPD&Y3):nO=LQ,W"pG6peK
+(H$1k.BF*")EAobNY!8BIjpCS+$A#.,LhKXkqJ,o+3ZI93't<j:[=g@79$1b4\&IQ!&?]$)JJ8\(6u>9
+l@9@f=$Vm(5IO,>r'XPHTZ1qLF'S>EO\7<QQCNK15%!r>hRpNMjH><l@4860[^:+r#HbSt#[Pl_!"rNO
+2TY]A#Is9(-8$>IhuYaq#[I]6rp2k-,;dDu>X-4mQg8'^GKKL`_1%7!a-uB=Up$MSD\V6pQHOs^968Wb
+?@rn?UY-APBGqo&iWpQ7/Itp0[b,,p"@g:sP6#2:K[+k"$O)&IWO1]LKsL@pROD'53d\m4@7`T'kqUW4
+SBS"/83g+:44FCS0ea/sZMYMH,t+86l]na4g&&q_oAJ5%@:14:D&(4#(d!V<$N$Utb^;.L*&7%jbT7U7
+!0F-K3-\^;!Cj^H;qFMj`%&KkLj/G"fF3g^/u4\&:sj:fMB6$c8;4+]K:?k6<b;1V`">=51@)O:&P!+0
+r*1RS75=cY$"u'l1ue_@"L?,.[1EHl`]ulV3>k^$EJ3JePReEhG>Q)a9f=E%_e]KF/]<+fT2uLl'iu@u
+j=o1P<!+N[FN"jU,8L>.iXrg-S+MR_Ug;/'6?=nk$_gNmG@i=\8hkU<(VCI+Ks5tT3jK#N]9[Gk.X":!
+dJM)GHl5FF]9[GiZn"01fX6[gj7S5hj/ipX#K_?WrpWHDYep&m5q>73^u@4p!YtmET_2R""5*L@0'_B\
+N]E'CnTs6o\J2prB;Bjk!upVG4,8rI:(LL5'aYEq^r!9u/rp!J`L%,8$dLhKI<L%"hCm[DlO1_o)Oo$:
+QGUrfA+b(0>i`OT?BD>H&IHOnNbB=p2AE@"';2n0[Efi+?^S[]*HN'ej7UFh,EC,R]7.d4RT4Ai_ZmdT
+OT"f-R_/ah_;l6Fi!o3Ld;W-[?RVZ1*0a=c5r>-4)'B-gG(a;Die\CXX<(`"UpFK/O-+mQba"WN<-;\q
+S=i7B7MN$@+Fp0FfG`oChE,VtO$ER.0H'ViBa$KiTR*,tf43qcF,lY+nP"JD6eCOh4`RnEeMe98&P!,U
+\`*lT?%QS"kRsZP`,3Y13kFbsCM+B>s6pXdOlPJ];\UB)?`fma%1`k(qXsOOTUD7/080Ch=jS)T*8WbX
+L4cHcp^iH[FGXK</r"H=HHb/K"#J=d0rM2_d2^mCmuKFp8<W]>!,R]\H3B34TRh,4+DClDW!m>h6KWkj
+"86$uFisDNEJ/oX0oh@\)+Os-<?=YD'a]t\,I@f09/;OSb3jemMWid7*s!c&+;m]5SBLW(`t;JYQOMm[
+Xa5hK%BNEE+aH$Z5j3lZ#U#.hf-?<;a=sI@<Tk'k3'o,oZ%+f"LC@NuKr.:.j51)B=&F2-$mNJH69t_k
+8'$MeiX#?'7i\3F!fSA"HH$PcHrjet+jY;33'n9"*57E`,HQuInQg-fO?W#g,;`JXBt3UFV.iO=4El`/
+`+2`&,NK(5EJ1KIPTL;6is;4,MLMrYRg<0p\jB%KN/]Q\)K,-dZ(-4tO#THLM$YlknT*l9cLCnEi5I#d
+RL(+q9lYhQ]R,&"s->W201'PHSDdp(8dDaO-WCi=?t#P1X]-TV,bXVJLV&gF6ZjqRP.d]pAL8r<prDj\
+o!;ij8,.@k?f)r_hS)bZ)1^i+"!A$Q?38dWgEloMjbs.`DN19nN(if?_jlr9&j`T7@KVpeR"1(p9?1`3
+Yc=s_a0,Z_Po$m7"9&KUHZ,AE2dg7t*WUTjn@)g$hu)L6)9]DY\#5Bh[l]K#'t$)?KiVoZ7)4X";6^VK
+6M_QAQS'gNi,?FeH]'o1denFljJ$IJIg_SBXY9\6[tZm"]/Y5F'[NBbq!'7%q0Zsi$(.Ul?P-ZVj0m#=
+BU014[4.l8P>]"5GCcIIp[q@O7I_b`o)LP;`mLG%KTs(>@e'-ri.+!E!0kIh/l+mFkN>tFpd5--^rC9p
+<WesJ\pMa&j"6AF0)<-Lo>g@r"8m_r:42p-qoaB\@!kI%Glt"egR.uR2?)@)FL>^q[1%OegFL8HAl$V(
+i-g`SJcW;p00/bkbY7%$=G#;.$,ZFAs![RfI5eEm\p5ZLfX>P:`GU4F7*NaGb(8Ye'4Z5>^ghE)f!M3N
+35$0tH0/>T*eT"3U*ZKr`?TDni]"oB=/-jaK1U,jLtCKY*9_+Uo,?`0_;nH'J@SuRd_NM]EM3gj)%W=S
+L"b.Z!KLE$@fu"WVh:%9.<H(CkGpdVY\K`ZR<hY2(4G"\nM)p;A*a>?'1TVl9T?^Z`r)#!F^^;?'4,Ui
+Ils#`)>Hr;B+Fum%lPs+KOUD6_5KtY28U6I;3@DY_TEjah2=H;!L@;1o@@mDn_OAWq"f^P6XrLU&g."r
+f?0X?i:WtfNRn&!kBHB\Fu-ir:sZDG(e[-pkGHh#\U&JDnEZ)pN6Um=iuLdTMf;<=!;YRRQ6ER7=dH>D
+MB.2%jjaB**2<$CGD_kYqg6:*W0C$e@+VI9:00n-&1d1#fa[l8!qmYMO_R[s=$sup=&HLs"UHlFc%+jq
+E-,XoY`C_.duAEB(,2Qu9'M<)>MqQ]>Z#<N^R!2b)IPC0TTrW1Cekk]!X9M5;;\"b`kOJ2]ljCqT<VM&
+4L<#Fm"CIIF[65<jd\Q"Z'u$IP2D\cdKE[)\YL,fZ!B=]Aq"\$-73Tu"oLl+2rYF@lj!5dSq(UY0[_n1
+7f#9;\d,ZNTs('j)D@bpVl8-Ck+?*9^:d=)q[k.dFYCthbWi0gVphr/b_&[6%)C\,[-j;tDmX+rnk-`I
+:6qUO%)u'>0rX8aIhoS]">JV60p<APoY*Ta?u+6\9R?cZ$mF<W.;k1Egr.BVRWGKulV(8\5h6#sr?'hI
+i>Zr@%qb3J:.@?,J.B@4r@-<6`P&J7E`<WYNql]qfiC$HI&rtH9:#`_=fZIN)pPAKREWl6($9$qKp-f/
+=>9htk8YV7'et('?hW?>adtu/2i?MeA4?h`q`=eof"dM7,MOf]gK#<g6>`0@pr[F.O;][5LRlO,)R,K3
+li>I>^Vh[2cRs%N9gtnP$<IQM_R/0Cqi@efaHKt]QMtto0+0Lf9e`f1`D6WfF]R!Fe9<NuFZ,Xu_rc]"
+;%GH%3e0%?<*@^K.rl<3-<+%XFo39(i:eSdGL7t+Zng`(;&15(Lc%CTEI1"-ALdk/0mSH;EcP@rCbVfo
+:%k_s3'sji0]E,u4K:*i60osRRo):aers-_J:-lR:<Y`_!)_<np;$G0:aqNPP;e"@Ln=\6T*"EfIQ==I
+h$$:B!%Jg0bbBV;Cg4,i6H1kt5HY$(VR[8Rl*d$c!&H9eZYc!L)*uTMfPsp,b3o<g2Y8o7RopgD@h]_d
+arM$!l-=uF!J+3.Glo=l/"\>G]4X"jkdH]$iZ1YHHu%=kE#B).EXePFakT%%:$bkBM4A&@<]gG;(DlJ-
+0#6W,$a<J'Yt]fQU2[UdXQ&3t/#^+EP\"R+/s<Ol*ba%^>_>R?:iTbZb-=GPme::!791t8rTd>A<?]0)
+*dQ\(kd5T*]T0]-&DMrQ]E&e#O;`YDj.Q[T\C&**'r&\#5$OI4H$R#SQ3FPd46DWtESW@XJp71c46.CM
+[<.2>WSdb)PhH#I/<6/@3u'=K.fV[u-O8t`)=cN=Kq6j+`g.h;Tku]l`j9/)A//^+XFNEP0#5O]!:0\@
+Y/jOJ+TRVL&pKKP.WE!t0M8B=,in?BOI<:u$OJ.?TJ#dN8t'(+T1Gb?7Dhj;*OX*frtK5bmL&2@pXb)>
+>.?IhI.H@Mab>eTd1r2O4u)oaK'XS6/)AgoR<u[5.r]DrK"pXq*cl8T2[*8lZZfX2k`%*:msA:IF5j(d
+CI%ru:U>Tt^&abDWQ?*pYCuu/[4it=E:2%4Z2a`*R$NfQYD!Y"YK!t(#8YOe"V&PV"Tm]UZH38("$414
+&G4>QL%BstmV?5`C`6UfF%[fgf7Jm//I:8?=UAa%%1l'AP;e#!$]gPS*Ldd;]/?n5bM\b^(BCUpUWFH?
+9s/A>DGr2@\+t6Rpj)Q'$Fg8<dEtKg0f./bM5H:>L5?.T5lKtOYlh4AL/tC9,pHfbR#4dS2uoDF;bYPe
+oYo[lk=BRt'Re\VB5D)]cApH-V->s1gogLNma/PE1\G'o;"aJga^8PYdOo5"<S@\i;:QRg1%/CO1&ng=
+a0>rS2r6b?9-LFil!ZX/_$@f8mY#&`F[(!_W$7lR3lN)-,;7&Y#_;'Z>=1(*]a&HFFm?@k2Vj',Healr
+6A/3!=ClEaTKn=i\%!<'IA:+Y@kktuJEFl&RQ5^*bW)@-b[G=Jf,O0\MI,h6c7FeR`!Pf?]YZ2WgiH7V
+#<h@T:Hk(ZFP8H4"if2CIiK+0F.2%PSf&RkM5$aCI7S@/qWWmEK&XdN5f?Lj"G#LJcK2>(VT*^``BhBd
+!Nt*Y9[IuK&2j.N#*:%Rg^bg&-&ds6i$d#eD'"QkRj#6;BYZmF7'UWlIBP`C2sK-phk2Bom+&0/30j9>
+fJ40]Wtl].Q_*N(/^Xn^%YfP@-/('+clY#XZf"nD+@CJ1bf<rRH9R)53^gl\8\-dHcd.2R=*qfDLE"5?
+^Upmed?H0l!9UW>5EI5X*=s;Fj7-O_/;l`(J.64:1%reI[ZL%^:pJ-U#m&F&kOJhe*c<G_:L*KS:1fR?
+&.lOZaW'1+p*>TapDG>$)Q!7/5RJ'8>QCAc1r\/$),CWLVP!Cc`:_h%:[<"Te+WMalqpkrGs-Pqr/Bg?
+VZ<=YCmJjc`fF]XN\di4T5aob**K$)G<d-^p$i7U1S1r0#OIE4/5b3JpefuCqi&EIaj2r:l21t-V<^2&
+a*-d[&CUbD^b_RZ/ju<$1n]!O):sK3N'Gl8B09&'mX05!FZUpt12$@['>U#,20f9`h]2^W]2R+0OR_.n
+Ae?"`b+Nk;@T(4F,N#&ThIs`LqgcV/$ZPLmUq:mKJ5Q`g3u)UZj1A5))c"+/<STIm]2(K`Msj]oq/-37
++\bS>(P$ES20f9`hu-Y+43n(>]h-;RGRg*_@P3!u'6sUD_2b\g'F4ELaWe8e=Ep-+r=5&9s$(l!OsA_A
+@u9pJ.*_r*T`8XAKkr*9jjg;aHfNAc;_G5\-uLh*JV_AT]L!cG##ZdbM398bihpTtR8DU"@#EBG6#)3[
+c8,VqX:*HK`/-!jLE-#1^J\qgi72`3mm-5-_\,u%p/m78^_><&3&nrO^!!oO:[Hoj/!SZ2@.&.ua50uJ
++1f9Mnm'k\b.;(i3!peS*O,*p/d64@4l$_+T!bXX?^ML1Y?X@='m14(pGO[kD4J=)DK4"TapdB#lMMj"
+W@7K].D*flpb!dQQsQ*3#?G0I65b`\BaEM=e:A-2E9^#6P&YjKo'g/*V?/;[$k=Xu$9$]/^4&?8YGG5\
+eU%pEi9"WPPV3HC(4b0:rp`#dln$ukk`**&UZrGnXQH6m!Eel9>dG0hUY^e;aRN"(I:n-)pPt_9Pn0F;
+kDf7eK.l.*#9FZQ7XVuQ[VjhjT\bKYE:-dC["UHWjmd*G%A@;#FGdO\[U>FD4Qk?Y+Kq9ddKjLUA++sD
+>!J7j7r_nNB<:o+?CtWaU"K!]^&m&$>5fZ#-U?O*M'-e]1#[1F3lG<V&1]JSB/rC4,$)RH9cR'JiL2af
+$-Y$lg#aDndug3&,XKhFS\W+sl%%\#bQS?g+`sZ-PugA@kAlO9h[uPSL!K4C\1<,1IR*C]&]-//^;5c]
+8=U.%6S<^BZ]W,7Ao8u$o9fU3X2'eJRH!:-YW"^<P\F9'oINjO#Hu.dnc9!PlYs+UXCN!)c"?(M)TB%9
+K6ighLs<^+d&d-^%@?Q8E=`g*c6^U6e+RF0e(*li'H\19N9+&85=V4.03NOc3!a]i8B_=g>NU6^jE3fQ
+=lN"7Ou#\la0UF1GM03c2hXCg*!A-WF.Haq*r[]fmd2+ljfE\;`j<T,8dS#VZk-!kBV$7<8h.:M;L4WW
+8?d-,--Ed=jX$A?^m%Z*kCLG1.uX`r93CR"<mM>"mW.6fP6jD0IEOTeB#d_ls)jq[S5ag##REOc"9_aj
+Ok+$dDpj$1q<G(a]m,hs;I1<W6bDVRlNd.']nWl]<^2L-fqHEmfQk_.;@hP$AC?4!#doS6#s9VWI1:#e
+icC=)4ns0B0k4s1F1\ON]<gO(J_7QtnXPtHDoJH1NZA5.1mQ('6ZjEq'#)^3B.g?6a>p#/3!mWW&<1;o
+#LV2bBk%i>gR-C?2d"%+&PSl@YCr$"UO7j=)GR(gS?1+joo4N<hoQ];@\5Dj*sCt@Cj]`-A_P9<W&mF<
+9U<$Y18c@8I>^tgl^N=kHAXQE%=^U=5ch5iS0Qoeb&$N?d:8jVD5&Pd=ZY@tN@olD"tM]/":\NE\?:R1
+5$(W9LH1/u/ou?2lK'Dr#KZ!d"7hA:%m;78&t1c$<&M\D`Oe_AA*MhupAj',=Dm]G^[kpJ27Cf"d&C_#
+&9i<77)Vf?qB#)3D'EG7Pq$4ZOsZpMn'383>I8AoK'r-\&_JA"*6H`-+^F@"$b&M7"B8u36i4_^"4ban
+A]WEKF4XXb+kT;h%K6QY=D7F&maGV+:%*86'Teh0W1goi6G__qKH>.kZr\,t:^n`1WhHL:27,aIPT&8F
+>CKssFM8)[%IF];['EH2b\1g>`a6R*lq:-1`^'Eeh6Y,8h/:';Oei)!2,p6LTgDQbm2MK#e^2%dY(WV1
+FWS)=T9-ChZMMoW1fn"5MYXsE@pDV35SMYomrbu203:NKN2VIpQ5NaFG3r9sHdaRTWM(>QK[eB*FEggS
+?NU*^2=sS]I0d4=3-44]U_LtL*\<UXD>t@#:kY0T27,"VX].[bJeI'Xk[Q;2GQ[p]>UUYB&HDQA^d4^I
+ci96E`;fZeq#UH',L3>7cAS%<J,W.*Il6lfmoGGJP[*=DF'+/A4tiW;Tdjsd<I+,]H271!D?&*5i6eHW
+p512(+"4<uE$KF)GseOQl-i9eENnP9Yk_()HgAkU44;dIRqLr_jo$c-SA"P.5#+AV'@<B4F[Z,ukasY?
+K7/b31`Q_sp8.:8iX^\?2ca/[BD_>!R>"l7hrhsY/D!KCQFZf!hCIK@)A/kLfcgrk1?`3&ZIr9tJ+Orj
+7YEpu`%#q#)ZGlCME=kD8-Pj"(BIu&7`79amW!BPhN+5e5DlE[&J56QpBBUu0?&s>0/s^m7i9m=6T(*s
+"3tFbUEt)=#Bg3A9m478@ZenZ\7pLi`1VNCCJP=ri2oecBB\[Dj*(<SN:,Qs`JheAnL->ap=?CEe$4$O
+A%l<RkC2@_NSs39,77Yag);tU^Qd^/7Ci,fCS^jJ@k'#0ee_Mg70m"9_qEk9c;(nHBe:#Xg#(Nqk,Xa5
+lL92YSC.Psi=KE%8[gV;*-gdBSjrRfR<7?#D)`T9n([m!%p<fGcr*:!M<01j[sU:3l^$Vup5S"t3tWAM
+CMW!IrDJAW(Zj:.d5B@CG3#MdTCse:\<)^H+Ng@:1r-a)<e@QJga;"rKP39*]>ff@G/Hd,d/Mn,[oM8s
+`'>D#8b%=`p=g@%kE$q1%_`he.scf"ERYueL2D9GWo"@Vp'n%mL8`<0FqCbn,1HE7K,ICD5Qm\t@;TCQ
+1c\pdB>E^IB#"u>=\`!Fd&8&dT"%XV@.oUihuq-;+J?htG!G(Jn@^YN[QLrUi>/\XLsLuEpooBQk4TC#
+[)edj_@2`+'uZJ"G-:F&G^+YTRG_0-puR>/&+oK'Tq7]ij2-(?R.&`@NJXG\1+(`W*AHo_i"`\p&6[$H
+'@"uX;iYiJ1]L0Y4YZoD4=::!mhs=KQELp9S!%]le,6[gJLB1Keo<Y#"e5O_LlkM?Y^,S\rO`XTY_K1'
+n:]L1SJbl-/.:';i6Y::GR_Nd*b*baG:^I<-(>?#;n6U.F:ZI=:%G"Z;nG'[G;Js'i07*N&.=+R[20\?
+"?<YMaB5=Q"*!sB@9];Gg0c*@[SW#2PS`[2o5siR#\O;AoBl!Hj_2?-2B438=t_-9&[mK[;1IR&`k5BS
+W_(>L:j+R%LJ9#uRq]o[C_=,_#AdNcB4d3$:;LboHQ\lK,\t*Wn!U(<s.42*J.rLA5OK_SBe4<SZP/.E
+Y8Gr0]lfgrc13k'>`BDJD(O"hN6Vn;oVleM11;C4;OIt'.$)qX'rgd9.tQje([235o>(t]GCTnc>krU(
+il8(/juqZgCc1Q-ZJ1WHpZ:&j%ctgCpB'q/pQ]%[L(IGE+,<CeFuBoE]]qk]fb<ptK-QHhc<7&6q>LEB
+-pN'D2h^:BGp99U]F'4ZmNU+B?V41[WIqF(d[b&Plo_GR=YO9Jq*@c2]!&ioJ@Ob'B)Wb^%:T]hhs=I,
+`gR>n.P<'D3J`CfdB3FFc,t]`bQZ,?KX_/Q@[&O%92nr;6eK>)^<RE%i!4LWq9PGYou(T3W71nZXRqeZ
+/sK73(sY>nD3#(uadrO'ZF[Z(c>mgW7EacJ7?e=)AjSkhD*93K0=$fs;;57!(`8mf#?Em[MB>YGKgsc1
+/19h^48/I1hn-=EGOp,)TYWd*7rk%ON#aj]WYE=:NEUTp/ERp3Ls;c[dHuON=:.<.RQOr<3B%irU=$\f
+aB0qR))G<XoII5p>B^^qKteufgN:B<JfM!!G&VF7I0EC!*""DCgn*4B#FkefdFCq_jns"P,+XJV4AKmS
+GD<]@^c2FU+UnMTdCfXVd4ToHDIS6TP"XAXWK<;[=3(f%d[3#`>Yl?Y9lBcY*`:a_K0hMbb1KTP'5?2E
+[:Kt\;93PL4#o$$d`0:h>%m&:2?qHo^HqGTl95Hb?,f&T7"2Fi&^uepd32Yl]O@k'c]<g[W:H$4De']$
+VgCr<Tkb*FpGd^t3u*bZ+e1di!W'MRSB%VO)o@YiMm-]b0<?iK$[>;Oa$O,E4/P(@OT0.NjNeF!Kg'JJ
+qQV/rn(tcb<._hMFrh"nZ.F(K%*B`B/=_sijW4dSj"?50_?G39#iPn("UEd$_MP9BD[8QC*]!s``d9gI
+ZH4W#P?2)?<)n32YY&U&l>:A!l>:8oo0LW*Gst+)W_LQp\eR;_iJ;Dkq7c:t.umN_r>\5':;XbA-jf)!
+."Ghq6K%"JCZAaD>M$QRIi\8ehDa59H/E`pFrW"RjT>on[0QL&D;>^WI(ejY7c4(6)CZd_2J8*g3Es7_
+iR^N/nYBrrqo<1rF=UCSZ/+),CUfDDh9H$/<7f"GfMfHNL(7>Rc&mX&3(2]ea_TpCb$3K2Q%'hK>2D30
+L$H:BQ&WY`b,KQjG#'6H\)%eL0#-7![QaR8d/,Eua/7Q1\QZb4ft*C3>%U(#J']37;,+g0W<NG?_KTZ6
+i;%9s$fN!96e;-$FD18gJ7Ec(^,hp%-pE?1pgC.j5(,[)ff[^K!<&D:lT0#AK\UMObWIU-5V:!X^UJ.m
+;CAh0R*$IhAV'RLV8\2[V&Nd2T=WMiH6-%lX0_W,Z#*$q*O@EGFZpt=Qn@@:Hp]k(<L#L2A_bpj8D"E/
+I2l>k(73qfLhClE5o*LPh:pJX#Z(c_'3k\87cYW54+oPM!4>H/V$KoB!6[e2/Z/g!LW=Gq$D\<3f,;cU
+>CYIQPEW/WJQW?-EN='Y;/p&O"@qE]4o#8Rb;t(f-UconMYH077GG*#4<Rr&UM:X?4Wf*PhK[lgra>rE
+q>jH8&"A=WN_,;*WAbM7[\cl$?ADTS\G#`G*?;c)2Ya#-2\"P5Gir!//+iA'"NBmKm'n4_ne8l)N!.9f
++M@<&=&_Are0JK00m#UXaq.KPUE%Grif;X'9B*RNH(WmdRfi*U/lm']X`NnQg3jc!@,HE*##O/$6k&fe
+d/1ijXm:r>Y>72qeF4#mq^r2J+=,2`07G]h[Bo9H]=Yq=*kn5BJt[)cDr2R4kZK]f(jX]UM($9FMfRpE
+Y*\PuO/\3DE11&+?0lftXSXVNG*38"PH)$ajPq42n5n3jl(APW#b82,)eZCaXu"eHN\fJfL(iG@^A[Lp
+au@I)/dbUjlS_jp+5lYbqTsYFohFA8$<M1`CoYaBX*(>!^+RR5Dk_$C4/V#m=q2Q#?Ph\\2B<Oh&\cr2
+NAlNB(*CI!NGX(rIqgM<i.)6dgms'9d?(t1\eKntD4#laYe!0sJ:qRe(?UL;d2AB?XpH.,kq9;IJQ`)e
+X(P"rJh%@I<u;=Foua0\s13K:gqIb4e9@Ie5.4[emcj)&\Xk>NJ.1TGdM6EpF##bj%Hk2P2gQfBGG+C4
+YJJJZD,i#/1i?Y(inB&o^:lkX+n-,f&S@3(g'oB.C0e]HJ%_!<<Or;+2>aQ2'(_#rTtJ"7])Y_@;!Sfr
+o^r\PVS5(#h</JD0Xe-B.u_,6NTf4[f*s.K^59"Tm[/m"+]!2L@W]P-9E'LCLPVni%^`+Z6[W1B,J4rn
+J2M`7MuQ1*[?!Z+OlkR,XPp]?$XH9D(X4=CEc"O=MTu:f9n"]tS82)S'[s'$ch$]hD%)0FG&hsZg=:&u
+l\T9N;"&YB0#rX8mj=Z$Jea]hjHZ[dLVRZ5q@e?c]]D.k6'Y5Ik4l7#'ClF%Y72WnSL,+S@&93Ah^'!2
+nW6SVd$`t@gXc,`4Foj?,Es!I1NY\>:rq5F1FA8["'S1Z>?kb^mdS0dS.8=_d*Qo5g9;7H^dVH4I^%d7
+SDK4o&^_Vs%ECb07B)un6P?-Dm-H]<)l%5t+c9(K=S(1qAd1=%8DV1`]n:lL`uAd.1SUd634"FN7o["J
+IN\'Ld@\Zts&H,0s,rph`AX]ZnaarifFdRd+tYYEpZcMUV=DM)aktRpPiYF8k_0Q,Ni3B(d>DLl.c%6O
+"/9YH5knCb':_0Lb<WWs7FhesmkUJ9J2$J/RuTmp%Cr>C/ic+/L=Zj==ahFS]=mZ'&=ud[.#^6HX8-)s
+0oL'f<oK"-N/NEs(rgjR4YWu1%6X!S9=)%)a!m6s]8#MQf"BZK"rH?#rd]"G3SD,nBCS[%3C"V3XJH%H
+O4WcTjq``=FsJFp,j+X_,'r>a[(#U\-in<gH,$VP#:@/"%LNZ*U-U_7_5spt[Vi!C<jqLW"??Q5QCG_&
+FiS5Mbcaoq+,&1RE1[>XJ1ZB+K9SI7C]X.UlHnfV%klgJp>p8=c=TYGYh4haI:F\##n/Ti`9.6=,qm2g
+4aP,miAW_5p%h5AD>ED^L?frp,BKK`]hQGoc$$H*jDm?fP*a)%X\Hh62X-HcEHDYlRm#T<,=$MtD)+0$
+VJ'Uua]g!j!(>)e/ChPQRGI(#p>-hD2`uJVV(2J9ZnA4@NP1!c,a16j%n-=Zf-YA2cF*$,epBjh:G!,=
+Y'V'fDR<fsLgL0k_V-BsD>3l?@PMSi=*[5Vb@2>$`[;38l`SR@_(\!9GhQ?HPN<,/Wj$/!$P)+8m19i&
+LNiKmb!eR:"i@!^+*"kn(d[;[]j8-;P%bH@^Ck^G-%!D"P'.1P$'I(SN]2V)<E7leSahZ11IVCW=Oi,I
+,N@"6dGtPNSL[`d7>/c-6Bc&uYO:J>YS8IgBlYTECRdNYTT#(9<*thZ`18DZ\Hof2n]=E>$d0nNFW;Mf
+GmOmGPF!C;C%;E'j:Mt0K$2;\`$Hn6]HQ_(`L3H'jV43-GXpN^E,#Y7?,cIl\R%^h'*CC(FN.R(7d@/0
+fpmbW?39N_fL0%`!MK41`Ki_rpX%UtTA']25Jbh7"acuCM'MF.A\1N_6Ne=4aZ%/$m"EaI`n`QML_`#r
+R<+&3,FN1>9*PR>Em>QD7<=-qE"LgqKMt;oi]"rH4PocU,A(cl8\V=Bk:H9cl$%=,NjdpT17T\#Ktu":
+#`DCO%<CE=Ks'RToN9Wa'\kP4AX="n)E1]G/t-3g$K[A-g4I/Z2JWBk(h;d!X+.qnX+=Fto)\FT?AORG
+Sl6S9-"s45VSfch%UuZ1\nkUP*"df]j:)a>g?SQtLKsC.@Vc<!%A]GS=j0?SgEY%0$4h_t3*(M59?Aku
+\=cBX`MGUC,3-%$N++uTf^%$TA7+]-Z-Fu7S\>W$jZ)rJb<*XX^@Q4M"CRnc502f72Ul/)&A=6I&2:\L
+KAk^s$dbM2F<Kp%'1$u(5IW^Oh/[jsR3B0NSP:#]$hp0Z>XQ'pdV<EFD<PIR'omoAqfA>\[6-^^??I)Z
+2O=GJS@NRB!j'pr"=>n1FlWCY\\3!fe.WM3g=WW''McC&lq.P`-W26;W>HIG;W,r^#MHOoi3ESGi3nis
+_1h3-Lo>--J0V+<+a_DHUTg@Hr<Dg&r!MV%i+L:P(eHS/^T-8tb,A1U/WdN:81Z@J:R>/1mj%&sJMuj#
+.B^]L[]^h:$fT73WjmBA#V"+8&L-4(O.ZC02So(_O^IbWOoM[mIps7mW7N8'85R,71F"+1E?V:NYY0t3
+lA@d+,b9IHcak<H%`OhR"OIa7k!CER%mq&2R?h-a+P-macrkt3E*1T"+QVE=5=nlB0MR's7a@ImEjI$u
+eh_H8C1+f6@'MG`FRK[9XgAJY)8QpYP&b>B_"6<lEp<GP#A%rLD,BA,hZn@hO%n^Uq1(i%.!$&C2<Eqi
+e;PaFFq,j[CA;sn7EQ0?dn*PT:27I%OQJqHQAjWZ-ZAD_ib4#ncZ%om!,=0!P<.ljVkcM/D)mhVgZro9
+ob)Ap3L#@Gj3I>QkS5MFk>$1Er2,*j,)EIfR('L:5>;fhB+C7=)69WR<>[.uPt8D89ncTo"ceqeTkf8E
+)J.8t>!<P9&C@mXf*mG@a,Y*Rok:I0Uf:3PCuq]Uq48u7NKj";C5<"-X-Vk:X0r3$&rR#'Z>s_*P`*#R
+d&-O0F]WFcQSr39lFX6'KOqjYOQmG3a:q].@RP3!Li]&)^<Z<@Cb\"((Bf'AKeRlP>MDK!gt%Ca3rD#f
+VnS:r&%Y!',3e)<Om@#T'AS#DEg#h(Yd+lmgeJA8aqOPAm/al;+bC$b<-t!XVmh+hbHF\gjC-rUVpoqJ
+F(p8XB[8!l=QDDn^JNiI(:CrmNYK@e2h?/j&](`O2Fjq$n"/Rk761'9FH(D*EGRp@D!k\Q6H!!UgF]*q
+qZ/G-*(4YV+bh@KZV*PFpZOP_hFeF2bJ4DkC-cE0_</[1@BsF'G6Wr<U4jJhE)F(a_P4PHW_0D;MnK8:
+&*uGa"(7nh,%<_oZ4N:lAaT&)h+l+R^[B]*)u]/nAq5;RY,AP(S0QA$fI=sR^P!`k1-8.?Ad[L:1:brn
+LkO`7"U+YLl#+1^.9.pB5>>)(R:58!;I/fQc+;*YDbm"9*Qft$iiRX>hUZY)lf%0dJ+UuOG=rVO3fDUm
+\C=3=@lps^lah(Fho(l6GF)bq2O/@EW_LXkek%lMSTIlh,2Kf[1*dHY`VXs(L*q7-G@F>N3>[tDJ[r[(
+NQX(T+O)1KaA)?:qPaKm4u,/4k&Vr[T[\q7kK<65Y!@$p%OTlOV?Tc+NGN6L8qBFLF9N:X967[&9Nbus
+leJmGn_hSM-eAPZ%rUrqLpNESQihRBjlW`j2CoSZ%XBMjiG=m,d;3tfZ_gG5bP`JO@QFD'QS/R,>U;(T
+MQk95!]D^L2n:C2cBY4om8.+7?PhQSO9s;6FW3E8FFTWSV1KMMRHJDH7Zku-=Z7pk,LnV/3-jo=Z1><k
+/5Vc!#Gce#-oRU*OmLe5L2mY_c)?H.Vo\/:L]r'5ntt>M=J!7s8r%bBq7=(g@32S2fu]i:CeL@]05/r)
+U^AQ('JHX6e]\V'hTUZe;UKsm__n\8Saq:.p&FtlSso7HGWfc=F4'dK2mFI^K-lJCMob.92#?Xt&[9_G
+bR-SQH24p:)iaA#m0AHnMc`<Ear<ZIriXU;6OD0="9#V8o-FC^)a[OGToH]n+)HEEm.f&^hYQeeKf3+Y
+!rA+nNgP;;rGtFLToHosqs.YI^,1:.r*ci0G%dY#U/-9-ftTVUd?Q[l#,?n@)A&P8Y&A3EQ+L=LL49no
+pd/M]?!_+$U%A7nfdh&1^`Rq=7QD3=%g^s),+*A[ZOHk9B"R2]kMXF+>o[AhN)cZI%45MZKX$neY2Kf8
+o\%8Bmpp$27,g;J>\Q=9Rh9Uj&l$1URXlg#Yk;Q63r&I@ob5;pYo$6n&:MFm%e'Qj_P8)(9jSde@qZm3
+&cVG+O[+=>Gl-n7N/b5&nuS=Lm*Q5dPI)0Mi^)0epQ*?ofI[GO;,X2]%%hLAs(@,&1Ul*$^$f3TPJsaC
+]NVVqIXs[&+grc4413BWlYRZYd5h'poi4*a`Tc-OQ`R'YptoN[k2ihhp"Hpm%]rrC>Q=PO0nfBMn4j-!
+*#i[/jD=cmL0kbYfJf^DUcX2Z=N>554msDFeR[1OOT,OF#S^SC0GM`!E/6Lsb"bSmCL@6(*43JuT?bW\
+/g0Yg->f1=JJ4/rW*CFK@pL:6,/LDUiT[]s?^PfBIRD>^g\C"9HU/'."#<8qcFk&3@Y#D>#(@-"I=rJQ
+OM,$sfJI@J-G3tK"!D8.cd(e]Y5S-B`m3p73s3C*(QY!7)+Ah,Zcc`A8N3@8]H%CNp%@2g@d8e`i19Mg
+BTR:A"O&L]P/o[XgB`HSOJDu1?eHLf!/N=1kij$q7Yb@98nMi3'bH9%HOtgr>0MVbH2G)OG3E,I;mRc`
+P+AT,aEgMj4E4=@[(gN2J!=kuc1]j1(Fhd$Vab^7e@`'.kIA&*g.aR,:4te#N[-1j);a;t5:=]P%YAHW
+A9eQPVr,Z_pJi;'5\]Eqo=V=&3ZdUK!s(FQQ@\lPT"jGTn:cliGqr)T_%S<@s%\4V[NjA\d;:@:56g^0
+Mm7@@X^UpcE\CcPHNs*"_L5&Y;#*RtH^?j4nSE#uZ9,EWZ>+#!F(FUYP<#M?"4\0fg!3^ZNJdQMV`.L^
+,*q*En_#9&7uf_EGDlH:huoF65gITTTcAZPf/<_hK!7<^e`Q*\6)oXB\,?<kk^*o]2#;mR]#!;#_UHBq
+esB.1_=A(%B!='1gDCH52A'?>oVWeDlCqAOi2tsMP_onFE9ZLsA-a-41KUpeG("l\N"CUr/@)eWk.FZ4
+<s8_XM&BY6Hq0=Tp(b(ja54k3>hlrDEoasff.;siH].>[\$^qJj].7J62k,#&1*!N<Z%2$J/FHA<TO[p
+j^_'gZCh3Y@bq)8<Yqke?qO6,:s0itG7LY]&Qk@RRD@[5LsLTj^9'%n"<:$^D\jrqgg41PaD@r.[qd#Y
+PKP:OaX1m'QOD++I#WqT&-Q*_7lX@GjUG($WV)c17YPM843Yj+Ta5HlD+7Ri>50.!!N"<k/$,kDK%LA(
+]A8M]>dcudmuFVC*t<Egb]I?G('$*&aZ#qm6XXQL\1FI6eL&IR9l!/YRC+V%5o%S9Tgkg(S$7rWeY^sU
+#pOpe5Z!)[d#R/i&"Q?"lA<$oL98*5m.Qa$$,g6DLBQ#]m\!dJVTJG;R:E$M-lU?WL:",3k)hHoUu1P8
+m=9o,.L)4+\oB`L_V*Hebc@-Z.=sB?,@WE*@H0`:Jf.CS\A=Mc\E-6"V=E,Wi0?.:?q;!qNu=<W:k'&c
+/U7q^TeLf&ODe-n$q&[T-:,ea6u0)=YQOF-48C$J[B9mcPRm!j#W=C_FGm-.V8OWrCR3]5+\q/6j)*(u
+.n#dpCP!&LV%#Q6P;0Q*Hoe<PjO=H&!_6@tI1aqhKuOpUQ((d)oD&Sl[FlE;rZE[MZis4Q6H92gF58XT
+!Qj<@Je65"C=B6Y$c70oFcsH]r)b(.a$N3#<uhY`,5jY?:,%HGO+llsa,YiegS)SrTd&XW4Vi_?h-8-g
+,9h)Sl<(!(b0[Ci/`gP'(90s#IOol!F5LJYi&qj/\-1KhH?_e^U9_o\_N0Dk9JM$9$"jQs;Y4V.5_O]T
+(H(m5`j8h"gXPR!mZD%=<9Bs@2agK8&5"8(MA=<&l*iU-AEnA#-QL7gm\^IP5\MQacl)34k^m>46La,/
+[<XFEf'g9e^TMo8p.`#&m/+I26Wgd!SjoXfcc"1VPphQo=.Rt,)o:9Q7pp.50Du_J=q?jkd>o^-Sofs6
+s*.4khhm]a>fg.t\Fnk;:+<L:in[DP0K\:Mco4LDcWI9a3ufGho>K@oQX]:ThMP[l]b^LBZVXTZB4ZY'
+Z'Q]&Ut8*"SC%*F0>c>?B<,qRDr6DufN'sq]_+OXWB6NjAX7sJs.DHN+r@ot1O1hiGDG;bn`gRG4g%D@
+B!YhVVTn;$ojb$U;^+!KWXo(L>7Cn9S$_kKF(Na/E9Bgc3]F0*>Ffl1K)OI`fX4hk<AKUphLcdU2nm<'
+n(g;,qhV,&#NT>`Y3b,<=o/$XeV&pAoOh^l$W?02^,eYUGXK.f/e?2jV(W*IW:l'39\O9dNt%T#JdZ-X
+,""g\&nGAbfY(R>M?"(9F%(UaAaP"g`$19KOGhUbM?(1T4.`[jb]*B_gpdDAeu6@/,Qrh5mj8>I+6I`7
+`<FKa7u$/T&^;@?/m/iMgB4#,B,UQ#G$4*eV7<(iftr"-k9:5XqO7PKs+>5PD[?BIV$V$(+D0e"X9H.c
+^]?+,_D(cd0kD#u.PJ]g=PaU5]`319DBnUO0^r*eYWitLTB,#W)L,JpnS"G@f"bH"KP:pgDU3/SQ-'2+
+W*dZ<HcMX#pTr7egKM_8ELVdAFPK&fV+#ODhn,B;IOhpoPPeThT5LS#!.2)_4p\\.<t)+U2)SG;)f;<d
+nQ'nYrMJUu71+k.FPJ5<J\gsmb&+a4&4Xh)k&S72,@trOXt[bWe*d<Y&"lfg#"5/GA>ELQgu^_J"iT=&
+S%%sCkQ+O8kUg`5AJHspjOmqs)Ka/9OOh`n(cY']n,F!\%&@!CpX'51ATe-B3PPsp47%IUQu*KP_'\&3
++j=og2]]BflM21u%X#35LC-GIYOO"F<r,[S-8<_1+j1,s/pSTqHop;sID@m8b&!_?B>VU?&?q]`cQ_*c
+,kYIF\K"Bh1,$+h[,UcT2]]B\(e<3)qN`#rZEGY(-DNB9D<;:iGUCjY]>>ET[iDjf'BI@Y`HCY-.riLX
+NGBOpDJqPS_tXP2`a2!B3H!TlWa!.Y:cm8K\#oE#f3QuPFBnPNa)-&U#06,[J*'IW(\B5P_D_)9X8ILP
+Qc:C^d11H']0>2`IDG+peQgCjjU%S?p;79-i(*!-#K+1[hn?%1&a!=d`,@\SgNKE'[d@qNM592*h-UIM
+"M"OQ<"`J,3'lK#rItSGV4[HC@``iX0iJV'm4`fRgpt;&i[Z4u<QEJD&9m[bZ"Pf(B:->d#4LV19l=Th
+NK[GKQg`uMe^rjoET`3Z0#AU;IIc=+m?<<8-qmqkKBSmS.CVBa!e'Wm\-+OCr!a6p$J3FE`1=P#;pfU>
+peD3WgW#Z*NcX2ZV>:D:D<hA-/5>[o6q;OIcK=?#:!imb9pFF4]VG1tjn/]4@'C&!DB%cKT%_35;ZJ=$
+dN*>jaR!!b&<THOdsa_fQ\H'A$!>kumA`K[F,hrbCO4"-J:;Im-KgWR[W>J0DMRdm)7DK;`:5as[p))7
+EI2Ulrh\ZKhOGTGDPN+3YHo/g[gst#'s8]R5PP@j!0LrGc%RN,gVRH^Y+"L_D,X%7l(.e.UZ;&2([8GX
+b:+5R)Z?*j!Z-Ogh&No+1]4jc8:,m)SR@;9>IY]KKhgeO&k>f.S'=<*2U!2B>Fs8TQ@$D%e9@+3,^IjY
+gOte";V;(Lh2f0:WK<.p-3.7q#"rBBV@/8\=^7tI+u21""urj>oCYTH`Vu?egCiB,\:'&m+0<UH`,"4=
+_/\3Jj57t?e@IYXRk.*Lj6ste^0Q9g"JPuqY;`cWk8YhK.moG2#40c"gUTur:,:G<iOF<Z.om+ckeM2-
+*ttVm*)ubJ-_-uH#I&L>Nf^/^#$C*::]Y2&oBq]N2d85d?TE$6;F'n+DcAm"VZQ0D].3b28?.O`3B1nt
+c&pKhLr$iE/E.;YXB=L!OkJLi7oo"Dp?!gi(0HY\kjo;^$Eg+ST/C7h,h7_K$LSRS]>$`GKA6%<kib_"
+I_*0A3c8;A=>&.,\C+1Mb5%'Zo':-`4a)JmBKC%ON?1=]%ii(GDD1;J7/U2k5>f<geE`%iX6C^L,oRA=
+GoG3-17o04W^g@h.TIkSj0R-Q]-9c#=$Ukghd[/9#EbrsI\1e]_P4&0!FBnW&Ac,"Hu`%`4%p;1Q'%h4
+HFZ2Y<^ol_C\@LH]o$2P`4Q-.m(m*8:o77oYuttPQW^kDle<Xtn`uZ"3W$hgQKl)[^XUn8cB0@ART!h1
+c:c;sH;9X+Rsc[?/HG4ZSVW^kSQ*"3U=P5)ko4FAO-Ei^he),_I1V#3\IrWfqJi/!#p@:FE[Wjbg;iL/
+8^C5>lhfnZ,-QuDPV#%KG9Vh[$o5lWbd%SrD-I-lq2hjr&m'dLZ;QN9ekM6-)i'>t\ZJ!sjjK0+Yh\4:
+:_(#BSZ^11ptQJ/>F:?@3c<hTRs\#YO8G$EaEj)Rf=#Es^9MEW%cAY!,;t1!:!e'Zd/''h$cd*k[;app
+<N3^iUoic!IENeaQVH)mWC<>G<81UDl^d-_TPsE&ZL:*gKF_&LDQ14[p$Sgi^J;qNDku]Oma%l2\i<@D
+HCT>l:A`1bCNW`^E4r]F[nprmB@(Xgi#N:>Ya4q8Ri[u6rR)HgYDJ:qkaV8[qgS8ZS>5PE9A6XibVfQj
+aD[0R?=/It[eEMS>t.5$CoYaBX7a*fn9(WKqW;mZFH;I:p<]+Xj0lW]o&MVlm<:tKjh@b-+g;r_Jq48e
+rk,@:L!4LB',8rJ1.+H>K@Xm\DS@o7(8#RNbW5Nc6Wb&SK57m"E6g]'LA'JB3bI+TPQ9Rj6c<AF=h?n&
+2fA<YQ[c^$3T5DX)*m(4fAkMr*$])s1/Xo*^OuUK8n2L*f1$oG:1eV'k&A$ULs>;5X^8^EpZ-:^_L:+`
+4#f1REc/YQr(KpC[mR]3'AV<.la^eR>5i[5s.fatK/<oK!]l7kme#t_*8?<-gQb.U2t83fh5(sJ:$"gN
+?Rnt8[SG!0l_LTX(?lk\[jr)RIKdZ#E*,/=^EC>&16q#IlBar[CmS_/5T0m18jEU$D&j72gqKkGNn_%u
+?J94jgo+f8R#CeIoc*jd#?jX%/8'&]g`iI>=!5b-g\)r$@EL?b?g"SWMJ%t([]>U-*no[sgqHI4Nn_%u
+hLWV"V1Osa)b`5/>Bd9K[P<=R_!--FVo8/MW+F-g_f%SR?RA%YD(u&PDJPHbEVhKl3c<jG,5F:iQ@TF+
+f)9RCY"G7`A].9#O(B(I[gu(lQT8rQ;%M262V<<BdBTm^n'#e+[K:.b2@:J6mma&3p+85DmE.ENFPLKs
+74cLn?(q3DqSk$+mePi-iXR:rDI6,^&Q5(]Vg[)F7nE1@.T4M2+m"]DgK2(8IeLMs\,VW;Y@Ugn^<Aum
+?:5Mp<Se:eni&RH=$1YTKb(8O0=LLpmsR^)8p&k&%JsPbb@'q6`qIuM^WCJbe@`N>Qb5Y<Z+Z.r3?upk
+3tA^6%ef9_j(H:P#5djMDZ:AuqW#g!h2^6D8ngKue?4H[KZC7b`<BFW/KV-Cl)KL<a?tPKp\<h4Kd'JF
+ON?lT&oL5m_BN5+bMP-f]l<E7"(L8KR>6!m+6O'Ds!X0I/0a*3r8j"q5\%lJ>VZCi@&FFLOBF\fDi?6i
+!#D\!q0g5^!R,kU(8?&h0rnUX7IIO3QES>(5$tLY;3'#4WmEfj4$Z"!4j#@5`iX+0J?a5iIWrPE7eaB1
+"E31Sd+DH),=h'N1/3oh.+b)5NHG2F9SJ0Jrh>jFKn-Z?72&:662O;VI];N4U.MYod`F+dLI4I\FTcL3
+8i6[PJ+'gdUE"DDC_EdWD3Z0>U/Ti&SU?+]M5@0)bEdKgIG5^*Isj[k<8Ru<^2N8"Q!/0!@H;)b:^19N
+b+W`Kf1:+C>Bh;QP=]bplOIs3qd]n>'ESki`UFiD:4uqo#kFg'4%N5WcVQfFgS'\EB'Y932\u%)jdH^C
+LH9-65eR[AiG=$Jf,FdJMa)-FGJo6>ZQVBuE#Gi?6a*J:_@XP3KViKY^0nO@1^UTE"!Hg6S?-U_#Kt0F
+1H*BbPbjAu/4R)0?kbLJc7Y`"X!CgD'n"3_<(.O)2X=h\j,.A!#k^rf7F$/j\,uT"$&P_pN1KI9N=i).
+^LFC2&TRi%T"Z@?E+bP_&MKH4r@9#7#NHI'?E';fm7ON1.YIsc#m2Ja>oH[3D:"iaeLjbE(cd!Z/Us&S
+*,8]8PD]!1*tZVpj`X,ji"c0k%rhF'GpAqa?D1Dg2#q*6(i,N8Hh,?4lc]d,B3@DWlDP]f-A"jBheh'+
+>7!&^Arm">=#_<eG<?LXjI'f:jIofi@-`Dd%2=Df^;"HQNncl[37op/lN]ILH,_Ws8L_qrD(q([>GRH&
+b4/M=@Bj<N;ZLG/]rBeOhUS-1gW+9j?^iSiKW#q/$b$q[Eo%`f#qIH36.r:(#fLF3VU)It)^j!CBTok.
+E\OJJEX68`46u@kUUV#0rX,`Yg8.$LjR\rdMAXfEB&7AP&.)Vc_;3[f68b&^e?0c``AY_gRB8Nm(/q6s
+0h/7%A3s1*=>?n3$ejsCl4>j/B<H"X@/E!PHtN#.FlT:MJ]N*kNoBDdX2WZngJR]m4FP!"QXaBR4!2Ut
+mk)PG&bkrUgNf/CDBPGh#ceP_'uQn*h9F:h8dOU]'3@osLoo=*ds:j);%(Xl!b*rJb/@aI999J7dop<W
+0e("Abj^;aV,eCack63N9;+q5p^@GkgZJqTh@K&]hgKQR5r+)cUaY$Z15PFYk*p&_T9A*U-V0oYW!Et@
+Z?1<cK"+4>04KJDSX*I*RDRW5-?qd>1)<6M(k9j#)]K.m+6g6EGRgHO,Uj-oJopo2Fu`\Udop*t(&bgT
+*mB]8eAaW'V;^'OB^fO:K.e;]gNkD!<FdOgWA[o)QrkR_LP9]TRpcE<;Af1\6>s\()FKu8Is3SJrI&9T
+k4=j],UX"nC8QaP#[]K)jUGW/WGFJ$kof6n?cS7;n:7j%bEGC5?c\th\nB+:.chQ>N<k^HM'LKZc5XQY
+Dc>5XjJ5HWItI#`nBV+d1-W;U'5gT_OMf:m-Ji:6/Ar&C6Pu1o%KPm*E\*%K]f]oB&>'Jd!p9P\2BF^#
+%/XNW<^;l(`!&Lo$Lp)&1^sdYhqr>^P17*tnh!#!P112W`Dk(4gce6^ni:*>(pno<itZ#PP3#Ba;&<f1
+KNDM9k3pWY:UC&QHA5_$?E]^_PF2)H(bgR4nr>dAo(c_N>P<Tl]g_Mm4Q:'\o7?GBmMX?'jR?YF#j5!>
+Z1A(7H!GQV4q[Nk\;8D&6aPZ[Ti7c]@f`9Cr)i1.J*^9&8>C,TS>[bb*Xb=0md6=V->mH9T/maB)2\3p
+0IV_OYqSk)n7,nBhGM=F5X-$?\-*Za0-P6>-`X2Z+oGGeb`p/28m@Qso'5Q%eYek9.W5SmM9WWgVIj>B
+&Ul+8QW@E(6%NbYcRHF?4,E,,`//2W[r]>#msYaUJF?J:IDGp"hG4:>3l;P`!C'[*pJPb^n#c5)hJ9*/
+]_,1[rDr9<CNu)]M9B[1ghPZrLI>9mI7R0d.=enr6tgD<Xc]CO5T+t*.6!l@NHG2F9SIB'.T0q?RqVso
+5>5hB?pj7(5:=1`fR>c$5jE^(#Oi4Y#i%PA2XdKl]&-`Vlb(hIhfKWK.f?Aa)]B71409o5]@1H1>ONG6
+JmU`FD8tt45ju;r*#i[/jD=cmL0o/ID)"i52:A%X1]0[bJcQ8<41%b==)WnlJ:BmrR<;hh)/LNMKmf^-
+K_!C_gNA+],uCg@C$Wh&l@b8W"#ncr]!VHQF]JcmYb*_5MfEtYMdGj886n9N9_b[sO/Ug.G&1O0<kbu/
+Z$);3>SL_ihTc#4]X\KrNhG]c69$](Z0o7J/e;NYGD':AXA_q!D?!VJA?f5-"gIRA?6[JYOpNah\45c#
+H\..UF[A>jq1*l77=[FpL/J/Q*<q95!P"X,%@80[N@PQ4R(pq6>ZcI2G7tmpR*8:C^h)j17t\M#74d4E
+gdR^*P?^NR/44b`)6g@n-,EX1S'A1:3u:JUMqjqc5*^%KDi";LggOIaMEiM56VIe+o#tHe6Qr131q-)&
+*F>`(g?8'ME#:6U7SV1-Eg^i7Lf5a>nNQV'6Xt:-RcoTh2tb4<PW@:g#6Bj)et[#AI^!U8>KE6?pa6_`
+Q%nXd=&DaoprEDhTD`H<m[^<g2,R*sZ@W'03?I`RX,aI0!I9H]m<]C$jZ,7fa0D9%[UjKWo7g"$F/R>7
+Pe-t[@K#=A()bjm<*J'7P]O#JX"t!'1cPOk(qmB68pT_m#+4]"QnHCYDj2BoGF'un,4A@b-1uFY`ifD7
+)*[anUJ(b_LNA0u>rQhbBN10'+(NU$\^>lfNB"b2Fbj8He%9^?4U[f>GQqBfKrE<=@cS6G2rl3RdId#;
+B/H.,r/=D#GBlXcoJ9YV=uER.6!,,7Ia2Vi$=Ch@MYE,.<IK)jCLc[kEaI\*6HW,sgR<r`f4[o\nACS5
+nUXDtnF@b<bRlmT:-eL&ImQ\un1(UI=2=rI)c>sr?Rj\/;[P#,$$WYOX'c1nc(1um'f@cDqpI>W<%pgu
+a4M4!$Y'"LCXFr:F.G\gJCM(i(G%14WIc.ph4$D0V1K!c#\%T6#D<aj<Se9b_4EFd%_"pSNmHdWli-).
+!HA@i.W:-9JiQFQQo?N1/:<5CoX==B\13l"_Q?*-ZVZ^C0JF=j=CfGe'Fi'*PTjRffTrQe%Q]4V!c!bI
+L(^<5>tNJrWC3_(@Y!hBAWUsrbGQs-:j_I;6*3pG52ba*9"XajT_D^tN_QoAEjgEG_ll/`es!8!mN7Lh
+O:&uEim)/uLkZ3OQmWe!=<*stMT?*l((:ir]YeI20L<+g@+DhE@!u;hRXGkHel4VUT5YiP3Pl&Km?M*)
+iiOGsV18HVCgP!^#OaDtd4dko20--S.Dr>NjgLQ>gqR1ZNi<l(T<AUa#iD=ckt1@J+Vi35;S`FoW*i''
+i)%5u*'j`a`,ZUZJ@2rqG!K5e;c4K+ld&Vp=O7AIJfRZK;q9e$=PU%O*PH1t=<+]_]?Y!L1[/?QCFAAo
+5&p90Y1oV$*H5Rk_&S[Hjp3?sXA@:O+YF::Q$7m#dEMf+\%)I$)_Ne&E0d/K*CR$4JiS7h7LjS$/Sl<o
+2tq?m5>]0+f]+RM6-ugQc?q5lWaO07p@3W:"=FSPqXF,nocJO,,/n`po^&,-s8J)$GCN+6pB?9?eN79d
+"[m[FiL*RbT7'+HlCH>k'Yt*3hhp@A#J<hL_5Vbc:I]<gG%/$uAN,72$VjKLlNkH?WYji0N1.Z]:D@h1
+7j<Q6$&[#u\K0e&.<^b/g9l5@_9'mZ!8&+$(#eV153B#7k5qGT7P@+#T0DH=k[<rA_hKkfI(n%s&]"eF
+(a:s4c'NTljUJHrU12J:@>?Q,S%c1E0Y<h7@4H[]7LUJ#FW-l,JlCPJLC+W`]GqNRqK<\"":?W"0-WCK
+`B9fLd+%/<lX9D#)e-VDOV+,#l8])AmiE)J&Y+/[U0g<-lCIpIY_3,RS,qCc"9b((&<45M@6sGnk!i6\
+>Q5T^+ugb0phrT?lBTZ$#g`X7bOHu/?B2Y[;k&\.iU:gS`VXJT%/9sDfj5OK$?q'YI7rujS'ejd#[rPI
+F@)jKDO,%q<.a@Ci,tJHg(t7=+ugI=FYO&7lm7n6K&D%#r(5lHg8j[I6uY3'dat\7Y!qQamUHBtF03'#
+Lu;hBa7pJ]koF15a$2qV2hV?bHm/bh0?:ZiP7a<[/:[DrjDn9Bg'"W8V62D[jY;CblIYjqU$l;f\Hj%6
+!:a8*SGMsGc.q's'B>+_^C[*<:F8&F0RNNUocOMb35$Q,W2fEC8.$R1R&Lq=.8CorGHMJekoFd,MH/LE
+GOc_.BG#[:0R`L'_'r'LF2Gfb)CH'SR)7o!e^rjoET`3Z/clWT1jP&<Urd*LV`T0_i2"Ji4h)j-K%]`Y
+kOp#(+um7\/l>d5%<3aKcI=(j;n'!E+bEXr9PK@i:7ZSsN8W4A</hK[%\fW/AnQ1BhuqF+c:q9oB=+H-
+U^Q=11?j[MU'ON-d4q1RU=6g+_,^.%3ZiEr#YsiE9-[J_6e%Lt))G,)AI;^<"<6F!jY<bjVI_HWeQC*W
+SQt0UN8PDnm7^MX<]h8mibji3B'og'N\srrdm4*aqf^BEn*E4^3;);)iC)2%&jLpa5U_gG(Z(hb@,\tu
+8N.hQp$.*\G4ouQ&Y/c(PQeC[;_G*Br^-f9/-u,7+uj^uGuTHohI&-^_<0-aLerJt#uJ(bG3X53mpV`Z
+/n[Yl$0hkc"@J3P+JF\NjH?tr3-@Xs63O22jO(<=7B')qSGM1/7tdbb'N>.3P:DJ`,u-i4#Jo+Z"K/sr
+Oq.U%OWc0*'88A6E,sp_#HMmX%sL3M1P/R"X<`b_jK7GdrNJA8)h1Z_pIt\BP=B^L`#QW,FhZ^HU6ZEH
+BkG.5]sEX?";.//RTBV>01Q/Cc=B5"i.R/J<&b@C!t4X8=lTO+O,ZS]68iD*M6>+Cq1j_O63J[3q>%,u
+:47*<E&ZU.P1_RAdl2m);2jG_#9C!>.VMtBi.NsX;GSDbs1Z<*pCh(.FWi5u9I#-fY?ni&]li40?pP-r
+Q$;.f4BF1#CX0_[Y<2;*pe`+;jY>$$i$R9c.@*`sVou+^&Y*)FG(bXNB##a[o)jRFf2Y9)Yp6+bc6Ip>
+f]_k3s!WKJQnNbK&:`9skN&tFo_Rg'/,50h[H=0Y0>#(/C-5`F,%A*Wc`[bJJ</#?+ug_\?ARNm*&=-O
+S0^'@K-h`Od0\i.<N-&4lG<Oqna@EhCfJppdf`3QjK'4P7gp[JM-#Y4Bk[RD#Sof"HLD<g4na,NHc0]Q
+isW]o;]Ad-hYPA98f(iIp)`mdq$PVqcY&oUGr\@>r,SOUZ)Mpn1'(7N)'-;k_S1Zja@l/F-Xmfb-WMbn
+U&7q2U4k_iMVtikNAMBdBiPWYo&$GU)h\Jl!'0b=6TI9(Q3En"STGV'VCDf!arZ.[T_GEj0MDT]Mp\D!
+RqXYm_.h26q2hk%(KZ;BZ9]cL%NGIo[;i^TQbu44%Ze\:dFds0>DI5i_<>uP!ljD`G_?OC+q5-SI+9S$
+'+DX&83,d$VAN!JYsX>o`$A^k'X<0jM#jSPHRZTa>$kEq0-`GjeM;`?<[IWl="U0mGr_\s<>_J::Zs;b
+8>foN0r'aQ1bD1l-@#E:&X`Zl.Q27<\+R::e\Tl#AEX^!9ltg1rAbT[(MA\iUq(+H-*80,=Lp#@0pq*4
+$m%fM3b]sb!:OlW=E'a-m?JQX"g&$`ip3X#_@udC4f,.I4i\sB^?:Z&/0ZnoN_/.fLr#mj1I@<%7PHA<
++uhL3f#ZNjfQ6i!;\"4s\jj7q+ui:Q"V)-7Au"4cJ5's<j]4RHnrBs9-l!.i(_#c[5k<10^(V4)mN.nG
+T\U=11<4#-O^u<;+A.f`6WcIbGB@-I@*uX>@gj^N^#+^oFBjUp"iKUK@^38<4Vr>m>K9>2nX"`rM3-7H
+T)nT_E]oH-b;"#a?P@#5n4O$`D@Uh*F@CYEQcXVCE5HQ\"=N^c`ZYt%@[s0>RPKncc9"KU3YGRbGBs,Z
+lnc+<3FXC^mE>/b`_p">F^I(b-I(MZpZ4hS?6>]kLG/>T3bF,KcZV<0qrW8T9-e79e654"7dd[b">dFq
+b5'Y[d!>V:U&-'d'Cr8[#Ylm)98$Q6T*Q!=;gBGB*M'@jA7SR\i<-&ACQ.2I<)&>0FAk1SJs2P=@Io!m
+HnkO[.I&;108pT%coPFHalp#m34<ll.?KAD[&RoZP[uVbc<Vq8%hY>i@dBHf2n:+l3>53l-SL5U-eY_'
+YZ53tb6Uino3u-Ch5:k#UoZgLbf)9GLu:ZJTEn<<";J[Dg!CVQM47`^S=Bm6Js2P=L'RP?IOg$!e@UV_
+3%74jeeJij5*jkHK%%h,3F`2i\QhiZi+\J.*n2mNmh!<L:<!R<EMFq6PA_^8E:S&%/g?kZDaeV3mmSeK
+'1FXi!@f?SpO)XVE<l)ki8g>o,DNhC,%/mEfd2:c03*#BbRmb0'Z%oA]B<i,?]!_5U?#?CGXb6?F++O.
+HN`>umDGYiQ;Vu+fS=%5EQ!A)q5$8:%=Z6fkOuVfB^P+BNuYoGq=fDi,5;ojk[/ess*)3P+4#dnVdW6@
+W;:Wc1^EgRha=(t(r+b8LTG8N7Lm;@Q6g)aqKjX_YC,l4Tb(KG0855WRj\u?D_e=\>$3"@"laHpd(f4l
+s7i@7bI9<-^3Si3k61AP$#_^Obn;k*9<SXh%j9.f4"c2>(_?f(4M"f?1o=q,V/E<^lrK4(@n>*C&Q+76
+OB?8C_<1E!3/\8p?GqFRc/qb<PJd%g3J'cR6ALB$r`b.X5m(_?cgcLt#=aXF5hB9)7sq*[^@i;Q5G$mq
+b$q?$^i'L^o%L!kEK:(-W+2)s%?Etc!R[,DA6;f/MHg@W)n.C`GM%.XBlE.(4067e?eka%d]*3O2ZV1]
+O(3.@jV)fp\>$IZ"m7?:3<JU::oH8oLaK:q2mZs!SBR5ZLdaO>eu"oI>!IlG*t%N1UDoRGKYAH<,IbB#
+jA<l&jYh/.l'>8f)P`(r;3"8?kh;:!"E_-I9DZ[AOVL6(f_++K9["T!fFuL1/]PmdF+j^VY23af>s?cE
+(qAh&r[gCCRn.#B*JBbT;hpg)UJ)?FD(lh(Zl!>$DFFtlCkT5u$\<LGM!4K&7g-0ig9A85H`(#8js+@W
+@;l'Ahi;O-]D%j=LO-%C]H#K[:f0WK""s>]hcOqKrON@Vf4WDM!==&dm,i\[PcoW$EpFSXe9sWM0FVq5
+<IR3c$RlZX[+u(5J1,-$O.Y=&m@<>1C[$q_6(:^Bl`^UuF4%?Caop&J]4K[/jV'IafGP^]l?L(O^Z/U6
+&%i^Mf<&TtC-+f@Ou'QY)kBFbVUS@S^"kLjq"e-!VXgBu^@oqJYVn5E]68&PVP7G?[,d9MTU]`gp33:t
+q7:9YO3+2I^R;0D3*u\PPm:nNVY=)4f+s>.]7HB+9dT\_R5GFei+dQ747l'W?00'L]_9.c`,0pa$1dCc
+2sd$L(&[>+5sOPk9Wh-/^"jZ$ppuSts&.`jWi#N]TFH%%H<-&gHYlS+Zjt7Sf0rd7m6Pqk70>'mg1itL
+^,aMrm3dQMI:%Y5O4i5>(_U/:%bS!*(ji:;_`[DIbZf@E:!`.<9[Nd10Lh?eM`>+Pl#=sH^8/5\/n+./
+3Lsl]fN)S5\KEsYKTE8ZY/`'0(d/I3jTe1;lcTiO[UVCL;#hLa<'(!45uVk6p*AL5ql?31a5*:h`t3H-
+03CLiY?3R(8-Fhu?@@9165**o3/9G_/>UU%rja:*q%u-Df.-oH!#;AM=,[a.`>A`mEA7[V[9SZi#W6V@
+R#2/\&n@R?]9lLd>'7fOC:j/)_\#@I9LX&o/&kQ#2KU\9)dM]d0`q=G'S9eQC<Ki7=q>'N^@#G=qW;5o
+qB!QlN9up4E<)I>:aUuQTU^opTW<u*TR.5[KQ&[.<+o?lJO>?R1$<U&MD="EeZKaA:dVnKNj!#OMm3c]
+2jI;gUDS(3$0N_V<-&gprcF[]gD+3$qEtTT0a>$kN'ZbqN2\E;Ri$dl\X7u_#;HEm]B(qk(Lo^u+N@A_
+&4qi.!iHn,fFcb,"]oQq?Ll<]S/oJqhXTCb&E7LLPR0p2l)O0)D8Wrk450h_hS$2A!Lh8?dGKctr-JP5
+m/jdKnKb9<@dhdS$nK%5&"6tZU#@+D6ddm8qdC>eL.fQT>9"jaHW+S$DXAB"!H[;'6(i&Q"+i6d+1.df
+5438r;u,O2^kgC\%u@;04N4CYN&*D94%Lu::_1YP:6j+mMcleM@QsnX+#87ITRt>2c+po#,hnCh$=,@0
+GDRTI.,UQ!*C/N85TC\CQ63_+?Th'3\]_gbp5*;S,cZBtAg/@llP#450P/.C&Tp5JK.ET\bT@C8$gdh9
+pXKY8K8hFd7`ob*Y[bB,1)lRTD'tTE]+rrC7j'<?`mM2:Kt%1k.<shkD9f9X*]dV\YU!tUW%Z,Um8KJB
+r;*-!eC;*bqK@7W:_Q.)08S8)KmtA;\E+09X?d7F\AI-/L5pua=9m1&66D`.\F.19BL[&L@?@'KLd;9$
+'0_"'Z+Xn"K+g#D7Dm:N,&Wa@CkfD9oF[!=Oj]eZCi9\iZKP*CjTo`3pO<9("`40dCOESVo#=QIGhT_O
+O._E8GIY;n&FBJ@Y_gB2A7lZZp;#:fmb.>c1BjpQQ%h%:k9n8U^jFFWa(\=Jb)C#jQW7UMO8RjhkWONV
+m#B*gaHpE9SX187`,iidR__k,`BuPTcnl?6M1lhWk2e":i_%*K%L.:'QUF>"<m2=rNc1toXRU\H?4pd7
+RST7QSo9CnXimM-J>=[WBm^JGm8Fd=GG6M-gmPF`k$PU(4@8VgKaWs/'B(4&%mQ_sAfH#@G>dBf_aG>o
+E?4h+PgV0.Zh;hN#+]2"ZB]^XFp,t4:AaA`PZLQ^DRQk>Ll-5A;<A;l]C73T;Ve*4g$AE>c2nOu@Scp8
+^jl^l_(Rd8%F>^B;$DuWRjhD0L*Y.ls(6p;g5U`9B<KlcScR=VM<.+1]nQC0L]OfNQALu%,P-G$a8+Ba
+otmd/Z"N=9H7f$(>Q)lT".-10If?85@/ni.blRLP0DAg+pKq6%rpsbhHZGGh6N;iPkti;HT&(/57!r</
+'1,^U&?>:3Z^/8s.DJYB;NP!=NL5c]LtIF?M"WVk<FS.\gTV3s]aV@IBl%^9q*R?7rk5O*)!m=Y3!&DA
+5_"sK&`_34J'LU/7hZ-^?O-K%V=?A$%tjg><a5H6qt-eSrL<E+=Q&Z:j0"d^g(t=`@]X,dr`[<b%qpR5
+2`R+S'h?+r1X^n0R;A;IW.FYdPAUZ[hmZlpWI10QZ@,F"d^sWK]2?_[7,7)#Q8pnB<PC?oL\nUod1PhA
+[H3^-eo,API_?L"pLE)120&=1+GW!e3C\J7>bk#\lA@YPVa/b-CLs)`d_4?lm`1lSF%lb97hlpVs(0bU
+B.t[0/.6mXDA:B-DW"6?=I3`$"r7X0X<N2gGEXRr\`H;bf$/XkTeVTp[1g\%FG1/9X`f#L&A/ZB`2':A
+CWlF-Xh/PQYAZ$;p.`XRf_6tA1Q>,j*;RU>JgdsRc&m$=%mddEVKX0=([\/n4+an2g"mL5V1A=J#]3eP
+@-^$":5gMY7S;to7$g@08m$Sfj4p7Gi6'97bG%.?IG!l=5+7BeGlE.I4(KlY"7Zp.d/IpcqR>5o?Yb\<
+i;:I<_$j(X^=o8gb`:fiUgemRq$DbJgo9!unu:2[YK"ju0Gt8@ahET^Yj[ooE,8j@Ogg9"#uUsYlJjOq
+>_BGfkh;1IEk%>/TmS1,rS[UBP;a(eYSt$=^>rO2Sf?:W%iT)So9a-51<kN*e$GSj/@hX2#2MOC+k6@S
+>cb,Ipi`ZU$ot?%De5Q/)m-0r@Z5X#C#4$A)&UbKJP@`#WG0#qqGm]C-e]/',/DnP\QX4"kj,%7qF8%[
+kjGu!1)<ckb0?#@gc%$Y0)H;k4V:59*5K[/k(Q!"[g+#WM&HXpkT(K#Q'Dp(,K;C,8Z(Rm%*l>P?tS*F
+OQ-fnGZSM7`cF2HZbhH;c@'?_$Q9u@pPe[bM!H"f@:s#0@0GudaW=;Z50VU3>$h9_R<"K5O>dZ6(CX=&
+ishO<b<l!JS1"+)"6/ZPYXql@7jM5[%XUY:h)i&5"IL=i&aSl`C!I=9)b;(6*#@p+EgC2,olBZ&4CG,g
+)ik'g/b>I?hV$W@g>&bMf<2kKkD+<4c2687X,d'sM-&MR+U%>8>9[SoY<"R8]?e"_0q=@Jin#lfE#5]I
+"e0Z)l@d4himm7]h\8@@eV33.;1Af?MQL7UMI2]p`P+ok@c+A6`NcD4,F<XDb$=IoP`p>\\k9UZh62&L
+KSrp35k1k<Y>p)BmLSgpd<]'13Zcp>]]s`H^#IT#=jHSHG?$8%SJ_26nS/c&oB783keP.fJTi;oTQm<e
+'X-#tMc]cOG"[N,`%1N:`@Hpb46:YtY='6EY=(C.=/%4a/(*1lX2g6.OSpAK0_+DZ*iY^L_R9/hGj2F*
+ZriY3GctRT`e"f`^fYO`i0L_A79#R3J9FH6/*&,)"-)e5G+Puq'26go]mEUnY54aWXjP=uaKZS6]oqDf
+rB5^_gGLZ+]o?:Y!GWK6,.UjpV4AtM3#iU:ZG/$O10M'VNj+UlTBK;c>dp1]MK@UF_$6IrG4T<bY"K[i
+%3ak1?rOa1@RI[0$8AVu,jXBF8^TT1h2Rp!Qr$P\A[:G%ajl&PY/$(\[5r$1e%h6GP#M$#/TPVe!44]&
+?EbE(c?%7G:k8A"ki2hDBM"=/4DmX5YLqS:PFjR8SX'sYJ%&JgGi9=sEjS2'j]*L(kMFkg8lR^[`m7A<
+IR,$-'o)rI5$_`C,U&VJhg,CVDKp*f%ItRHlQ?h+JQ]ZBV7GQ@5f`q,3^cYC9"J;thsuH&f!#_>``+dO
+09(i4"Zn=.!=taA\n?$gDdRcJL_r`Ehm2GJURA2:R*e>QfWH:8TbXX\P.QiZE&(UNlKOM_?j5TPk#ZP<
+2]$tQr]W&`8<M9'O?-^D":jh1Mh"qtF"KKT*10qo?FGTJ0Yl;T6*4r5`E(!?*mlOkKH[Q6^;k[2:+@K'
+[#E\+=;_Z*%]I]"XB^'*62<=U@Kg^D;n*)A2F.RA39",-;U2b*#-f*ubk`(YT*FVIbAkg8"%R,"RV&5G
+B6BP-3R(jkPt=PLgSD27e2iS[Lo=Op72t/6S+GJY(E0E.Z<LsNCQcStWM)oI[j.\O:oeQR[#0^QjV\<1
+mHIZU`4(mV1eJ,],]BJN3kusglPE'Yd!.esi;EItl`2PC^2Y>+;SM/[27ph.EEY!J2RJ4a/d0r`@UpmW
+QJe]agt=:7%($%hAL]'<K?\,$S@P=FYj2D@@"u*dj3.sO'`FT6,mC@<Y7EC]'Qt2D;mV!3JUOp5p7QH_
+2j3tokSBLF2Mq]LSnI`@_!N>L@QKC#m[?nMKIBh+1UF+>-ptRac+8&Y5DmY+:W,EoX818Z,=5:n!o\J^
+^USt=D\'e%WHP<B&K8Vjh@SrhD/C3ED0&o#8!q6scV@RnnE_)d>[1Z*<X5#32n4-70chHuEZo\ZU"]/=
+<9mc"R(gjfB^4?,qP1bDBRe@SndLpe[9\ttlb&2-f3Q`jh[&)Q4!Ls&<5Q`0qP=V80$<9'>pJ/i*`HK?
+q[5"FjL;O'P&u,9qQn.s1Y'iH"P/YW@UNjK<WIP-67d(@e`Ikf><bWrf'(5[c17$G'6e*H0DGL<3Ng%b
+_\h53TQZ*8H<]jJ[c#bq`I.6j$+s2&"NRCn*'%6<Pi:4_3VL_^)X1#'Rj'#-o"5P0r:Om&"B5.U`8,72
+nrE3dQ43Xs8c0HhRj@tAF5JM<,P[-hr7TkrS\bZ3'4rB]a8(WYXFC0WX+tXYS0oooG^k[N_LB*Jn?*fV
+GWW%]]^TFspMQI-fA/C_VAWe!0:1kS]Gr0J]fRZan)^n!]QS3h\k9A[9IAr3l8`A5aqM$]n*9'BbT#@(
+N.tDg\`a0MSJ/b'c6;Zib7Sp@UY<As<U5*dX0;+!=+/Q3B&?nOa:0?+b$fGZ[:'=Y>&R7)olX@gHf#fB
+hn,7$`n#5dYZkf>;Pm%4)Z70'q>0E2m[/lrE$S4^\-]F9&#H=3?3IgVRI5!TCq^N5I^sF/PaY!+>KVff
+)+D)8+`OriQ`:0[PS`l/SH)^G78,%diS?>MF]/KWg/+<S#IDbp$7&$HU]ds#!n`1R5@s4s]+-tN>!17W
+pDsF@IW$SIjAKjc'XdiLOK+%JSE(lGV7oV:Do#$()q"jj'<*D$n<l\;Y72WZbT0]Q;'/U"4J8&iB4tWj
+)bqD)KUY)$9Q_\D\F*@'>Yjc1<*PF7PP"35b-r8b(7,n??BP)<YjDJ=8c)e8U0Dgs5.J:UI%iA3Qn%P!
+W-G1o:%!mQC-bcUE)RDr0mM)=lc%@rHlKgq>n:>?Br2@`J,$%'K44VW'oo4GV@m(kbS%dR-rkO[W6.>e
+/`<6Zc1i6`"WX#.7oVburYSY>oh@Xd7MT`,.5UUW;5nq)U-4,7[Sb=K6ptSBiV?RA3TBZ'ZS>[7[?<nc
+!$ZkJ>JL7iUWXt]]mE0>__;9]6SaVXl#peP;"<E_Z2+-O5o#*ZWs7FJK83TiL7i%t(3%(2W.2k\Fm+.-
+f`H%O%ZA^s]%jQ;+&1.\OY,L5B'*HX1k3<r"'@\PQ6QaSDF`F"C]U'HYCPh9GJ08#6jng.6%_X=.t/sY
+`\q@[F_f?Z.1b2_0jDEo#AJ9T^nL@ff`H'%?.U&-)&$Cm0tIE/_8+Pkb&DnP@#<eNOAA:7@"V])>!;%j
+)OX9Wf`DYX1Pk,&.j'^XLMQtois]HJR/t,M08'DtR47A$WtI'r"#W.2*]P*J1$7T.bO:qZ"sG=:)<WbZ
+^b*$3!=aLZ^R6[(NH'%LXX!cI4C:Qe-q-+5O2S(++o8'!#dX[S6t.d.F-rT_(s_JnQKa=LesJ&)&59c6
+nFro)0a2=Y-'[/Kg;g4K>!/I$/mQ;Lh9b#$/OIL#+0u-XDH-E=Lo#?m#eg6?@cM1d<d@+B1Tl!I&EdtA
+ZZ(=:>C_F6@GnSrjm98C!06\EU&PFJg^X>sH?aY;Wa(42)CON'ZN]!)AV<V/gPTjmC]Sa0-1$`5:nn.D
+]r-On"@7'Y*tV1H<I$sa`-f;E<6Q*h-]a'F=1AK_8)1XaPugA@4@`fM+GBON=gii?GtjLW=^L.LiKc;o
+?;Z,F*YEV!=QLanjRC8Y[K)p^A.&[,LMQuTH&1PMP:+^)O,-&_JM$YO\3snn2oM9"3)_P9JFT0GZ3;(X
+@Q\sH"]U-4P%)+4a>aQWDhru8R[q\X>6$td4#W4fj0#7t`_3e%)@Q7XJ-C==1+oBi#i)dK=SQ"aLc\+M
+BE*tt1d[IOKEkmS[K,?*K7-.S$R6@+KP>1S):JZ`R=hY%Vj#<q?6`Z>/3dc^?[1'd[XdL#-^ZL$&GaqK
+XMrl/F*]d;QB0YNNS+@C.bBb6^^`EhFmoo!m`c$o>^2/m!t1/U%oV:NYfYgA48ZS/C]X98A@@"m%_8NV
+&+8#G(52W,O"2G0W*o?7dN7?93."&0`\t;9P`El,(18?%d,,e\i5S<0B6=`=;m^?A#99?"^uQZb(QN;4
+-DW=jSfKKgRL]HH?E'%>!_`T["Z&&b*Y2)Cb2Q<a'9UC&(a!a*Z"K,3T7+!EB!q[GDp/u9Kf^BXb+[8o
+hXVjpJ2P?]P='J)3l!o3kbK1$N+;M?J);kDIfe#KW!o&\_7t=,'4jL3S=/M*lB@.p^R6\39(U7BE6IeH
+1?^cUC]XI$8;6)s1:]Ze8Xaf&X1.MQ`o]$A,nHpSF7L=P8TqF_j8APr7CI^K.UkSAO!;VRA.,Va;Z`r^
+*KP";>]V1`"Cglh)iM3o0IbAk74;-s!(U)W6MBPU)\uNe!aV70EVU?pe\KM"1GFu,7"/.P%G]YCf`J8J
+MDa5;RDf&GGu`'(E4'+E89&3]J1KeE6HZL3\9dKI.F?9S&3"q5lp&Q,d,mt:5U-3/f<7fuHg14(H]C>i
+@k+dY&GEUFe9H3K6pu5fT2gbD^rL(t[X`usoKGdt7F:4)MJ@VPM/)1``a21q+XM6\TIpWsq"KbD%]X9!
+B`b(cEn629>J,E#rPnFnhl^#m/;BNNl/3G"h#Wc!6U5IR>A_=$n^\NFqu,i=1-,6?.!)``Mn@*OVK.\:
+@6'i5bB7,hDD>iFl+5MkdTm@RNnBdqW`j1:lc"F^2H/%42m1Dp4(\k6a?oipf`DRmL;\-s/K"gM>JMi"
+C]X77H?IZDki'X.s$jU0-2#oPXQdh0%D3??K_##F2EWse/\i-Q?Tr#%R`&37Ub#Ihc&\)3Y;Qk,olA4k
+?m)d8<,@3K#q_*VL&*^l>++UtmYD^SSr<5Q$b35qq4?4=NKfEGLQ(tGX-VidX&_OGpN+kG@PaLh"DpX9
+XY38[a;3^7(>/b:<N>N%C(ZU.Q:%ZZb%*E<Lf9LPHYsLW.h0\JIJ4Yi>e"28Gkm)uj`P>tj;(_\buGd5
+SWm(18Cn+&T2SU/EL+]=3;86\mjeY5r56ZD]RO.2N;%6@V_cX<_)iV\-?CUEYlJ;:@-a/fr&QAu]l2\)
+lFZLF7-)+0/nr@0D8c%,r5MuSrThN/i-c8`QOsfLRqd$*CAmQ\IU/1JhaH'epR!Pj<7j3A$YV%fDl7gT
+%gY*!;3a)Y;VE*Y[;U$W;U##:!P3=R?eW5e&>*`T#%E?JK?jO6-Gp6o*2-RH@8U8?nbeB#DqutOTtR@?
+!&ap*J9UYtdFh[RDU6n!*R2?*R1PF-dgWJLcLj"PQ#l$1)(Nd.^P!`k.Q^;7hV<O'11R`m%d3//0YYJl
+,k32!`"/api]?j[LPYf8SD,\cgaB%ggS*E^p#"JilO=:N/cWEV++4M>bn,PYcJl5N/iD,>fM8LSc@[&`
+p.]pkI<R,0@oIXbmFM]0\ZM'9qE!l@^.#WRC]W]@]7au$k<FnFKPUZB#]Qq?jnX`/MrAifb;)s<@3W:K
+X2!1\NShqqE*3dZ"l+.A(18(m?KHA_=!5%s(IBeuL6[TZ"X"['T::PeY!Bl$Bl2IV.EaPsS\%oP*aZV5
+k1Y@J_+i4BDjLba>JMi"C]S"_;SgXTX6X#d?,=L<c0f,\qC/\^pcT&)EdNm:[K&#_Adc+BJCt"B"ILc+
+S"/.5/e_X$J6Q>*?cu66$^%m+a;.&*r[ss8"YVL7Qn@6hL*r?^=KGELfO3mM8&r?l^4T(uW_@k<j$mIc
+J@gp\UuRbFa/h1?>h#k3Mcc&g3c>ANL#qU4^$=>C_q2jJ9["8k2).TlBju+5X&_5IMO.D,C?>dNDp/u9
+e[t!Ws'Nk`n9;h&R-Q'Z":u`r_A5I<h@Q^XGK&1$PC<!4bh"K6QRE8\#ZZ/gfC4NCYk)G1o1rkClc\0#
+?Xqt"kYLb1@fL`GcP_#Hf*I#rYCh9#deF^MLV`uEnMU<&55f2-s6fY#"8@c/ihLr'EUJoHd]O\]*:USW
+m9q.,jgfELjkIQaoqk1S\XZ+!8$QA%mI-@tnWkD=0CFhEH1mba]BC_n-9Ha%_7;<EC[OSDIM]S0mj5o*
+/L,$a,dL>6X6X>Q?U%_gq2:tc9;/H7pXPMaLL]prN-m@o'.L7=Rbc"k::\ml:`4@\$D^s59<.hMeLJ5%
+Gm+Bf4O%:gn>YK^b>>^JJ`k*!!0Hcj:C@9fN.U:2iMsi9DM$L00^bel9mMg/=@uC15@B6t;L8Cl,)Fm.
+*hTCE1HfU&qKCIoIXU+@nsoA2Dr1S9,0niR*$a@"Y"Hi%6I8,n3CLOC!me)Je->F3Cl]T&#>ge7D\I''
+!^b;/lJTg47BE0j?WMGBGf7;0Yl72RNqb5bH.>YriN2]lqUm6lq;K082^WnbeEW`'A&nP,b$g`bjE/C+
+k56iUj-(6)2a1IqZiH]-.7J_6;$WjLT@t55f[MsXGPaJ9Ne]^bS%&OsI^o['k2dF?U+/69^nO$lEm!dl
+:tqZ/Y&ML.9W!0Q;se6m?LYU96$2<:[::me4Kl'O;nF<sf6Y39j8d=5?=FLdSa)4#>u1$GjdtmZ1=eBi
+a19u"bNQZaD@l`r6TN@+]f$#ne,%S*0F#j:K\mpHAk<$9IIFa>O`Ti[@H:B</nONpV]>QqFH(D*<+N'=
+HZ/qqLq@RD01"J,QMNB](B'd$B!U"g\s79icna_]#&s20pOWftEY7Fm_iO3O5+tI[3UER*miD=;Wgqk"
+I;:]87mjZ)%K"-IEpbITIK]LQF=&k$lSaE=G3K!\=/#lE,KRWt)9ONfL:,k=2CuekU#K*qo9leu!daHP
+>@8(N-6gZ-_hH&[@b[*bkH4<8Yh_l=*I%69Qlg![2]/CI^#//\cZt0,6dF'j0I1V'"BH\kJfsYh5o63&
+mOFFhj"6>:jF65_8'T62V2$$IaX^[t4>KRBW_a]^?<%hj?h(-+lp$A/Q(+?#XVR!W%&`NKpiW*+K6YpS
+HZd<.<j4J2?F?d>>lhU9\e#RZ=Bjc">JK/4^Fo&6I?XHE^0gDfA+O`">iHJIF2]Y-:?!#Q.e/C<^Z(Li
+/mbNon6#N;Lf\^iI%kk.glR/5<V]BYnYu)1_8WId7%;Dfm%n%YW_sIPn`mVEh:E/.2-s@s&pPc*#`2Wa
+/b+_#?h'"\Q[$K`8UP")YB\$kH2/"I61F^oiCdshlb#M/IP,Ss=5!X,?9NH7h't@,ST.W`,RC>!(0_Gu
+R(tL.hPgu(ilWuG3G61YIdN?p!@hPA&Hul/:MoH4jBtMT=Zf>i74sa/E&Ub`-p6GKhcZGL^;*oLj^h('
+m0ph%aYE#S\0/Fp37&?bF5!%3GEC!M#ks.#d#R2*ZfOq'&Y98@Z>/J1;&-"</?+';FV-%W\Sa,pWk`a-
+?6[@2%uk=3;d#r#1'g5.jm_$X%;_sYnO26+<Oab*)]0o7i;,<6;d^AB]84C!&d@>][KL,efJ9b8#g$Ss
+^Qo77EXIQ4\%j["5^Ya,[6>-0DZYVr-L\%Zp1MjW"iCRl"gI0\[bWrFIt4K3*-l%SngkBq=@MoG%GH<&
+dIDgZ[-cIIi.*XQ@)?.lk1NV(5dW.EAaOE-kRCo%hc'KLpAj9r+QoKI+_&#\;O3oW-?D=D]GB-d-kfN6
+-,('CXVC-3Y5(Q]>k`>G7!Q1Pn+pAlZ'5eZD`mhK#_.-c$_:VL]OGaGekB#%b&Wq[fOU3TV;*H!AA"b<
+*(`Z52Vd=flZC6$GQM!+4C7Y.N_B]gDZBTan=Aei9eG/Q?n$E-ABNbI"Q(G_Y9+j%S1:'nb+4U1hY57W
+$S7!`kU1.%8Ge,gOg$UHg%F*f6r-G`+*\>(F']tO+tgEYg]($fA?n4%6WJiLa/LdUB)<^s@$((1p_6,q
+],[a,--47;QoIdMO,l)nd-R@uh8N95M,*_9C!>SAX%[&X-k\.)K36:O7`U9FS@HNT=i7"g-B^k-4ngDt
+:HHZp5B/Y=4MW;]SF7A2j$A)0"cXo:+u+.R(K_VLBYC):^PU#C)F[fKS,W\lmbHA@rnc`"&$RgJ5_gmg
+Mu(/WcK\2aSH;-D]/^?\,R]1JbgAX<,tc'%a36DX!Sb=)%*n4l1PIX:TIN^^$SOdo=<S?XbY3CSM*78)
+(YMm@UYB>=J2&\J/'ok#F3O-"(\>iV,q*[*i)Te:,5hHOhLdtVVj/D;J$^uta0@a1)>;j1AGSLp=c4Lu
+\[t=bVomjLM"GLNhNuR77dn/'K=U;28AoFm&,,Ur7'jUl$nQ9,p3jFl7([&\#@'9>K/Wl5+lB\b;/Z5#
+j_A9V1s@cE_2^>r^Zdn+5`:^7mm2OI(sF/8Q^dMJLY('pH4S`Mh!D3k6St58k$ibrjT1[K^Dk$<oD)"j
+kWR"4r!J8!c0VRF+_Eu=%!p"V%26KjVo].LS(P,bLe8>n2%4;sdJ%oZO>Du-\QNWKGA&%b5f(G8?)Ttr
+KEgm1UYulfrc^_OM_mun_74g*oq4[CiQInr;<dR.5iGCL^<m'IB->e2m<m"`;;kmcn%f+g7T*i&ru.Fk
+:`KTHpe3D(?mDZF'$00Z;DNL-Gn1t#F0VX>`]1QLen%L2njV9blE+U8N[VR-VYB$%^LfEXFaV!HRGGcr
+CTqT]LLN[?5m+MIVEg-SKQ90<m:47402H5fF3T($+Q.(WFY,r#FW\:%HeM(`:IMX,eE`"d"/8'N]iEo#
+(A6pK(c6sdl`O$.&"_=@h6)g^\Ze0s2"+>P!YYD:*L^B'(ZDu-<A)-nO,3R*mm5^2oFBs=?<e`;4a?^&
+_@AjcX8qCW^TRl.i%4X*_MP9BY6[hGkNbf1n%gu/5_Q\RAc)Yic5!Cm+n"DO@aJe,cS0VR%Go3J:0:V)
+j5a5,jZ@`Voeh"_gppmZM_OI>T0.?/qW,J>0MGdsKAbh,Zd1#fJt+qH/jT]Mi#CYgPuV-&@IiDO7INOs
+W]>;7)C%"IU'Xl9k7;eJ=taRS@qU]C$Hd.-2Fm4%K(aD+U>km(*OR9>s4.5Z-IL%acoB'g([NilO5MMa
+H_$3X12"EF&=5kfnqJQUS_uYEJri)7dH*dr`s0(g\US/0["*T5l]C?Q74q@H$1G]4DJ*^]X.jkM)G!dU
+].>iCI6/f7(1q4=9XG%ZO4W'EhLjuUgJ,L6%^M'%(HchC-(4jTi=4MD'eW2V$^p[O+_[a^Z_)U:*k^Y[
+]a&I9jWZm^^jD.N_Z"HIhf]S%mogn1!B0\j,!s##'At'JVd@h@n`CuI6b8<./U'AL*]tRoX?f"`OuL&Z
+H^:"%_#`$?RBT,ZOPYTpJ^pC/;Ab?li,DS*EN-m5aP\1C)[4[`F>'qW[C&,Db(?^-HKq@q])ns0/FO.R
+(Z#PX4kR)2?/FWpC>Ee$NSP3%pj;SHD[Ok$)1qUUETl^$BDd%/M=Q%@R[M:A1$ktsN&2MZI[(**_-:6N
+C)AiAhLk`n8;6(He#A=>b8Lnq]3clsEYlq"'?t9Oo65D8X.TpN7`'N!At;"m:^_;6ab46B)c(\h*X%FN
+8ZDtH)W$*OF!UD]U@Ral4EE_QL1M!Ll20C%B^C_.04]"WG8+/@gc4m8r/0\&j_)gU(eHS/^T-2rrg!WS
+6#3#<_%]NipXA5(d<k@t_iF4_GAn>1Edg8=q=Q48Nu]AIRbi[:UW:^["7O'4`f".6`1Q`!C>f;J?=2N&
+K)[ebqAr7Tb=k&L2865+R%Rc`/,K09f*V6ID"Je8#`ANp&As,kfLs1L9WFN<*9i!+W_s"FeV+#lj52dZ
+fr1nkV?r@,aB:<*DXCQl$kotJ%4PROYSa+lW'c=E#bp;9*q:-L;:E2O2c8o69g%A)cCD'o3k>+,+D0oN
+#<C8c]Gr//Ug[-_`3aP21'(7N)'-:D-CX.Y.#]6l,$NQ>;UoN9=t^@2KPLK\n%f*,^U6%)iB].I9LA,9
+B>S^R246\UHgm?UbGBV<?(J?*n2'>+"12QoRt9FoEksFA6qg'26>_H6V>$W7!l'-(=Lj?j_A6:P&o$3T
+"F7Cp\>Ya`pRm*.X$gI8]fltg&<,B.b#$m>*>)T.\4Egti*Eb4pB3ju*)bA0=&o+sfrCmTiT@.G%oC1g
+@ac2-[@9K%U%LcufCdS'WtsQE^+.h1]5$;uGKV/[[nQh3M+*pO+G0TBp2u\aJ\JMlHJ^A"e(Ls7"8@(F
+YL?JlI%B4YeMknK620PAFBtC_E]q]2r:bU#^qVP(/GT7ub3Qh'*I,B-"*fS'7)R3,C*2`BgNoME^>941
+$dgp#.8>Nb3I'cD4dWNci>lSq1m-Z<O/K^PF5$L\0J"Fm3&]@=aOtmlF83=F%XiE07_2+Y6(>J$]E`ec
+eD'4=pl9#VM9oAd*F[.]H4S`?8#NWsP&J@)R@p2gPZ^t.7.Zb#h44Rn]8ACP*dY:8_P4O]r;1:7L2Id\
+d,'t1i7SOMLmX6_/Au(3;7k+DlSp=Xrpm6oZO?E>q$`qbQg8X-?B1.(\V)AP)KU><TftLF\fMfTlYabb
+N8B1,c<!8m0>Rn=q%A)9_J'?!3^<)k@<XuH"(iR'4o<Ij:i?8Z\+\p0mba@sJ)1#%J(T+3ABB!795sl3
+@2lE^p<>X-(m6+:.B1.irD-(;F3n/l1QQL!.hU)A+2%nUa\.42fDu5D?;r3KJN"F2f*@JND`X;@`cbeX
+&K73_F1kOi9/O;\]r,tZgiI\oR+6-hmHNphkdnOBaZXt]:*B$*9T2Vt6@'0V0d)S$_t/KJR.S:j,-qBI
+>'isOK)k@+>9rDq(oiDKK9<=nK+i5Kr9ueJ+!<T4pgO\Z.No0eK=5K?NJCkU5!)#1CbM6LL:NYMr&SJm
+*V&dA5aB-FP6WHq]a$n2d!IIpFl-SAfT'>p/rQ@4W.r2q:t>%BZ<tM)29)MKSpCp9&tnu,-inW)RM):f
+TM9HQ%u(^ipL'dU/8p`./_(&7pGf*gg$V%Y&Hh/XL0=3k'UG<#e9b#un<he"dlOZqGf$\1Vr!%e'e&r9
+;<U.['8bRuOffI;'7illdsI1a2dp,Zd0s@hUqooJc?C?Hd?s8`(ah%NfV+/IJoRl4L)moXM]^36@>?df
+&'"/-q:U7E&,p.#B=!r&6QI''5rPVq/B\:9ZMYm7_:e8*H]X1kL&1Erqdd&QFa>Pc2:`07B`3;453h]o
+]E]n1E2X073hu\gp!4]$hLiADo=_CN?Wt3Vr2-b!W;#6MUe\\jffpOK)eWC^-Nnr"0m9P=d+^B:0+"V%
+EI\'$P&Clo@*MqYn&<^LdM]mc>cd\S=/CKpP3K4/eW97':/<@gYN"(7D^%d`e?l<ESQ_RpEt#Hb>JnSM
+"#hV+7d9jsDuY^^f<ULegaA_mHf#UtKPg=&ZlHot>V^_S\8=c3iX"ep+kOG:KgiQ4B&Z=&7)/0dbmYE_
+b<Tj2#5\o5-m@j&%R^NW!&2:_nj@sdVPMJ-1@C%l>B!G[IA^%1*d@YI78#Sh5qG1,,r.N5N"12XbMD,I
+^s\!"%e/doG\-RG1FZJVI7t$Z`3sqP>)k:4/t$,jW[>8B`r[4<K9;K\!=W,p3?u%;2seM\77f7hp'kqY
+`KoM9!DEEqaR[.a`>f@p$iF-Nj.dt7h;D"h[Ft?%HLe-K6(9q?"QK2_+$C%AX^IufI]ri`S;4e[Iq_!U
+2h]J9q52O&J7)nHQ`BF><MMk'D=N`k]"U\@1@k+Cn;,&pR9!_O6YioCY#T^9@n84EAh:jQ0Zc&RJ]W&N
+i:,-^fPM[i^IjH2/TM[1"nH&@61T\#F3`8$L.+&Qp'$no)sP3H#)53\dndtU+6LXY?g$1&eSX<1@<J3N
+f05)6lKS3*fYH;>iauYe!oFe$IR$W@aGQsCpOfi5-A-0AghaNdmZOiY7j.K9P$G?K)4c-6KVt0f5D'R>
+AiEu?^GCUN1cuXp+t%(lfh!7^G/NO=D/YO411t.l\Fn.oBXLk\>ots7*b2^qGUOi_a_j"62X@fDh9fIB
+*i*#tZgJiD[sHjLdMj]@3#K#He23)Zr`kG/F*`B]Xn9&7AJjcF(Ym^7R1H!q<K047l=D`FB@am&ofE91
+LTeeiad<i;DJQa1T=qjGZ>a^MMBfm^rN-95XrC%uVHFh_i3$4+LT7TNJ[n49ZE<(Ap"PFCXq,ii5uDWC
+YYM:1O0ST"r6F&,HSl<d>IhG9lFc'0.tJ%UCp+VX+h>9i"mN,Vin]kY8)RitqEY($HNh'7[(TYl`[8J?
+Q?DE6Up'('i:`&=D0s7M@sc1ug\-MIZgAFl*nr3Rc-pr8aR']g'AG$0cF-f=X)5$gpXidi_m`^5J_R5N
+m=@Q9"u'91p.DQbe+RNj$mFLlXb'bmhd.n93M,*s^<#[V!".0JC3@/hEp6pOK=Eu!_0Kk#N5=nHjlZ8o
+V8r:e?aoD;lXnm!eigHCCg0LbBmW:j`:f(OZgF"eE,Mjq!r2KS0d?tLcu"nJ\."e<pS3U7aC-5D^9Z&K
+D@1d^HCQJ[78BptD*Q,+Z(]99Yk=t]CUJSFFMQISI,bQg!@Jj8W(EK^k-f6`\9%34B"Lq-g"C>:4?ZYg
+_rbMaP^'S<:LAtF5)c&;TMZf:@ruT*R1;*OqO&2'A?D(,L;$**Tis$^?&90L6L.C:[mTI*5.YOcg%!oc
+2)Oh9)JX"^1tp@mh+F`C,$UoXH%.^gmVO?3B>a"`9^FWr*$/CWN/e'h/p'%'\)g/ASa:@k"J-eBLVj8J
+(g4Kf,BFADj6OO[jh[l:hn-nG.)WU]DPYqk=P-?Jq[B3;:CE723#k\634>!uLM`_77;7gg*c?>qEs<+?
+@fd"4@DB7Jaf[qS&WpnH-k!%I8ZGXWML*Zs4o`<kpC[M'j7/1c%LP!%,nc*JV=\MhfGFkt>u>G813bM6
+`m2R]hWUQkT$b(fQCoc&\Nb^$'F!D&N'W"KF>9EE3of`?^/B;?hQoT)K?Ae:JMENQCT-uRUee>!5].G*
+,5<1.IaFb5T[#CdR,pVOs#CtKdP4^P"TU?ud1!!o9MC*D]e8m]5OWF2Tcj[,XsX:A(DmL874\l7/GY3\
+EYon16>,'9.\8STIm5E34okU!jS#3AlICK.?:,J$$P2?@iuB`b*=DjsUH^Y#A"];risaRXGl!(+LFK\:
+djE2/02"Mtg$$?GSWX5CR1>]P'u\?#E&^hADj6kI1rb,XVnH"<>5V&)(=#Xh/g4>3dh4IHJ6D`a'qFA,
+YT9);o\jaXA&.Gb(!Ap=/*TnCJme]D2\t"26!p]p<r.?d)2R31W9X\q)%JRYldn1l9j=[5d!!*nl&8<M
+I"=AD4@g.9[[241gicVNS]L)UECM,0alZH_5B"&@WB'[]R@2]d1A-;FGuA#%@R[lc2bjQ,V\L&6j5=te
+Pp[oACV,A),5+R:X]^A:FPhP7pCPrOjHY*,]BgXBTH(O_VEaj[=(#MPT1[>UD6a<il@DY6[cuL#KLO;e
+'cEGH9+@]eoq$k&#NJNCP;+8IporrYAaZ7>+<DXY'Inl.Ri"kY-e_sV4Y"_kD46`F"g)sk4/?f]S1Ca;
+?6kkPF5,gD2kOd<`mMQ[J7GD4Plq1aa4k6)0&;Tfp3"YZWuH\f=P]n6R5DVo7saKu<$3(9`;b?1WAJ?[
+3j3t7q+'&<"e$MR\^>62[Wn9j\@dG]m."d+q:)&H<qW=ugO/>ngVP;WolJkaM3\W!%STA]*GA[dkiI.7
+=l+/kJnKf="+MQ/,E-(0G3oK)0/Ka&iZJF"H=o&bf$.eelQ06&c(l-%neG?$:#",.WKr\\/O9@!cB#Bs
+Lo^c[LA'_Eq9R"KCDF*0n%W8O5fR>FQ;>MnpJGB:N5EM`\;ZKoM^'.pMsE/gVs=)(lscb&.U`(8o)f`e
+Jk.s8A%7Q(0/u=hYFP\9H!V@%lp/24Y@_+"Ki>f6O9;]#$r5_SCG(*cAep2IZ(GAW6E&-!ak1^rH1hq/
+>fFKK-ALBKO(-4%P2KSjB3:I)m%TW,([F=l`]0he/^"BO=YrUP>@eFaUDs[E.`cYc>Xr9(?b=T0\p(].
+QI:\JEm:CKQ+)l>08"i.e''rl]f@\\4T=p1+D]l/DH)-eG?9l;5L\T)mC?<PZg#dP?Bp8cNZKRubt4u5
+ZL'C#`n]/9A`j2[bdN^#B.3%(\VAmhjK=#6q2#XMUk[$FR3!TSQ&2!R@U9XXfNCRSA/S4j`-=$mRR79Z
+W9'n.[F/=]oBW9H=Z9::ef7c[j[(%D]b]C-13Y<0p3>h@54bu0C3r^XRuq$$A$Bg9Rk;+t>r)>h9CA8>
+KNtk=Iiu$Rm!jb9&H5?3S"]5d:&S-%\:Qf;e%NX:lAYk.G4:hDD]uL9b.psh#n"5R:RWR#Mc?G^-+?T8
+R`iMBVI?Vf(bo$D5p(a9O?U14g)u`GqXa%!A"%j`0MDEOaiYS6<M&U?8hh:bPtBlm(EX[IIt`W#mu5Ve
+`OkcanAj'K+%kCo2Yp8@EE*rWdc7>3!r'Aij:cT1V4/Q.-*m<Z.6ZPY[;RF9WHO=GN#<.*5+LQHoGhcK
+H8$Oa]X]!+n[I>6&8X&2)m.As1]PGU*J6(iEJGglZ7k#qB?&q2V3bUeB[>!g?ppfTO^UYnphhc0J2R=D
+0I"\M)%f@!`G!Bn7kg*%,-Qb(F,#6JFL6'%-p_J&MnJ]/_.'YaD<AIHLhpH$)N;bGd:4jSSdmE<?0F$G
+Vor0+bPcqOSnD=qBE3Wn*I=E@gjGPdN(lgD/@u.G#l69lLu<:@.n]VJPf2d!oJ#V>FSr#RQ53RbO>gQ8
+J.MY8?po22+S+NG[&\hQ!(OoUTknpq5G8,b=q!4&Le&''X[nJ3bP\i>XT!9P*5l,+N(=jMU2"#qnDVa1
+-q(e2bOi4+PQ]1aQ#U02VggiH*:gpZlpK1W!dDpDo<OT'-moCeQant:lF@lsf;&WfD@o0T3/TYOVZTD!
+:&9nO7V#6f0*@0SRRA14;R@c*97RqdVMFsl@sC+M/7fH;P<mFS^s<ji"s^ECo%[0s%lOVG,0M*4@#DQ?
+mN5h)4<8?1CVVZ\5$/G:R9]t5&IDPX;9)&NH/(Vl7$c[1,T)Z?\#3S_3@;coA)[YCZ@"?J^RH+-_9m5N
+D<$g6,,.oh_2#q],'"E[Q,1Gj0_._5#`Ma#R(\e3(g'#=phhc0]6G;WcL'j>_H*78JG<65TcQcpTQr:t
++@H\7A@PGfb6Of1-gRP**\\e;o>la%![br8,Pm:#4rD[mA6A!q7`7A!Q\qd6>S@mMpY:&0"A,/>$Dl#m
+,Pm:#JcQ]#lTE%?=Q^8c,W^u?,1_$mpor%"dQ>bl+V:<$Hnn$ebjrT+cHABDJ.WC,F#&]qRLJV;/b%aC
+JhSClYJl?VJPZL,%7Z"cc<s%*lH_2A4<6+"CGIRY?pp;@j;X'!>4dinN*)!%<[9W]UlCN5#cJmgN$KX6
+n\LSQ!ZlZ^)Uo'c3$\b&:!8)c._CDE.dOV,FE*^\2&MI?Y'VK':B_St2;AuQ0HqR\R@V<PDSh2Po#$O_
+hL31q/@@$"0Hs0W=h_[R?s$)O%_P(TQH"JIhuLQK+TD"WK+[(RB.tOD/fK\)VfQ35>:RLG?pNr%nc#tI
+2.eNcCGNgialPc.c7k?C%<@T\<H#E6/f/O!Vu^#>1>EATLb(on1Dg_]GoM^`1:R\,LqH8G'cD9uBJ:Xr
+E:a5ZA.`n5aQoR@`aMA:BTUMibmV_4$>^+mm,&7AKUXoQ&b4,:2:g4W,I2T]65YjPi6m8jn^7F_,$R^'
+([CG`cS%6(GTnJnaKeqAE6R%Cb@O32@`Y>2)6-?5/<RXQ,N?=\K+[Wq^kcg$@hM66+#?c&07(iO*c&sa
+&(4'oL>dkdXA,0"nK"E6@fSu/*KO@+>Jn@-_rJp$p3]1DO`g"NMD-5ie#FC^i[N&Y6nmaOl4$5EcS'D&
+IZfA7224Pha(*qoT"@k524m`B6&+Q#Dph]h=-GfeY.uT/@FeM!k$)9#hFt`pq?CtE3]Wg!=$9qZr&!aK
+a7(EjM!sr+@>A45il>O^_[b#t,EaC"rp8No&_Z@7>S"jCch26(9BZ0;hUDCVN3C8FrTY,(3l^(RL)2=I
+_iHPa;#'ATZO[lb?p?"U&O:nsrT.u7k7Y<-?l4KgbbJ&@)97F77cVfJ51t0[';Z"uLCkC[SrP0[L6j`i
+%uIY+#Jm9Slm;'/DBYGi8[Il)L)O5`DOn[OqX'=+Lp%JFh<IJFA?3<E.U1Xi*A&Y3Z:X0g5P%3^GL2Bm
+EYT&2^U`,#0E37XiXY9L*jtFoW>>rj7DqWI&\4*k1Bo(E-QA!Bhjq]g!0"uV4(s6YnT;R&gqd+a30W48
+gJe7VJUd36K*f((pR>]8";uoTVoX9=@6sr=Ec/I9W#3('UI#4=i?8i2-m3fC+^3CE@753t_npR2efF`Y
+,R;P5QR`ZgT/5JX?%G;1?poCl(7u8YJ/h*Ca%g+`Xm\Xu\K&"5OWc82)GsA!gFuB"qX(`_-&dY>>/H*J
+W+=^oe.Se!e$5sgK0U:SqRE(eE<ZOi?Y?r4.5@ifP?rHC'S+k?m_YpXgQ]Tq9ToNT_>bR!1V#^1rp5MP
+(MAEdYeDKHLQ*8TIDj2N&BM],ZGD4L65UB!d2Xn[K;^$hmDK5pkt/>Y]$2/Ec/t75L!MbGFnhI/OGD.B
+37B7'"!A0P3ak@VDFVW",(j`BDJM7*:NI"QGKHOr0%VZK#E6aOQo57?j@l0"%5m4!JK<QJAGKd"E3pi,
+UbF>:2+5.b/kN`e!t)2);P7&0:`J6nJ29_Z!2pB'a(>ptq[W7<LL'6Y#R#4p@7"l'Mhq>!aMoX0/94Ao
+lmNl)jc@1SlYt/@\p4gZm\0=+2GZid)+2:ej+3jtEq$ne\Xpu=Gj`c\N!Pl9?pm[A&IcSL'#?>42'nWE
+X`oHP\:_:6JDpQC4a0gc>\Q=0CVAgp+6E:LIG>[8.7q#@1^;5VT">PN-8`.=CQHj+XIJOPC0RFp:$k*?
+UZJ'dP"DKKEqXXue`rI^rdYSHJ:X='`]\K_O?9]p!s7.<4>5oY:-]"^AB0bnOM2`b]<<.1%7VUP8J"A0
+e)?K:AAZ^+_[hj!G;NSON6%iD3Di/:f6I(ek-G.8ggBO>dr=8@LgM7Z$$g(L"%F;No!fG>*9NZl":Rc<
+dpX#8l.s-"(bRW2bXL22glU8-.!tj"h!\Zf>>>UOj+H=&_2,T60GkBO!J;!C,W?PP<rrRNiott*3J[%\
+eHVbeRKne-"o>K4`4/'n@J53`\^f#2J.]?2O(f'hIGqR=:Dc"Yi6@#_/Dgn+KG2=47!p0rN/4CL3mi$/
+>o0n-@;UDJJ7_(c/hN>Rol1S'H,,728^&&qBJS'K5?9e^%UPI?O(Q\A_jeJuq!meJg&G8a7,AEa*C4@i
+CF/9OXt%PT[=,+Sd2:Jq3+Q8Og(;8X1M9jTUu)+,@/T3VEC/r/E'e;%aNmd_Bg8G=W'LEaIK`)VL@;S^
+r//8D"Q1BtidX.I`il4tARD6\eS(B[.BpU3]]^Lu0jmO)N/"In]Lg7$CQ7l190#USRkHFD^!6D3ro^*T
+pO;YIPqq/tWpY"BC[O%_)0W(gEtZpP)#"Rb:I%c`-iK<V>,CSE59a[)(2[CN4PRMbmee4Ws'9"0cefZ#
+]["%S[JbCM&_rj_n^X't!h$2miJKu$di!Kc=XCcpj']bc'[1S>RXMuHOJE^.%DBM%6VO)+c3qhBL8*C(
+EDA.4Y7+Iq.ku#2B5o[NA9m1t8BS@P'd?$2Y8+JShI'Y74PKhq'1W<49TMDq,P2@mOse$<e#OS`Z1^#0
+11D!T)4os':4Hmus#H/^#rhgOHY"$4RPCZ?kYI1D-k(MeRX4'DU`-nL,!/uMJ)&ZP[F#c0U.=\UM9,>S
+1f%#!hIU%-l,/BWQ^ss:L[q^haRo?"-1aSVZPLsq,&a8Ip`cIK4@M!6_0NA/RATCQ/mkg@r%)ukSKC5T
+60ceD2GZidCM2H"@YIg.@mY2;<IV]n>V/tVj^'2*2At<nf-J71`hg0:Oj=L2V&i:OdB%M&-j)*pH;[iL
+m_<j.]E3<Ue_$A?e[g03/-.j[C1Gn>^!;f+l:F<KpP'#YhcE@GNZ_iL;jOu;`&WUL(H7`Df1X03JTWI`
+mjG1u82bVPoI>VG+bpM(UmdXY*\i>QGB?6h7Gi/U&8GW?=C&'kIO<&m#GemQh02=k[]sD0:PR`EP>S>8
+bdEib!-VaXjt,h*35>kg%qeheE^COfK<Jj^r`l!2,/$5GMr)$67ZmBTS`04HFHo4S:OVrc%R!*YO6:0b
+"p/=QMhJsq"1=b.LNT$:c,Lgj*b1CNo5q@P%_D@#1=`#O.(MB8=j"-q!b(08AH1p(+.MjX)!00V>jn4P
+(lONk]?>r7h-Hj9=T8T-Uh@*7-W-&XF#Bd)o\=UCnT>nLl]kb'S`@`T`o_MI(k_5Vb[#e)DP]io&q4-)
+5sOWD@6lE;mND2cBUbopjdmES8YndprcJS%lB^O,\*=Dk;f/Os&bBU./3rZ_WfQdJ`hh#I7NEg]T*NI'
+%_NNNmdteTdF6nT[Q(6NmqAJm2lnGKjpU[(<[H(a=5OC#AJA$`=TAdRMcU+Ae@HhA58hu^eQ0ZpUW`F1
+7e7K_J*N%&joBfhJ%UJP`r(FXY0T<,kGHo=.'?+5(c"MQJOd"nqm[m;?)X=:Nu`-/ao0O/Tf*k>>X.*`
+oGJ[X?q^uu7V1;![W@0@LMH&7o*\%/Z0SptA4.41lj&08<CbQ!V,'0LX%)d?4\A1kLKQeXQ6d@%%F*%Q
+m2ia+N+a??Hn^rLDn,uJ]fX`a2Y4\t/aP]krqTp0*W=mqSCbQkcT,q,S@:lHJ,NQts!X&tlKYtmi3$U<
+"_/IgZ@">Wb9''V?%&tQrdj`KL#\-^CPHEB8@DC"2g2kl[f<LI+*IBH8@FapJ@gP\ST0,9qIbk",hq,,
+q;0bb0<JS;Iacr!'Zp&u;Q&FFm%6bQh&6lS9a/.,j?Ur%M3+Bf.bU'ilCt;:2>%e89:jpU(1l]amjMG6
+P!n=m_oNq0'H]3/lVUhX="oE)p6obt6uu4)d92a.>P4a7L"DuKUli]VPE!CDeBC'h9?PZb4G@-$">JDD
+n8-(TKDb8+\'<CLo$Ib/$-<T?MG\DK^I>[o$m=Up/.A[;QGlb2%$RW9qM$XKJ8L3^AAW9ZW3a8pfBo?"
+PUjRWY&:'7]U<StY5P9;D32B&1>P@K^sEbh;+K4q2KguJ7RrPKYe.t>q-_.hV`>CCf-d6q=LVERg/I8H
+OrY]_o5q?e<d6/o1:,]%UZ<clK5?&S@^pF['FU-"Qk@u4CrMqZ<l'EU0rCYkDN)4=L?ob^cXE,8`\oW/
+(Ln^.Dm`[[&nnLT&!@bO>#2OpQ3&e6RZ-500J[$B/gL&PlGX\+HCZ4ukp6SIkS=_Wo\SQlrb62=//AKN
+!M5:5f-2.b(FhZ]OaA97Lm9Rt/0\iglP"0K<]AJ7XF"Ui[a!:Ko%@Hg9$'=erV4P^2]M96+]j4+S)<'`
+POPOkrT]U>'+CF*)h9AANtXi4ia'\]5u;SAi)2E?/Ujg7&(Hi+/hF%h+h0(D:KWQXl([dD3?."jIIk$E
+@_6HK4,-&&0gm8"l.)6cf&oj]IG;8."^e4*Wm+7'(5#;'-c=Ymgtm(9Sg8rl]AudIQYVmK\cPpEo)4TX
+=YaIC^fTG1%)#BX$j9Akn:lam9_+RE!aIsCU%1/5,2PnQm65uJH,58sM82$k!HligkKklOl)&l2[ruh:
+/60ck]dhI`pF>'sQcIgJI]^4B2M`^&"k9`GMii/rg/E<aA$D7o#gA$SGd%(Y@%ccd\sf37A_a^:?\4qW
+2Fd=tWe4*eoRiYKq8$b<'JG_d0mctl$TY\_hAE0$&'K%G%4303NhsNT8[GK%<FP,"F%c7k\BEu3;!b?/
+@PTArNt'[_gj/8WqX%`8<7=IOIVZsu8dl_!?arEalPGMAd;)h+:"GMjZLG1B%"=LmQZH?nfQG]g]gYD<
+LKQeXQ6d?J*Z)@hAUHYT@pinTar>t9ra4I!PaVctbGPmsTRgVl;[jjY;uVJW3d`]W4c#U'a`'WTJI]:/
+!R7=U\61P@,#b?iA0e.J/K]r,4&)8?<&F`kW*Mr2A,"Y/[KE"D8QVrM2?8g=h?6!D40W%qA0&<D)!Pe+
+$rd&I4__[LdR?e@!=W>-"N4j,Aqcgah*M$*@ijkR4"SRWV?sg*Xd=;3FcAfIFX%cH2[8$Vgt$M3*g5L6
+?#o*Wf.?Y<O06j#dnc2^I;bt/<XX7%<Jt_J7Xh[(MOidc?5q7S#>3UhB[/:`]82-j=tJhfI5]P^r;(5S
+<b1#[TikI,_NU'<klB;bB%qBN]J`4C]g84[lb,SKZ>Lr:0Hu-d@r?'B9+T/6lR"XCc/kDU:/J-H/[Ff4
+IjTn#(Z7K)11IODb9t2oS/5\5-)]V?G-\.(H<P>=cPKi,>"NLgP4FPC4jZ%LH_b_4`iX2YgUX[kDKr.g
+X`RL^"lF!W9V[@ODUb*/p-(#j[e]j4*<TD&mfCp$%M<NHV,omFSf<iL,75`07i9D!%QKNpFO7JVHWu*1
+NO5+UC6@qRg$4HL]-i/s8=NcJ=_\HDTF8p[grqO_D.]iL!cDWGFkb-GDDo(/GMC?AYkgr_^7],+];aUt
+._Sh\A,>k!9oY^+aQVi&9!T&>NCm)QcI,'8r45I[F\?`a\J%PM@:t($BDF>#ZdAQJj+7-M.+Aa\h,pAE
+f*u+[2k'rfdt\M5-kWAePuY:`_4*JTb0S8=F,d%)!#>1$@Vm,YS]'5CqV!\B6UU4tcpE0QLWbQSQ*q^Q
+BSP;E2@`%_nh16SRL#qa3NVJ`5V:S?`Yq.tnqjaiFI"G.>&@&co]AYG*I/YiDe=H''hphZ`I/+iN$Ql^
+-KF#9Z4?(dH7`4TF"Nm3Q)CqL874O8,ZHqL,UFQ](+%B0.-J.a`jM5$/s:nq)MEdM'BAr_2U"/O'Z!Pj
+@lTGQUJnU+Z1SB&e4EO#Q.PKo<7s9nE*ClK[:#/9L>E]ch'p%kiI4T?$aO!kHLC9Y>L@KqqGrZ,[6`:i
+NS8%Si<!XqU9o?nDAp&tOV(5#Z[=H9L\rfZG-tA!HGu';>Hc\e/+"#6't^n?^A0FZC`Y?A4e5t,bIqhQ
+ngpQ_;"OM9N-;%oS:l&S`cn._/_n?n-eaiIbn5A7.G\r[VAlOsV^?Gqs.V:bJ)8SqCTa%1gDE,\@TKcd
+Lq06c#s%7X.`2;J%l?bomcj!f.AV5Zb/O+HL7SIR.q+D.c&e*am^G@#k!)p:VrPltFrB\)rV/0'2IglU
+.3FM6(`eTjN*tSK&_;YL=-C<NCU>LuNE^+k>mWM>,>kIfVmuCGV^pJd<bK9T[6T=ci.6T_p&NoSjW\.i
+6?A7EJ$+ahcE\E12L8n^^g3Ok*\]XGTGJkYM)MbrOj>)a+Yti4jGdRXV.u&:A2W;LWoO,hkHGrrG,=r8
+^+0IL.-c/<jD^?!/5K?S.j68FHT>+D>;o[\FjK'$bJWcO\!"=fC9jn=?(jKoU0Yn=4iDpc*KA-5hhcM&
+jRV$(lk+8nBNIg[\Ca8SgKR:*dFBlAZ,DZK=.d$<%jR$]^;[T?60E6[dB8dcrQKq<V=d@U!$1_?7`?T?
+AGKV,L20Qnpo.Rn(5j;a9jnk?d^A'#^7HH/]i]Em=Y+$ccm&%c1OSn"Q=)+?%N4/\G,<ZQ*mU;1%!`>i
+X-d5t1M"p6hFY_I2hh\Ci)[U#\54d#3s-Mpp"iUbm4*<$(oa^g$g\[gkUU9@?ps0<".c?'=4)9q"\.[c
+->ZBE\aqlEEcbWor76.(6shZA0Q;#HSHlMPml[7KV9USj&F;M%;0h=.aj)\3#\7?NIP=*ebjs%MSX4[Q
+UL!+`XU4Ae'bTu#<#+m>"LK\]"^N/a^.B1_l+OZs,MEl(rAc6fV;iI-:F=tUG,6\@h,t]hhP=MbcA7K,
+,087"kC#Sk82&>=_$Co5b6Poc7"BHW)kkP<U<802[KHCRU?r'M8lb83"P.S;l/Ha1@%^feFBqfQXRC[_
+[2^u^BNN>9hkIFaHY6h_e3MhShKq2V?-.#&8SD2r)qt2lm7K/HJVF8FdHS&Y?olBWKYSq*(N8thO(_V"
+/e[P$d^_$2m[Q8F%1)nmXS-k7;sa,g;BOt=5>a0OZ$A7K6W."!DNFLXMg3:1(Cp2N`Lrjb^lBST\T>ND
+SN"s!FH]$Uc]'O!%>Win'b]n+(mBEG(HW[$di(5P<7S?T@7O:1O@fK/L#q8S-<'TRrgd_([Ws+O<G_*9
+Z'ISY^#gn"d&qJgaIcDCCa+#d^0/u,*Hj)b?Ms!<2pbo>9IRhOLYn!C\!&kq@rkf!/-f<-^4$#V[&_j(
+'C@9t4%9YggjsXfO-urN*)qN"EG[`%6!ENuBIp<<2"3$Gr50_.!UWJrS#*1JVaW2aY4NDBY[\LsSJ,s/
+B+2G%S#GQI!OOA;3Jr-8dJ<AASU$hQc0pWhh:6g;,?sS*p#`Jg#:^">g3A$gIDp=do\"0e7T$:hY@,QB
+!4bM0daANC1q0<No-nc]7_=Q,YVYY(8oUi`k9n9ocrG'JG(q$1M0>.3HN*9g5eC34^7FT+q#.c&.WAoZ
+f=uF9@8uh7f0"]%fL>Ocknnn/+!dD^r1M@kL95uecXsO7q9A:5m7MhK$*"Can-_l>@Q#etjng4nc?*;n
+?k!&4iff!b2,TebGo2Yuj6;F[V54D<Pr,JY6*MeJ#&(HdTWSNF1MHKn7/4"An=]:!0CSf6FceEPjB=Jc
+a7[$-[$/m/l.U/(Vb:Wgib)S_S<hHadAp/3ec8j9b$7/%%9/)<M5/W;j:,EoPbhnH9W+q%GKAs6$;q)e
+XU9(Z,(./V-^&<CW$u$"Y4Q5Cc_T8QLKp,imY.2:dB&!X0Pi&1,KMQdC?C7H'%*k(&GY?S`Q11^'fsD?
+&!;`m7?U^kU.%4NTl?5A$<]l-b5p:,.2U!`,HP9Zgsco<AsNJ&`'G;T=#"HJcNuoMb>$/c[%SXLe\X*:
+SS2%bC<qMh@?GPcmEXL;I.5Rfm<jJ.jeET)=$A*2pG?W9-l)!XX4Q-[VpagVl,H'&.fDEWji7!8>V6lX
+FUpr!n0q%=`Q#@7QQL?hVD-,cDD'Orgn.k,m,G*Cl`oo02ru9>([*TZJ6/QlO*FY.qW-F"7WZY\_uaFd
++D%kN/6i(acC4USlK301]#*VM&>`j]'q;Hcn>NY,;(i"N3\T*eDFVW",(ja=gh\uCcZ9R[=Y@5m`GKY?
+EmJE#$TjZHM:$Qc-b.\36Zj.cPEFrCN+0#P5\8AdO"a!),0/BI5VH+Z;#6f!4i.oXOa98iGB+4m$WNqf
+B$n"-n>N]!QJF*NATQ2EXCO*=7DsXKA7I/kQFU'LSL`f_^[19EQp.TUoRPLUBg&gTd^A19F!d</,8Um3
+"8OUtYU]M,Yc"6P1YNS5o.r,"Q[mcMH3os6Bf-(VPHT0qKG"nWH.A4q=hX!99%WCPa;nHf>B@sWYC$4F
+2^b^X&u5$o5]\/\\sL.Zjhi.E%mf#<03-a>%<$"M.D8%@QFknkbY"eom-?:f]"br#4el9hCYaYe--^#f
+1SA$e0d)S$_t/KJQj,AVdLM@rZ(eiF*e1f*)W-Bp'rm('=-9X<$;(dmr+]ZSeM#"I0'bd7&lO][03+..
+6^".,S;ko8.@HNG)WkA'o';gRc&nh5(^@7p[SLq<?%in6g/Xq!g6JXG*l2r'(-ck;%:<AQE86eFaCB4i
+N3Vjp$a_E_!^sX-,s\gf;Z]A!Z:RfuX&&jc]8C]TaBuT\&a`1Lr7`O0Cj-u=B^pV>LKR*Y&ls4,oR^Ym
+NbJq`Xn18!-OcJgYc3ac;>+^u&FCqo'%*j+?.#f32_j$4[G%+SYb,UA.6&G/YB2be]8qk`9LcXOPF+/m
+cpViR3*&&W%UR?l7l)g9%W=bIMW<OaZi@M-?2Y(26U>(,Gi+)Bjc!K(_(6Z:cgmu=%F9<@2*>fkFh9]i
+$aP.64NkXmcjTQeSnDQ.p$ZbpW669'25E(Hq_#g&N7>:sej"NBiG+_u45V"SnYPnO`pXiC&%`bZpN?=L
+ci.W[_n!!$Bg`WBL#6q8.La!bRsLVYj<du#_9[t.1)8A>(meo!H73%:'Y2;uCfOZoD)$J'/\6Ci!'#:b
+)0Qb0#4=Z9eeN0EO9N/ATkX;HK`@Q4ek*o?L5htb1ST!=L3slUf1!Y2_RNQY>QC;`Ye:I9&oEPKD7M8#
+_^2'.&ckh;jTj"ab#L['K#/Pl[8:#OYa7/lE/8nHZ,G%A>!CQ'X:F,DYS/flRG2SdJ?(t",Daf=4-@77
+n)FU?_86JPn7#Xmc[.njkp95#A97ql$mCM`6E3g/9&IUY3:ZZI\lYaL*<qVl`>-cSX;J;rdWr/akTEE.
+"($a'Ti[V'o!AGS@A@KLTN`h0a,IfK4nU.+MEH-g1kn$9$`]%)/)D+h0HdH^B))VjRWmc0@uJHR_Md^m
+(Dqo&*$8A1MT,O55j8ZH%Mt;9)_!uf?`=e)j5:Vqn8<p;o"&rdC<#t\F?t5l?F=@MRK&O,3^@.*pE3#K
+`eD=7(bGHnaES<RVlcaP$4:jVJ[S!n`>'X>Z7-Zk-qZtt7j\]dOK4H]LZHjNNlT$Ve].TjG$1XO?aJbk
+TKnX`AfIr@+>l=-n,<J/L)T<n$H=B6P3/XfZBa:k*8J9R[i)7$^a[1dmbsgOZ1_=HD35bYEa!bh03*Cj
+>qliS[ND;f1`:,!j^u]<oT0KrDN\Mc9WhOd5Kos;@NZ7p"H50UL_fU(:dat)6Tr^\`_c(?Ci3g#%!jN:
+5IR,JaC_$9_,.la/%lV+W^HB'6sj&K$=bi^g1Ra0jk1[!<?^=Lc:%+58S8j$a*p47XsV>D[)9.7XJ"jS
+rk)E`UfZ?2%&i\nXYQA?/IG!Gprk\HQ:od'P;E\$AYbp^Yg.T.kk;h5[FY0h@p!F5;6_M/lp]E<TA'Vb
+SE<!Z-bF7Mq+u,@IA'<&ATZ-J9-6.Ae%L8#G%-o^pWu>p2^g.n%TXda4iT+/F4]XK\gmcD6dnR_A:,\X
+hk9V!PP?(Aaf+f"kDbV1n?X2FITAV1GXm36S9p`+apn]Pa*3X,KAfsRZ0oGA`OZ;L0t)50Abf`D#NNR`
++nZU!Y5I3M`bur(G8nl4_7Qg^f\l]H"con(]3Q+bn#MW5&N4mCq$\4TRi.qb5FW+][?R'fWQFp16Y[cC
+f\kT0\:TIb_FS*fKhPp-V%o&q_:ksr)_>M,)_C%pCp5`WKaeeQKafBNLGogWVs?F7O=>"MPl:q-/;t9$
+=R)Kp##!,]@=p"sYBSZ26Yc=)(fG;BQHN-W58iiP_ZgJnKaeeQKaegg&N3_u9OWR-9OWQFZ3Nus=$p`)
+:4s(BdN;nM[0ImNY]eZ_I"VqE)5aXSH1]1Xe^cNmYV8u-?l?d0CbWud"7mBg3">[kUp.Zji)A99+Wk-F
+Kos4V$^nj9PN6\I7E3gLSl3Z9)m"bTYee1I@>"7=&N3b48(_4;Y)fg'_FS*fKhPp-Km\O_(.JWMXCQtn
+->@=8.:!C^[Ia_D/@BhX%2MD?)]XITj$"D[Dg3`19T8t0')W-WGX`#="_0d7##e<HV]iI/:Dd!16HNYg
+Fg=Hg@+>f#2ONQd<2'0t)k:LnZQo`5_I.bh+gmPr_?R%VcXDH9IML(gPJ[U2\bu8K#R#>"^L4QJ/^"Bo
+5/RRd,7LPmkE-@)V,k^Q?pn?Vb6K7QO,T:?#"Rhc'H!D(RP9F)Nm?sXbL(U::im`qWNVC01";<=3tI(q
+hK^fN:7YIb+DqZ.m%%dbGFgNU+:D-;K+UF]Q4HH,?LFe/8?I1cLCI9RKFOfQqG'Cm-$.^HeS>aTf[LlM
+WCcY4ZeUeJL=H()#TG>U,AaT!Nj,#h15-/Q7Ig^'SGNT4q@?&Y&^0rW%,3k[OBOS0&N3`HUp.\8GB;DE
+/MP$GS*"g43=I_QWH5YRWBH"G<\fF><^q`O2Dn5sC*drR@.nIrUt,n9YedoZjKQHMJI!27"%!HrFTgd0
+_:k^t2V?SD)H+Ve842Z5kItWjYe_:jHm[VC>RDF_gW3fUFaW8S_88`OK8!!-K6@+QYednBLp4_,`JCb7
+\kqLm_6NU/+gl2c,&FKF.;Wti$>E&5)rLu@/7]),XBWmg2HUeFCp<>0,AaT%^N.t7;b/a@[`oa#WFL!^
+NV.BNUt2YVKFLs;LCK9leVnJM5ib#oVH*NTYedo%c=)@50ju*(qK\ru]$IUsVCoPpD@RU*]6P;m7s`4S
+\N+I[5A$Y,?8R?Ff#m[kq$7q@8!=2tXSioCKCpdW_ZoGH2SoZ:*([inOBT^qfO/:OYe`A<<YEs*@=pT&
+lqnj`'K0(f\PMc.2OGH<mkgh@obLtg<P@Lu_5bg*CiJSgY,e8BL+BJ6)]\\]pKl*_m9rQ!>L-`1F^l:t
+K;koW+a'<0S`(X>Ya^Z$^,,-FlWNS!m#:NE)k8:%rp8MrUu$\toJkHTnb[D+37"hFHb0.mIk`OpN&1;d
+Cp7GqGYIQ3_IR$,c`k7`Cc8)Th`Sa[bASG1KD.>cCp9!MCp9"^Yee1I@=si(Ye_T1(m-Q5kqHZi-\i-H
+ne!c^g6f_]$^nj9;^CTG!<<b(>AhO"9O#S.fO0h]$6-X7k?rFV]E`5AVk`@[kHMch5/IM>kn,gu'->$O
+%R?I)d1N]L_ZgJnKalm;-f&u&Un6Ta2HUeFCp9'72OGcE5&*]F+go+M7G)!b>7MUb!Nkm_L=.:0'K.pp
+";p1]Yecgm:,Jct6'/tgbG\*CK/YL(^=/14,d0*oMgDsPB7rreK9aYhK8#H)"q-j9#'37ElWk"K0Vj_+
+>C916fO/Q%%NDLE2So[aW/\$t=]f4a*&^nhD1i?6ne!e47kG1LD,dh/0ktDnmHN9Rc^r#YC[!iqY^SaP
+#&b\%3U(Z66eW;aK=0eQ2HV8h_Zk$')d1ujXq/'-]4+"B#(,7VPhAM99q>d)_%^'gd(YpA[#W<8)k<Bb
+7a5@oFjrq6i%/)[I<HN4;al`e2E8rA)H-I&K-@YaVBL*12aDSrYJX2jlXjZ9,;?39b\\qEl"SH%lRk3I
+c/kDUSdh[,mrI(=NE;0O2uUR[iu'0<(QA>%)m&@3KFLta(h&%sA3"J1()UJ4UBb2RR<ejfe=M]F,/>)@
+e6.,@LCND$1IGm,H7P+4HGGUW3Pku9%n,&XY*;0Mnun+F_ZiUAT^JNHfJZMqbG"''1-jp`!I5f;$6(O'
+:LSn/RG![jc2!bE22;Wa]``E8[$oF)g=A>(;U:rP#*ZEc]."bTe=PF&hBQj@IGMq<c!c7"/%g9hLCI:t
+'OcXI1G!s8d-.R#l_S?#U.<ko84Uid2^FSZLZJC!OK6tbb<6eB$gSB_GiJfe%&r,$&4d-IXS^*F)m&&C
+@=pMSLq]?%[6[sCO?0&;BLqOT0Vk:'LCMh::C\>FV+90Gq0EAe9YJH`0/_W3Cp;4.#TKj,Ta2U=F$>?g
+ela#%K5Hd@+gig$1Sj_d(fF9AgCXiKSa=QhfnJP[L=&PRjV]sYPsC!32C1UUl;.O=Uc'Ma6Y`+O1o(U-
+5XXg-Dckk>%NDJgrZ!h`]6bVh0ZnVZB%`8L=HB]&)ecD3Bh0gd$6-).kHMdK5+q8k7%kcH9I(NS8%KU:
+C[MHIbhAPj2SL5@K=,S/2L#>Im`0ZaZ6=@\`117k-JD27Z-!o4n?OTo1inBlhIoG#a1LMIs(t=*QeUFj
+kbi6$9Lc=j?,j*"*t6?`LCC.@9LsW0&(L>'oJ^jG%u+Z;L=B))2n$FXG5SL[+*IBXL=@_7?p;QqN;i_*
+5C4Xp;Wl'FpVqZ0C&OLjS&YH&L=H6e3rQ3os0NsB.F>bC#5f,C4oZVZVO[d"G&S7A1baZGb6+0r!e.B1
+T8)Z^K6tbi/2pY,UMh-75&nRf`p\I9a4q`,"4."NDU<Mpm*-i)6E;'Y%8ObW%;uoG]AfF08h]ln`3540
+4#,=RV&\%YLiisuj"G>?Vk`A6@WOiW]LW68U#a-_FFJ;ANXK27arNDS5>k!NpOZgD<5q'uBSUF1W2F+&
+<6Vo9@*P6-)O&=P@B5*Fqlql(/IebVFF>1YdMZS,K-Zo2R7M6M\N;J_Rl%*#1-1#G_.YgP4^kU5V7VSq
+I=8@UXP7>u=SHZ0;QXfj--tTC?,.^qGZ$.SR]r8df:sRf3E\RZ"Cnmu65gWm5D-3j,G7W$(E%K?N*5Pb
+f?3kr=;3T#N9aOd6H\VLD"&8iA1nlD;U<UG^'Nh?nT.+EkWX;0'<(/bRAX,7;`)R"+O]Mu@Bb`CbpbU6
+]@a7Dc/eN,+thA+^I<$0c*5X*bW#J\^O@"hKls.kYe%HtYdR[q>CJ]UM+ZotbFqLf(p>:<%@EJPBE#-&
+4DasZ*g>b(!sPFl#SJr\S3`3pNRnj#>5B$>e<H(=/8&dBoYUB'^Aod4Gn:a?SSp;b\'8SJ_dps(p=<m9
+8EY!GEd&KRQ7;;t'tp9;,c]!Uh8Y)S\s$Q>CNaWJQ?PEtQt3eaRojp+;j(Clg_mGP=#Kj2r\H9VhCQ>)
+I5781nI,X"Bbj/SLN8J=p8s#r%Z:nc,Qa5jC!hm\Qj=:8+.MoqJIUQ0JAT0RId'NbmDHO.PIk<V=+q=P
+HI98G?O8Gbd?u$V>*#0mVS%gSC"%W%0j%$<kG>$IJb(HI%lE,L^.mDK2/o5H1EQ[oW#C/K(;6/qkS`#i
+Ikl-Cn<L;,0XesN=Sb_[ZZkrIK6)B6S8`lD,A)u%#*TQTa',t]Em5e*=_::hHNTh*QC\>(.:CAhK*qtn
+s22+PYi\-h/r+MaAXQ_8cpcto@seG)DGVYiT:ZOYdG21PH=M18IeJD&T;D;'nqj1q$O>MV]k*/t%^UO:
+QmEJ/gch4(N,X/PYpG++=lU<WOmKDEnPu+i(*h(_0/3*0.*:R=HS@K%BO(8+i)7K2I:MtrQ@?*#72`WW
+?P[m1@PMC8O+Ik2rgee%-$9:aHI'IT]Z$\];2R(P_@18N?4=N4kgc:3/'*a_0OB5$C6rS0+T:<.lS=t7
+2fohrKppfF4"`]Y<fu5^>Z^84QE6tY4)C00UDY$8b=41-ag9c-nuQrbK(ekkFi*E5#X,6c2CH@JnY0d_
+]IDNa,^>F\.YW2K(MkH!YG?2m(=XYVjR.hL`m=\rm"gX8TN\!=oRW#7`]Y1ZLY$9bW,rejT8l2-M!l7>
+D*LT<p#0+$brr=XD;3n?"j(eqn%-\BanA+l8!(Pk7a"N@.4`*")2`j5(oLCnDBc4N^<(aWl:pLXcQ%mR
+hCC3PX5OleC3Q&V(n+\[f'UM:@/(_LRc;<FcX;FOC@PEqA9=<"QK<b(BS`&nC*D#E]dMim;0+WQ!2HPB
+>([;4`pDqG`bpFZk]D`a`]_[(h/!MO1!NM5``Ph$,"N:N,fB8UR9-?l=44Xa[hnA5(4-0/%05#u+cpKK
+n8F6s.^QcDcnSnr4[g0VL<FpNE9_l;4C^dsRH9'`(*'Vh_-ndti)m7u^/uiQN4e)9*JNdrT3rXO]L]GJ
+;B^1E'1*u,9:a]`1E^M)p>W$ngIRs'_*GpOk$F#2_:"Yjrp8qY]-=9p'qj+5'kH^XoSsTIjjo4,>^E_2
+CCs"FY<h!7[(82C?L<\UEHc.X9+T/6lR'1AP\ZT^O%38N6QN/1L,1\c?0g^gZrZP'Ri.$=76+,s3[;V,
+Jb?X3N963f'l(:Y@'+NP_"Mn#BWE*&GE&r/O,KEDaNX@uEc8SDYgU!6D%%r5j$E!fN4P3]D;/Z;KU/t:
+O:8mAP+/=2+kJ8h``&ir@-E<hcc#;jC6-sgN(pJmB2#XR1WFqSCZ,kUcCkCXT^p<]8sb)r9P;Qd[r9^V
+[gY@!F/MojNB\GSAO&D&S9G>o,eHd91@38hYk1<#!"Ia?mG$-uAQjOU5;ZIT$'s\<@6Brh<sP'(CF6-X
+7OG&#iJN[+'BVT'4rCFiMg+D)_sa#3RKV)*k9&J'rLTu^>GS5,b-[Y>62@Z?pYaMi[K$J=(nTTgJZcN!
+/If>AAgc$DqdZ5JD)fq/o.f$Lr6'@bibY5<0>[FsjWu%JPNCoW-cBO@Gq&pj32=$$-HpeE3XoYT@O%["
+gDjLkT7(r`8guWE<.aYr4=^)Z2$c>p[j,/+U[i)G4Z@MJLun4oSqecUWUA*adE5%Q0sRE9(7<9-.US--
+-S`/+3<8+oO31t-a#kh7*OG?:=qALL>]/]['N0+d01Le#1fE#3K%u^%P_h,/PF?(Wn>J`>-BH<ukS<Gk
+q-_^j&3Y@YAHY5l6R[G1<1`72?/SS*)L]&5`Gq?%(6Z:[e(cSj*gN=W8!29UA?p_BAD:Vi$S<o@8N:>)
+9!W]K+(nQZYT/_O,NjasfmGc8p>(Kh\F?HPL\@,i6J0rp[X.f%K>A]QN5@cC)o]L5.5?n+]tJRXW8--;
+iQ.e=hDAhu_\>WO7o<li%ZecGBhAbob.ZW\(*8`fdfC,k8UD,.((QRU48:TLbG1$3UN/$?;UM6P0oWi9
+8*(tUPK82+2?k4fgUpO+CtX@D%?F+WLI\1gCkOh6?9WGh;7SV+0KIKSd!=D24=[hs!@3`KX]N\QJ%9pc
+-Y)2=-*k0>:15DSB2h4[_P>Q!-TrqTV1FbS<1`A7XTdc3jK&bLO?]I+@&+^\m'SC\J3+M`hp%qe1e0Le
+h!PXl]CPlO\)XFj!%/ZCLVO1Hd"1bOiBjq'+,jVtrK!OrGZ:Qc,:!$lmYRQpkUU7jB;Eft_`A<@A+)O)
+<2Rq[f"$S#4a.rRKi7(kbAWqA7e@G%"9Y!Fep6nd[*GF:ATStV.]r=+m:`&'Uj!jt8K_uFr+(IWRH9&5
+SX4]giDGGNA'(KdDaJoiUN5r;6''1%%JP`4JpYt<#p,@2F66=+;La]ujQZ04gm`8Zn>P.)Rq*S*qp8.Z
+1L_GpS!(De+>ZLP,</MK0TqAs`Wp!d>\&Z`R+E]XQm;pF8_nea/%VS*`H3-PS1ZGCXQEBJdWNlHTV_.V
+grmqTiDJh?51j"7j5s4L(IQS5HhZJr.8`1^4K`0;)n6?T8#9m;RRV>U<SI%%/q`eiJk%,]P'f3L9!3O'
+;<dD@GuT)NpI0I1U.6L6"RY;/4u`7X)^4f=?M@2n`c6LQ%<@Q[<UY1.+"lPb>R8*XI2ilC@"Z8I\Fc`l
+S[WlDDY)Y98*.JQ?ode\co`dRiTQ';j=,0uX/;+T<6eV4L^FSh)9-/pY`E`:oYLO_4=[me1QP/cgf\,M
+*?LK$G:E0_PeoN_8famQGZ:8(a^KgAbR)0)3o@ZeQsd#V-?scWA4MLUD7O:I?++[^ZGdaBRsXj&m3s%s
+Pu8UBlr`s9',?gc77TSF/YbGLikDEtN6I!]Jt+YTmN@9H?r$?p7C#e8?eB;dW8-!r:ZtY)k9Nef4N6_]
+6YM:5V_%G<`0d<uV5s;uKHk_8DE]cXC#PGF:!g`9(3Y:q]2?7IT2AENk1X!WdT9OPP<Kq_^l%)RB70rq
+k3_:moVgPmc(RY(BN*3ScrCU;8j<bH_\&@$5jA/nB@u1pZM<tB)0UNgO30<,o4S)h8*)=@kB\h2H`fSb
+b*GE?T&PbUp5:Bb4>V)g*liNInpjIrYMICGASd$fpj2sVp8A\VfZBoZaC7_K%<^nK7cuM4CaCTm8f_F^
+(D[ndq8F^7O(p>E8Wnjk;Gt(IC(<PMl16=aMM#<c2HgO<f=VZ8QUH!\lT8Ud"/b4hTX$+3!iGPSPC%?$
+D/mnH\hD>UDk!T0jVElAP0";R$Q+XH,F.S*h'r(i.gfo?lV8G-KOLQfb>QbT#'JG`poVN<b.'j^.EHr%
+?oa[<D#:.[?'fs;f^L]]E@<jD6qVS2&nt(*ls,C+NZb)/rJA':e>mmpl6,T>LPesX3@[)<$XHtD)f(VL
+g*ePLX%0"JL60q_=ERDAQ!E9nRrU+QGK_ie]CBm&L.>g6g>[1*E&]>i8lHo06qZbq*AB-:D+eCFMi9q,
+;<BdH-^Hr5k6m>C+1:U:oMK=FpJD=%`CSTd^#i@.TP];uTGdBYe?:[A0%B86dd(e0#$`h)h&*2(RrVX!
+hH:sN\0A1qPj:^)mp3bfZU1e7^5#LZNu[pWVND%S8GV1SE1$cU13t.>3FiPQem[u<="0FVZK9[uCTMED
+;pc>MF7<@l3EL%:@a:r[;:[\k'BrkZa/%>3a;@BWY\f\q/[s/<cLL3I\SI)W0r<<g$]dpI]9YT0jl!t?
+':)A]%+SL&Q!tUQ$lt@O"G7DgKd_Mn#B=pcQY\pd?_OJcXgWNr7M"\h4SOAP/Om<h(:C[Oc$US?#E%=g
+N+I(V4=7H@H6QkkOO705k,o[E/A562C&<3B0JTVto`4=G>0ko7l"i@ISXF#G?U@S0KpAK>$TI%T1UBRt
+S+AEjW0cEYk^!PaK5!2s?_OZIn2aNW1>9oX7U"-oPce%-OZTqAq`Ln0)[lnmqA[!Z8a?^ri6:2k)]`ia
+A%Su;lZV=,\sZl6h0g)LD6n>mgi?=K;*$"9?`./2DHZD\UJb3r-]^l.ltPX;]AFLU>Wb,%k`/!e1fIp+
+<q:cLa5?<c`cl`.L+8ofAYeY6nDKn]%_i7PRb[0Em'JZ6pD3UK0eR72VUp(fV<5)dAB"7Nq.Z4CRE_pV
+efKn(Eko38:EDF9ktr<jJ0'u<Xr`l)Z0=b4D5p*42)Q@+PTjcK&T$3B^PCdVHk9':pgEklO319#oVaSm
+5`\O,jRfAZ,s[O688krOm_!,('!MX0l;>[ZI12mjdqTq9fqVGo@:q25[)0%W)@J[?p6Z]m2Xf.j;PsS7
+Lse\b7qG@>H;mAFg9=%aor)Eg9j$%D*5gRcW#Mp^39RK+MeGfXW/Qq-q)\AGM%5biXE'%9]Y"Y7RQ87q
+DtKuej5'=5rtfu\^9g_Kj4j0d3;!0,05omQWW,X2)L1jd0TOlaHmOO8rkGqB=:jlX9s3HZ7T,I%l:/cD
+^MJC+,F=?ua]b-3*P%/!D8)P.\7`(@3o:#ke\5mcl1Stp/2LC,=PU7M5<bV_@>aRLUX#":i+H3PCHnTf
+qq2lB#:Wf_*t6?_?DG9AGQ4&f@D-t:CVW*"JU6s?Q43$>UQBY916D!`Ta0WU$U&]FL@1!uQ@5R^kndP_
+KUJO]D;4Ei,cX@e.qXOiC:DT9'ig<tLA;Wip)&YVBUl*#.Uh).'Xd7jp?j8C)&Z&\f'>5[hL3tW#R<\*
+Vbn&E\qs..7JaPehODU(3%<,Q[Y*\5H87bM>NGu`8H&Ba`Yk^KPFobIcfu!<J$.oSOfn]FSpOa[8sI%B
+\qOKuHKj[:1XbS1%!c*^gp#r8d`:@8gqN3>6eu"M=meKq?(m!H5>d#k!AO#ZV-.>%<0peR#mleX@FV.r
+PiGr$c\U(h[7!K*^j*9$f5I7M2UPPdN3Q&Y9,ZoAo=>O*`4MbASs)1ml0?e5\^bsPQ+lpgbJ1b=dTJMl
+Bc)uK[P>8!S>D!OpiVc?lXk0ca;nQk$=pbB$S6Fkd*>VD=,7c'RY5M@$L@jE6Lne!%al.brqp"Gp#jTb
+LNM>nl.6<a`KA-"*jS_/f$!Jfa>T;G-'<pB@>n"b9*=^4159ZM^EUiK_ed_s;AXt*%G%d4g":m;+RnMF
+]NX7EZ.Y4V,?snHh?1papQ==":AInQa*q>Q(b-*iUX5'%OJd]+5]Z<[%8K?OQN\!uY]]6[.2cKLEVSBr
+VdAp?),5O>c]!QI+2Z.B0C$]3TDG.I)>qX*A#*J)VB65IWO-82)h)atGK-olBM?lU@NJO)5*>X0L(_u*
+%#Kt'[c6d'jLCo,7,,2tAM;'.d=Cj>QZJUbj;9efp#d7"8S_ChIQ?8#,0`h/1$!j-jCq6Oj;50:W'.eO
+<e.;0<)W%*(:<i?W@RK^P`IXjkN[%a/K%$pQkYf\5$3]!+EcX$9/9p40Mm,H3=R^1123I,6ZnKRSLYOM
+^E=?IY*\g@0Mk[#^-^!E@4>o!2V-=l@B%W]=QP!sKUl59>VL;:.4P3^8B*\J."-/-7VDM)##>07=<73;
+MrP]+3bh\:MlgV=hHIRtJ?Z&@BdD@f4/["5(7L<;g[&Ds.P*$L+FTn<4d1Rc&e\]7D]rcs<7aEd`No7m
+.Hk@P"!)fLJ;t@`TL-r`*J&K1m3/dU06H)>;99/(5d"U,NhS.&lM*@tK4@9d"^1cdSBonkBdKYFk/R\g
+Wso_j*N%ssZ6\gqWKOWp1cD7M/;DZg"8h+5Cm^T15tH#r4^CWrl9eW]oc7;!og&F20jM'!c8GLsMI@Y\
+4NffR"MGib(u5NZ5`Q/6>>]9[LH\!"Al<(uEA2TuFW(!".Ki5@@H_RO&e'2`nC]`M#'=@Q1tsbdK1$Oq
+%,G9NL8C^2[>pH)O#Y-M!pR-$H"4?\/^"C:DCV5@Ksdgg%mT^I.@o'J8dH:fEaga'7[9&Ko*Cq9_U+k)
+eVClme_E\SjYo_uV9kjSW%:[ad2Q?d['1!n[(Z*l'85f4?ZitPV7alHZc[PNB'".%)BAo8bIacc'fdU1
+DcSr"G]<\!#hnEO//?/a5";jE.*dFTFr7dC(bojn.j#2+j-FF;kZQ_9G6Os_!4tUnTP(f\m:p(XLlEND
+WAW7g5-QI1)Ug(0@-J%4#EC/uEXe]hlPjUJY,6oCm')br6;)*($oN)mmZL&c1?mG1QoM2iML7a-DX9K3
+\#mNXNukOP)Ms#Lm_mKF]/OOBE-3\lUn4\H!q)#"JV_`u7Ol$Ynj]VESi"mGr^Ab<'BJFZ(^GE(3N#^'
+.N:W`#^J^r@mB.@D]E--'L2GK;[kC`6?3mf@oHI@.+RCK/9+G%\F<F][CrL1L5jWS.&rhED'0NDM6LR`
+J\KfYH/)n4BZk9H\1AK7oom;oWkW#QNjC;*N*$jS_.B;l-k%^9#_8#&Kr4=J^+;*(&,ELRZ.XL>p^n6u
+A\f3IHS%lE((TJ3((_2&QN]bg9?Vp3h=aqd,`G?VA\goE(<B#J3LD$5N"G9_"oOA=bJL$PTZ:6D_/U5O
+Y@*tDV1=[HriXlpANYnDF.3p1k;HglgSA#=%n8TFeU^DC.jc#TksPUq#+p]oiV`/R@[1R1hMP>":$l!*
+8AEG(#&g*kcJeLqFkJ[B)Ro:3O(5=f^J'b%bIY`r=REi+eoWc"NSMbcZdKdFHL0r,-\&1$ZeGYa]/+Ot
+AT#*pA*It``im#8:cF_VQMZ_5=88n"mFYWAc.$?<;*>-5C;ZB1m)>p5\^9A@j^eF1Nf8qZJ71B4b\d)P
+/3WF'piX4#@bkiP['&VlkB8nI<F-tUDKS:gV'"I:i9LX4<]?,>mUTGSOP=!"dZ\4O;)cUjDD'NlGB=!p
+V0-d[Gf6T4*6upZD6NG>%(/dT%/:kMa\,P!IlqK2&r&F_NXl7,X[PT@BcBV"DP[8ZqF-jM0AP24W(u!Y
+W'L.LNI)m8+pclMNN&%qYK"RQXZOo'mu1(X<lPB^0@K><lkaAIi?67#1jE0!M_nQ-q*eKGNe*`JDo@\o
+\TBol+h_<2`3WP8\HA$\@H]e8\cbEV07>C"p:h)o/'bVQ\+gjSC';;c`C#A`[Em&Fpk9,kA]Sq\MSsre
++FU/"L2?k[9(;b[WpJ2A]%&UMC80p=\QCRp^=>so_N:<YY+!/:mI^jAIonGPmOoEPdultd"70It$irCq
+M'3YP\nSN&`pc<s/K]rDE2.Y_\\7;d+s%7pc<0_\QA\()LGss!&RY<^I_kNB=I'JPCn]J@ZgS=K@TEG9
+Uuj,]BM6TK^\LCMaRE]"%*Mk(`ULIEcjrVBY\p>9Q(fD1YK]d*:)RPdkS`(@?sc6:<+G."5-p2QGra*L
+U3L>G=1VN'T3j=Snm9cU#.#]`af?cPN!ekQRDR<jC;D%\cWI@#:dtqt2.j?P#$6#YahRHsY.<h]4G4:H
+"8>OIFUsP8"u%A&UCWq`nT3BYo'!'G5;-<oI<Ce77`h^/*nFioPiIWa6"sU#f,b9i9DfW07$aH5jY16.
+>\X"_jlUD,JLJX=#6,e^cFfTG:plYDk]W:8AD+['PPh0N\FnH-oWP^nSD2F.^/`Us8UM=LUs&#7po[<e
+NKp1\MKnH;TtV#?^$=]Ba9aU_+rKVA:a$d'M*U<RcT#/9j)CtrjAOB!(_ql%rYekY82dk_@sfTBE]CAV
+\>kr?5m:QgTXi^?.DS@Cr7*8r-e>t`p>(FD*7.5I%^WbR7RqH@67E$4#dPQ.THiNZ??$*EA1XaH%MTgs
+Y![-KZdX_P\Z&!]$?.mX/u10frOpeI"ieNkl1he!,;Iba8eSMe(ljVo)&gNf_Cut6E0eg-BFYLtftQGD
+8&q/;lW0,2]@slZ(jCZE>EmBJ@u/PJ,Ng@\BOV04O;iVh:*&s6oa,VCN3p3'B2!oG]G+buh,q2#BJrQ]
+5eh5NUGK,7<;4(]o(q)h)h5'-aM[<'^V29<XQZ;VA_&%)qk!rMpp\)e[q'IMT?j\;Y9`0ff;5Y41^ek=
+A-$!tX3$HG:;!dq\(0#31`3P6o45DCo$4P.AM/CXFN/h0*XKNp,IBT58C(%^&b4:[F0a<*Fk5^4"%19X
+i=,\br)7+i+8Ooc`.'5t%:a:<nl9'A18M^[DQrFX`ZcU:mS54WVX+)K2bEhQiGuq&0BFUAD&1.W/(%u-
+7K7F,rd2EThb';FH7jBGXT>7h)7k_poG"qJ"_0F]b*oW(lJGY-BpGt[reQeA>-rS*o5+$(\atTPr-*SZ
+Db=/tc"dJfbn[>b.j3lEPu&DGQ);M20TPI=0]r5.1#q0+Er6#Hr6IU91k$MH4?HQfW."q\WYaJm@U*=8
+hu`3MMR%ISi:WP7/0=a8L/bqR"gMWPrDB)Kg[jS8I3f*qh5n,DM_Y)K86IoT+Y^;&W%^#PKBYSoB`C;8
+/aML5b1!CuhV-HERt*^?QK;Jm?<.K\?[D"eam3)B(mKid4,YD2>qhs:l<Q'=SiC)hPmW]Jr+B2ZB5ig]
+[eJ\i>Y/q+!3&1ai3#W&CM4k+,iM2+:7OXkIsTTSj&@3hcq7WWGZuBjp_sW1JNFcZ6cdI!QW3+ihO(-t
+)ei:S-`rjtXh;_D;X8Kh!!M&"%<;()KA1\9Zc^'*iY9lJ"`Q<ln*>LAmdN`-\d'tVeJ2BDef#+fN9o]L
+D[Zi?5C.32G]-LN%ODo9ETitPC%.&0I^r';Z>'tp,4tG'AFrDWW7tbiP9WjA68E<.d?(b>qLmqK,INqh
+O7)'=!,$fZ'o\8;+>+LgP]G9<84YnKb3-3rf6]tU3>lj+mlQ2=\M9<,>bu)OBu\Wpd5"+d-4Ed5CM0AN
+>kk(D7Ig`^iFI/S.\e`NbYWMEB$k&Z<%B4WE$S$^\lj$AO8:gBWEAY&5r-tC<K;ZZ$%lXkNhXP:0Y/Wg
+Wc1q;h6N'OD5%dVRX,j/*A7<@U6Cd'%M1qGVM@spb#ZLo3#D2:/.$G#DIr#4nL+sIOG`7@'^M3`F[T!V
+gM\7c>t6pWKs_c(aPWt4.XnN;-kBV&#THk$RHe=qB4i3*UtLju-UU86IAJL`N+O#?B+0H5'='$c.SsAV
+RZ1Ud&V(O1S%+I2MSZ<&=%NQH-2Ac8"@fD"F*AeN&r_Ib::SlW0i<YSS$Gt/3\V0M6IQnW:03UrIEk6(
+$dV(-#ircAmuu]s[4EDY8__p2:GMd,L&k1pN6BK%XRcu4#$uV@OcHm,)lin6S/$6TL43c[(Y(h%@tH+C
+`^%i5\:V'B]F*?JqNqUe^:mN!2CQ5[i%NV[$5^"M?tb\*d@`Vr;EMcqqRYl'IXPMc#hI6kYIcM=Y'DRB
+@B>Q+Jmp8CIbc<*]")(Pgj_Gt67i4eU4cC&JIbXqBQFYa`aa6Z$d45P*PJLR>BZtf!a(PCk)e!LA]WX^
++@hY;ZK9\LHs;i.&keL4`C`;&7nVsUCUo5ca4,0Vg@2<7M0.=na;@BWY\hU$/SF;k)1LBea1@[D+*.,&
+*o(m[W3iD8NnTmNb\EkQ=>,>^d^dKH,Dpg9$=A/s8FkrQ)Q>r>W1Tn:I^+@gJE.IP>Bu'hU:R0LG,15Z
+3GWDoOd/tXc>_%91fi3U,;]Y3HnqkD^flV`,elTXS8KY:Y&1/oRr/;2[8<C["g_A9dZA>k><Pis#9^eX
+8FPY+b!lL6V#5K]6Ns2[-V>GA#J4[`8FBbQ2Glji*F\H1S\!W'6_gkZ-o/H!@**hZHs2oQ8ngQ?&5oD.
+6R)cV/[R5:Mc3Pe?-Fe>MTNZ##W]kDkI'jQNjV=5T;K2!PPg!CQ^uQIkuKZ$5o+iang-Wm?k/478oj@!
+PJ30=jogOWV=GckMA$KG9heiA-AE$k/*2C<;J;R(AZe(%WelFkLTMCAOAg%s+eES;4+s=K7f>,o<>54C
+!n5*:O6J%)7pOja+WQ17S?)P*PagHCF8'*RpNN]SleZ4L.V\MpP>2OAN[_$pQGc=a8ufMuj@6`7B%B@M
+%K+?cKf<ItJJ"PiQ"q%b%Y;"7X$AG?c3@g+>:`b[Y3/FmK\9;8R^0!fC1plj<Z#%"dR#@aa6Xb0NPI^!
+!H4Fn3`QK0/[#S\gNFIOi\lR!k@p1'IW!aX#IV<<eP%i*8ZHB3.IhN9*N8*u'#*ffP/igO)^%:WfXNR#
+\NK;bP_e!"L-k,?h!!8Oh;RNsmA_m<HWTpF_boYihi*8q3b:N6NkaF0nt%g=qS<raEZ\TY;sER/&RW:L
+6rl70r_@&6#2Q`C)WJe1Do5UuIU*Z@puZ_*9fVG[RrGg\e'W3^4\\LOl'.]dST;-LA\%iF?qs[S`5455
++&q>b;8,imb#\mQqdX86=:h%CJNeVHd5VhpT&*#D.s=SM8(YD.#jiZ+ejAr?N*rEtd(9>k2*\N8C3,EK
+5oO81F"oIi+HHnYak1>qXf<X2+VWh:,n,0=@rk=Kc9W1elr45u\4E5gE3NI2K1h0>?hZ;Bl[%^#cJVEO
+OUc2:N'T_&%TaFt[q".NC%:Ko",/I$LZ/p29h<5K3PN"r0n*$,EB-toKdaI<N,,7g<9!4r@u9n!4LF`5
+U*MK8PDa:jF^-\GL%W-E*h-)Wh);14S*;0K4nKKDk36QiD6,.RfQ^86PlRkLCLr/3arNRge.JtUitV;s
+?kP3,R9us7m$<XY$lZ!MSDtY!9ND<nl.<)8$H_9D;u5F$m!,[;R(gt_4QlBkV;G&^?/r[h3nCVq))l>?
+34Rgr#7J!^8rdb@;&aT(q]+A1QtB?/).6jO`IZO,"d]30C^^A'D(d_JqjC2WIA?2D;sD>G8k?_Lr:)$i
+e1!/\IHW2ZT;4rq)7Td<eAu6':W=g83fda.ZYo)!_+slRGdV>)6.b+F0X`tYiKo]3.m/_6I:D`BcKW!]
+5.32DA1RRAI2L?sk:t2Rd6#m;ikk[?K,8TfH.G4rP.X.b?9d2F>]rP>>l2N(S1h$nUOJN30"RM+7d[S:
+;cj]j5d,hdhB7hqWl4bQnlBU;rFcU6c^*J-Tm^c'L5`flEASLjZcG\P^sV4q&R4^)hAM4HSDG@/8A@F/
+4rEu.%IGuh(,PN!<F;r:`@%EqhCiDR:k!OO)!^R'=k]W.4Gpm0i[[I2pj^-Lb$.S)(sJ`%OZ8?62$Iqb
+WE:jK22*ukhO<G*YAB2/3P"\aYXKWBs%9m>\*tIJYC$Y1o43)]rf=>cqY*qRqbue;YQO_(Dq:ZL91a_A
+0KBM,bPdZ7ih>3:3)eB\Os+Ko6I;$LEjObaXH>_K-j2+tOghopWu%\+X8[NJW6V?V<k*I0+2pCts2Wut
+q6bIRY4JbYdYq1iJ3OmBj^7,oH6D"55.`R.P2;IcnO7-PnP.:fSIBo\8AC8M.egbU4QD[&kS75!Kc1D3
+L,sNLe5mi3(Hmp,L<Q[k9ib8(1f;Wq(CIpE)7aaGb+N`1RXj<9_bh0<!\fiQ\.3ee,SHsmUqR0?ijOA=
+MIlBp,=4q#28am63(f:<[4h5p@E91s6!qoU9e=B]F8<9"Yj_ZjpDco!)]?&YW9C)W??_M-F+=dGqIX`k
+]i^YgY3r.[F[bXY?8j+Bm`#e\*obdEDE2s+./bG0HRmndjOL;@f$3<Fjo-KK7FMkd&Od\`^]7PJ(\/>B
+="K^"&tQ-Hn>CW(&[["+ad"`("dte]`bWm-*)#?.*30aLMeg!.:VOOqiGL$\Zb5QM_/T'M)g*OMSpS]_
+9..`YjVA9RE`2-/C-):Y$9*=EDFUL3":!Um\_2!Rh'KtBLZGg[+kJ8hFG1P_/F>N4!F]g3Y+q<17k`hS
+eEa$-!N+qpk4hSme%X]XlJUkT<QIWsPVnGr_8E3#>lbDql\brX@brd5^&G+9/hsQY+iAN&-fD&9-V3cV
+VgX4R64IUMKDioR97E<5Y`'*I>c#p0Uo8LK^ee(]Z)\"Bj4""Xr.c*/7irJb_U2%@`;@Q#5f>OS#@N]L
++6`s)R:KS#S8g1lS;bFQT,&Cc*P,rh1UV?PO@SaPM,Si3WuT`2RsFXLNf5W(aQ@PEH\KI09h$'u7_q(L
+`?d[`NUt_*XsEe;kIJg@Y<3]u(L#8uL=]C3>aoF75#[OtC]P.QZrPM#MVV^7c/H@JNQ69W4;bl68N.3q
+9UBTbGB$oCB?ZXhi=XnF3Y2]pLNdea"eEA-,IHe@2oaGjW+>Jg<Ip,)3h<Rd$!km_8-KKL[EhPiWr@Af
+<^tje"ZN-Jmc%h(Ie51>k^p60<;K]If+]XJ.?;g8>i#7*V"]H>5[9Pig?Y_ED_#Ub-U\,m."Hs0WqL>X
+H\ef/-.I"1=@^"NR.Pj(jD,,T][c$uBjihVdab[->V5S7#XSC<o)^j1>F-l]>I5`F;#0tAK.qW2[pc"_
+g:JLX9Is&E$i.bq<heDQ8*T;dm'Rcq,M$&MHUc^!UBn9J,0?FE3IPjh5M'6$00WE2<*biTYrK\&<i3a<
+#,K2HhtD+F7U^VpNiEWo!&_723h$`8YIedDaN$\V*+Vs7]Ot:6#Yd8FYlTJ"&fMH!<k(I/RU^I.RA3BF
+5<gjlV1p3T<05Ze"Z,G:3%F7M5ZV1(.d\^B0IiO7k3EBA]14'u&O!#o)[N%8QnM;/2GBcK"Qf)]9J7]s
+c$JS'=t*iF(=O58B.R8\9s_Q/>''UndBu'N,0L3Y0)3SQEU^K@=+Bdu;+Y5t3R.1^?fcDdWE(i[[DGoY
+q'(C<E*ZtZ6=<1jPMScpbh-rA98;"_N_G.tZID.>MZFm$-1o>XB$[.'c;Ls-)C1cpT<FdhZA\*:Sr=po
+AGKW+A%pfHlH;jpeDOXPY+5e[b[lr8J0_::C,++Y*nBX9,6DhhoiRub\FFJW.#aD"KP<XU_i*92!^6h,
+M5r^crk)u!@Lk+N,>"^34>Nn+V;T"X54tUP3`Th']]e?bN(>mMI2D:"BHA<H8R?@O->f_)A&T;,ZD5A>
+O;Y8BrH(LI2CR[>+e!A6EOc+g:*2)>idbeTeOL"Sc0Hk7b@:ubHA1d&aAUd@[)OZ`-9YX?C8EsF&aEUg
+#)tU.7REGM42]-0*tLl'7lN54jJ/o0$cUpaH9.mdL4d>]o)uQQ&3F2[O,BfBX0<ISSY?2G.l14S0Z7(\
+?$_F"nfUQg=cV?am@9h&1eV]IHm?!43%/X.?r*':0;`9V2:3gQ(gD2r*%;[I_-Ykkb!t3r?Rl_B!CkZA
+8)pImE=V!p^cm%E[I7kcL"h.kpP,Epp!I1s.YFf#"cT<\(;q+:*NQ'+:l1dqSt1$MZ6a@*i*j:,p6n_^
+')(*jggaKSlI2)c"YrD/9jh(Q0LEf7b6K8X"_V4GR%4QdbCUQtXLp)XNOIfh_UOt&^+@KCMoL`(f:A63
+0_4S4S;tnA]00L:?56X$QA%>D/S*&AeCT+U(8aQUn7@/]/.5u6JP;UZ+,hJp_$0ar&^/%dVkD'1FN[?m
+US'?p;^l+ML*OkH_m;b9l.h"kd^b@pWP1r8.IW59!GYTY'XqPHnUus[3WPAa>;:Cb<X;qP'a&(QhMMUG
+Xb'!#A6d*8@5h!+D>-pZ4moG&*T?`rUN)c_RDZVVXk;!U\O\A)%_92tTVU!tTZlfh?*-H+DBu"FAD""$
+F5*f6993:3Ibds?lfN64ErV96,&YB\mIl4%l"XhgG<>cU2&hf_hZ17JX]XJ(>#\pl9[*UUDT/!tDT,_(
+gkt(VIOg/aq-&TcVmTE!cdI)TkZ)Za#+B"c0#$rA:2U%Qe*9CX%3mR.D9QiKBB^QWI,-*(]")&fE^s3p
+ZE/s7*?r9i1UO,E`!8ZT/UT#nA*WE-aj9C=QNA:Ogh@-1,%%3aHlVh8l$ft:-VAB0.n8gM2>0hA2nMUr
+I!8WtJcFrHQ0Pm1(lH,'n+L<XIPjXsT]p&a;'$XUCB23^7T*tPj+@p[Bt`h]f.PKtk7#-p>&V&%Z\u2N
+*N`VC.Cqs:%)>>n27XME`fT',P2+Ai0[^SD'cLF:oo0T8WD*mb>ekUuM>kPWW#DdCX=X..:Iar`TW2dk
+=DdBp78UJ9PA=0B-SZ1oSu&GkQM;ZfSu,ueWSE#*J9FrMTN;RD*U1(IXkL[-1Jh$jG0krJOplUf]bOpe
+Ei2QNqJ?TXMu+g_5'gSqV2NDsGC9AS]qj9I>0@]mR!+2![Wso;Ib?ZE9H7=d\^sSE(D4g_>0A)`fJnL,
+o8BJY[<$c84]^*@:,9SeI81NFh6L%g30=NFgG:fY\`SK>A^YBKe;A@sMb?:c1n;,s8SGgAB+m9S!TBp0
+onZqSO\?brL2;g:??MmlXl#prYqfY:c*A\/fU!WKWgiY;l!ARsD!K1-g2\n_!q;#7TW#-=nW(spE7:j0
+G!r%TIEVsl'#b<@2oT);U,H?Ta@JfZ$)Q3;)+iAOck".VEDIcchXk6]WOO=(\6Za@DL4cfLo[%qU$+-O
+N;.?ZW9"PEoET@%g=81*ZDTV#k!>Do?8Tl>A0E0T%rM,MjRrqnajmQR]luQRg'$HJJ>"gM-='AZ6K3Hh
+@#?gkB/iFH4=o\rZ&q4"NNlG)HL@QK/MCE-od5-JY?u^5n@DoKNOiIH=(TmFdVU5Tgk33q03sS0j6Htd
+icSaiQ)K&mm17s+gtm(9Sg8rl]AudIQYVoaO44o7;a4-rCRqe'-6M#H6F6Mgm*[cLp5@>n7b?^q>KEfP
+P?]RuR@;Uk_H$#"/[oQ_GEhN>_u.)4&5efV[UlOe-oV=WfdZmhP+K57Ld%/SFVitCf5U"P2it$,Qaa;;
+gZ9K./O,aC/fFV688`Kt;Qa0jk_`*ai;Y2b,IOYiU"/HubYpE]YJp%-JfH@CH"CC,5DK.W$?!WN@F$4f
+</bg9m[)^'a0"e!KtOFoRf.X'qFUst<d'N8oi>;ne.l10o-4.c.]&nH^j[2.1g%=pIH_*q&B\<;gflkG
+n@aH-K4N&3BYk$lRfPhlb=EeWh^@^Pf!2!7IdYS0"4QI6=kps[Z^Nda)Q>sAMnZ)bh18q7EnYH#b.Wpn
+C?cMbqa;Ts%W_7NaOCgAW8dHrn9cGRN+u>!#B/%0_4mQ#KKUl5;E%%c_cBs^j.nPT(um+`GddK9lgRT=
+(t``je!N":i9F*/j=f0%8.G=c7s(lJSfIQIONghr@-AXuF6c:oTDc-=SOVXaF/LeY)/*BrcEd1XDN2d=
+RblLP0+mi,YAMn@\s>p#ksi&)_/Z78XeVXEF)u84N+1+#QD)7,ILSYIlh9<#<0po0P\nAj;"%s7BLsRf
+%94;c*bd]nA%J[)q,fj(Msd/`2E[uOd+Cp<;03Q'93!58]uLrk+i3f:]91L6FGfVOMR86S60%jC]K**4
+Dp%DG31RI-Ri];5*rc1Tj*BMcXeAn'TIZ]RXklENXM%m^6dT@sTIkf<NQ!n\s5P9dq_%+0'_He\qS!@6
+^'jd$"b!"p^44eTo=it(hKKo75mf!hmJJj%rl`u>(<*Yp@H1M?Pi*nSbGlJe>bVM(ak0;%&Grqb*Xjnq
+cWTnF-3$<FjYK8(S\WD>Y2nSQRMaEK&p"md^dZ/m`@j&CH[.;cj4q.Y8c2id\#2)fDoR>'e5c(fRS?`B
+dT-mk8"j>p:E0p)$?7?PR>G2K&]Sb3f^Q;Rgk6!BdbToVkS:-Pe6kc2#16eP^1c?+U\.;[f$^H2LYRas
+QV/Fa(AkZE*(A[S7bu0OZpi;X&2Pln?-M^%-FmiB>jL.6gj_Gt6LS*-U')>9?i]Yn.B1q^E\*\.JVJ/Z
+V'7c6L?!rY!MU(GBFYmb%ec4c_I:Y\&)#t.YJFa_697:J!1S*9ae%67V;iT8F6i.:.fJYu[XVRV#'\SA
+8?]W[fJ^oi/SF;k)1:6dLUt$$ZePj[1/54O_FRGL/2aL/c'9cmE+h>`nafJu/Oe)b#49\oL;N*!AYOdP
+"j\eMrQ+,+^V3":Mq69h7a]13MLh3oksMes0\D5hYb/o@c#M7[qNFe+]](HIHnl,1SDZaLZ,TX28>+BN
+X<IU(hSQ7N72mSaT<TGfOe;@J/>1!-]g'Wi6&)W]B#^X/?t"hj5]jm.[iK]>HC%Zp6UoL`\&,7!\a`]+
+L5(GMB(3Zu;FY-ho+YA^G$>@p+MW/<#a4,4`o'CHpr\e_I\AXt@,1ZJ\I+(`#*o%Q(rI,^<D6Ttj1O*%
+""KCAPq*`L0c\!9[$`.\fhrf5f4B]n''VcS+A0]8?g;s1ioeWF_Ojd3`WHn12h8UWjDjdjK(5uRN(Xg`
+(Nb`HC2^X[ahZ6QrHEB8.>Y@-Ae38Z2/J6(cP2XJ3XB4,Lo"?&2_AEZEc)(-<O3/h"t^u*86qC;4>&*=
+/g0)<@S05\(6TKpfOf:]^%Yq=dR),0I2l!cGU\f$V!I-&P(f'g8t&<bQ7O[p_$F"SCYb]GC,&L^11FIo
+VC`]?aAPrD+]n([os85UF=u1HrPdslc#K_b+A&nYW@>O6l>C,*U@dR@1CHjuTS:NRAa2nKEI]3F%&+b:
+FB#)JP:i0UTEnT)Ibh@_P=,&%SCS9FamLtE,2KWH^o5uVdTt='3(f4"@gj#nXieH*(C&QGL,2^^:AAlc
+.aq*po4%m'=.RnSQ`?!CW6S5KX!a'I?TGf.$8oW1/S_u]_h?1/;0`jlKGm^PZEBoV%i=:nTO2?AAt9su
+n\OF2DtGS&Mut1$bg>k^n/N;f!'FAleXR+'<&(hh'm$,L/ir>f[VFla<2"*k%V17LAsUB^V8[*)eEAnR
+qZssd6$>T=BNSK04[f1Xb9g_\Nji\\&.#c)+,ga\Z[=HaKcG@0PZuu9DBi;$1=UloL\<:O3\@eG@%M4f
+Odm.JXUTt4@5XL:J3Y<(*7MtHQTm-bK&K[F.\s;R@^dnaQ_[N6lADBXL;K!@3ptQ+1"R!-=[c(>(Td)e
+5iG<4,O5:"+LtGg@lXT]Q6!q)TuD+6qAG5/2D!sB;(b5hWL4DXJ<fmiH58/%9@1:R*G:Cq_S&&S?W:P3
+)D]gf26ATs]1JkmHmW`5.S-]cK3"):[P,IMk"=*_j=s>!@j&4GODUiA;b];-*(n9:IQ?&bfE6oifN*R,
+ng:BYYapVZ#W'cA#iN^F5kTs^Ms4BeY!D@SWC/JeHm=;X[:uB]iCQh@:Ba&WF26knU-!7Vb1Mc>&n,D2
+lP.@Xq6.Ca0(jTHqnW;-D10<Mo&eQ'M0Wo(e8!l2,;cs3rGaQSI9Ah&_FWQDV)/C/=ZF*<>LF(X>dp@o
+EEP9=!P9_?Hai^sqY@F)%+e:,L;/2VE#iRo4rD!b"@JLZ$1BucHjXu:b0,BAlKq[h,eS2TAO1.HHklF=
+.cebS)/8d[RuZ)N<)5%Q6ST(!=VqKOR[++3!5,QfN+Q-8s'L-)Os<PYA+t,'3'fl<PB;aiblM;&MoYq]
+rgRot]gpJo","afS3[rf.gKdk+!jdKpd6_dJpo6VE<p"h%,W1tW%.@mn71E8;iI&aBlT*+W$U&Dnpi\%
+Y></]X!:XamVSmKgtU=RQB8+M*f/PSW[t58Ihf!jU+A6<9j#$_Lc%O2p/eNA3s/j/.V2PmM@&q<$mGE:
+UsaXWW``df3Guf'T@R7AiA'Hdh;;6E5O3]hP1m$[)&S7_?3W;;>;$(@MgZ9&I2@L=@OfW(1"G]q@VVHu
+;r:-t)r3_s;rOoh>H-k7#7X"7Z+$9@njne`N)1>9AA/KrI[7_g#s?*KJhKnLc$(VeIV=Yjorc9Jkq$B&
+cWOBaXt]c[+Y'O7/\%d+m5sQ1Ga#0Chq9r>B,O_*FDYhDc&o&MVbD5!I;p.L^ts!OVlc*ch6b(b8`;9B
+mP=!qO;4@CA/C>`kY*ZgZ$MLEEe>1"QPo3Sqtc\eZE'L$>1p#(d&&&PiPN<qN#,^[o?(IdgW1%XkHdXq
+^-i,%S/?ZQi2&\I7%DX>CZc^XR%!;b6hj%&2P`X*]?K$F=Ybuope\uNO-4V'>r%uZ=0ZSNhf'q*WB%um
+$1WgqYKX[Y'a$W1SG3g3X!YLXOE''DIk6Fe'$X:?e7?,GJg(;Q+H>g'Ui-g"MQ$.V&bQpo9'jDp"A`96
+=h7TW$m_/uSc%K2E++.+N?B5h^[j4fV,@O[hd%4QN2Bp-,5@.4T+'$2X]p=7e$m<Em/(7NX_e.f[US,I
+C^QH)TQFr;Qo;@tB,:0"i9>U?fnH\R0hdOr[3*PqF]"0I'3uj=5JpI%A'VLKWGK\0?l;2_7>gaKhX`^V
+5@IU6a'pi$=>#,/21T=!7+e?uPb+0Jc>2#fOBTtR92XTbJMeG1d!MeT#iD!*SEtXW_'6$Yq[QVkZa[Zb
+f">o2WpbtH9Uj/P(qJ7I."g*AEn7]ef1:*\L#%O0Fu7sdY]GKM<T8V:9ud#<S#rc6IrX>bLc#N5Cul*<
+p?,f1&E@^+JH%8iN-toMW+P@1*YjV>].A9CiC`Is!dFuF`$)Jp38IE%K?_T[%L#2fX<o<pfug<)c"4;d
+%cusR7u+E3I&l[!rnh@EJ_#Dr7\5\2e9)9@pPr(4IhtJ2D;Oap'Ght=>/[0d+D<S$\s'>_!EP%:s-ORG
+p)R!n*RLk."(CnBbFI'+,5_N`HUF_HVMBGf`QK5ZPTFE]i,W<jYt1i)`/@R_b8t^.c"_l0lC\KGd:$\*
+pPRRdS[#%0=D8`D&do"Dffs6HDLiN\#\F%Ef/$8!X6c6a2i#mIp,9EHHe"K!q:dsjH!UnV'cg<Y)P.M<
+al+1,8gqm_BG=_:SX"-?]hB)8%I=p*XTCNVX+p)?ppS2dO9*d")#MquJot-<J#3h3r4W=]:Nlt1R>;?b
+9CG:qWt:1o]0Y`+VC;RI\T!:!MkI]6c_MFI*s+IPG(oC^Am1cWbAR$s]S[nE&b5_!/)JNhbD\n9-FPK6
+)?V2so@;SabW9-8R.^t9JubYqmp?5BbA(R^6ct)3"`c)oJ,4%P0NMAXp/:?jTTdbaX[WqXK:HhVKOs%*
+T7c+J_X(I9+^&Coipo3)G/=+]0g*bpM`_S/Hf?=q$55(\rP8[M*sS7VZ<teJ?qkH,7]3e[[Zc9A`SJKC
+!>0X&=GhtUKUG=D@Go(Y;+R(+#+87p=?nn$h[Hr')ibgtJQ\'#6j/*D>1%7"LSucpL8^\g.F+0uT";QM
+Rlk_-YN<&k#NP&C-55^VrPJ^!7t`l/`$,sq-N56ZTH"MCj?(IklFJ,CGe0_:Oep'G7adSO+sINb98^sE
+Zo]+t,@>)qoRXnlGa=/E]f/)d8B:]`LX+1:=Irr4J9.9W'*FaV1MOc[]sD4T1fpf$-"F\!po<_YK(C4=
+I6VOiCHP8bDFX5qF@0W;p4h%!XZ%8=kSq@eG9G%;\egS`eAeig&i3XO</$`;7L=0rFT9!J79?4_DIN70
+&bcLDVdq2UPH!IK2U:-OWW%2E:RP0s!Xusi+u>>h9'Zalm=D]Z>t5b/V?9RldDF+5-%*0iIAc]M2c/o(
+=7*,.$^Gi1-IDWbKT?S=IH7=i:^4$`jj5raCS^j*X#.Xt.,!tfrg7!O[d=^,1San]ntIG,*D[CuNm,/Y
+5lP&jX%Fto>PN(s>\e-Wm+?p-20c1UkR3Y^)9:p/!ON\ueDTF-?eAPhoF9f!+4]n9(eQWmoorht;s=n0
+CE""s$0@H@J.bMQb/[!:1U+uD'1&'MBZBN:%OV22don:p/5/\k3MDBn0Hfh?+E;S>PRb]nEAKRc`!hi6
+%.P&D99sU@68!6r+YJ0g>/m4PFn-WR8&EmRi::\qMgBTcq+$XIGt4g2s29Pl2/Ep"c[bMLK>j?cQ?"Vm
+Mor=5(r\$MOF^@4msLeY&COBSJ/4TiSF$GWj^8.h^/(qmg)Wp!NC>E?%CTogZi7mhY7[:&rY#<PfLsg)
+od=OYH7W%][I=>?IFGl]I0W=18e(M)Nk@.E+=U6IEe'9m>OK'dS?B8=j@+Y_iu\P(V2)GI7YWVJ<N>Hr
+G%Bu:'"DPpn\"*m@dth'"`/-1]9cib>e$0OmeOT4j/(Ea!scG)<S,s`"C+psRE/f/G6cG^#Vh]S"/V7l
+L:-JQ0:Fh0RcZotI00M_mf5?[/UhUNhD1F2_,m)/R00H4H92d;.SbfSNhFtKX<>FJI;9lD@>^^qs/;g8
+2FIS449%k0;bt?bSN/q&k!X_NL1iOb:!mGV@iu@lcg%b@&>rEdjUDeTr30X4(7bSSOG96"K*7bg?m:j>
+Os5Fu;Xoo&$&5;o9UBX*FpJEH`Bcmd35eq1=p@9r]ir9=q`Dc$g3p2D[B_Xc%ab2]6"bVT:gg2Cd8P^5
+`uWT4[hNbYDZE/^M9sn\3'B`kg&kp5\l0)eF1OiPJ)7'>QM+,(0[!VbaWsbgbNtiA/=u,R-!\PR2C9L&
+:#9Rb4Mq2o-JZsNH?7/JC.GKGNdcR+RAA!>M2,aoSB%G;,a^3g/<r+he6'?==&/'KbT)$M%q[JJ`eMo*
+Emu-YK@ZT6Pb:IsG2k=WU`q5O)<iL_"f2Rr'bK)'>K;lhGDK1N_QQC,K740.n"R+%i_i0_gL[gqb?XP1
++0)h`R)AkXIo[dcQZe4h5>jt9-LoHuKXHa92*9_"L#Z^G(L<6.E<H$n/4;GWSII1Y$6?NUXDRf2Y6q]H
+CGY9<:O`"c9n?2bp$fZT0aZOPD)1Ug]:t@L`LphHU\8OO@W[B57k\Ku.MK?p!A9.]qA8:$o>9gCECJ["
+h_WfEFtpetfc\VEjC=f,I&DXRjB3G'kfi&=D>nBoep7OYmaRa=]_KPa&/W)_:?)Ds.mm,/qnSK8oIm8<
+ZdV"bY__MT^C"'Ko%<ap>OG(95f'VI^-i@[XRr@%T+,OfcR/LhH9)#-o5U>Is)BBTZqo&I`D$.='=F3A
+hjBH?1Ms2QUW!?Q[$X)]/LCirD9;&QfMk%XkURi`UcF*7G=&J\U">LTlUGPfG9?kR;m*7#Ec!t(CH:e7
+$9&#N&74GT7Ch"-_t0U&j]Y53+MNqZAsh$H`QE(So8`rG^,Nu'k,,b1HQj6,RC;G4%H7=`a5.AD`H%Xd
+(f>)o>%e+sfG<l&aB_S0[u#CXhud+F&dDtT.P**_JY"@rhs1ebF+L7^mXoe+Rl@6rp@f%1'RamR1OFZV
+@*,Fmra+Plp-Mm$OU;c)*?=F`#%PZF7ek:o!hs.$SH;OIc,@drL?A8r]kaiPg9JfIHaAR`2^<hiHW+uB
+gXc**LVt!r!NpM`qgo?3FVe2,3XC-9?UD'cBd'q"`Wo,jJf$_>p]g^DYB(Pg:Dh#gaV,>!f%8[/'_>eb
+C^+pYX+p)&NNmSZ,K_p/Elt\ulQ`L3GmDq3cb`UHXR/r@Puh[mo9(3K+@0VmJP"SB\n\I'gMUDl4a,3I
+_(7mOgdZd%k4K`95[Jb]AX='GU@eXu_?cXKR<7!4IK+[)L;<jL]6g_KGppV3CTaM:h]g&NWd[t/M6J:G
+6PLK[S=lSC4p0%4e@*7Brf5fom4p&j>.HTTJD6CY/p55HZ%ld;VhcQE/E40lk1W.sn#s90nb/uEFJ`8q
+[X5lcAH*[og/(0s6!!-BIRApi?K;R#-g'_T;k1K1?NVfhP?6^JEosC;ghaa4855-KWdfs6#L7r=0\>tA
+K>*!$+76<W[WhG$j;e@%f*AS%dt^sl`m-\&;J<c.LcDmtAV)U+?J?L_jLh^;\6VS`@5D_gFp<RC<b"bJ
+N1^4+QgDUTj."fU3e5t!8q/MTCeWDhV-i-f[6)t]ago,G4`\VK1[;TYd;/:qjS-LU=F0Ie;=2uSdi#8p
+QQL-+K'KrZ*1KQAjJq#bUXi!soo4(,dJ`Z#'qH`C2/jn)&RR@7-6p7g9'M<&@XOF-:&A@,k02$LT&Br`
+LQ%S>&`g>Ag9PiB@HndB31l(OAhJc>EmRC8V-i.<@dTp52?@#(L#;JBoOUDna/79)\S??2W-)!5I1om2
+h5TS-:0[!DBjo=dUXOS,R#cf"(J&E"XPs$`B+gGYm5B$BrSuV)2lB[dgt0Hdb4%\fo*9^.FXEqH\FfMG
+75f*"#RG>Sk<<4m)e/_aCOjRH8G2-ibG0*b42Eek%N6usTWL!PIDXdl7?B]O/&,!q4^bInN.2';B'g:+
+%qmS=naC+6h8TH8Gi@NFN#H2^YD@Gn+<^6-mC*7UeIc)Me"-mFj*kT`3l2n*G9Qm8n:+[qC>KQhWKLIi
+?h\I8)%iDe?gWY4Z!SS;ONi*G!4,g8/FVi(_;$13<f6bNC@Zp\hGp6ISIQA3^-g7oFbkCil(MuOqslQ#
+4?2A8q)^RH3.rt(S^K/t;+'_o/$ZjqobW5=ol7U^]g@-+O@,SthP$'1:_I?@1Aa-^pHgQ0Gis:J/_Bef
+I?Y;.P!Gic6*;Vcq7V=shQNp#ejN?UdR9&3AU!YA)]*C6'Bf,WL.Shc5Zs%OK4u'\5s,]_V9"cqRc'S>
++i(NcHFs-1g:(.HVAW(6ra;%F9JD79-]+K7S%`t)WG9CYr7ZNBGdHgH,.>hHa(%UZQaj'Pb<%F`,V0Mt
+=b\g2)<7a91!]SJmmB\P!r^2\"JcEj-E6,(kd$%m,:U7GF-;\\M1Q9ra=CMujWDRlnfRMXMhH;]??B+9
+h],VQL#CT_RNko$:)UH7b*=C?4Qud3$;!GP:*d`DG9RpC[ck5ln)\TCbM3QkI7WTfi#.OdO=jM$ZA30Z
+ZlOV#TrC9bHci7\SXGuCI'3s#a3sN#o\+*B4UA15qiH5Id$IW&Z[[FodN#f4GKQk,;GMWR>pJ0dG@JQk
+=8,J&SQYMHHp_"u)e/f>4(@;l8H:Cr#KDokl\"&<2;HgFSTlKNhMGE2oM/q2GpaLrB[1#BM;)21j*2&K
+D$XD5N"A063?u6]r0[4>h@L<cjIJhM8`#:<QK4V#_GXgT%E^?p:?83^^(n2_PjcJP]G%b8qZG]3]^sMg
+FSM#]4(<GO\]m?=_<:Uq9-TqI$/@X%?^Rb6Zs<U=$'i"Pl$.ug#Zm^I(p/?LY[REUiIL]o@C%@dkMj^9
+\H]&i"!nHpi_BNE,^)HBmtFPQ"/+MFQ9#,N^XP;tP6GDNQ@qI5+\7h@\u[P?A\nIG2=dUI0G-]uKX`dj
+.>oR%gE>fA=@fHB)#-;3WNeNVOIGJM/csV5Yn#s>):'/FfecfZ03G*975j7P61g!N.F_*/6ScO6r;DqG
+'r$L`%0>bhUmq$DM_e'@j\JqQ]^V4@1E:be]Y99lk'VM+aQ`ERS5VC4\Rnc(S_;>WiP$5G/BU]pI[k#l
+W"$-N*l#[<"M]!cTJ=Z:B%X3@7h)ls474<'qW5F[;C.GdB<=1W\kObT"*L)>GHg<"g<Ues/,@^^@s[P-
+^8(TIK`)g\PB.3V-R-OuM-C800/N<\?f%<`>hUoD*,]u\<Gon[_+`1[NY&t^Stl*cK\dKXa:mOYZ&ZV@
+Chh<(ni8KtRA&fr`$hEdbc1DRMiFIj!Pm<q3onVlNmOcd73'^,%LC'I6/@[7D^Lnp?!K[+'pl\U>S5J,
+X:U.0%!_Z0E2'AR)a_lU\!d)UmE<RSaZj2d0pXK[D,/LW^'p'B^Ti1'pU;bl*<WL@NHYK\TD^g3l5OPp
+$6.4Z^1=CbfpThalX;6SX"ur5'itb4qh8MkCLDe:=UIkdq@\!:%d;jL#NS_o&Q#RcBLd)$5"+euk\!.o
+fpl7&&/E[&&UM(Tm.M_hDIE3O6J9CQ*=FQF3U_]lA0p)72iUc6^2@RS8q%_W.l`/CC"Y8=MjCJ1?,%DB
+N4C4u8X!m*FaQ3VjJTTn+IIWOn"JsI45XYc&<V.U=<@go@AbM3Bkl^VQF*^<G%;O;6-)a0U1@MpjDKF=
+nKm'@lP^ItY*7$XGQYE3:%T]c3N9&DnU8fgr]Jrf<h%BkD(@YGAa`fD`bl*?c4ckQ$Q!h@p+(OBj#1[#
+J!Eu+M_t,+/9DLcY'[%lO]mk`*ConIh`cnKG6hJr%`2aHb7&GE3nr]07+L9doV8qOTFM^6RH_3FSEJ.b
+acGQmV&;p.o4(@0c:)AulTG1hE2bW]S;j+G]"93*YYQ9XL`q@(\/?n[)_C0H@u5Bg7E7lBcMC7dGqM/%
+jqO-"e:GI)h60Zn@.&#+bf1bE=Pl=$'7Z)7cR"^`h'jcmKEfXO+Q";dm%#=rKHu8(^_npAAN?880/,o8
+mESY9NnA.CFcPIIflrIPi#RuVE"JI=0B1/YjonI")FndOB'+6NC>nZB_c(A`mLo5#+=.1]*.el2=5OS'
+XAn6i5tU$!;h*=o)>S1q1DuVZ&(Z+=S#bqoQp51?@Hg4lhX.#$Lp'lS@:h8E\c9<Sk$.bTR==g*gTJ7B
+6gP5sG3TB2'+b[aZsR,Is%81[C4/aKQ5#+N(CN&n`3->5k'Ho^,3K+AH0]R'!)`?'h]^neHg-@D6=n_k
+`gl3gHUK"?r,8A$0=CRfW18c[DKgg3Pj^s*$B)l9aOU36!of3^lZuB1Lu1R2e98i:[\E7Lk*:BKQ%,XL
+5==P?2+osrFs;AKKgPIrhElnKe)+0G\#-)'.YW>N`BUa?;kXZ#()7CqCCQj"3J"/+#'ND#1B$sKTjMO(
+6(rdA4SRRE7=P5`rVaM12a./:[dFEVF4rt6CFhK8R.l:0[lr=Bpu=SG4oWJDrsetRCq'~>
+endstream
+endobj
+7 0 obj
+   178513
+endobj
+3 0 obj
+   << 
+      /Parent null
+      /Type /Pages
+      /MediaBox [0.0000 0.0000 1113.0 1079.0]
+      /Resources 8 0 R
+      /Kids [5 0 R]
+      /Count 1
+   >>
+endobj
+9 0 obj
+   [/PDF /Text /ImageC]
+endobj
+10 0 obj
+   << 
+      /S /Transparency
+      /CS /DeviceRGB
+      /I true
+      /K false
+   >>
+endobj
+11 0 obj
+   << 
+      /Alpha1
+      << 
+         /ca 1.0000
+         /CA 1.0000
+         /BM /Normal
+         /AIS false
+      >>
+   >>
+endobj
+8 0 obj
+   << 
+      /ProcSet 9 0 R
+      /ExtGState 11 0 R
+   >>
+endobj
+xref
+0 12
+0000000000 65535 f 
+0000000015 00000 n 
+0000000323 00000 n 
+0000179265 00000 n 
+0000000453 00000 n 
+0000000529 00000 n 
+0000000617 00000 n 
+0000179240 00000 n 
+0000179719 00000 n 
+0000179435 00000 n 
+0000179474 00000 n 
+0000179576 00000 n 
+trailer
+<< 
+   /Size 12
+   /Root 2 0 R
+   /Info 1 0 R
+>>
+startxref
+179792
+%%EOF
diff --git a/doc/surf++.png b/doc/surf++.png
new file mode 100644 (file)
index 0000000..819cd00
Binary files /dev/null and b/doc/surf++.png differ
diff --git a/doc/surf++.uml b/doc/surf++.uml
new file mode 100644 (file)
index 0000000..2ab1a1c
--- /dev/null
@@ -0,0 +1,105 @@
+@startuml
+
+left to right direction
+
+package "Surf Interface" {
+abstract class Model
+abstract class Resource
+abstract class Action
+}
+
+package "Surf Cpu" {
+abstract class CpuModel <|-- Model
+abstract class Cpu <|-- Resource
+abstract class CpuAction <|-- Action
+}
+
+package "Surf Cpu TI" {
+class CpuTiModel <|-- CpuModel
+class CpuTi <|-- Cpu
+class CpuTiAction <|-- CpuAction
+}
+
+package "Surf Cpu Cas01" {
+class CpuCas01Model <|-- CpuModel
+class CpuCas01 <|-- Cpu
+class CpuCas01Action <|-- CpuAction
+}
+
+
+package "Surf Network" {
+abstract class NetworkModel <|-- Model
+abstract class NetworkLink <|-- Resource
+abstract class NetworkAction <|-- Action
+}
+
+package "Surf Network Cm02" {
+abstract class NetworkCm02Model <|-- NetworkModel
+abstract class NetworkCm02Link <|-- NetworkLink
+abstract class NetworkCm02Action <|-- NetworkAction
+}
+
+package "Surf Network Constant" {
+abstract class NetworkConstantModel <|-- NetworkModel
+abstract class NetworkConstantLink <|-- NetworkLink
+abstract class NetworkConstantAction <|-- NetworkAction
+}
+
+package "Surf Network Smpi" {
+abstract class NetworkSmpiModel <|-- NetworkModel
+abstract class NetworkSmpiLink <|-- NetworkLink
+abstract class NetworkSmpiAction <|-- NetworkAction
+}
+
+package "Surf Network Ns3" {
+abstract class NetworkNs3Model <|-- NetworkModel
+abstract class NetworkNs3Link <|-- NetworkLink
+abstract class NetworkNs3Action <|-- NetworkAction
+}
+
+
+package "Surf Storage" {
+abstract class StorageModel <|-- Model
+abstract class Storage <|-- Resource
+abstract class StorageAction <|-- Action
+}
+
+package "Surf Storage N11" {
+abstract class StorageN11Model <|-- StorageModel
+abstract class StorageN11 <|-- Storage
+abstract class StorageN11Action <|-- StorageAction
+}
+
+
+package "Surf Workstation" {
+abstract class WorkstationModel <|-- Model
+abstract class Workstation <|-- Resource
+abstract class WorkstationAction <|-- Action
+}
+
+package "Surf Workstation Clm03" {
+abstract class WorkstationClm03Model <|-- WorkstationModel
+abstract class WorkstationClm03 <|-- Workstation
+abstract class WorkstationClm03Action <|-- WorkstationAction
+}
+
+package "Surf Workstation ptask L07" {
+abstract class WorkstationL07Model <|-- WorkstationModel
+abstract class WorkstationL07 <|-- Workstation
+abstract class WorkstationL07Action <|-- WorkstationAction
+}
+
+
+package "Surf WorkstationVM" {
+abstract class WorkstationVMModel <|-- WorkstationModel
+abstract class WorkstationVM <|-- Workstation
+abstract class WorkstationVMAction <|-- WorkstationAction
+}
+
+package "Surf WorkstationVM HL13" {
+abstract class WorkstationVMHL13Model <|-- WorkstationModel
+abstract class WorkstationVMHL13 <|-- Workstation
+abstract class WorkstationVMHL13Action <|-- WorkstationAction
+}
+
+@enduml
index d231699..f2e3c50 100644 (file)
@@ -30,7 +30,7 @@ $ java -classpath ${classpath:=.} cloud/Cloud ${srcdir:=.}/platform.xml "--log=r
 > [1000.000000] (1:Master@Jacquelin) Migrate everyone to Fernand
 > [1000.000000] (1:Master@Jacquelin) Migrate VM00fromIntelto Fernand
 > [1000.000000] (5:__pr_mig_tx:VM00(Intel-Provost)@Intel) mig-stage1: remaining_size 1073741824.000000
-> [1147.021183] (5:__pr_mig_tx:VM00(Intel-Provost)@Intel) actual banwdidth 6.964983 (MB/s), threshold 219099.412193
+> [1147.021183] (5:__pr_mig_tx:VM00(Intel-Provost)@Intel) actual bandwidth 6.964983 (MB/s), threshold 219099.412193
 > [1147.021183] (5:__pr_mig_tx:VM00(Intel-Provost)@Intel) mig-stage 2:0 updated_size 0.000000 computed_during_stage1 0.000000 dp_rate 0.000000 dp_cap 966367641.600000
 > [1147.021183] (5:__pr_mig_tx:VM00(Intel-Provost)@Intel) mig-stage2.0: remaining_size 0.000000 (< threshold 219099.412193)
 > [1147.021183] (5:__pr_mig_tx:VM00(Intel-Provost)@Intel) mig-stage3: remaining_size 0.000000
@@ -38,7 +38,7 @@ $ java -classpath ${classpath:=.} cloud/Cloud ${srcdir:=.}/platform.xml "--log=r
 > [1149.029299] (4:__pr_mig_rx:VM00(Intel-Provost)@Provost) set affinity(0x0000@Provost) for VM00
 > [1150.908953] (1:Master@Jacquelin) Migrate VM01fromProvostto Fernand
 > [1150.908953] (9:__pr_mig_tx:VM01(Provost-Provost)@Provost) mig-stage1: remaining_size 1073741824.000000
-> [1153.065257] (9:__pr_mig_tx:VM01(Provost-Provost)@Provost) actual banwdidth 474.886827 (MB/s), threshold 14938647.898422
+> [1153.065257] (9:__pr_mig_tx:VM01(Provost-Provost)@Provost) actual bandwidth 474.886827 (MB/s), threshold 14938647.898422
 > [1153.065257] (9:__pr_mig_tx:VM01(Provost-Provost)@Provost) mig-stage 2:0 updated_size 0.000000 computed_during_stage1 0.000000 dp_rate 0.000000 dp_cap 966367641.600000
 > [1153.065257] (9:__pr_mig_tx:VM01(Provost-Provost)@Provost) mig-stage2.0: remaining_size 0.000000 (< threshold 14938647.898422)
 > [1153.065257] (9:__pr_mig_tx:VM01(Provost-Provost)@Provost) mig-stage3: remaining_size 0.000000
index 5b710fe..3e33b39 100644 (file)
@@ -23,31 +23,31 @@ $ java -classpath ${classpath:=.} cloud/migration/Main ${srcdir:=.}/cloud/migrat
 > [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO] Start migration of VM vm0 to host1
 > [host0:cloud/migration/Test:(1) 0.000000] [jmsg/INFO]     currentLoad:90/ramSize:2048/dpIntensity:70/remaining:8.095E11
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 0.000000] [msg_vm/INFO] mig-stage1: remaining_size 2147483648.000000
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 18.598067] [msg_vm/INFO] actual banwdidth 110.118973 (MB/s), threshold 3464043.375348
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 18.598067] [msg_vm/INFO] actual bandwidth 110.118973 (MB/s), threshold 3464043.375348
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 18.598067] [msg_vm/INFO] mig-stage 2:0 updated_size 1009084906.862392 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 18.598067] [msg_vm/INFO] mig-stage2.0: remaining_size 1009084906.862392 (> threshold 3464043.375348)
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 27.337835] [msg_vm/INFO] actual banwdidth 110.110284, threshold 3463770.024427
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 27.337835] [msg_vm/INFO] actual bandwidth 110.110284, threshold 3463770.024427
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 27.337835] [msg_vm/INFO] mig-stage 2:1 updated_size 474198119.178924 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 27.337835] [msg_vm/INFO] mig-stage2.1: remaining_size 474198119.178924 (> threshold 3463770.024427)
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 31.445594] [msg_vm/INFO] actual banwdidth 110.091798, threshold 3463188.514958
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 31.445594] [msg_vm/INFO] actual bandwidth 110.091798, threshold 3463188.514958
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 31.445594] [msg_vm/INFO] mig-stage 2:2 updated_size 222876798.522755 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 31.445594] [msg_vm/INFO] mig-stage2.2: remaining_size 222876798.522755 (> threshold 3463188.514958)
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 33.376962] [msg_vm/INFO] actual banwdidth 110.052494, threshold 3461952.124955
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 33.376962] [msg_vm/INFO] actual bandwidth 110.052494, threshold 3461952.124955
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 33.376962] [msg_vm/INFO] mig-stage 2:3 updated_size 104791237.544459 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 33.376962] [msg_vm/INFO] mig-stage2.3: remaining_size 104791237.544459 (> threshold 3461952.124955)
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.285733] [msg_vm/INFO] actual banwdidth 109.969020, threshold 3459326.250492
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.285733] [msg_vm/INFO] actual bandwidth 109.969020, threshold 3459326.250492
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.285733] [msg_vm/INFO] mig-stage 2:4 updated_size 49307685.020391 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.285733] [msg_vm/INFO] mig-stage2.4: remaining_size 49307685.020391 (> threshold 3459326.250492)
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.714029] [msg_vm/INFO] actual banwdidth 109.792154, threshold 3453762.521054
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.714029] [msg_vm/INFO] actual bandwidth 109.792154, threshold 3453762.521054
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.714029] [msg_vm/INFO] mig-stage 2:5 updated_size 23238243.968121 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.714029] [msg_vm/INFO] mig-stage2.5: remaining_size 23238243.968121 (> threshold 3453762.521054)
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.916568] [msg_vm/INFO] actual banwdidth 109.419289, threshold 3442033.220071
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.916568] [msg_vm/INFO] actual bandwidth 109.419289, threshold 3442033.220071
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.916568] [msg_vm/INFO] mig-stage 2:6 updated_size 10989284.465950 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 34.916568] [msg_vm/INFO] mig-stage2.6: remaining_size 10989284.465950 (> threshold 3442033.220071)
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.013034] [msg_vm/INFO] actual banwdidth 108.641444, threshold 3417564.332268
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.013034] [msg_vm/INFO] actual bandwidth 108.641444, threshold 3417564.332268
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.013034] [msg_vm/INFO] mig-stage 2:7 updated_size 5234001.988682 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.013034] [msg_vm/INFO] mig-stage2.7: remaining_size 5234001.988682 (> threshold 3417564.332268)
-> [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.059660] [msg_vm/INFO] actual banwdidth 107.053869, threshold 3367623.544281
+> [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.059660] [msg_vm/INFO] actual bandwidth 107.053869, threshold 3367623.544281
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.059660] [msg_vm/INFO] mig-stage 2:8 updated_size 2529831.013694 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.059660] [msg_vm/INFO] mig-stage2.8: remaining_size 2529831.013694 (< threshold 3367623.544281)
 > [host0:__pr_mig_tx:vm0(host0-host1):(16) 35.059660] [msg_vm/INFO] mig-stage3: remaining_size 2529831.013694
@@ -59,28 +59,28 @@ $ java -classpath ${classpath:=.} cloud/migration/Main ${srcdir:=.}/cloud/migrat
 > [host0:cloud/migration/Test:(1) 35.084170] [jmsg/INFO] Start migration of VM vm0 to host0
 > [host0:cloud/migration/Test:(1) 35.084170] [jmsg/INFO]     currentLoad:90/ramSize:2048/dpIntensity:70/remaining:6.220564352570236E11
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 35.084170] [msg_vm/INFO] mig-stage1: remaining_size 2147483648.000000
-> [host1:__pr_mig_tx:vm0(host1-host0):(28) 53.682237] [msg_vm/INFO] actual banwdidth 110.118973 (MB/s), threshold 3464043.375348
+> [host1:__pr_mig_tx:vm0(host1-host0):(28) 53.682237] [msg_vm/INFO] actual bandwidth 110.118973 (MB/s), threshold 3464043.375348
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 53.682237] [msg_vm/INFO] mig-stage 2:0 updated_size 917349915.329448 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 53.682237] [msg_vm/INFO] mig-stage2.0: remaining_size 917349915.329448 (> threshold 3464043.375348)
-> [host1:__pr_mig_tx:vm0(host1-host0):(28) 61.627599] [msg_vm/INFO] actual banwdidth 110.108645, threshold 3463718.461873
+> [host1:__pr_mig_tx:vm0(host1-host0):(28) 61.627599] [msg_vm/INFO] actual bandwidth 110.108645, threshold 3463718.461873
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 61.627599] [msg_vm/INFO] mig-stage 2:1 updated_size 391905106.046906 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 61.627599] [msg_vm/INFO] mig-stage2.1: remaining_size 391905106.046906 (> threshold 3463718.461873)
-> [host1:__pr_mig_tx:vm0(host1-host0):(28) 65.022717] [msg_vm/INFO] actual banwdidth 110.084477, threshold 3462958.209981
+> [host1:__pr_mig_tx:vm0(host1-host0):(28) 65.022717] [msg_vm/INFO] actual bandwidth 110.084477, threshold 3462958.209981
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 65.022717] [msg_vm/INFO] mig-stage 2:2 updated_size 167464266.773127 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 65.022717] [msg_vm/INFO] mig-stage2.2: remaining_size 167464266.773127 (> threshold 3462958.209981)
-> [host1:__pr_mig_tx:vm0(host1-host0):(28) 66.474224] [msg_vm/INFO] actual banwdidth 110.027970, threshold 3461180.656939
+> [host1:__pr_mig_tx:vm0(host1-host0):(28) 66.474224] [msg_vm/INFO] actual bandwidth 110.027970, threshold 3461180.656939
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 66.474224] [msg_vm/INFO] mig-stage 2:3 updated_size 71595605.337913 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 66.474224] [msg_vm/INFO] mig-stage2.3: remaining_size 71595605.337913 (> threshold 3461180.656939)
-> [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.095529] [msg_vm/INFO] actual banwdidth 109.896074, threshold 3457031.577357
+> [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.095529] [msg_vm/INFO] actual bandwidth 109.896074, threshold 3457031.577357
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.095529] [msg_vm/INFO] mig-stage 2:4 updated_size 30645837.890704 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.095529] [msg_vm/INFO] mig-stage2.4: remaining_size 30645837.890704 (> threshold 3457031.577357)
-> [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.362216] [msg_vm/INFO] actual banwdidth 109.589442, threshold 3447385.759089
+> [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.362216] [msg_vm/INFO] actual bandwidth 109.589442, threshold 3447385.759089
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.362216] [msg_vm/INFO] mig-stage 2:5 updated_size 13154371.345477 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.362216] [msg_vm/INFO] mig-stage2.5: remaining_size 13154371.345477 (> threshold 3447385.759089)
-> [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.477431] [msg_vm/INFO] actual banwdidth 108.883138, threshold 3425167.371629
+> [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.477431] [msg_vm/INFO] actual bandwidth 108.883138, threshold 3425167.371629
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.477431] [msg_vm/INFO] mig-stage 2:6 updated_size 5682988.543846 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.477431] [msg_vm/INFO] mig-stage2.6: remaining_size 5682988.543846 (> threshold 3425167.371629)
-> [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.527946] [msg_vm/INFO] actual banwdidth 107.290377, threshold 3375063.431326
+> [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.527946] [msg_vm/INFO] actual bandwidth 107.290377, threshold 3375063.431326
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.527946] [msg_vm/INFO] mig-stage 2:7 updated_size 2491628.685811 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.527946] [msg_vm/INFO] mig-stage2.7: remaining_size 2491628.685811 (< threshold 3375063.431326)
 > [host1:__pr_mig_tx:vm0(host1-host0):(28) 67.527946] [msg_vm/INFO] mig-stage3: remaining_size 2491628.685811
@@ -96,31 +96,31 @@ $ java -classpath ${classpath:=.} cloud/migration/Main ${srcdir:=.}/cloud/migrat
 > [host0:cloud/migration/Test:(1) 67.551019] [jmsg/INFO] Start migration of VM vm0 to host1
 > [host0:cloud/migration/Test:(1) 67.551019] [jmsg/INFO]     currentLoad:80/ramSize:2048/dpIntensity:70/remaining:4.6436485611595026E11
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 67.551019] [msg_vm/INFO] mig-stage1: remaining_size 2147483648.000000
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 86.149086] [msg_vm/INFO] actual banwdidth 110.118973 (MB/s), threshold 3464043.375348
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 86.149086] [msg_vm/INFO] actual bandwidth 110.118973 (MB/s), threshold 3464043.375348
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 86.149086] [msg_vm/INFO] mig-stage 2:0 updated_size 1009084906.862392 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 86.149086] [msg_vm/INFO] mig-stage2.0: remaining_size 1009084906.862392 (> threshold 3464043.375348)
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 94.888854] [msg_vm/INFO] actual banwdidth 110.110284, threshold 3463770.024427
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 94.888854] [msg_vm/INFO] actual bandwidth 110.110284, threshold 3463770.024427
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 94.888854] [msg_vm/INFO] mig-stage 2:1 updated_size 474198119.178924 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 94.888854] [msg_vm/INFO] mig-stage2.1: remaining_size 474198119.178924 (> threshold 3463770.024427)
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 98.996613] [msg_vm/INFO] actual banwdidth 110.091798, threshold 3463188.514958
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 98.996613] [msg_vm/INFO] actual bandwidth 110.091798, threshold 3463188.514958
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 98.996613] [msg_vm/INFO] mig-stage 2:2 updated_size 222876798.522756 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 98.996613] [msg_vm/INFO] mig-stage2.2: remaining_size 222876798.522756 (> threshold 3463188.514958)
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 100.927981] [msg_vm/INFO] actual banwdidth 110.052494, threshold 3461952.124955
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 100.927981] [msg_vm/INFO] actual bandwidth 110.052494, threshold 3461952.124955
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 100.927981] [msg_vm/INFO] mig-stage 2:3 updated_size 104791237.544460 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 100.927981] [msg_vm/INFO] mig-stage2.3: remaining_size 104791237.544460 (> threshold 3461952.124955)
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 101.836752] [msg_vm/INFO] actual banwdidth 109.969020, threshold 3459326.250492
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 101.836752] [msg_vm/INFO] actual bandwidth 109.969020, threshold 3459326.250492
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 101.836752] [msg_vm/INFO] mig-stage 2:4 updated_size 49307685.020392 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 101.836752] [msg_vm/INFO] mig-stage2.4: remaining_size 49307685.020392 (> threshold 3459326.250492)
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.265048] [msg_vm/INFO] actual banwdidth 109.792154, threshold 3453762.521054
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.265048] [msg_vm/INFO] actual bandwidth 109.792154, threshold 3453762.521054
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.265048] [msg_vm/INFO] mig-stage 2:5 updated_size 23238243.968121 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.265048] [msg_vm/INFO] mig-stage2.5: remaining_size 23238243.968121 (> threshold 3453762.521054)
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.467587] [msg_vm/INFO] actual banwdidth 109.419289, threshold 3442033.220071
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.467587] [msg_vm/INFO] actual bandwidth 109.419289, threshold 3442033.220071
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.467587] [msg_vm/INFO] mig-stage 2:6 updated_size 10989284.465950 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.467587] [msg_vm/INFO] mig-stage2.6: remaining_size 10989284.465950 (> threshold 3442033.220071)
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.564053] [msg_vm/INFO] actual banwdidth 108.641444, threshold 3417564.332268
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.564053] [msg_vm/INFO] actual bandwidth 108.641444, threshold 3417564.332268
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.564053] [msg_vm/INFO] mig-stage 2:7 updated_size 5234001.988682 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.564053] [msg_vm/INFO] mig-stage2.7: remaining_size 5234001.988682 (> threshold 3417564.332268)
-> [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.610680] [msg_vm/INFO] actual banwdidth 107.053869, threshold 3367623.544281
+> [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.610680] [msg_vm/INFO] actual bandwidth 107.053869, threshold 3367623.544281
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.610680] [msg_vm/INFO] mig-stage 2:8 updated_size 2529831.013694 computed_during_stage1 99363890485.508911 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.610680] [msg_vm/INFO] mig-stage2.8: remaining_size 2529831.013694 (< threshold 3367623.544281)
 > [host0:__pr_mig_tx:vm0(host0-host1):(39) 102.610680] [msg_vm/INFO] mig-stage3: remaining_size 2529831.013694
@@ -132,28 +132,28 @@ $ java -classpath ${classpath:=.} cloud/migration/Main ${srcdir:=.}/cloud/migrat
 > [host0:cloud/migration/Test:(1) 102.635189] [jmsg/INFO] Start migration of VM vm0 to host0
 > [host0:cloud/migration/Test:(1) 102.635189] [jmsg/INFO]     currentLoad:80/ramSize:2048/dpIntensity:70/remaining:2.7692129137297363E11
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 102.635189] [msg_vm/INFO] mig-stage1: remaining_size 2147483648.000000
-> [host1:__pr_mig_tx:vm0(host1-host0):(51) 121.233256] [msg_vm/INFO] actual banwdidth 110.118973 (MB/s), threshold 3464043.375348
+> [host1:__pr_mig_tx:vm0(host1-host0):(51) 121.233256] [msg_vm/INFO] actual bandwidth 110.118973 (MB/s), threshold 3464043.375348
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 121.233256] [msg_vm/INFO] mig-stage 2:0 updated_size 917349915.329448 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 121.233256] [msg_vm/INFO] mig-stage2.0: remaining_size 917349915.329448 (> threshold 3464043.375348)
-> [host1:__pr_mig_tx:vm0(host1-host0):(51) 129.178618] [msg_vm/INFO] actual banwdidth 110.108645, threshold 3463718.461873
+> [host1:__pr_mig_tx:vm0(host1-host0):(51) 129.178618] [msg_vm/INFO] actual bandwidth 110.108645, threshold 3463718.461873
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 129.178618] [msg_vm/INFO] mig-stage 2:1 updated_size 391905106.046906 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 129.178618] [msg_vm/INFO] mig-stage2.1: remaining_size 391905106.046906 (> threshold 3463718.461873)
-> [host1:__pr_mig_tx:vm0(host1-host0):(51) 132.573736] [msg_vm/INFO] actual banwdidth 110.084477, threshold 3462958.209981
+> [host1:__pr_mig_tx:vm0(host1-host0):(51) 132.573736] [msg_vm/INFO] actual bandwidth 110.084477, threshold 3462958.209981
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 132.573736] [msg_vm/INFO] mig-stage 2:2 updated_size 167464266.773128 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 132.573736] [msg_vm/INFO] mig-stage2.2: remaining_size 167464266.773128 (> threshold 3462958.209981)
-> [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.025243] [msg_vm/INFO] actual banwdidth 110.027970, threshold 3461180.656939
+> [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.025243] [msg_vm/INFO] actual bandwidth 110.027970, threshold 3461180.656939
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.025243] [msg_vm/INFO] mig-stage 2:3 updated_size 71595605.337913 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.025243] [msg_vm/INFO] mig-stage2.3: remaining_size 71595605.337913 (> threshold 3461180.656939)
-> [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.646548] [msg_vm/INFO] actual banwdidth 109.896074, threshold 3457031.577357
+> [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.646548] [msg_vm/INFO] actual bandwidth 109.896074, threshold 3457031.577357
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.646548] [msg_vm/INFO] mig-stage 2:4 updated_size 30645837.890704 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.646548] [msg_vm/INFO] mig-stage2.4: remaining_size 30645837.890704 (> threshold 3457031.577357)
-> [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.913235] [msg_vm/INFO] actual banwdidth 109.589442, threshold 3447385.759089
+> [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.913235] [msg_vm/INFO] actual bandwidth 109.589442, threshold 3447385.759089
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.913235] [msg_vm/INFO] mig-stage 2:5 updated_size 13154371.345477 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 134.913235] [msg_vm/INFO] mig-stage2.5: remaining_size 13154371.345477 (> threshold 3447385.759089)
-> [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.028450] [msg_vm/INFO] actual banwdidth 108.883138, threshold 3425167.371628
+> [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.028450] [msg_vm/INFO] actual bandwidth 108.883138, threshold 3425167.371628
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.028450] [msg_vm/INFO] mig-stage 2:6 updated_size 5682988.543847 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.028450] [msg_vm/INFO] mig-stage2.6: remaining_size 5682988.543847 (> threshold 3425167.371628)
-> [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.078965] [msg_vm/INFO] actual banwdidth 107.290377, threshold 3375063.431326
+> [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.078965] [msg_vm/INFO] actual bandwidth 107.290377, threshold 3375063.431326
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.078965] [msg_vm/INFO] mig-stage 2:7 updated_size 2491628.685810 computed_during_stage1 90330809532.280823 dp_rate 0.010155 dp_cap 1932735283.200000
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.078965] [msg_vm/INFO] mig-stage2.7: remaining_size 2491628.685810 (< threshold 3375063.431326)
 > [host1:__pr_mig_tx:vm0(host1-host0):(51) 135.078965] [msg_vm/INFO] mig-stage3: remaining_size 2491628.685810
index 3f77d90..f954ee3 100644 (file)
@@ -4,6 +4,8 @@ set(example java_io)
 set(sources
   ${CMAKE_CURRENT_SOURCE_DIR}/IO.java
   ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+  ${CMAKE_CURRENT_SOURCE_DIR}/Storage.java
+    ${CMAKE_CURRENT_SOURCE_DIR}/Client.java
   )
 
 if(enable_java)
@@ -25,7 +27,6 @@ set(tesh_files
   )
 set(xml_files
   ${xml_files}
-  ${CMAKE_CURRENT_SOURCE_DIR}/storage.xml
   PARENT_SCOPE
   )
 set(examples_src
diff --git a/examples/java/io/Client.java b/examples/java/io/Client.java
new file mode 100644 (file)
index 0000000..487878c
--- /dev/null
@@ -0,0 +1,78 @@
+/* Copyright (c) 2012-2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+/********************* Files and Storage handling ****************************
+ * This example implements all main storage and file functions of the MSG API
+ *
+ * Scenario :
+ * - display information on the disks mounted by the current host
+ * - create a 200,000 bytes file
+ * - completely read the created file
+ * - write 100,000 bytes in the file
+ * - rename the created file
+ * - attach some user data to a disk
+ * - dump disk's contents
+ *
+******************************************************************************/
+
+package io;
+
+import org.simgrid.msg.Host;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+import org.simgrid.msg.Process;
+import org.simgrid.msg.HostNotFoundException;
+import org.simgrid.msg.Storage;
+
+public class Client extends Process {
+  
+  public Client(Host host, int number) throws HostNotFoundException {
+    super(host, Integer.toString(number), null);
+  }
+  
+  public void main(String[] args) throws MsgException {
+    
+       // Retrieve all mount points of current host
+    Storage[] storages = host.getMountedStorage();
+    
+       for (int i = 0; i < storages.length; i++) {
+               // For each disk mounted on host
+               Msg.info("------------------------------------");
+               Msg.info("Disk name: "+storages[i].getName());
+               Msg.info("Size: "+storages[i].getSize()+" bytes.");
+               Msg.info("Free Size: "+storages[i].getFreeSize()+" bytes.");
+               Msg.info("Used Size: "+storages[i].getUsedSize()+" bytes.");
+               
+       }
+       
+       Storage st = Storage.getByName("Disk2");
+       Msg.info("Disk name: "+st.getName());
+       Msg.info("Attached to host:"+st.getHost());
+       
+       
+       st.setProperty("key","Pierre");
+       Msg.info("Property key: "+st.getProperty("key"));
+       
+       Host h = Host.currentHost();
+       h.setProperty("key2","Pierre");
+       Msg.info("Property key2: "+h.getProperty("key"));
+       
+       
+       String[] attach = h.getAttachedStorage();
+       for (int j = 0; j < attach.length; j++) {
+               Msg.info("Disk attached: "+attach[j]);
+       }
+       
+       Msg.info("**************** ALL *************************");
+       
+       Storage[] stos = Storage.all();
+       for (int i = 0; i < stos.length; i++) {
+               Msg.info("Disk: "+ stos[i].getName());
+       }
+       
+       
+  }
+}
\ No newline at end of file
index a0a88cd..755d68f 100644 (file)
@@ -26,26 +26,26 @@ public class Node extends Process {
                this.number = number;
        }       
        public void main(String[] args) throws MsgException {
-               String mount = "C:";
+               String mount = "c:";
                String filename;
                switch (number) {
                        case 0:
-                               filename = FILENAME1;
+                               filename = mount + FILENAME1;
                        break;
                        case 1:
-                               filename = FILENAME2;
+                               filename = mount + FILENAME2;
                        break;
                        case 2:
-                               filename = FILENAME3;
+                               filename = mount + FILENAME3;
                        break;
                        case 3:
-                               filename = FILENAME4;
+                               filename = mount + FILENAME4;
                        break;
                        default:
-                               filename = FILENAME1;
+                               filename = mount + FILENAME1;
                }
                Msg.info("Open file " + filename);
-               File file = new File(mount,filename);
+               File file = new File(filename);
 
                long read = file.read(10000000,1);
                Msg.info("Having read " + read + " on " + filename);
diff --git a/examples/java/io/Storage.java b/examples/java/io/Storage.java
new file mode 100644 (file)
index 0000000..dc2c9e6
--- /dev/null
@@ -0,0 +1,32 @@
+/* Copyright (c) 2012-2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+
+
+package io;
+
+import org.simgrid.msg.Host;
+import org.simgrid.msg.Msg;
+import org.simgrid.msg.MsgException;
+
+
+
+public class Storage {
+  public static void main(String[] args) throws MsgException {         
+               Msg.init(args);
+               if(args.length < 1) {
+                       Msg.info("Usage   : storage platform_file ");
+               Msg.info("example : storage platform.xml ");
+               System.exit(1);
+           }    
+               Msg.createEnvironment(args[0]);
+               
+               Host[] hosts = Host.all();              
+               new io.Client(hosts[0],0).start();
+
+               Msg.run();              
+    }
+}
diff --git a/examples/java/io/storage.xml b/examples/java/io/storage.xml
deleted file mode 100644 (file)
index 8036fa8..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-
-<platform version="3">
-
-       <AS id="AS0" routing="Full">
-
-               <storage_type id="samsung" model="RAID5" content="content/storage_content.txt" size="500">
-                       <prop id="Bwrite" value="30000000" /> <!-- 30Mo/s -->
-                       <prop id="Bread" value="100000000" /> <!-- 100Mo/s -->
-                       <prop id="Bconnection" value="150000000" /> <!-- 150Mo/s -->
-               </storage_type>
-
-               <storage_type id="crucial" model="SSD" content="content/storage_content.txt" size="500">
-                       <prop id="Bwrite" value="30000000" />
-                       <prop id="Bread" value="100000000" />
-                       <prop id="Bconnection" value="150000000" />
-               </storage_type>
-
-               <storage_type id="wdigital" model="RAID0" content="content/storage_content.txt" size="500">
-                       <prop id="Bwrite" value="30000000" />
-                       <prop id="Bread" value="100000000" />
-                       <prop id="Bconnection" value="150000000" />
-               </storage_type>
-
-               <storage id="Disk1" typeId="crucial"/>
-               <storage id="Disk2" typeId="samsung"/>
-               <storage id="Disk3" typeId="wdigital"/>
-               <storage id="Disk4" typeId="wdigital"/>
-
-               <host id="bob" power="1Gf">
-                       <mount id="Disk1" name="C:"/>                   
-               </host>         
-               
-               <host id="alice" power="1Gf">
-                       <mount id="Disk2" name="C:"/>
-               </host>
-
-               <host id="carl" power="1Gf">            
-                       <mount id="Disk3" name="C:"/>           
-               </host>
-               
-               <host id="denise" power="1Gf">
-                       <mount id="Disk4" name="C:"/>   
-               </host>
-
-               <link id="link1" bandwidth="125MBps" latency="50us" />
-               <link id="link2" bandwidth="125MBps" latency="50us" />
-               <link id="link3" bandwidth="125MBps" latency="50us" />
-       
-               <route src="bob" dst="alice" symmetrical="YES">
-                       <link_ctn id="link1" />
-                       <link_ctn id="link2" />
-                       <link_ctn id="link3" />
-               </route>        
-
-       </AS>
-</platform>
index ccad098..21dde90 100644 (file)
@@ -5,13 +5,13 @@ p Testing the Chord implementation with MSG
 ! output sort
 $ $SG_TEST_EXENV ${bindir:=.}/chord$EXEEXT -nb_bits=6 ${srcdir:=.}/../msg_platform.xml ${srcdir:=.}/chord.xml --cfg=network/crosstraffic:0 --log=msg_chord.thres:verbose "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:@) Configuration change: Set 'network/crosstraffic' to '0'
-> [  0.000000] (6:node@Jean_Yves) Joining the ring with id 14, knowing node 1
 > [  0.000000] (1:node@Gatien) Joining the ring with id 48, knowing node 1
 > [  0.000000] (2:node@McGee) Joining the ring with id 42, knowing node 1
 > [  0.000000] (3:node@iRMX) Joining the ring with id 38, knowing node 1
-> [  0.000000] (7:node@Boivin) Joining the ring with id 8, knowing node 1
-> [  0.000000] (5:node@TeX) Joining the ring with id 21, knowing node 1
 > [  0.000000] (4:node@Geoff) Joining the ring with id 32, knowing node 1
+> [  0.000000] (5:node@TeX) Joining the ring with id 21, knowing node 1
+> [  0.000000] (6:node@Jean_Yves) Joining the ring with id 14, knowing node 1
+> [  0.000000] (7:node@Boivin) Joining the ring with id 8, knowing node 1
 > [  0.000000] (8:node@Jacquelin) My finger table:
 > [  0.000000] (8:node@Jacquelin) Start | Succ 
 > [  0.000000] (8:node@Jacquelin)    2  |   1 
@@ -461,2444 +461,2498 @@ $ $SG_TEST_EXENV ${bindir:=.}/chord$EXEEXT ${srcdir:=.}/../../platforms/cluster.
 > [   0.000000] (0:@) Configuration change: Set 'network/crosstraffic' to '0'
 > [   0.000000] (0:@) Configuration change: Set 'network/model' to 'Constant'
 > [   0.000000] (0:@) Switching workstation model to compound since you changed the network and/or cpu model(s)
-> [   0.000000] (1:node@c-0.me) My finger table:
-> [   0.000000] (1:node@c-0.me) Start | Succ 
-> [   0.000000] (1:node@c-0.me)   43  |  42 
-> [   0.000000] (1:node@c-0.me)   44  |  42 
-> [   0.000000] (1:node@c-0.me)   46  |  42 
-> [   0.000000] (1:node@c-0.me)   50  |  42 
-> [   0.000000] (1:node@c-0.me)   58  |  42 
-> [   0.000000] (1:node@c-0.me)   74  |  42 
-> [   0.000000] (1:node@c-0.me)  106  |  42 
-> [   0.000000] (1:node@c-0.me)  170  |  42 
-> [   0.000000] (1:node@c-0.me)  298  |  42 
-> [   0.000000] (1:node@c-0.me)  554  |  42 
-> [   0.000000] (1:node@c-0.me)  1066  |  42 
-> [   0.000000] (3:node@c-2.me) Joining the ring with id 533744, knowing node 366680
-> [   0.000000] (8:node@c-7.me) Joining the ring with id 10004760, knowing node 16509405
-> [   0.000000] (9:node@c-8.me) Joining the ring with id 6518808, knowing node 42
-> [   0.000000] (1:node@c-0.me)  2090  |  42 
-> [   0.000000] (10:node@c-9.me) Joining the ring with id 2015253, knowing node 1319738
-> [   0.000000] (4:node@c-3.me) Joining the ring with id 1319738, knowing node 42
-> [   0.000000] (7:node@c-6.me) Joining the ring with id 16728096, knowing node 1319738
-> [   0.000000] (2:node@c-1.me) Joining the ring with id 366680, knowing node 42
-> [   0.000000] (5:node@c-4.me) Joining the ring with id 16509405, knowing node 366680
-> [   0.000000] (1:node@c-0.me)  4138  |  42 
-> [   0.000000] (6:node@c-5.me) Joining the ring with id 10874876, knowing node 533744
-> [   0.000000] (1:node@c-0.me)  8234  |  42 
-> [   0.000000] (1:node@c-0.me)  16426  |  42 
-> [   0.000000] (1:node@c-0.me)  32810  |  42 
-> [   0.000000] (1:node@c-0.me)  65578  |  42 
-> [   0.000000] (1:node@c-0.me)  131114  |  42 
-> [   0.000000] (1:node@c-0.me)  262186  |  42 
-> [   0.000000] (1:node@c-0.me)  524330  |  42 
-> [   0.000000] (1:node@c-0.me)  1048618  |  42 
-> [   0.000000] (1:node@c-0.me)  2097194  |  42 
-> [   0.000000] (1:node@c-0.me)  4194346  |  42 
-> [   0.000000] (1:node@c-0.me)  8388650  |  42 
-> [   0.000000] (1:node@c-0.me) Predecessor: -1
-> [   4.000000] (3:node@c-2.me) My finger table:
-> [   4.000000] (6:node@c-5.me) My finger table:
-> [   4.000000] (3:node@c-2.me) Start | Succ 
-> [   4.000000] (6:node@c-5.me) Start | Succ 
-> [   4.000000] (3:node@c-2.me)  533745  | 366680 
-> [   4.000000] (6:node@c-5.me)  10874877  | 533744 
-> [   4.000000] (3:node@c-2.me)  533746  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874878  | 10874876 
-> [   4.000000] (3:node@c-2.me)  533748  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874880  | 10874876 
-> [   4.000000] (3:node@c-2.me)  533752  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874884  | 10874876 
-> [   4.000000] (3:node@c-2.me)  533760  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874892  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10874908  | 10874876 
-> [   4.000000] (3:node@c-2.me)  533776  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [   4.000000] (3:node@c-2.me)  533808  | 533744 
-> [   4.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [   4.000000] (3:node@c-2.me)  533872  | 533744 
-> [   4.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [   4.000000] (3:node@c-2.me)  534000  | 533744 
-> [   4.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [   4.000000] (3:node@c-2.me)  534256  | 533744 
-> [   4.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [   4.000000] (3:node@c-2.me)  534768  | 533744 
-> [   4.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [   4.000000] (3:node@c-2.me)  535792  | 533744 
-> [   4.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [   4.000000] (3:node@c-2.me)  537840  | 533744 
-> [   4.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [   4.000000] (3:node@c-2.me)  541936  | 533744 
-> [   4.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [   4.000000] (3:node@c-2.me)  550128  | 533744 
-> [   4.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [   4.000000] (3:node@c-2.me)  566512  | 533744 
-> [   4.000000] (3:node@c-2.me)  599280  | 533744 
-> [   4.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [   4.000000] (3:node@c-2.me)  664816  | 533744 
-> [   4.000000] (3:node@c-2.me)  795888  | 533744 
-> [   4.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [   4.000000] (3:node@c-2.me)  1058032  | 533744 
-> [   4.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [   4.000000] (3:node@c-2.me)  1582320  | 533744 
-> [   4.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [   4.000000] (3:node@c-2.me)  2630896  | 533744 
-> [   4.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [   4.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [   4.000000] (3:node@c-2.me)  4728048  | 533744 
-> [   4.000000] (6:node@c-5.me) Predecessor: -1
-> [   4.000000] (3:node@c-2.me)  8922352  | 533744 
-> [   4.000000] (3:node@c-2.me) Predecessor: -1
-> [   5.000000] (5:node@c-4.me) My finger table:
-> [   5.000000] (5:node@c-4.me) Start | Succ 
-> [   5.000000] (8:node@c-7.me) My finger table:
-> [   5.000000] (5:node@c-4.me)  16509406  | 366680 
-> [   5.000000] (8:node@c-7.me) Start | Succ 
-> [   5.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509407  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10004762  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509409  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10004764  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004768  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509413  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10004776  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509421  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [   5.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [   5.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [   5.000000] (5:node@c-4.me)  256477  | 16509405 
-> [   5.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [   5.000000] (5:node@c-4.me)  780765  | 16509405 
-> [   5.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [   5.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [   5.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [   5.000000] (8:node@c-7.me) Predecessor: -1
-> [   5.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [   5.000000] (5:node@c-4.me) Predecessor: -1
-> [   5.999900] (2:node@c-1.me) My finger table:
-> [   5.999900] (2:node@c-1.me) Start | Succ 
-> [   5.999900] (2:node@c-1.me)  366681  |  42 
-> [   5.999900] (2:node@c-1.me)  366682  | 366680 
-> [   5.999900] (2:node@c-1.me)  366684  | 366680 
-> [   5.999900] (2:node@c-1.me)  366688  | 366680 
-> [   5.999900] (2:node@c-1.me)  366696  | 366680 
-> [   5.999900] (2:node@c-1.me)  366712  | 366680 
-> [   5.999900] (2:node@c-1.me)  366744  | 366680 
-> [   5.999900] (2:node@c-1.me)  366808  | 366680 
-> [   5.999900] (2:node@c-1.me)  366936  | 366680 
-> [   5.999900] (2:node@c-1.me)  367192  | 366680 
-> [   5.999900] (2:node@c-1.me)  367704  | 366680 
-> [   5.999900] (2:node@c-1.me)  368728  | 366680 
-> [   5.999900] (2:node@c-1.me)  370776  | 366680 
-> [   5.999900] (2:node@c-1.me)  374872  | 366680 
-> [   5.999900] (2:node@c-1.me)  383064  | 366680 
-> [   5.999900] (2:node@c-1.me)  399448  | 366680 
-> [   5.999900] (2:node@c-1.me)  432216  | 366680 
-> [   5.999900] (2:node@c-1.me)  497752  | 366680 
-> [   5.999900] (2:node@c-1.me)  628824  | 366680 
-> [   5.999900] (2:node@c-1.me)  890968  | 366680 
-> [   5.999900] (2:node@c-1.me)  1415256  | 366680 
-> [   5.999900] (2:node@c-1.me)  2463832  | 366680 
-> [   5.999900] (2:node@c-1.me)  4560984  | 366680 
-> [   5.999900] (2:node@c-1.me)  8755288  | 366680 
-> [   5.999900] (2:node@c-1.me) Predecessor: -1
-> [   7.999900] (7:node@c-6.me) My finger table:
-> [   7.999900] (7:node@c-6.me) Start | Succ 
-> [   7.999900] (7:node@c-6.me)  16728097  | 1319738 
-> [   7.999900] (7:node@c-6.me)  16728098  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728100  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728104  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728112  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728128  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728160  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728224  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728352  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728608  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16729120  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16730144  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16732192  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16736288  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16744480  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16760864  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16416  | 16728096 
-> [   7.999900] (7:node@c-6.me)  81952  | 16728096 
-> [   7.999900] (7:node@c-6.me)  213024  | 16728096 
-> [   7.999900] (7:node@c-6.me)  475168  | 16728096 
-> [   7.999900] (7:node@c-6.me)  999456  | 16728096 
-> [   7.999900] (7:node@c-6.me)  2048032  | 16728096 
-> [   7.999900] (7:node@c-6.me)  4145184  | 16728096 
-> [   7.999900] (7:node@c-6.me)  8339488  | 16728096 
-> [   7.999900] (7:node@c-6.me) Predecessor: -1
-> [   8.999900] (10:node@c-9.me) My finger table:
-> [   8.999900] (10:node@c-9.me) Start | Succ 
-> [   8.999900] (10:node@c-9.me)  2015254  | 1319738 
-> [   8.999900] (10:node@c-9.me)  2015255  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015257  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015261  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015269  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015285  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015317  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015381  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015509  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015765  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2016277  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2017301  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2019349  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2023445  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2031637  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2048021  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2080789  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2146325  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2277397  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2539541  | 2015253 
-> [   8.999900] (10:node@c-9.me)  3063829  | 2015253 
-> [   8.999900] (10:node@c-9.me)  4112405  | 2015253 
-> [   8.999900] (10:node@c-9.me)  6209557  | 2015253 
-> [   8.999900] (10:node@c-9.me)  10403861  | 2015253 
-> [   8.999900] (10:node@c-9.me) Predecessor: -1
-> [  10.999800] (4:node@c-3.me) My finger table:
-> [  10.999800] (4:node@c-3.me) Start | Succ 
-> [  10.999800] (4:node@c-3.me)  1319739  |  42 
-> [  10.999800] (4:node@c-3.me)  1319740  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319742  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319746  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319754  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319770  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319802  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319866  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319994  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1320250  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1320762  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1321786  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1323834  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1327930  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1336122  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1352506  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1385274  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1450810  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1581882  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1844026  | 1319738 
-> [  10.999800] (4:node@c-3.me)  2368314  | 1319738 
-> [  10.999800] (4:node@c-3.me)  3416890  | 1319738 
-> [  10.999800] (4:node@c-3.me)  5514042  | 1319738 
-> [  10.999800] (4:node@c-3.me)  9708346  | 1319738 
-> [  10.999800] (4:node@c-3.me) Predecessor: -1
-> [  15.999700] (9:node@c-8.me) My finger table:
-> [  15.999700] (9:node@c-8.me) Start | Succ 
-> [  15.999700] (9:node@c-8.me)  6518809  |  42 
-> [  15.999700] (9:node@c-8.me)  6518810  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518812  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518816  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518824  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518840  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518872  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518936  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6519064  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6519320  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6519832  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6520856  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6522904  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6527000  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6535192  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6551576  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6584344  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6649880  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6780952  | 6518808 
-> [  15.999700] (9:node@c-8.me)  7043096  | 6518808 
-> [  15.999700] (9:node@c-8.me)  7567384  | 6518808 
-> [  15.999700] (9:node@c-8.me)  8615960  | 6518808 
-> [  15.999700] (9:node@c-8.me)  10713112  | 6518808 
-> [  15.999700] (9:node@c-8.me)  14907416  | 6518808 
-> [  15.999700] (9:node@c-8.me) Predecessor: -1
-> [  24.999600] (3:node@c-2.me) My finger table:
-> [  24.999600] (4:node@c-3.me) My finger table:
-> [  24.999600] (3:node@c-2.me) Start | Succ 
-> [  24.999600] (4:node@c-3.me) Start | Succ 
-> [  24.999600] (3:node@c-2.me)  533745  | 366680 
-> [  24.999600] (4:node@c-3.me)  1319739  |  42 
-> [  24.999600] (3:node@c-2.me)  533746  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319740  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533748  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319742  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533752  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319746  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533760  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319754  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533776  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319770  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533808  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319802  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533872  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319866  | 1319738 
-> [  24.999600] (3:node@c-2.me)  534000  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319994  | 1319738 
-> [  24.999600] (3:node@c-2.me)  534256  | 533744 
-> [  24.999600] (4:node@c-3.me)  1320250  | 1319738 
-> [  24.999600] (3:node@c-2.me)  534768  | 533744 
-> [  24.999600] (4:node@c-3.me)  1320762  | 1319738 
-> [  24.999600] (3:node@c-2.me)  535792  | 533744 
-> [  24.999600] (4:node@c-3.me)  1321786  | 1319738 
-> [  24.999600] (3:node@c-2.me)  537840  | 533744 
-> [  24.999600] (4:node@c-3.me)  1323834  | 1319738 
-> [  24.999600] (3:node@c-2.me)  541936  | 533744 
-> [  24.999600] (4:node@c-3.me)  1327930  | 1319738 
-> [  24.999600] (3:node@c-2.me)  550128  | 533744 
-> [  24.999600] (4:node@c-3.me)  1336122  | 1319738 
-> [  24.999600] (3:node@c-2.me)  566512  | 533744 
-> [  24.999600] (4:node@c-3.me)  1352506  | 1319738 
-> [  24.999600] (3:node@c-2.me)  599280  | 533744 
-> [  24.999600] (4:node@c-3.me)  1385274  | 1319738 
-> [  24.999600] (3:node@c-2.me)  664816  | 533744 
-> [  24.999600] (4:node@c-3.me)  1450810  | 1319738 
-> [  24.999600] (3:node@c-2.me)  795888  | 533744 
-> [  24.999600] (4:node@c-3.me)  1581882  | 1319738 
-> [  24.999600] (3:node@c-2.me)  1058032  | 533744 
-> [  24.999600] (4:node@c-3.me)  1844026  | 1319738 
-> [  24.999600] (3:node@c-2.me)  1582320  | 533744 
-> [  24.999600] (4:node@c-3.me)  2368314  | 1319738 
-> [  24.999600] (3:node@c-2.me)  2630896  | 533744 
-> [  24.999600] (4:node@c-3.me)  3416890  | 1319738 
-> [  24.999600] (3:node@c-2.me)  4728048  | 533744 
-> [  24.999600] (4:node@c-3.me)  5514042  | 1319738 
-> [  24.999600] (3:node@c-2.me)  8922352  | 533744 
-> [  24.999600] (4:node@c-3.me)  9708346  | 1319738 
-> [  24.999600] (3:node@c-2.me) Predecessor: 10874876
-> [  24.999600] (4:node@c-3.me) Predecessor: 16728096
-> [  32.999400] (2:node@c-1.me) My finger table:
-> [  32.999400] (2:node@c-1.me) Start | Succ 
-> [  32.999400] (2:node@c-1.me)  366681  |  42 
-> [  32.999400] (2:node@c-1.me)  366682  | 366680 
-> [  32.999400] (2:node@c-1.me)  366684  | 366680 
-> [  32.999400] (2:node@c-1.me)  366688  | 366680 
-> [  32.999400] (2:node@c-1.me)  366696  | 366680 
-> [  32.999400] (2:node@c-1.me)  366712  | 366680 
-> [  32.999400] (2:node@c-1.me)  366744  | 366680 
-> [  32.999400] (2:node@c-1.me)  366808  | 366680 
-> [  32.999400] (2:node@c-1.me)  366936  | 366680 
-> [  32.999400] (2:node@c-1.me)  367192  | 366680 
-> [  32.999400] (2:node@c-1.me)  367704  | 366680 
-> [  32.999400] (2:node@c-1.me)  368728  | 366680 
-> [  32.999400] (2:node@c-1.me)  370776  | 366680 
-> [  32.999400] (2:node@c-1.me)  374872  | 366680 
-> [  32.999400] (2:node@c-1.me)  383064  | 366680 
-> [  32.999400] (2:node@c-1.me)  399448  | 366680 
-> [  32.999400] (2:node@c-1.me)  432216  | 366680 
-> [  32.999400] (2:node@c-1.me)  497752  | 366680 
-> [  32.999400] (2:node@c-1.me)  628824  | 366680 
-> [  32.999400] (2:node@c-1.me)  890968  | 366680 
-> [  32.999400] (2:node@c-1.me)  1415256  | 366680 
-> [  32.999400] (2:node@c-1.me)  2463832  | 366680 
-> [  32.999400] (2:node@c-1.me)  4560984  | 366680 
-> [  32.999400] (2:node@c-1.me)  8755288  | 366680 
-> [  32.999400] (2:node@c-1.me) Predecessor: 533744
-> [  34.999400] (2:node@c-1.me) My finger table:
-> [  34.999400] (2:node@c-1.me) Start | Succ 
-> [  34.999400] (2:node@c-1.me)  366681  |  42 
-> [  34.999400] (2:node@c-1.me)  366682  | 366680 
-> [  34.999400] (2:node@c-1.me)  366684  | 366680 
-> [  34.999400] (2:node@c-1.me)  366688  | 366680 
-> [  34.999400] (2:node@c-1.me)  366696  | 366680 
-> [  34.999400] (2:node@c-1.me)  366712  | 366680 
-> [  34.999400] (2:node@c-1.me)  366744  | 366680 
-> [  34.999400] (2:node@c-1.me)  366808  | 366680 
-> [  34.999400] (2:node@c-1.me)  366936  | 366680 
-> [  34.999400] (2:node@c-1.me)  367192  | 366680 
-> [  34.999400] (2:node@c-1.me)  367704  | 366680 
-> [  34.999400] (2:node@c-1.me)  368728  | 366680 
-> [  34.999400] (2:node@c-1.me)  370776  | 366680 
-> [  34.999400] (2:node@c-1.me)  374872  | 366680 
-> [  34.999400] (2:node@c-1.me)  383064  | 366680 
-> [  34.999400] (2:node@c-1.me)  399448  | 366680 
-> [  34.999400] (2:node@c-1.me)  432216  | 366680 
-> [  34.999400] (2:node@c-1.me)  497752  | 366680 
-> [  34.999400] (2:node@c-1.me)  628824  | 366680 
-> [  34.999400] (2:node@c-1.me)  890968  | 366680 
-> [  34.999400] (2:node@c-1.me)  1415256  | 366680 
-> [  34.999400] (2:node@c-1.me)  2463832  | 366680 
-> [  34.999400] (2:node@c-1.me)  4560984  | 366680 
-> [  34.999400] (2:node@c-1.me)  8755288  | 366680 
-> [  34.999400] (2:node@c-1.me) Predecessor: 16509405
-> [  35.999400] (5:node@c-4.me) My finger table:
-> [  35.999400] (5:node@c-4.me) Start | Succ 
-> [  35.999400] (5:node@c-4.me)  16509406  | 366680 
-> [  35.999400] (5:node@c-4.me)  16509407  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509409  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509413  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509421  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509437  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509469  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509533  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509661  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509917  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16510429  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16511453  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16513501  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16517597  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16525789  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16542173  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16574941  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16640477  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16771549  | 16509405 
-> [  35.999400] (5:node@c-4.me)  256477  | 16509405 
-> [  35.999400] (5:node@c-4.me)  780765  | 16509405 
-> [  35.999400] (5:node@c-4.me)  1829341  | 16509405 
-> [  35.999400] (5:node@c-4.me)  3926493  | 16509405 
-> [  35.999400] (5:node@c-4.me)  8120797  | 16509405 
-> [  35.999400] (5:node@c-4.me) Predecessor: 10004760
-> [  49.999000] (1:node@c-0.me) My finger table:
-> [  49.999000] (1:node@c-0.me) Start | Succ 
-> [  49.999000] (1:node@c-0.me)   43  |  42 
-> [  49.999000] (1:node@c-0.me)   44  |  42 
-> [  49.999000] (1:node@c-0.me)   46  |  42 
-> [  49.999000] (1:node@c-0.me)   50  |  42 
-> [  49.999000] (1:node@c-0.me)   58  |  42 
-> [  49.999000] (1:node@c-0.me)   74  |  42 
-> [  49.999000] (1:node@c-0.me)  106  |  42 
-> [  49.999000] (1:node@c-0.me)  170  |  42 
-> [  49.999000] (1:node@c-0.me)  298  |  42 
-> [  49.999000] (1:node@c-0.me)  554  |  42 
-> [  49.999000] (1:node@c-0.me)  1066  |  42 
-> [  49.999000] (1:node@c-0.me)  2090  |  42 
-> [  49.999000] (1:node@c-0.me)  4138  |  42 
-> [  49.999000] (1:node@c-0.me)  8234  |  42 
-> [  49.999000] (1:node@c-0.me)  16426  |  42 
-> [  49.999000] (1:node@c-0.me)  32810  |  42 
-> [  49.999000] (1:node@c-0.me)  65578  |  42 
-> [  49.999000] (1:node@c-0.me)  131114  |  42 
-> [  49.999000] (1:node@c-0.me)  262186  |  42 
-> [  49.999000] (1:node@c-0.me)  524330  |  42 
-> [  49.999000] (1:node@c-0.me)  1048618  |  42 
-> [  49.999000] (1:node@c-0.me)  2097194  |  42 
-> [  49.999000] (1:node@c-0.me)  4194346  |  42 
-> [  49.999000] (1:node@c-0.me)  8388650  |  42 
-> [  49.999000] (1:node@c-0.me) Predecessor: 366680
-> [  54.998900] (1:node@c-0.me) My finger table:
-> [  54.998900] (1:node@c-0.me) Start | Succ 
-> [  54.998900] (1:node@c-0.me)   43  | 366680 
-> [  54.998900] (1:node@c-0.me)   44  |  42 
-> [  54.998900] (1:node@c-0.me)   46  |  42 
-> [  54.998900] (1:node@c-0.me)   50  |  42 
-> [  54.998900] (1:node@c-0.me)   58  |  42 
-> [  54.998900] (1:node@c-0.me)   74  |  42 
-> [  54.998900] (1:node@c-0.me)  106  |  42 
-> [  54.998900] (1:node@c-0.me)  170  |  42 
-> [  54.998900] (1:node@c-0.me)  298  |  42 
-> [  54.998900] (1:node@c-0.me)  554  |  42 
-> [  54.998900] (1:node@c-0.me)  1066  |  42 
-> [  54.998900] (1:node@c-0.me)  2090  |  42 
-> [  54.998900] (1:node@c-0.me)  4138  |  42 
-> [  54.998900] (1:node@c-0.me)  8234  |  42 
-> [  54.998900] (1:node@c-0.me)  16426  |  42 
-> [  54.998900] (1:node@c-0.me)  32810  |  42 
-> [  54.998900] (1:node@c-0.me)  65578  |  42 
-> [  54.998900] (1:node@c-0.me)  131114  |  42 
-> [  54.998900] (1:node@c-0.me)  262186  |  42 
-> [  54.998900] (1:node@c-0.me)  524330  |  42 
-> [  54.998900] (1:node@c-0.me)  1048618  |  42 
-> [  54.998900] (1:node@c-0.me)  2097194  |  42 
-> [  54.998900] (1:node@c-0.me)  4194346  |  42 
-> [  54.998900] (1:node@c-0.me)  8388650  |  42 
-> [  54.998900] (1:node@c-0.me) Predecessor: 1319738
-> [  91.998400] (7:node@c-6.me) My finger table:
-> [  91.998400] (7:node@c-6.me) Start | Succ 
-> [  91.998400] (7:node@c-6.me)  16728097  | 1319738 
-> [  91.998400] (7:node@c-6.me)  16728098  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728100  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728104  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728112  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728128  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728160  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728224  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728352  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728608  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16729120  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16730144  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16732192  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16736288  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16744480  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16760864  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16416  | 16728096 
-> [  91.998400] (7:node@c-6.me)  81952  | 16728096 
-> [  91.998400] (7:node@c-6.me)  213024  | 16728096 
-> [  91.998400] (7:node@c-6.me)  475168  | 16728096 
-> [  91.998400] (7:node@c-6.me)  999456  | 16728096 
-> [  91.998400] (7:node@c-6.me)  2048032  | 16728096 
-> [  91.998400] (7:node@c-6.me)  4145184  | 16728096 
-> [  91.998400] (7:node@c-6.me)  8339488  | 16728096 
-> [  91.998400] (7:node@c-6.me) Predecessor: 2015253
-> [ 109.998800] (1:node@c-0.me) My finger table:
-> [ 109.998800] (1:node@c-0.me) Start | Succ 
-> [ 109.998800] (1:node@c-0.me)   43  | 366680 
-> [ 109.998800] (1:node@c-0.me)   44  |  42 
-> [ 109.998800] (1:node@c-0.me)   46  |  42 
-> [ 109.998800] (1:node@c-0.me)   50  |  42 
-> [ 109.998800] (1:node@c-0.me)   58  |  42 
-> [ 109.998800] (1:node@c-0.me)   74  |  42 
-> [ 109.998800] (1:node@c-0.me)  106  |  42 
-> [ 109.998800] (1:node@c-0.me)  170  |  42 
-> [ 109.998800] (1:node@c-0.me)  298  |  42 
-> [ 109.998800] (1:node@c-0.me)  554  |  42 
-> [ 109.998800] (1:node@c-0.me)  1066  |  42 
-> [ 109.998800] (1:node@c-0.me)  2090  |  42 
-> [ 109.998800] (1:node@c-0.me)  4138  |  42 
-> [ 109.998800] (1:node@c-0.me)  8234  |  42 
-> [ 109.998800] (1:node@c-0.me)  16426  |  42 
-> [ 109.998800] (1:node@c-0.me)  32810  |  42 
-> [ 109.998800] (1:node@c-0.me)  65578  |  42 
-> [ 109.998800] (1:node@c-0.me)  131114  |  42 
-> [ 109.998800] (1:node@c-0.me)  262186  |  42 
-> [ 109.998800] (1:node@c-0.me)  524330  |  42 
-> [ 109.998800] (1:node@c-0.me)  1048618  |  42 
-> [ 109.998800] (1:node@c-0.me)  2097194  |  42 
-> [ 109.998800] (1:node@c-0.me)  4194346  |  42 
-> [ 109.998800] (1:node@c-0.me)  8388650  |  42 
-> [ 109.998800] (1:node@c-0.me) Predecessor: 6518808
-> [ 163.999100] (2:node@c-1.me) My finger table:
-> [ 163.999100] (2:node@c-1.me) Start | Succ 
-> [ 163.999100] (2:node@c-1.me)  366681  |  42 
-> [ 163.999100] (2:node@c-1.me)  366682  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366684  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366688  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366696  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366712  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366744  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366808  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366936  | 366680 
-> [ 163.999100] (2:node@c-1.me)  367192  | 366680 
-> [ 163.999100] (2:node@c-1.me)  367704  | 366680 
-> [ 163.999100] (2:node@c-1.me)  368728  | 366680 
-> [ 163.999100] (2:node@c-1.me)  370776  | 366680 
-> [ 163.999100] (2:node@c-1.me)  374872  | 366680 
-> [ 163.999100] (2:node@c-1.me)  383064  | 366680 
-> [ 163.999100] (2:node@c-1.me)  399448  | 366680 
-> [ 163.999100] (2:node@c-1.me)  432216  | 366680 
-> [ 163.999100] (2:node@c-1.me)  497752  | 366680 
-> [ 163.999100] (2:node@c-1.me)  628824  | 366680 
-> [ 163.999100] (2:node@c-1.me)  890968  | 366680 
-> [ 163.999100] (2:node@c-1.me)  1415256  | 366680 
-> [ 163.999100] (2:node@c-1.me)  2463832  | 366680 
-> [ 163.999100] (2:node@c-1.me)  4560984  | 366680 
-> [ 163.999100] (2:node@c-1.me)  8755288  | 366680 
-> [ 163.999100] (2:node@c-1.me) Predecessor: 42
-> [ 195.998600] (9:node@c-8.me) My finger table:
-> [ 195.998600] (9:node@c-8.me) Start | Succ 
-> [ 195.998600] (9:node@c-8.me)  6518809  |  42 
-> [ 195.998600] (9:node@c-8.me)  6518810  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518812  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518816  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518824  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518840  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 195.998600] (9:node@c-8.me) Predecessor: 1319738
-> [ 205.998500] (8:node@c-7.me) My finger table:
-> [ 205.998500] (8:node@c-7.me) Start | Succ 
-> [ 205.998500] (8:node@c-7.me)  10004761  | 16509405 
-> [ 205.998500] (8:node@c-7.me)  10004762  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004764  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004768  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004776  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004792  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004824  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004888  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10005016  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10005272  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10005784  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10006808  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10008856  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10012952  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10021144  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10037528  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10070296  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10135832  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10266904  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10529048  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  11053336  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  12101912  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  14199064  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  1616152  | 10004760 
-> [ 205.998500] (8:node@c-7.me) Predecessor: 533744
-> [ 206.998500] (1:node@c-0.me) My finger table:
-> [ 206.998500] (1:node@c-0.me) Start | Succ 
-> [ 206.998500] (1:node@c-0.me)   43  | 366680 
-> [ 206.998500] (1:node@c-0.me)   44  |  42 
-> [ 206.998500] (1:node@c-0.me)   46  |  42 
-> [ 206.998500] (1:node@c-0.me)   50  |  42 
-> [ 206.998500] (1:node@c-0.me)   58  |  42 
-> [ 206.998500] (1:node@c-0.me)   74  |  42 
-> [ 206.998500] (1:node@c-0.me)  106  |  42 
-> [ 206.998500] (1:node@c-0.me)  170  |  42 
-> [ 206.998500] (1:node@c-0.me)  298  |  42 
-> [ 206.998500] (1:node@c-0.me)  554  |  42 
-> [ 206.998500] (1:node@c-0.me)  1066  |  42 
-> [ 206.998500] (1:node@c-0.me)  2090  |  42 
-> [ 206.998500] (1:node@c-0.me)  4138  |  42 
-> [ 206.998500] (1:node@c-0.me)  8234  |  42 
-> [ 206.998500] (1:node@c-0.me)  16426  |  42 
-> [ 206.998500] (1:node@c-0.me)  32810  |  42 
-> [ 206.998500] (1:node@c-0.me)  65578  |  42 
-> [ 206.998500] (1:node@c-0.me)  131114  |  42 
-> [ 206.998500] (1:node@c-0.me)  262186  |  42 
-> [ 206.998500] (1:node@c-0.me)  524330  |  42 
-> [ 206.998500] (1:node@c-0.me)  1048618  |  42 
-> [ 206.998500] (1:node@c-0.me)  2097194  |  42 
-> [ 206.998500] (1:node@c-0.me)  4194346  |  42 
-> [ 206.998500] (1:node@c-0.me)  8388650  |  42 
-> [ 206.998500] (1:node@c-0.me) Predecessor: 16509405
-> [ 244.998100] (4:node@c-3.me) My finger table:
-> [ 244.998100] (4:node@c-3.me) Start | Succ 
-> [ 244.998100] (4:node@c-3.me)  1319739  | 6518808 
-> [ 244.998100] (4:node@c-3.me)  1319740  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319742  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319746  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319754  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319770  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319802  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319866  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319994  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1320250  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1320762  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1321786  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1323834  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1327930  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1336122  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1352506  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1385274  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1450810  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1581882  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1844026  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  2368314  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  3416890  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  5514042  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  9708346  | 1319738 
-> [ 244.998100] (4:node@c-3.me) Predecessor: 366680
-> [ 246.998000] (6:node@c-5.me) My finger table:
-> [ 246.998000] (6:node@c-5.me) Start | Succ 
-> [ 246.998000] (6:node@c-5.me)  10874877  | 533744 
-> [ 246.998000] (6:node@c-5.me)  10874878  | 533744 
-> [ 246.998000] (6:node@c-5.me)  10874880  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10874884  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10874892  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10874908  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10874940  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 246.998000] (6:node@c-5.me) Predecessor: -1
-> [ 247.998000] (7:node@c-6.me) My finger table:
-> [ 247.998000] (7:node@c-6.me) Start | Succ 
-> [ 247.998000] (7:node@c-6.me)  16728097  | 1319738 
-> [ 247.998000] (7:node@c-6.me)  16728098  | 1319738 
-> [ 247.998000] (7:node@c-6.me)  16728100  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728104  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728112  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728128  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16416  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  81952  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  213024  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  475168  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  999456  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 247.998000] (7:node@c-6.me) Predecessor: 2015253
-> [ 249.998000] (10:node@c-9.me) My finger table:
-> [ 249.998000] (10:node@c-9.me) Start | Succ 
-> [ 249.998000] (10:node@c-9.me)  2015254  | 16728096 
-> [ 249.998000] (10:node@c-9.me)  2015255  | 16728096 
-> [ 249.998000] (10:node@c-9.me)  2015257  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015261  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015269  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015285  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015317  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 249.998000] (10:node@c-9.me) Predecessor: -1
-> [ 275.997500] (3:node@c-2.me) My finger table:
-> [ 275.997500] (3:node@c-2.me) Start | Succ 
-> [ 275.997500] (3:node@c-2.me)  533745  | 10004760 
-> [ 275.997500] (3:node@c-2.me)  533746  | 10004760 
-> [ 275.997500] (3:node@c-2.me)  533748  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533752  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533760  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533776  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533808  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533872  | 533744 
-> [ 275.997500] (3:node@c-2.me)  534000  | 533744 
-> [ 275.997500] (3:node@c-2.me)  534256  | 533744 
-> [ 275.997500] (3:node@c-2.me)  534768  | 533744 
-> [ 275.997500] (3:node@c-2.me)  535792  | 533744 
-> [ 275.997500] (3:node@c-2.me)  537840  | 533744 
-> [ 275.997500] (3:node@c-2.me)  541936  | 533744 
-> [ 275.997500] (3:node@c-2.me)  550128  | 533744 
-> [ 275.997500] (3:node@c-2.me)  566512  | 533744 
-> [ 275.997500] (3:node@c-2.me)  599280  | 533744 
-> [ 275.997500] (3:node@c-2.me)  664816  | 533744 
-> [ 275.997500] (3:node@c-2.me)  795888  | 533744 
-> [ 275.997500] (3:node@c-2.me)  1058032  | 533744 
-> [ 275.997500] (3:node@c-2.me)  1582320  | 533744 
-> [ 275.997500] (3:node@c-2.me)  2630896  | 533744 
-> [ 275.997500] (3:node@c-2.me)  4728048  | 533744 
-> [ 275.997500] (3:node@c-2.me)  8922352  | 533744 
-> [ 275.997500] (3:node@c-2.me) Predecessor: 10874876
-> [ 276.997600] (8:node@c-7.me) My finger table:
-> [ 276.997600] (8:node@c-7.me) Start | Succ 
-> [ 276.997600] (8:node@c-7.me)  10004761  | 16509405 
-> [ 276.997600] (8:node@c-7.me)  10004762  | 16509405 
-> [ 276.997600] (8:node@c-7.me)  10004764  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004768  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004776  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004792  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004824  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004888  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10005016  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10005272  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10005784  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10006808  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10008856  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10012952  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10021144  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10037528  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10070296  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10135832  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10266904  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10529048  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  11053336  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  12101912  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  14199064  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  1616152  | 10004760 
-> [ 276.997600] (8:node@c-7.me) Predecessor: 533744
-> [ 276.997600] (2:node@c-1.me) My finger table:
-> [ 276.997600] (2:node@c-1.me) Start | Succ 
-> [ 276.997600] (2:node@c-1.me)  366681  | 1319738 
-> [ 276.997600] (2:node@c-1.me)  366682  | 1319738 
-> [ 276.997600] (2:node@c-1.me)  366684  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366688  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366696  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366712  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366744  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366808  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366936  | 366680 
-> [ 276.997600] (2:node@c-1.me)  367192  | 366680 
-> [ 276.997600] (2:node@c-1.me)  367704  | 366680 
-> [ 276.997600] (2:node@c-1.me)  368728  | 366680 
-> [ 276.997600] (2:node@c-1.me)  370776  | 366680 
-> [ 276.997600] (2:node@c-1.me)  374872  | 366680 
-> [ 276.997600] (2:node@c-1.me)  383064  | 366680 
-> [ 276.997600] (2:node@c-1.me)  399448  | 366680 
-> [ 276.997600] (2:node@c-1.me)  432216  | 366680 
-> [ 276.997600] (2:node@c-1.me)  497752  | 366680 
-> [ 276.997600] (2:node@c-1.me)  628824  | 366680 
-> [ 276.997600] (2:node@c-1.me)  890968  | 366680 
-> [ 276.997600] (2:node@c-1.me)  1415256  | 366680 
-> [ 276.997600] (2:node@c-1.me)  2463832  | 366680 
-> [ 276.997600] (2:node@c-1.me)  4560984  | 366680 
-> [ 276.997600] (2:node@c-1.me)  8755288  | 366680 
-> [ 276.997600] (2:node@c-1.me) Predecessor: 42
-> [ 281.997600] (9:node@c-8.me) My finger table:
-> [ 281.997600] (9:node@c-8.me) Start | Succ 
-> [ 281.997600] (9:node@c-8.me)  6518809  | 10004760 
-> [ 281.997600] (9:node@c-8.me)  6518810  | 10004760 
-> [ 281.997600] (9:node@c-8.me)  6518812  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518816  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518824  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518840  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 281.997600] (9:node@c-8.me) Predecessor: 1319738
-> [ 283.997600] (8:node@c-7.me) My finger table:
-> [ 283.997600] (8:node@c-7.me) Start | Succ 
-> [ 283.997600] (8:node@c-7.me)  10004761  | 16509405 
-> [ 283.997600] (8:node@c-7.me)  10004762  | 16509405 
-> [ 283.997600] (8:node@c-7.me)  10004764  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004768  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004776  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004792  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004824  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004888  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10005016  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10005272  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10005784  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10006808  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10008856  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10012952  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10021144  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10037528  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10070296  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10135832  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10266904  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10529048  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  11053336  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  12101912  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  14199064  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  1616152  | 10004760 
-> [ 283.997600] (8:node@c-7.me) Predecessor: 6518808
-> [ 285.997500] (4:node@c-3.me) My finger table:
-> [ 285.997500] (4:node@c-3.me) Start | Succ 
-> [ 285.997500] (4:node@c-3.me)  1319739  | 6518808 
-> [ 285.997500] (4:node@c-3.me)  1319740  | 6518808 
-> [ 285.997500] (4:node@c-3.me)  1319742  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319746  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319754  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319770  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319802  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319866  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319994  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1320250  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1320762  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1321786  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1323834  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1327930  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1336122  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1352506  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1385274  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1450810  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1581882  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1844026  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  2368314  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  3416890  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  5514042  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  9708346  | 1319738 
-> [ 285.997500] (4:node@c-3.me) Predecessor: 366680
-> [ 285.997500] (1:node@c-0.me) My finger table:
-> [ 285.997500] (1:node@c-0.me) Start | Succ 
-> [ 285.997500] (1:node@c-0.me)   43  | 366680 
-> [ 285.997500] (1:node@c-0.me)   44  | 366680 
-> [ 285.997500] (1:node@c-0.me)   46  |  42 
-> [ 285.997500] (1:node@c-0.me)   50  |  42 
-> [ 285.997500] (1:node@c-0.me)   58  |  42 
-> [ 285.997500] (1:node@c-0.me)   74  |  42 
-> [ 285.997500] (1:node@c-0.me)  106  |  42 
-> [ 285.997500] (1:node@c-0.me)  170  |  42 
-> [ 285.997500] (1:node@c-0.me)  298  |  42 
-> [ 285.997500] (1:node@c-0.me)  554  |  42 
-> [ 285.997500] (1:node@c-0.me)  1066  |  42 
-> [ 285.997500] (1:node@c-0.me)  2090  |  42 
-> [ 285.997500] (1:node@c-0.me)  4138  |  42 
-> [ 285.997500] (1:node@c-0.me)  8234  |  42 
-> [ 285.997500] (1:node@c-0.me)  16426  |  42 
-> [ 285.997500] (1:node@c-0.me)  32810  |  42 
-> [ 285.997500] (1:node@c-0.me)  65578  |  42 
-> [ 285.997500] (1:node@c-0.me)  131114  |  42 
-> [ 285.997500] (1:node@c-0.me)  262186  |  42 
-> [ 285.997500] (1:node@c-0.me)  524330  |  42 
-> [ 285.997500] (1:node@c-0.me)  1048618  |  42 
-> [ 285.997500] (1:node@c-0.me)  2097194  |  42 
-> [ 285.997500] (1:node@c-0.me)  4194346  |  42 
-> [ 285.997500] (1:node@c-0.me)  8388650  |  42 
-> [ 285.997500] (1:node@c-0.me) Predecessor: 16509405
-> [ 290.997500] (5:node@c-4.me) My finger table:
-> [ 290.997500] (5:node@c-4.me) Start | Succ 
-> [ 290.997500] (5:node@c-4.me)  16509406  |  42 
-> [ 290.997500] (5:node@c-4.me)  16509407  |  42 
-> [ 290.997500] (5:node@c-4.me)  16509409  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509413  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509421  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509437  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509469  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509533  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509661  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509917  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16510429  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16511453  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16513501  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16517597  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16525789  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16542173  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16574941  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16640477  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16771549  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  256477  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  780765  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  1829341  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  3926493  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  8120797  | 16509405 
-> [ 290.997500] (5:node@c-4.me) Predecessor: 10004760
-> [ 356.996500] (1:node@c-0.me) My finger table:
-> [ 356.996500] (1:node@c-0.me) Start | Succ 
-> [ 356.996500] (1:node@c-0.me)   43  | 366680 
-> [ 356.996500] (1:node@c-0.me)   44  | 366680 
-> [ 356.996500] (1:node@c-0.me)   46  |  42 
-> [ 356.996500] (1:node@c-0.me)   50  |  42 
-> [ 356.996500] (1:node@c-0.me)   58  |  42 
-> [ 356.996500] (1:node@c-0.me)   74  |  42 
-> [ 356.996500] (1:node@c-0.me)  106  |  42 
-> [ 356.996500] (1:node@c-0.me)  170  |  42 
-> [ 356.996500] (1:node@c-0.me)  298  |  42 
-> [ 356.996500] (1:node@c-0.me)  554  |  42 
-> [ 356.996500] (1:node@c-0.me)  1066  |  42 
-> [ 356.996500] (1:node@c-0.me)  2090  |  42 
-> [ 356.996500] (1:node@c-0.me)  4138  |  42 
-> [ 356.996500] (1:node@c-0.me)  8234  |  42 
-> [ 356.996500] (1:node@c-0.me)  16426  |  42 
-> [ 356.996500] (1:node@c-0.me)  32810  |  42 
-> [ 356.996500] (1:node@c-0.me)  65578  |  42 
-> [ 356.996500] (1:node@c-0.me)  131114  |  42 
-> [ 356.996500] (1:node@c-0.me)  262186  |  42 
-> [ 356.996500] (1:node@c-0.me)  524330  |  42 
-> [ 356.996500] (1:node@c-0.me)  1048618  |  42 
-> [ 356.996500] (1:node@c-0.me)  2097194  |  42 
-> [ 356.996500] (1:node@c-0.me)  4194346  |  42 
-> [ 356.996500] (1:node@c-0.me)  8388650  |  42 
-> [ 356.996500] (1:node@c-0.me) Predecessor: 16728096
-> [ 370.996400] (6:node@c-5.me) My finger table:
-> [ 370.996400] (7:node@c-6.me) My finger table:
-> [ 370.996400] (6:node@c-5.me) Start | Succ 
-> [ 370.996400] (7:node@c-6.me) Start | Succ 
-> [ 370.996400] (6:node@c-5.me)  10874877  | 533744 
-> [ 370.996400] (6:node@c-5.me)  10874878  | 533744 
-> [ 370.996400] (7:node@c-6.me)  16728097  |  42 
-> [ 370.996400] (6:node@c-5.me)  10874880  | 533744 
-> [ 370.996400] (7:node@c-6.me)  16728098  | 1319738 
-> [ 370.996400] (7:node@c-6.me)  16728100  |  42 
-> [ 370.996400] (6:node@c-5.me)  10874884  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728104  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10874892  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728112  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10874908  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728128  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10874940  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728160  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10875004  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728224  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10875132  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728352  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10875388  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728608  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10875900  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16729120  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10876924  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16730144  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10878972  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16732192  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10883068  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16736288  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10891260  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16744480  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10907644  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16760864  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10940412  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16416  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  11005948  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  81952  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  11137020  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  213024  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  11399164  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  475168  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  11923452  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  999456  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  12972028  | 10874876 
-> [ 370.996400] (6:node@c-5.me)  15069180  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  2048032  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  2486268  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  4145184  | 16728096 
-> [ 370.996400] (7:node@c-6.me)  8339488  | 16728096 
-> [ 370.996400] (6:node@c-5.me) Predecessor: -1
-> [ 370.996400] (7:node@c-6.me) Predecessor: 2015253
-> [ 373.996300] (10:node@c-9.me) My finger table:
-> [ 373.996300] (10:node@c-9.me) Start | Succ 
-> [ 373.996300] (10:node@c-9.me)  2015254  | 16728096 
-> [ 373.996300] (10:node@c-9.me)  2015255  | 16728096 
-> [ 373.996300] (10:node@c-9.me)  2015257  | 16728096 
-> [ 373.996300] (10:node@c-9.me)  2015261  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015269  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015285  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015317  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015381  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015509  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015765  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2016277  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2017301  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2019349  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2023445  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2031637  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2048021  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2080789  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2146325  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2277397  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2539541  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  3063829  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  4112405  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  6209557  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  10403861  | 2015253 
-> [ 373.996300] (10:node@c-9.me) Predecessor: -1
-> [ 387.996200] (7:node@c-6.me) My finger table:
-> [ 387.996200] (7:node@c-6.me) Start | Succ 
-> [ 387.996200] (7:node@c-6.me)  16728097  |  42 
-> [ 387.996200] (7:node@c-6.me)  16728098  | 1319738 
-> [ 387.996200] (7:node@c-6.me)  16728100  |  42 
-> [ 387.996200] (7:node@c-6.me)  16728104  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728112  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728128  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728160  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728224  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728352  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728608  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16729120  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16730144  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16732192  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16736288  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16744480  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16760864  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16416  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  81952  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  213024  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  475168  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  999456  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  2048032  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  4145184  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  8339488  | 16728096 
-> [ 387.996200] (7:node@c-6.me) Predecessor: 16509405
-> [ 390.996100] (4:node@c-3.me) My finger table:
-> [ 390.996100] (4:node@c-3.me) Start | Succ 
-> [ 390.996100] (4:node@c-3.me)  1319739  | 6518808 
-> [ 390.996100] (4:node@c-3.me)  1319740  | 6518808 
-> [ 390.996100] (4:node@c-3.me)  1319742  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319746  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319754  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319770  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319802  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319866  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319994  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1320250  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1320762  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1321786  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1323834  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1327930  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1336122  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1352506  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1385274  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1450810  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1581882  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1844026  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  2368314  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  3416890  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  5514042  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  9708346  | 1319738 
-> [ 390.996100] (4:node@c-3.me) Predecessor: 533744
-> [ 397.996000] (8:node@c-7.me) My finger table:
-> [ 397.996000] (8:node@c-7.me) Start | Succ 
-> [ 397.996000] (8:node@c-7.me)  10004761  | 16509405 
-> [ 397.996000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 397.996000] (8:node@c-7.me)  10004764  | 16509405 
-> [ 397.996000] (8:node@c-7.me)  10004768  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10004776  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10004792  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10004824  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 397.996000] (8:node@c-7.me) Predecessor: 6518808
-> [ 399.996000] (2:node@c-1.me) My finger table:
-> [ 399.996000] (2:node@c-1.me) Start | Succ 
-> [ 399.996000] (2:node@c-1.me)  366681  | 533744 
-> [ 399.996000] (2:node@c-1.me)  366682  | 1319738 
-> [ 399.996000] (2:node@c-1.me)  366684  | 533744 
-> [ 399.996000] (2:node@c-1.me)  366688  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366696  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366712  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366744  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366808  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366936  | 366680 
-> [ 399.996000] (2:node@c-1.me)  367192  | 366680 
-> [ 399.996000] (2:node@c-1.me)  367704  | 366680 
-> [ 399.996000] (2:node@c-1.me)  368728  | 366680 
-> [ 399.996000] (2:node@c-1.me)  370776  | 366680 
-> [ 399.996000] (2:node@c-1.me)  374872  | 366680 
-> [ 399.996000] (2:node@c-1.me)  383064  | 366680 
-> [ 399.996000] (2:node@c-1.me)  399448  | 366680 
-> [ 399.996000] (2:node@c-1.me)  432216  | 366680 
-> [ 399.996000] (2:node@c-1.me)  497752  | 366680 
-> [ 399.996000] (2:node@c-1.me)  628824  | 366680 
-> [ 399.996000] (2:node@c-1.me)  890968  | 366680 
-> [ 399.996000] (2:node@c-1.me)  1415256  | 366680 
-> [ 399.996000] (2:node@c-1.me)  2463832  | 366680 
-> [ 399.996000] (2:node@c-1.me)  4560984  | 366680 
-> [ 399.996000] (2:node@c-1.me)  8755288  | 366680 
-> [ 399.996000] (2:node@c-1.me) Predecessor: 42
-> [ 400.996000] (3:node@c-2.me) My finger table:
-> [ 400.996000] (3:node@c-2.me) Start | Succ 
-> [ 400.996000] (3:node@c-2.me)  533745  | 1319738 
-> [ 400.996000] (3:node@c-2.me)  533746  | 10004760 
-> [ 400.996000] (3:node@c-2.me)  533748  | 1319738 
-> [ 400.996000] (3:node@c-2.me)  533752  | 533744 
-> [ 400.996000] (3:node@c-2.me)  533760  | 533744 
-> [ 400.996000] (3:node@c-2.me)  533776  | 533744 
-> [ 400.996000] (3:node@c-2.me)  533808  | 533744 
-> [ 400.996000] (3:node@c-2.me)  533872  | 533744 
-> [ 400.996000] (3:node@c-2.me)  534000  | 533744 
-> [ 400.996000] (3:node@c-2.me)  534256  | 533744 
-> [ 400.996000] (3:node@c-2.me)  534768  | 533744 
-> [ 400.996000] (3:node@c-2.me)  535792  | 533744 
-> [ 400.996000] (3:node@c-2.me)  537840  | 533744 
-> [ 400.996000] (3:node@c-2.me)  541936  | 533744 
-> [ 400.996000] (3:node@c-2.me)  550128  | 533744 
-> [ 400.996000] (3:node@c-2.me)  566512  | 533744 
-> [ 400.996000] (3:node@c-2.me)  599280  | 533744 
-> [ 400.996000] (3:node@c-2.me)  664816  | 533744 
-> [ 400.996000] (3:node@c-2.me)  795888  | 533744 
-> [ 400.996000] (3:node@c-2.me)  1058032  | 533744 
-> [ 400.996000] (3:node@c-2.me)  1582320  | 533744 
-> [ 400.996000] (3:node@c-2.me)  2630896  | 533744 
-> [ 400.996000] (3:node@c-2.me)  4728048  | 533744 
-> [ 400.996000] (3:node@c-2.me)  8922352  | 533744 
-> [ 400.996000] (3:node@c-2.me) Predecessor: 10874876
-> [ 402.996000] (9:node@c-8.me) My finger table:
-> [ 402.996000] (9:node@c-8.me) Start | Succ 
-> [ 402.996000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 402.996000] (9:node@c-8.me)  6518810  | 10004760 
-> [ 402.996000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 402.996000] (9:node@c-8.me)  6518816  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6518824  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 402.996000] (9:node@c-8.me) Predecessor: 1319738
-> [ 406.995900] (4:node@c-3.me) My finger table:
-> [ 406.995900] (4:node@c-3.me) Start | Succ 
-> [ 406.995900] (4:node@c-3.me)  1319739  | 6518808 
-> [ 406.995900] (4:node@c-3.me)  1319740  | 6518808 
-> [ 406.995900] (4:node@c-3.me)  1319742  | 6518808 
-> [ 406.995900] (4:node@c-3.me)  1319746  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319754  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319770  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319802  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319866  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319994  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1320250  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1320762  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1321786  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1323834  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1327930  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1336122  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1352506  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1385274  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1450810  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1581882  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1844026  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  2368314  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  3416890  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  5514042  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  9708346  | 1319738 
-> [ 406.995900] (4:node@c-3.me) Predecessor: 533744
-> [ 409.995900] (1:node@c-0.me) My finger table:
-> [ 409.995900] (1:node@c-0.me) Start | Succ 
-> [ 409.995900] (1:node@c-0.me)   43  | 366680 
-> [ 409.995900] (1:node@c-0.me)   44  | 366680 
-> [ 409.995900] (1:node@c-0.me)   46  | 366680 
-> [ 409.995900] (1:node@c-0.me)   50  |  42 
-> [ 409.995900] (1:node@c-0.me)   58  |  42 
-> [ 409.995900] (1:node@c-0.me)   74  |  42 
-> [ 409.995900] (1:node@c-0.me)  106  |  42 
-> [ 409.995900] (1:node@c-0.me)  170  |  42 
-> [ 409.995900] (1:node@c-0.me)  298  |  42 
-> [ 409.995900] (1:node@c-0.me)  554  |  42 
-> [ 409.995900] (1:node@c-0.me)  1066  |  42 
-> [ 409.995900] (1:node@c-0.me)  2090  |  42 
-> [ 409.995900] (1:node@c-0.me)  4138  |  42 
-> [ 409.995900] (1:node@c-0.me)  8234  |  42 
-> [ 409.995900] (1:node@c-0.me)  16426  |  42 
-> [ 409.995900] (1:node@c-0.me)  32810  |  42 
-> [ 409.995900] (1:node@c-0.me)  65578  |  42 
-> [ 409.995900] (1:node@c-0.me)  131114  |  42 
-> [ 409.995900] (1:node@c-0.me)  262186  |  42 
-> [ 409.995900] (1:node@c-0.me)  524330  |  42 
-> [ 409.995900] (1:node@c-0.me)  1048618  |  42 
-> [ 409.995900] (1:node@c-0.me)  2097194  |  42 
-> [ 409.995900] (1:node@c-0.me)  4194346  |  42 
-> [ 409.995900] (1:node@c-0.me)  8388650  |  42 
-> [ 409.995900] (1:node@c-0.me) Predecessor: 16728096
-> [ 413.995800] (5:node@c-4.me) My finger table:
-> [ 413.995800] (5:node@c-4.me) Start | Succ 
-> [ 413.995800] (5:node@c-4.me)  16509406  | 16728096 
-> [ 413.995800] (5:node@c-4.me)  16509407  |  42 
-> [ 413.995800] (5:node@c-4.me)  16509409  | 16728096 
-> [ 413.995800] (5:node@c-4.me)  16509413  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509421  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509437  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509469  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509533  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509661  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509917  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16510429  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16511453  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16513501  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16517597  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16525789  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16542173  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16574941  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16640477  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16771549  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  256477  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  780765  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  1829341  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  3926493  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  8120797  | 16509405 
-> [ 413.995800] (5:node@c-4.me) Predecessor: 10004760
-> [ 428.995800] (3:node@c-2.me) My finger table:
-> [ 428.995800] (3:node@c-2.me) Start | Succ 
-> [ 428.995800] (3:node@c-2.me)  533745  | 1319738 
-> [ 428.995800] (3:node@c-2.me)  533746  | 10004760 
-> [ 428.995800] (3:node@c-2.me)  533748  | 1319738 
-> [ 428.995800] (3:node@c-2.me)  533752  | 533744 
-> [ 428.995800] (3:node@c-2.me)  533760  | 533744 
-> [ 428.995800] (3:node@c-2.me)  533776  | 533744 
-> [ 428.995800] (3:node@c-2.me)  533808  | 533744 
-> [ 428.995800] (3:node@c-2.me)  533872  | 533744 
-> [ 428.995800] (3:node@c-2.me)  534000  | 533744 
-> [ 428.995800] (3:node@c-2.me)  534256  | 533744 
-> [ 428.995800] (3:node@c-2.me)  534768  | 533744 
-> [ 428.995800] (3:node@c-2.me)  535792  | 533744 
-> [ 428.995800] (3:node@c-2.me)  537840  | 533744 
-> [ 428.995800] (3:node@c-2.me)  541936  | 533744 
-> [ 428.995800] (3:node@c-2.me)  550128  | 533744 
-> [ 428.995800] (3:node@c-2.me)  566512  | 533744 
-> [ 428.995800] (3:node@c-2.me)  599280  | 533744 
-> [ 428.995800] (3:node@c-2.me)  664816  | 533744 
-> [ 428.995800] (3:node@c-2.me)  795888  | 533744 
-> [ 428.995800] (3:node@c-2.me)  1058032  | 533744 
-> [ 428.995800] (3:node@c-2.me)  1582320  | 533744 
-> [ 428.995800] (3:node@c-2.me)  2630896  | 533744 
-> [ 428.995800] (3:node@c-2.me)  4728048  | 533744 
-> [ 428.995800] (3:node@c-2.me)  8922352  | 533744 
-> [ 428.995800] (3:node@c-2.me) Predecessor: 366680
-> [ 494.995500] (7:node@c-6.me) My finger table:
-> [ 494.995500] (7:node@c-6.me) Start | Succ 
-> [ 494.995500] (7:node@c-6.me)  16728097  |  42 
-> [ 494.995500] (7:node@c-6.me)  16728098  | 1319738 
-> [ 494.995500] (7:node@c-6.me)  16728100  |  42 
-> [ 494.995500] (7:node@c-6.me)  16728104  |  42 
-> [ 494.995500] (7:node@c-6.me)  16728112  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728128  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728160  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728224  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728352  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728608  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16729120  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16730144  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16732192  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16736288  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16744480  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16760864  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16416  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  81952  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  213024  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  475168  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  999456  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  2048032  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  4145184  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  8339488  | 16728096 
-> [ 494.995500] (7:node@c-6.me) Predecessor: 16509405
-> [ 499.995500] (10:node@c-9.me) My finger table:
-> [ 499.995500] (10:node@c-9.me) Start | Succ 
-> [ 499.995500] (10:node@c-9.me)  2015254  | 10004760 
-> [ 499.995500] (10:node@c-9.me)  2015255  | 16728096 
-> [ 499.995500] (10:node@c-9.me)  2015257  | 16728096 
-> [ 499.995500] (10:node@c-9.me)  2015261  | 10004760 
-> [ 499.995500] (10:node@c-9.me)  2015269  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015285  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015317  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015381  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015509  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015765  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2016277  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2017301  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2019349  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2023445  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2031637  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2048021  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2080789  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2146325  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2277397  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2539541  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  3063829  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  4112405  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  6209557  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  10403861  | 2015253 
-> [ 499.995500] (10:node@c-9.me) Predecessor: -1
-> [ 501.995400] (6:node@c-5.me) My finger table:
-> [ 501.995400] (6:node@c-5.me) Start | Succ 
-> [ 501.995400] (6:node@c-5.me)  10874877  |  42 
-> [ 501.995400] (6:node@c-5.me)  10874878  | 533744 
-> [ 501.995400] (6:node@c-5.me)  10874880  | 533744 
-> [ 501.995400] (6:node@c-5.me)  10874884  |  42 
-> [ 501.995400] (6:node@c-5.me)  10874892  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10874908  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10874940  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10875004  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10875132  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10875388  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10875900  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10876924  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10878972  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10883068  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10891260  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10907644  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10940412  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  11005948  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  11137020  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  11399164  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  11923452  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  12972028  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  15069180  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  2486268  | 10874876 
-> [ 501.995400] (6:node@c-5.me) Predecessor: -1
-> [ 523.995200] (8:node@c-7.me) My finger table:
-> [ 523.995200] (8:node@c-7.me) Start | Succ 
-> [ 523.995200] (8:node@c-7.me)  10004761  | 16509405 
-> [ 523.995200] (8:node@c-7.me)  10004762  | 16509405 
-> [ 523.995200] (8:node@c-7.me)  10004764  | 16509405 
-> [ 523.995200] (8:node@c-7.me)  10004768  | 16509405 
-> [ 523.995200] (8:node@c-7.me)  10004776  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10004792  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10004824  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10004888  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10005016  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10005272  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10005784  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10006808  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10008856  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10012952  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10021144  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10037528  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10070296  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10135832  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10266904  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10529048  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  11053336  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  12101912  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  14199064  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  1616152  | 10004760 
-> [ 523.995200] (8:node@c-7.me) Predecessor: 6518808
-> [ 532.995100] (3:node@c-2.me) My finger table:
-> [ 532.995100] (3:node@c-2.me) Start | Succ 
-> [ 532.995100] (3:node@c-2.me)  533745  | 1319738 
-> [ 532.995100] (3:node@c-2.me)  533746  | 10004760 
-> [ 532.995100] (3:node@c-2.me)  533748  | 1319738 
-> [ 532.995100] (3:node@c-2.me)  533752  | 1319738 
-> [ 532.995100] (3:node@c-2.me)  533760  | 533744 
-> [ 532.995100] (3:node@c-2.me)  533776  | 533744 
-> [ 532.995100] (3:node@c-2.me)  533808  | 533744 
-> [ 532.995100] (3:node@c-2.me)  533872  | 533744 
-> [ 532.995100] (3:node@c-2.me)  534000  | 533744 
-> [ 532.995100] (3:node@c-2.me)  534256  | 533744 
-> [ 532.995100] (3:node@c-2.me)  534768  | 533744 
-> [ 532.995100] (3:node@c-2.me)  535792  | 533744 
-> [ 532.995100] (3:node@c-2.me)  537840  | 533744 
-> [ 532.995100] (3:node@c-2.me)  541936  | 533744 
-> [ 532.995100] (3:node@c-2.me)  550128  | 533744 
-> [ 532.995100] (3:node@c-2.me)  566512  | 533744 
-> [ 532.995100] (3:node@c-2.me)  599280  | 533744 
-> [ 532.995100] (3:node@c-2.me)  664816  | 533744 
-> [ 532.995100] (3:node@c-2.me)  795888  | 533744 
-> [ 532.995100] (3:node@c-2.me)  1058032  | 533744 
-> [ 532.995100] (3:node@c-2.me)  1582320  | 533744 
-> [ 532.995100] (3:node@c-2.me)  2630896  | 533744 
-> [ 532.995100] (3:node@c-2.me)  4728048  | 533744 
-> [ 532.995100] (3:node@c-2.me)  8922352  | 533744 
-> [ 532.995100] (3:node@c-2.me) Predecessor: 366680
-> [ 534.995100] (4:node@c-3.me) My finger table:
-> [ 534.995100] (9:node@c-8.me) My finger table:
-> [ 534.995100] (4:node@c-3.me) Start | Succ 
-> [ 534.995100] (9:node@c-8.me) Start | Succ 
-> [ 534.995100] (4:node@c-3.me)  1319739  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6518809  | 10004760 
-> [ 534.995100] (4:node@c-3.me)  1319740  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6518810  | 10004760 
-> [ 534.995100] (4:node@c-3.me)  1319742  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6518812  | 10004760 
-> [ 534.995100] (4:node@c-3.me)  1319746  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6518816  | 10004760 
-> [ 534.995100] (4:node@c-3.me)  1319754  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6518824  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1319770  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6518840  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6518872  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1319802  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6518936  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1319866  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6519064  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1319994  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6519320  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1320250  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6519832  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1320762  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6520856  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1321786  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6522904  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1323834  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6527000  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1327930  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6535192  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1336122  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6551576  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1352506  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6584344  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1385274  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6649880  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1450810  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6780952  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1581882  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  7043096  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1844026  | 1319738 
-> [ 534.995100] (4:node@c-3.me)  2368314  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  7567384  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  3416890  | 1319738 
-> [ 534.995100] (4:node@c-3.me)  5514042  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  8615960  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  9708346  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  10713112  | 6518808 
-> [ 534.995100] (4:node@c-3.me) Predecessor: 533744
-> [ 534.995100] (9:node@c-8.me)  14907416  | 6518808 
-> [ 534.995100] (9:node@c-8.me) Predecessor: 1319738
-> [ 535.995000] (5:node@c-4.me) My finger table:
-> [ 535.995000] (5:node@c-4.me) Start | Succ 
-> [ 535.995000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 535.995000] (5:node@c-4.me)  16509407  |  42 
-> [ 535.995000] (5:node@c-4.me)  16509409  | 16728096 
-> [ 535.995000] (5:node@c-4.me)  16509413  | 16728096 
-> [ 535.995000] (5:node@c-4.me)  16509421  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509437  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509469  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  256477  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  780765  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 535.995000] (5:node@c-4.me) Predecessor: 10004760
-> [ 550.994900] (1:node@c-0.me) My finger table:
-> [ 550.994900] (1:node@c-0.me) Start | Succ 
-> [ 550.994900] (1:node@c-0.me)   43  | 366680 
-> [ 550.994900] (1:node@c-0.me)   44  | 366680 
-> [ 550.994900] (1:node@c-0.me)   46  | 366680 
-> [ 550.994900] (1:node@c-0.me)   50  | 366680 
-> [ 550.994900] (1:node@c-0.me)   58  |  42 
-> [ 550.994900] (1:node@c-0.me)   74  |  42 
-> [ 550.994900] (1:node@c-0.me)  106  |  42 
-> [ 550.994900] (1:node@c-0.me)  170  |  42 
-> [ 550.994900] (1:node@c-0.me)  298  |  42 
-> [ 550.994900] (1:node@c-0.me)  554  |  42 
-> [ 550.994900] (1:node@c-0.me)  1066  |  42 
-> [ 550.994900] (1:node@c-0.me)  2090  |  42 
-> [ 550.994900] (1:node@c-0.me)  4138  |  42 
-> [ 550.994900] (1:node@c-0.me)  8234  |  42 
-> [ 550.994900] (1:node@c-0.me)  16426  |  42 
-> [ 550.994900] (1:node@c-0.me)  32810  |  42 
-> [ 550.994900] (1:node@c-0.me)  65578  |  42 
-> [ 550.994900] (1:node@c-0.me)  131114  |  42 
-> [ 550.994900] (1:node@c-0.me)  262186  |  42 
-> [ 550.994900] (1:node@c-0.me)  524330  |  42 
-> [ 550.994900] (1:node@c-0.me)  1048618  |  42 
-> [ 550.994900] (1:node@c-0.me)  2097194  |  42 
-> [ 550.994900] (1:node@c-0.me)  4194346  |  42 
-> [ 550.994900] (1:node@c-0.me)  8388650  |  42 
-> [ 550.994900] (1:node@c-0.me) Predecessor: 16728096
-> [ 572.994600] (9:node@c-8.me) My finger table:
-> [ 572.994600] (9:node@c-8.me) Start | Succ 
-> [ 572.994600] (9:node@c-8.me)  6518809  | 10004760 
-> [ 572.994600] (9:node@c-8.me)  6518810  | 10004760 
-> [ 572.994600] (9:node@c-8.me)  6518812  | 10004760 
-> [ 572.994600] (9:node@c-8.me)  6518816  | 10004760 
-> [ 572.994600] (9:node@c-8.me)  6518824  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6518840  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 572.994600] (9:node@c-8.me) Predecessor: 2015253
-> [ 589.994400] (5:node@c-4.me) My finger table:
-> [ 589.994400] (5:node@c-4.me) Start | Succ 
-> [ 589.994400] (5:node@c-4.me)  16509406  | 16728096 
-> [ 589.994400] (5:node@c-4.me)  16509407  |  42 
-> [ 589.994400] (5:node@c-4.me)  16509409  | 16728096 
-> [ 589.994400] (5:node@c-4.me)  16509413  | 16728096 
-> [ 589.994400] (5:node@c-4.me)  16509421  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509437  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509469  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509533  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509661  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509917  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16510429  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16511453  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16513501  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16517597  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16525789  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16542173  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16574941  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16640477  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16771549  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  256477  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  780765  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  1829341  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  3926493  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  8120797  | 16509405 
-> [ 589.994400] (5:node@c-4.me) Predecessor: 10874876
-> [ 622.994100] (10:node@c-9.me) My finger table:
-> [ 622.994100] (10:node@c-9.me) Start | Succ 
-> [ 622.994100] (10:node@c-9.me)  2015254  | 6518808 
-> [ 622.994100] (10:node@c-9.me)  2015255  | 16728096 
-> [ 622.994100] (10:node@c-9.me)  2015257  | 16728096 
-> [ 622.994100] (10:node@c-9.me)  2015261  | 10004760 
-> [ 622.994100] (10:node@c-9.me)  2015269  | 6518808 
-> [ 622.994100] (10:node@c-9.me)  2015285  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2015317  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2015381  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2015509  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2015765  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2016277  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2017301  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2019349  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2023445  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2031637  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2048021  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2080789  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2146325  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2277397  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2539541  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  3063829  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  4112405  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  6209557  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  10403861  | 2015253 
-> [ 622.994100] (10:node@c-9.me) Predecessor: -1
-> [ 624.994100] (7:node@c-6.me) My finger table:
-> [ 624.994100] (7:node@c-6.me) Start | Succ 
-> [ 624.994100] (7:node@c-6.me)  16728097  |  42 
-> [ 624.994100] (7:node@c-6.me)  16728098  | 1319738 
-> [ 624.994100] (7:node@c-6.me)  16728100  |  42 
-> [ 624.994100] (7:node@c-6.me)  16728104  |  42 
-> [ 624.994100] (7:node@c-6.me)  16728112  |  42 
-> [ 624.994100] (7:node@c-6.me)  16728128  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16728160  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16728224  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16728352  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16728608  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16729120  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16730144  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16732192  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16736288  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16744480  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16760864  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16416  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  81952  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  213024  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  475168  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  999456  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  2048032  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  4145184  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  8339488  | 16728096 
-> [ 624.994100] (7:node@c-6.me) Predecessor: 16509405
-> [ 632.993900] (10:node@c-9.me) My finger table:
-> [ 632.993900] (10:node@c-9.me) Start | Succ 
-> [ 632.993900] (10:node@c-9.me)  2015254  | 6518808 
-> [ 632.993900] (10:node@c-9.me)  2015255  | 16728096 
-> [ 632.993900] (10:node@c-9.me)  2015257  | 16728096 
-> [ 632.993900] (10:node@c-9.me)  2015261  | 10004760 
-> [ 632.993900] (10:node@c-9.me)  2015269  | 6518808 
-> [ 632.993900] (10:node@c-9.me)  2015285  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2015317  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2015381  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2015509  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2015765  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2016277  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2017301  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2019349  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2023445  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2031637  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2048021  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2080789  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2146325  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2277397  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2539541  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  3063829  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  4112405  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  6209557  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  10403861  | 2015253 
-> [ 632.993900] (10:node@c-9.me) Predecessor: 1319738
-> [ 639.993900] (6:node@c-5.me) My finger table:
-> [ 639.993900] (6:node@c-5.me) Start | Succ 
-> [ 639.993900] (6:node@c-5.me)  10874877  | 16509405 
-> [ 639.993900] (6:node@c-5.me)  10874878  | 533744 
-> [ 639.993900] (6:node@c-5.me)  10874880  | 533744 
-> [ 639.993900] (6:node@c-5.me)  10874884  |  42 
-> [ 639.993900] (6:node@c-5.me)  10874892  | 16509405 
-> [ 639.993900] (6:node@c-5.me)  10874908  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10874940  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10875004  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10875132  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10875388  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10875900  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10876924  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10878972  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10883068  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10891260  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10907644  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10940412  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  11005948  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  11137020  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  11399164  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  11923452  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  12972028  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  15069180  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  2486268  | 10874876 
-> [ 639.993900] (6:node@c-5.me) Predecessor: -1
-> [ 650.993800] (8:node@c-7.me) My finger table:
-> [ 650.993800] (8:node@c-7.me) Start | Succ 
-> [ 650.993800] (8:node@c-7.me)  10004761  | 10874876 
-> [ 650.993800] (8:node@c-7.me)  10004762  | 16509405 
-> [ 650.993800] (8:node@c-7.me)  10004764  | 16509405 
-> [ 650.993800] (8:node@c-7.me)  10004768  | 16509405 
-> [ 650.993800] (8:node@c-7.me)  10004776  | 10874876 
-> [ 650.993800] (8:node@c-7.me)  10004792  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10004824  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10004888  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10005016  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10005272  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10005784  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10006808  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10008856  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10012952  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10021144  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10037528  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10070296  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10135832  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10266904  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10529048  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  11053336  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  12101912  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  14199064  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  1616152  | 10004760 
-> [ 650.993800] (8:node@c-7.me) Predecessor: 6518808
-> [ 651.993800] (6:node@c-5.me) My finger table:
-> [ 651.993800] (6:node@c-5.me) Start | Succ 
-> [ 651.993800] (6:node@c-5.me)  10874877  | 16509405 
-> [ 651.993800] (6:node@c-5.me)  10874878  | 533744 
-> [ 651.993800] (6:node@c-5.me)  10874880  | 533744 
-> [ 651.993800] (6:node@c-5.me)  10874884  |  42 
-> [ 651.993800] (6:node@c-5.me)  10874892  | 16509405 
-> [ 651.993800] (6:node@c-5.me)  10874908  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10874940  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10875004  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10875132  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10875388  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10875900  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10876924  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10878972  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10883068  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10891260  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10907644  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10940412  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  11005948  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  11137020  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  11399164  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  11923452  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  12972028  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  15069180  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  2486268  | 10874876 
-> [ 651.993800] (6:node@c-5.me) Predecessor: 10004760
-> [ 655.993700] (3:node@c-2.me) My finger table:
-> [ 655.993700] (3:node@c-2.me) Start | Succ 
-> [ 655.993700] (3:node@c-2.me)  533745  | 1319738 
-> [ 655.993700] (3:node@c-2.me)  533746  | 10004760 
-> [ 655.993700] (3:node@c-2.me)  533748  | 1319738 
-> [ 655.993700] (3:node@c-2.me)  533752  | 1319738 
-> [ 655.993700] (3:node@c-2.me)  533760  | 1319738 
-> [ 655.993700] (3:node@c-2.me)  533776  | 533744 
-> [ 655.993700] (3:node@c-2.me)  533808  | 533744 
-> [ 655.993700] (3:node@c-2.me)  533872  | 533744 
-> [ 655.993700] (3:node@c-2.me)  534000  | 533744 
-> [ 655.993700] (3:node@c-2.me)  534256  | 533744 
-> [ 655.993700] (3:node@c-2.me)  534768  | 533744 
-> [ 655.993700] (3:node@c-2.me)  535792  | 533744 
-> [ 655.993700] (3:node@c-2.me)  537840  | 533744 
-> [ 655.993700] (3:node@c-2.me)  541936  | 533744 
-> [ 655.993700] (3:node@c-2.me)  550128  | 533744 
-> [ 655.993700] (3:node@c-2.me)  566512  | 533744 
-> [ 655.993700] (3:node@c-2.me)  599280  | 533744 
-> [ 655.993700] (3:node@c-2.me)  664816  | 533744 
-> [ 655.993700] (3:node@c-2.me)  795888  | 533744 
-> [ 655.993700] (3:node@c-2.me)  1058032  | 533744 
-> [ 655.993700] (3:node@c-2.me)  1582320  | 533744 
-> [ 655.993700] (3:node@c-2.me)  2630896  | 533744 
-> [ 655.993700] (3:node@c-2.me)  4728048  | 533744 
-> [ 655.993700] (3:node@c-2.me)  8922352  | 533744 
-> [ 655.993700] (3:node@c-2.me) Predecessor: 366680
-> [ 657.993700] (4:node@c-3.me) My finger table:
-> [ 657.993700] (4:node@c-3.me) Start | Succ 
-> [ 657.993700] (4:node@c-3.me)  1319739  | 2015253 
-> [ 657.993700] (4:node@c-3.me)  1319740  | 6518808 
-> [ 657.993700] (4:node@c-3.me)  1319742  | 6518808 
-> [ 657.993700] (4:node@c-3.me)  1319746  | 6518808 
-> [ 657.993700] (4:node@c-3.me)  1319754  | 2015253 
-> [ 657.993700] (4:node@c-3.me)  1319770  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1319802  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1319866  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1319994  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1320250  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1320762  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1321786  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1323834  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1327930  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1336122  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1352506  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1385274  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1450810  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1581882  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1844026  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  2368314  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  3416890  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  5514042  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  9708346  | 1319738 
-> [ 657.993700] (4:node@c-3.me) Predecessor: 533744
-> [ 661.993600] (9:node@c-8.me) My finger table:
-> [ 661.993600] (9:node@c-8.me) Start | Succ 
-> [ 661.993600] (9:node@c-8.me)  6518809  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518810  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518812  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518816  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518824  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518840  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 661.993600] (9:node@c-8.me) Predecessor: 2015253
-> [ 663.993600] (5:node@c-4.me) My finger table:
-> [ 663.993600] (5:node@c-4.me) Start | Succ 
-> [ 663.993600] (5:node@c-4.me)  16509406  | 16728096 
-> [ 663.993600] (5:node@c-4.me)  16509407  |  42 
-> [ 663.993600] (5:node@c-4.me)  16509409  | 16728096 
-> [ 663.993600] (5:node@c-4.me)  16509413  | 16728096 
-> [ 663.993600] (5:node@c-4.me)  16509421  | 16728096 
-> [ 663.993600] (5:node@c-4.me)  16509437  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16509469  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16509533  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16509661  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16509917  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16510429  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16511453  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16513501  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16517597  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16525789  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16542173  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16574941  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16640477  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16771549  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  256477  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  780765  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  1829341  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  3926493  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  8120797  | 16509405 
-> [ 663.993600] (5:node@c-4.me) Predecessor: 10874876
-> [ 744.993200] (10:node@c-9.me) My finger table:
-> [ 744.993200] (10:node@c-9.me) Start | Succ 
-> [ 744.993200] (10:node@c-9.me)  2015254  | 6518808 
-> [ 744.993200] (10:node@c-9.me)  2015255  | 16728096 
-> [ 744.993200] (10:node@c-9.me)  2015257  | 16728096 
-> [ 744.993200] (10:node@c-9.me)  2015261  | 10004760 
-> [ 744.993200] (10:node@c-9.me)  2015269  | 6518808 
-> [ 744.993200] (10:node@c-9.me)  2015285  | 6518808 
-> [ 744.993200] (10:node@c-9.me)  2015317  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2015381  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2015509  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2015765  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2016277  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2017301  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2019349  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2023445  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2031637  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2048021  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2080789  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2146325  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2277397  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2539541  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  3063829  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  4112405  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  6209557  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  10403861  | 2015253 
-> [ 744.993200] (10:node@c-9.me) Predecessor: 1319738
-> [ 748.993100] (2:node@c-1.me) My finger table:
-> [ 748.993100] (2:node@c-1.me) Start | Succ 
-> [ 748.993100] (2:node@c-1.me)  366681  | 533744 
-> [ 748.993100] (2:node@c-1.me)  366682  | 1319738 
-> [ 748.993100] (2:node@c-1.me)  366684  | 533744 
-> [ 748.993100] (2:node@c-1.me)  366688  | 533744 
-> [ 748.993100] (2:node@c-1.me)  366696  | 366680 
-> [ 748.993100] (2:node@c-1.me)  366712  | 366680 
-> [ 748.993100] (2:node@c-1.me)  366744  | 366680 
-> [ 748.993100] (2:node@c-1.me)  366808  | 366680 
-> [ 748.993100] (2:node@c-1.me)  366936  | 366680 
-> [ 748.993100] (2:node@c-1.me)  367192  | 366680 
-> [ 748.993100] (2:node@c-1.me)  367704  | 366680 
-> [ 748.993100] (2:node@c-1.me)  368728  | 366680 
-> [ 748.993100] (2:node@c-1.me)  370776  | 366680 
-> [ 748.993100] (2:node@c-1.me)  374872  | 366680 
-> [ 748.993100] (2:node@c-1.me)  383064  | 366680 
-> [ 748.993100] (2:node@c-1.me)  399448  | 366680 
-> [ 748.993100] (2:node@c-1.me)  432216  | 366680 
-> [ 748.993100] (2:node@c-1.me)  497752  | 366680 
-> [ 748.993100] (2:node@c-1.me)  628824  | 366680 
-> [ 748.993100] (2:node@c-1.me)  890968  | 366680 
-> [ 748.993100] (2:node@c-1.me)  1415256  | 366680 
-> [ 748.993100] (2:node@c-1.me)  2463832  | 366680 
-> [ 748.993100] (2:node@c-1.me)  4560984  | 366680 
-> [ 748.993100] (2:node@c-1.me)  8755288  | 366680 
-> [ 748.993100] (2:node@c-1.me) Predecessor: 42
-> [ 748.993100] (7:node@c-6.me) My finger table:
-> [ 748.993100] (7:node@c-6.me) Start | Succ 
-> [ 748.993100] (7:node@c-6.me)  16728097  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728098  | 1319738 
-> [ 748.993100] (7:node@c-6.me)  16728100  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728104  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728112  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728128  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728160  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16728224  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16728352  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16728608  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16729120  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16730144  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16732192  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16736288  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16744480  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16760864  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16416  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  81952  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  213024  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  475168  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  999456  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  2048032  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  4145184  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  8339488  | 16728096 
-> [ 748.993100] (7:node@c-6.me) Predecessor: 16509405
-> [ 768.992700] (6:node@c-5.me) My finger table:
-> [ 768.992700] (6:node@c-5.me) Start | Succ 
-> [ 768.992700] (6:node@c-5.me)  10874877  | 16509405 
-> [ 768.992700] (6:node@c-5.me)  10874878  | 533744 
-> [ 768.992700] (6:node@c-5.me)  10874880  | 533744 
-> [ 768.992700] (6:node@c-5.me)  10874884  |  42 
-> [ 768.992700] (6:node@c-5.me)  10874892  | 16509405 
-> [ 768.992700] (6:node@c-5.me)  10874908  | 16509405 
-> [ 768.992700] (6:node@c-5.me)  10874940  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10875004  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10875132  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10875388  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10875900  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10876924  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10878972  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10883068  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10891260  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10907644  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10940412  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  11005948  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  11137020  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  11399164  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  11923452  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  12972028  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  15069180  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  2486268  | 10874876 
-> [ 768.992700] (6:node@c-5.me) Predecessor: 10004760
-> [ 781.992700] (3:node@c-2.me) My finger table:
-> [ 781.992700] (8:node@c-7.me) My finger table:
-> [ 781.992700] (3:node@c-2.me) Start | Succ 
-> [ 781.992700] (8:node@c-7.me) Start | Succ 
-> [ 781.992700] (3:node@c-2.me)  533745  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004761  | 10874876 
-> [ 781.992700] (8:node@c-7.me)  10004762  | 16509405 
-> [ 781.992700] (3:node@c-2.me)  533746  | 10004760 
-> [ 781.992700] (8:node@c-7.me)  10004764  | 16509405 
-> [ 781.992700] (3:node@c-2.me)  533748  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004768  | 16509405 
-> [ 781.992700] (3:node@c-2.me)  533752  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004776  | 10874876 
-> [ 781.992700] (3:node@c-2.me)  533760  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004792  | 10874876 
-> [ 781.992700] (3:node@c-2.me)  533776  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004824  | 10004760 
-> [ 781.992700] (8:node@c-7.me)  10004888  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  533808  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10005016  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  533872  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10005272  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  534000  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10005784  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  534256  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10006808  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  534768  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10008856  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  535792  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10012952  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  537840  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10021144  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  541936  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10037528  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  550128  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10070296  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  566512  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10135832  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  599280  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10266904  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  664816  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10529048  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  795888  | 533744 
-> [ 781.992700] (8:node@c-7.me)  11053336  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  1058032  | 533744 
-> [ 781.992700] (8:node@c-7.me)  12101912  | 10004760 
-> [ 781.992700] (8:node@c-7.me)  14199064  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  1582320  | 533744 
-> [ 781.992700] (8:node@c-7.me)  1616152  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  2630896  | 533744 
-> [ 781.992700] (8:node@c-7.me) Predecessor: 6518808
-> [ 781.992700] (3:node@c-2.me)  4728048  | 533744 
-> [ 781.992700] (3:node@c-2.me)  8922352  | 533744 
-> [ 781.992700] (3:node@c-2.me) Predecessor: 366680
-> [ 786.992400] (5:node@c-4.me) My finger table:
-> [ 786.992400] (5:node@c-4.me) Start | Succ 
-> [ 786.992400] (5:node@c-4.me)  16509406  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509407  |  42 
-> [ 786.992400] (5:node@c-4.me)  16509409  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509413  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509421  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509437  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509469  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16509533  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16509661  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16509917  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16510429  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16511453  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16513501  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16517597  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16525789  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16542173  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16574941  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16640477  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16771549  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  256477  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  780765  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  1829341  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  3926493  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  8120797  | 16509405 
-> [ 786.992400] (5:node@c-4.me) Predecessor: 10874876
-> [ 786.992600] (9:node@c-8.me) My finger table:
-> [ 786.992600] (9:node@c-8.me) Start | Succ 
-> [ 786.992600] (9:node@c-8.me)  6518809  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518810  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518812  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518816  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518824  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518840  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 786.992600] (9:node@c-8.me) Predecessor: 2015253
-> [ 795.992400] (4:node@c-3.me) My finger table:
-> [ 795.992400] (4:node@c-3.me) Start | Succ 
-> [ 795.992400] (4:node@c-3.me)  1319739  | 2015253 
-> [ 795.992400] (4:node@c-3.me)  1319740  | 6518808 
-> [ 795.992400] (4:node@c-3.me)  1319742  | 6518808 
-> [ 795.992400] (4:node@c-3.me)  1319746  | 6518808 
-> [ 795.992400] (4:node@c-3.me)  1319754  | 2015253 
-> [ 795.992400] (4:node@c-3.me)  1319770  | 2015253 
-> [ 795.992400] (4:node@c-3.me)  1319802  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1319866  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1319994  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1320250  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1320762  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1321786  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1323834  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1327930  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1336122  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1352506  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1385274  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1450810  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1581882  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1844026  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  2368314  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  3416890  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  5514042  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  9708346  | 1319738 
-> [ 795.992400] (4:node@c-3.me) Predecessor: 533744
-> [ 873.991200] (10:node@c-9.me) My finger table:
-> [ 873.991200] (10:node@c-9.me) Start | Succ 
-> [ 873.991200] (10:node@c-9.me)  2015254  | 6518808 
-> [ 873.991200] (10:node@c-9.me)  2015255  | 16728096 
-> [ 873.991200] (10:node@c-9.me)  2015257  | 16728096 
-> [ 873.991200] (10:node@c-9.me)  2015261  | 10004760 
-> [ 873.991200] (10:node@c-9.me)  2015269  | 6518808 
-> [ 873.991200] (10:node@c-9.me)  2015285  | 6518808 
-> [ 873.991200] (10:node@c-9.me)  2015317  | 6518808 
-> [ 873.991200] (10:node@c-9.me)  2015381  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2015509  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2015765  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2016277  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2017301  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2019349  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2023445  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2031637  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2048021  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2080789  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2146325  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2277397  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2539541  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  3063829  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  4112405  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  6209557  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  10403861  | 2015253 
-> [ 873.991200] (10:node@c-9.me) Predecessor: 1319738
-> [ 873.991300] (7:node@c-6.me) My finger table:
-> [ 873.991300] (7:node@c-6.me) Start | Succ 
-> [ 873.991300] (7:node@c-6.me)  16728097  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728098  | 1319738 
-> [ 873.991300] (7:node@c-6.me)  16728100  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728104  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728112  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728128  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728160  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728224  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16728352  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16728608  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16729120  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16730144  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16732192  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16736288  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16744480  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16760864  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16416  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  81952  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  213024  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  475168  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  999456  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  2048032  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  4145184  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  8339488  | 16728096 
-> [ 873.991300] (7:node@c-6.me) Predecessor: 16509405
-> [ 875.991200] (2:node@c-1.me) My finger table:
-> [ 875.991200] (2:node@c-1.me) Start | Succ 
-> [ 875.991200] (2:node@c-1.me)  366681  | 533744 
-> [ 875.991200] (2:node@c-1.me)  366682  | 1319738 
-> [ 875.991200] (2:node@c-1.me)  366684  | 533744 
-> [ 875.991200] (2:node@c-1.me)  366688  | 533744 
-> [ 875.991200] (2:node@c-1.me)  366696  | 533744 
-> [ 875.991200] (2:node@c-1.me)  366712  | 366680 
-> [ 875.991200] (2:node@c-1.me)  366744  | 366680 
-> [ 875.991200] (2:node@c-1.me)  366808  | 366680 
-> [ 875.991200] (2:node@c-1.me)  366936  | 366680 
-> [ 875.991200] (2:node@c-1.me)  367192  | 366680 
-> [ 875.991200] (2:node@c-1.me)  367704  | 366680 
-> [ 875.991200] (2:node@c-1.me)  368728  | 366680 
-> [ 875.991200] (2:node@c-1.me)  370776  | 366680 
-> [ 875.991200] (2:node@c-1.me)  374872  | 366680 
-> [ 875.991200] (2:node@c-1.me)  383064  | 366680 
-> [ 875.991200] (2:node@c-1.me)  399448  | 366680 
-> [ 875.991200] (2:node@c-1.me)  432216  | 366680 
-> [ 875.991200] (2:node@c-1.me)  497752  | 366680 
-> [ 875.991200] (2:node@c-1.me)  628824  | 366680 
-> [ 875.991200] (2:node@c-1.me)  890968  | 366680 
-> [ 875.991200] (2:node@c-1.me)  1415256  | 366680 
-> [ 875.991200] (2:node@c-1.me)  2463832  | 366680 
-> [ 875.991200] (2:node@c-1.me)  4560984  | 366680 
-> [ 875.991200] (2:node@c-1.me)  8755288  | 366680 
-> [ 875.991200] (2:node@c-1.me) Predecessor: 42
-> [ 893.990900] (6:node@c-5.me) My finger table:
-> [ 893.990900] (6:node@c-5.me) Start | Succ 
-> [ 893.990900] (6:node@c-5.me)  10874877  | 16509405 
-> [ 893.990900] (6:node@c-5.me)  10874878  | 533744 
-> [ 893.990900] (6:node@c-5.me)  10874880  | 533744 
-> [ 893.990900] (6:node@c-5.me)  10874884  |  42 
-> [ 893.990900] (6:node@c-5.me)  10874892  | 16509405 
-> [ 893.990900] (6:node@c-5.me)  10874908  | 16509405 
-> [ 893.990900] (6:node@c-5.me)  10874940  | 16509405 
-> [ 893.990900] (6:node@c-5.me)  10875004  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10875132  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10875388  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10875900  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10876924  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10878972  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10883068  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10891260  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10907644  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10940412  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  11005948  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  11137020  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  11399164  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  11923452  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  12972028  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  15069180  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  2486268  | 10874876 
-> [ 893.990900] (6:node@c-5.me) Predecessor: 10004760
-> [ 905.990900] (3:node@c-2.me) My finger table:
-> [ 905.990900] (3:node@c-2.me) Start | Succ 
-> [ 905.990900] (3:node@c-2.me)  533745  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533746  | 10004760 
-> [ 905.990900] (3:node@c-2.me)  533748  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533752  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533760  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533776  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533808  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533872  | 533744 
-> [ 905.990900] (3:node@c-2.me)  534000  | 533744 
-> [ 905.990900] (3:node@c-2.me)  534256  | 533744 
-> [ 905.990900] (3:node@c-2.me)  534768  | 533744 
-> [ 905.990900] (3:node@c-2.me)  535792  | 533744 
-> [ 905.990900] (3:node@c-2.me)  537840  | 533744 
-> [ 905.990900] (3:node@c-2.me)  541936  | 533744 
-> [ 905.990900] (3:node@c-2.me)  550128  | 533744 
-> [ 905.990900] (3:node@c-2.me)  566512  | 533744 
-> [ 905.990900] (3:node@c-2.me)  599280  | 533744 
-> [ 905.990900] (3:node@c-2.me)  664816  | 533744 
-> [ 905.990900] (3:node@c-2.me)  795888  | 533744 
-> [ 905.990900] (3:node@c-2.me)  1058032  | 533744 
-> [ 905.990900] (3:node@c-2.me)  1582320  | 533744 
-> [ 905.990900] (3:node@c-2.me)  2630896  | 533744 
-> [ 905.990900] (3:node@c-2.me)  4728048  | 533744 
-> [ 905.990900] (3:node@c-2.me)  8922352  | 533744 
-> [ 905.990900] (3:node@c-2.me) Predecessor: 366680
-> [ 943.991000] (9:node@c-8.me) My finger table:
-> [ 943.991000] (9:node@c-8.me) Start | Succ 
-> [ 943.991000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518810  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518816  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518824  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518840  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518872  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 943.991000] (9:node@c-8.me) Predecessor: 2015253
-> [ 944.990900] (8:node@c-7.me) My finger table:
-> [ 944.990900] (8:node@c-7.me) Start | Succ 
-> [ 944.990900] (8:node@c-7.me)  10004761  | 10874876 
-> [ 944.990900] (8:node@c-7.me)  10004762  | 16509405 
-> [ 944.990900] (8:node@c-7.me)  10004764  | 16509405 
-> [ 944.990900] (8:node@c-7.me)  10004768  | 16509405 
-> [ 944.990900] (8:node@c-7.me)  10004776  | 10874876 
-> [ 944.990900] (8:node@c-7.me)  10004792  | 10874876 
-> [ 944.990900] (8:node@c-7.me)  10004824  | 10874876 
-> [ 944.990900] (8:node@c-7.me)  10004888  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10005016  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10005272  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10005784  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10006808  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10008856  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10012952  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10021144  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10037528  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10070296  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10135832  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10266904  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10529048  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  11053336  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  12101912  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  14199064  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  1616152  | 10004760 
-> [ 944.990900] (8:node@c-7.me) Predecessor: 6518808
-> [ 945.990900] (5:node@c-4.me) My finger table:
-> [ 945.990900] (5:node@c-4.me) Start | Succ 
-> [ 945.990900] (5:node@c-4.me)  16509406  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509407  |  42 
-> [ 945.990900] (5:node@c-4.me)  16509409  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509413  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509421  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509437  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509469  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509533  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16509661  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16509917  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16510429  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16511453  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16513501  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16517597  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16525789  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16542173  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16574941  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16640477  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16771549  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  256477  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  780765  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  1829341  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  3926493  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  8120797  | 16509405 
-> [ 945.990900] (5:node@c-4.me) Predecessor: 10874876
-> [ 947.990900] (1:node@c-0.me) My finger table:
-> [ 947.990900] (1:node@c-0.me) Start | Succ 
-> [ 947.990900] (1:node@c-0.me)   43  | 366680 
-> [ 947.990900] (1:node@c-0.me)   44  | 366680 
-> [ 947.990900] (1:node@c-0.me)   46  | 366680 
-> [ 947.990900] (1:node@c-0.me)   50  | 366680 
-> [ 947.990900] (1:node@c-0.me)   58  | 366680 
-> [ 947.990900] (1:node@c-0.me)   74  |  42 
-> [ 947.990900] (1:node@c-0.me)  106  |  42 
-> [ 947.990900] (1:node@c-0.me)  170  |  42 
-> [ 947.990900] (1:node@c-0.me)  298  |  42 
-> [ 947.990900] (1:node@c-0.me)  554  |  42 
-> [ 947.990900] (1:node@c-0.me)  1066  |  42 
-> [ 947.990900] (1:node@c-0.me)  2090  |  42 
-> [ 947.990900] (1:node@c-0.me)  4138  |  42 
-> [ 947.990900] (1:node@c-0.me)  8234  |  42 
-> [ 947.990900] (1:node@c-0.me)  16426  |  42 
-> [ 947.990900] (1:node@c-0.me)  32810  |  42 
-> [ 947.990900] (1:node@c-0.me)  65578  |  42 
-> [ 947.990900] (1:node@c-0.me)  131114  |  42 
-> [ 947.990900] (1:node@c-0.me)  262186  |  42 
-> [ 947.990900] (1:node@c-0.me)  524330  |  42 
-> [ 947.990900] (1:node@c-0.me)  1048618  |  42 
-> [ 947.990900] (1:node@c-0.me)  2097194  |  42 
-> [ 947.990900] (1:node@c-0.me)  4194346  |  42 
-> [ 947.990900] (1:node@c-0.me)  8388650  |  42 
-> [ 947.990900] (1:node@c-0.me) Predecessor: 16728096
-> [ 964.990700] (4:node@c-3.me) My finger table:
-> [ 964.990700] (4:node@c-3.me) Start | Succ 
-> [ 964.990700] (4:node@c-3.me)  1319739  | 2015253 
-> [ 964.990700] (4:node@c-3.me)  1319740  | 6518808 
-> [ 964.990700] (4:node@c-3.me)  1319742  | 6518808 
-> [ 964.990700] (4:node@c-3.me)  1319746  | 6518808 
-> [ 964.990700] (4:node@c-3.me)  1319754  | 2015253 
-> [ 964.990700] (4:node@c-3.me)  1319770  | 2015253 
-> [ 964.990700] (4:node@c-3.me)  1319802  | 2015253 
-> [ 964.990700] (4:node@c-3.me)  1319866  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1319994  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1320250  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1320762  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1321786  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1323834  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1327930  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1336122  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1352506  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1385274  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1450810  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1581882  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1844026  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  2368314  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  3416890  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  5514042  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  9708346  | 1319738 
-> [ 964.990700] (4:node@c-3.me) Predecessor: 533744
-> [ 995.990200] (7:node@c-6.me) My finger table:
-> [ 995.990200] (7:node@c-6.me) Start | Succ 
-> [ 995.990200] (7:node@c-6.me)  16728097  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728098  | 1319738 
-> [ 995.990200] (7:node@c-6.me)  16728100  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728104  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728112  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728128  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728160  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728224  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728352  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16728608  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16729120  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16730144  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16732192  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16736288  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16744480  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16760864  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16416  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  81952  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  213024  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  475168  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  999456  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  2048032  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  4145184  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  8339488  | 16728096 
-> [ 995.990200] (7:node@c-6.me) Predecessor: 16509405
-> [1182.990500] (0:@) Messages created: 2324
-> [1182.990500] (0:@) Simulated time: 1182.99
+> [   0.000000] (10:node@node-9.acme.org) Joining the ring with id 2015253, knowing node 1319738
+> [   0.000000] (1:node@node-0.acme.org) My finger table:
+> [   0.000000] (1:node@node-0.acme.org) Start | Succ 
+> [   0.000000] (1:node@node-0.acme.org)   43  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   44  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   46  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   50  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   58  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   74  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  106  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  170  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  298  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  554  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [   0.000000] (1:node@node-0.acme.org) Predecessor: -1
+> [   0.000000] (2:node@node-1.acme.org) Joining the ring with id 366680, knowing node 42
+> [   0.000000] (3:node@node-2.acme.org) Joining the ring with id 533744, knowing node 366680
+> [   0.000000] (4:node@node-3.acme.org) Joining the ring with id 1319738, knowing node 42
+> [   0.000000] (5:node@node-4.acme.org) Joining the ring with id 16509405, knowing node 366680
+> [   0.000000] (6:node@node-5.acme.org) Joining the ring with id 10874876, knowing node 533744
+> [   0.000000] (7:node@node-6.acme.org) Joining the ring with id 16728096, knowing node 1319738
+> [   0.000000] (8:node@node-7.acme.org) Joining the ring with id 10004760, knowing node 16509405
+> [   0.000000] (9:node@node-8.acme.org) Joining the ring with id 6518808, knowing node 42
+> [   4.000000] (3:node@node-2.acme.org) My finger table:
+> [   4.000000] (3:node@node-2.acme.org) Start | Succ 
+> [   4.000000] (3:node@node-2.acme.org)  533745  | 366680 
+> [   4.000000] (3:node@node-2.acme.org)  533746  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533748  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533752  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533760  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [   4.000000] (3:node@node-2.acme.org) Predecessor: -1
+> [   4.000000] (6:node@node-5.acme.org) My finger table:
+> [   4.000000] (6:node@node-5.acme.org) Start | Succ 
+> [   4.000000] (6:node@node-5.acme.org)  10874877  | 533744 
+> [   4.000000] (6:node@node-5.acme.org)  10874878  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874880  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org) Predecessor: -1
+> [   5.000000] (5:node@node-4.acme.org) My finger table:
+> [   5.000000] (5:node@node-4.acme.org) Start | Succ 
+> [   5.000000] (5:node@node-4.acme.org)  16509406  | 366680 
+> [   5.000000] (5:node@node-4.acme.org)  16509407  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org) Predecessor: -1
+> [   5.000000] (8:node@node-7.acme.org) My finger table:
+> [   5.000000] (8:node@node-7.acme.org) Start | Succ 
+> [   5.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [   5.000000] (8:node@node-7.acme.org)  10004762  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org) Predecessor: -1
+> [   5.999900] (2:node@node-1.acme.org) My finger table:
+> [   5.999900] (2:node@node-1.acme.org) Start | Succ 
+> [   5.999900] (2:node@node-1.acme.org)  366681  |  42 
+> [   5.999900] (2:node@node-1.acme.org)  366682  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366684  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366688  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366696  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366712  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366744  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366808  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366936  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  367192  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  367704  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  368728  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  370776  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  374872  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  383064  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  399448  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  432216  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  497752  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  628824  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  890968  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  1415256  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  2463832  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  4560984  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  8755288  | 366680 
+> [   5.999900] (2:node@node-1.acme.org) Predecessor: -1
+> [   7.999900] (7:node@node-6.acme.org) My finger table:
+> [   7.999900] (7:node@node-6.acme.org) Start | Succ 
+> [   7.999900] (7:node@node-6.acme.org)  16728097  | 1319738 
+> [   7.999900] (7:node@node-6.acme.org)  16728098  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16416  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  81952  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  213024  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  475168  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  999456  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org) Predecessor: -1
+> [   8.999900] (10:node@node-9.acme.org) My finger table:
+> [   8.999900] (10:node@node-9.acme.org) Start | Succ 
+> [   8.999900] (10:node@node-9.acme.org)  2015254  | 1319738 
+> [   8.999900] (10:node@node-9.acme.org)  2015255  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015257  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org) Predecessor: -1
+> [  10.999800] (4:node@node-3.acme.org) My finger table:
+> [  10.999800] (4:node@node-3.acme.org) Start | Succ 
+> [  10.999800] (4:node@node-3.acme.org)  1319739  |  42 
+> [  10.999800] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org) Predecessor: -1
+> [  15.999700] (9:node@node-8.acme.org) My finger table:
+> [  15.999700] (9:node@node-8.acme.org) Start | Succ 
+> [  15.999700] (9:node@node-8.acme.org)  6518809  |  42 
+> [  15.999700] (9:node@node-8.acme.org)  6518810  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org) Predecessor: -1
+> [  24.999600] (3:node@node-2.acme.org) My finger table:
+> [  24.999600] (3:node@node-2.acme.org) Start | Succ 
+> [  24.999600] (3:node@node-2.acme.org)  533745  | 366680 
+> [  24.999600] (3:node@node-2.acme.org)  533746  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533748  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533752  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533760  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533776  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533808  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533872  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  534000  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  534256  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  534768  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  535792  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  537840  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  541936  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  550128  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  566512  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  599280  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  664816  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  795888  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  1058032  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  1582320  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  2630896  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  4728048  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  8922352  | 533744 
+> [  24.999600] (3:node@node-2.acme.org) Predecessor: 10874876
+> [  24.999600] (4:node@node-3.acme.org) My finger table:
+> [  24.999600] (4:node@node-3.acme.org) Start | Succ 
+> [  24.999600] (4:node@node-3.acme.org)  1319739  |  42 
+> [  24.999600] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org) Predecessor: 16728096
+> [  32.999400] (2:node@node-1.acme.org) My finger table:
+> [  32.999400] (2:node@node-1.acme.org) Start | Succ 
+> [  32.999400] (2:node@node-1.acme.org)  366681  |  42 
+> [  32.999400] (2:node@node-1.acme.org)  366682  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366684  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366688  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366696  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366712  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366744  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366808  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366936  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  367192  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  367704  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  368728  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  370776  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  374872  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  383064  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  399448  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  432216  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  497752  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  628824  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  890968  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  1415256  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  2463832  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  4560984  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  8755288  | 366680 
+> [  32.999400] (2:node@node-1.acme.org) Predecessor: 533744
+> [  34.999400] (2:node@node-1.acme.org) My finger table:
+> [  34.999400] (2:node@node-1.acme.org) Start | Succ 
+> [  34.999400] (2:node@node-1.acme.org)  366681  |  42 
+> [  34.999400] (2:node@node-1.acme.org)  366682  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366684  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366688  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366696  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366712  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366744  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366808  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366936  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  367192  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  367704  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  368728  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  370776  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  374872  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  383064  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  399448  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  432216  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  497752  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  628824  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  890968  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  1415256  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  2463832  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  4560984  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  8755288  | 366680 
+> [  34.999400] (2:node@node-1.acme.org) Predecessor: 16509405
+> [  35.999400] (5:node@node-4.acme.org) My finger table:
+> [  35.999400] (5:node@node-4.acme.org) Start | Succ 
+> [  35.999400] (5:node@node-4.acme.org)  16509406  | 366680 
+> [  35.999400] (5:node@node-4.acme.org)  16509407  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  256477  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  780765  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org) Predecessor: 10004760
+> [  49.999000] (1:node@node-0.acme.org) My finger table:
+> [  49.999000] (1:node@node-0.acme.org) Start | Succ 
+> [  49.999000] (1:node@node-0.acme.org)   43  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   44  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   46  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   50  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   58  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   74  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  106  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  170  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  298  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  554  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  1066  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  2090  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  4138  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  8234  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  16426  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  32810  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  65578  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  131114  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  262186  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  524330  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  1048618  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  2097194  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  4194346  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  8388650  |  42 
+> [  49.999000] (1:node@node-0.acme.org) Predecessor: 366680
+> [  59.998800] (1:node@node-0.acme.org) My finger table:
+> [  59.998800] (1:node@node-0.acme.org) Start | Succ 
+> [  59.998800] (1:node@node-0.acme.org)   43  | 366680 
+> [  59.998800] (1:node@node-0.acme.org)   44  |  42 
+> [  59.998800] (1:node@node-0.acme.org)   46  |  42 
+> [  59.998800] (1:node@node-0.acme.org)   50  |  42 
+> [  59.998800] (1:node@node-0.acme.org)   58  |  42 
+> [  59.998800] (1:node@node-0.acme.org)   74  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  106  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  170  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  298  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  554  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  1066  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  2090  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  4138  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  8234  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  16426  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  32810  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  65578  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  131114  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  262186  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  524330  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  1048618  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  2097194  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  4194346  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  8388650  |  42 
+> [  59.998800] (1:node@node-0.acme.org) Predecessor: 1319738
+> [  94.998300] (7:node@node-6.acme.org) My finger table:
+> [  94.998300] (7:node@node-6.acme.org) Start | Succ 
+> [  94.998300] (7:node@node-6.acme.org)  16728097  | 1319738 
+> [  94.998300] (7:node@node-6.acme.org)  16728098  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16416  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  81952  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  213024  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  475168  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  999456  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org) Predecessor: 2015253
+> [ 159.998800] (1:node@node-0.acme.org) My finger table:
+> [ 159.998800] (1:node@node-0.acme.org) Start | Succ 
+> [ 159.998800] (1:node@node-0.acme.org)   43  | 366680 
+> [ 159.998800] (1:node@node-0.acme.org)   44  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)   46  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)   50  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)   58  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)   74  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  106  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  170  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  298  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  554  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  1066  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  2090  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  4138  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  8234  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  16426  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  32810  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  65578  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  131114  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  262186  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  524330  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 159.998800] (1:node@node-0.acme.org) Predecessor: 6518808
+> [ 165.998900] (1:node@node-0.acme.org) My finger table:
+> [ 165.998900] (1:node@node-0.acme.org) Start | Succ 
+> [ 165.998900] (1:node@node-0.acme.org)   43  | 366680 
+> [ 165.998900] (1:node@node-0.acme.org)   44  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)   46  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)   50  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)   58  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)   74  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  106  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  170  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  298  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  554  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  1066  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  2090  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  4138  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  8234  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  16426  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  32810  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  65578  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  131114  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  262186  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  524330  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 165.998900] (1:node@node-0.acme.org) Predecessor: 6518808
+> [ 174.998800] (2:node@node-1.acme.org) My finger table:
+> [ 174.998800] (2:node@node-1.acme.org) Start | Succ 
+> [ 174.998800] (2:node@node-1.acme.org)  366681  |  42 
+> [ 174.998800] (2:node@node-1.acme.org)  366682  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366684  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org) Predecessor: 42
+> [ 206.998400] (8:node@node-7.acme.org) My finger table:
+> [ 206.998400] (8:node@node-7.acme.org) Start | Succ 
+> [ 206.998400] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 206.998400] (8:node@node-7.acme.org)  10004762  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org) Predecessor: 533744
+> [ 214.998400] (9:node@node-8.acme.org) My finger table:
+> [ 214.998400] (9:node@node-8.acme.org) Start | Succ 
+> [ 214.998400] (9:node@node-8.acme.org)  6518809  |  42 
+> [ 214.998400] (9:node@node-8.acme.org)  6518810  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 231.998200] (1:node@node-0.acme.org) My finger table:
+> [ 231.998200] (1:node@node-0.acme.org) Start | Succ 
+> [ 231.998200] (1:node@node-0.acme.org)   43  | 366680 
+> [ 231.998200] (1:node@node-0.acme.org)   44  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)   46  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)   50  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)   58  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)   74  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  106  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  170  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  298  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  554  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  1066  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  2090  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  4138  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  8234  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  16426  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  32810  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  65578  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  131114  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  262186  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  524330  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 231.998200] (1:node@node-0.acme.org) Predecessor: 16509405
+> [ 241.998100] (7:node@node-6.acme.org) My finger table:
+> [ 241.998100] (7:node@node-6.acme.org) Start | Succ 
+> [ 241.998100] (7:node@node-6.acme.org)  16728097  | 1319738 
+> [ 241.998100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 241.998100] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org) Predecessor: 2015253
+> [ 246.998100] (6:node@node-5.acme.org) My finger table:
+> [ 246.998100] (6:node@node-5.acme.org) Start | Succ 
+> [ 246.998100] (6:node@node-5.acme.org)  10874877  | 533744 
+> [ 246.998100] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 246.998100] (6:node@node-5.acme.org)  10874880  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org) Predecessor: -1
+> [ 249.997800] (10:node@node-9.acme.org) My finger table:
+> [ 249.997800] (10:node@node-9.acme.org) Start | Succ 
+> [ 249.997800] (10:node@node-9.acme.org)  2015254  | 16728096 
+> [ 249.997800] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 249.997800] (10:node@node-9.acme.org)  2015257  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org) Predecessor: -1
+> [ 270.997600] (9:node@node-8.acme.org) My finger table:
+> [ 270.997600] (9:node@node-8.acme.org) Start | Succ 
+> [ 270.997600] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 270.997600] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 270.997600] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 271.997600] (4:node@node-3.acme.org) My finger table:
+> [ 271.997600] (4:node@node-3.acme.org) Start | Succ 
+> [ 271.997600] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 271.997600] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org) Predecessor: 366680
+> [ 288.997400] (5:node@node-4.acme.org) My finger table:
+> [ 288.997400] (5:node@node-4.acme.org) Start | Succ 
+> [ 288.997400] (5:node@node-4.acme.org)  16509406  |  42 
+> [ 288.997400] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 288.997400] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 304.997200] (4:node@node-3.acme.org) My finger table:
+> [ 304.997200] (4:node@node-3.acme.org) Start | Succ 
+> [ 304.997200] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 304.997200] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 304.997200] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org) Predecessor: 366680
+> [ 342.997400] (8:node@node-7.acme.org) My finger table:
+> [ 342.997400] (8:node@node-7.acme.org) Start | Succ 
+> [ 342.997400] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 342.997400] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 342.997400] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org) Predecessor: 533744
+> [ 346.997300] (1:node@node-0.acme.org) My finger table:
+> [ 346.997300] (1:node@node-0.acme.org) Start | Succ 
+> [ 346.997300] (1:node@node-0.acme.org)   43  | 366680 
+> [ 346.997300] (1:node@node-0.acme.org)   44  | 366680 
+> [ 346.997300] (1:node@node-0.acme.org)   46  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)   50  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)   58  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)   74  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  106  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  170  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  298  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  554  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  1066  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  2090  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  4138  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  8234  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  16426  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  32810  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  65578  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  131114  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  262186  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  524330  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 346.997300] (1:node@node-0.acme.org) Predecessor: 16509405
+> [ 360.997100] (8:node@node-7.acme.org) My finger table:
+> [ 360.997100] (8:node@node-7.acme.org) Start | Succ 
+> [ 360.997100] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 360.997100] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 360.997100] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 360.997200] (2:node@node-1.acme.org) My finger table:
+> [ 360.997200] (2:node@node-1.acme.org) Start | Succ 
+> [ 360.997200] (2:node@node-1.acme.org)  366681  | 1319738 
+> [ 360.997200] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 360.997200] (2:node@node-1.acme.org)  366684  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org) Predecessor: 42
+> [ 362.997100] (7:node@node-6.acme.org) My finger table:
+> [ 362.997100] (7:node@node-6.acme.org) Start | Succ 
+> [ 362.997100] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 362.997100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 362.997100] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 362.997100] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org) Predecessor: 2015253
+> [ 364.997100] (3:node@node-2.acme.org) My finger table:
+> [ 364.997100] (3:node@node-2.acme.org) Start | Succ 
+> [ 364.997100] (3:node@node-2.acme.org)  533745  | 6518808 
+> [ 364.997100] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 364.997100] (3:node@node-2.acme.org)  533748  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533752  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org) Predecessor: 10874876
+> [ 369.997000] (6:node@node-5.acme.org) My finger table:
+> [ 369.997000] (6:node@node-5.acme.org) Start | Succ 
+> [ 369.997000] (6:node@node-5.acme.org)  10874877  | 533744 
+> [ 369.997000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 369.997000] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 369.997000] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org) Predecessor: -1
+> [ 376.996900] (10:node@node-9.acme.org) My finger table:
+> [ 376.996900] (10:node@node-9.acme.org) Start | Succ 
+> [ 376.996900] (10:node@node-9.acme.org)  2015254  | 16728096 
+> [ 376.996900] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 376.996900] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 376.996900] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org) Predecessor: -1
+> [ 395.996800] (1:node@node-0.acme.org) My finger table:
+> [ 395.996800] (1:node@node-0.acme.org) Start | Succ 
+> [ 395.996800] (1:node@node-0.acme.org)   43  | 366680 
+> [ 395.996800] (1:node@node-0.acme.org)   44  | 366680 
+> [ 395.996800] (1:node@node-0.acme.org)   46  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)   50  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)   58  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)   74  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  106  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  170  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  298  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  554  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  1066  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  2090  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  4138  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  8234  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  16426  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  32810  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  65578  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  131114  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  262186  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  524330  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 395.996800] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 395.996800] (9:node@node-8.acme.org) My finger table:
+> [ 395.996800] (9:node@node-8.acme.org) Start | Succ 
+> [ 395.996800] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 395.996800] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 395.996800] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 395.996800] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 411.996500] (5:node@node-4.acme.org) My finger table:
+> [ 411.996500] (5:node@node-4.acme.org) Start | Succ 
+> [ 411.996500] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 411.996500] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 411.996500] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 411.996500] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 416.996500] (4:node@node-3.acme.org) My finger table:
+> [ 416.996500] (4:node@node-3.acme.org) Start | Succ 
+> [ 416.996500] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 416.996500] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 416.996500] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 440.996100] (4:node@node-3.acme.org) My finger table:
+> [ 440.996100] (4:node@node-3.acme.org) Start | Succ 
+> [ 440.996100] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 440.996100] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 440.996100] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 440.996100] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 445.996100] (7:node@node-6.acme.org) My finger table:
+> [ 445.996100] (7:node@node-6.acme.org) Start | Succ 
+> [ 445.996100] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 445.996100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 445.996100] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 445.996100] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 455.995900] (3:node@node-2.acme.org) My finger table:
+> [ 455.995900] (3:node@node-2.acme.org) Start | Succ 
+> [ 455.995900] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 455.995900] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 455.995900] (3:node@node-2.acme.org)  533748  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533752  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 475.995700] (8:node@node-7.acme.org) My finger table:
+> [ 475.995700] (8:node@node-7.acme.org) Start | Succ 
+> [ 475.995700] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 475.995700] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 475.995700] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 475.995700] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 480.995700] (1:node@node-0.acme.org) My finger table:
+> [ 480.995700] (1:node@node-0.acme.org) Start | Succ 
+> [ 480.995700] (1:node@node-0.acme.org)   43  | 366680 
+> [ 480.995700] (1:node@node-0.acme.org)   44  | 366680 
+> [ 480.995700] (1:node@node-0.acme.org)   46  | 366680 
+> [ 480.995700] (1:node@node-0.acme.org)   50  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)   58  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)   74  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  106  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  170  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  298  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  554  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  1066  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  2090  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  4138  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  8234  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  16426  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  32810  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  65578  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  131114  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  262186  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  524330  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 480.995700] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 481.995600] (2:node@node-1.acme.org) My finger table:
+> [ 481.995600] (2:node@node-1.acme.org) Start | Succ 
+> [ 481.995600] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 481.995600] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 481.995600] (2:node@node-1.acme.org)  366684  | 533744 
+> [ 481.995600] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org) Predecessor: 42
+> [ 485.995500] (3:node@node-2.acme.org) My finger table:
+> [ 485.995500] (3:node@node-2.acme.org) Start | Succ 
+> [ 485.995500] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 485.995500] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 485.995500] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 485.995500] (3:node@node-2.acme.org)  533752  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 495.995600] (6:node@node-5.acme.org) My finger table:
+> [ 495.995600] (6:node@node-5.acme.org) Start | Succ 
+> [ 495.995600] (6:node@node-5.acme.org)  10874877  | 366680 
+> [ 495.995600] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 495.995600] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 495.995600] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 495.995600] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org) Predecessor: -1
+> [ 537.995700] (7:node@node-6.acme.org) My finger table:
+> [ 537.995700] (7:node@node-6.acme.org) Start | Succ 
+> [ 537.995700] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 537.995700] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 537.995700] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 537.995700] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 537.995700] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 538.995700] (10:node@node-9.acme.org) My finger table:
+> [ 538.995700] (10:node@node-9.acme.org) Start | Succ 
+> [ 538.995700] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 538.995700] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 538.995700] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 538.995700] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 538.995700] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org) Predecessor: -1
+> [ 551.995500] (5:node@node-4.acme.org) My finger table:
+> [ 551.995500] (5:node@node-4.acme.org) Start | Succ 
+> [ 551.995500] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 551.995500] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 551.995500] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 551.995500] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 551.995500] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 561.995400] (4:node@node-3.acme.org) My finger table:
+> [ 561.995400] (4:node@node-3.acme.org) Start | Succ 
+> [ 561.995400] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 561.995400] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 561.995400] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 561.995400] (4:node@node-3.acme.org)  1319746  | 6518808 
+> [ 561.995400] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 562.995300] (9:node@node-8.acme.org) My finger table:
+> [ 562.995300] (9:node@node-8.acme.org) Start | Succ 
+> [ 562.995300] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 562.995300] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 562.995300] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 562.995300] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 562.995300] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 574.995300] (9:node@node-8.acme.org) My finger table:
+> [ 574.995300] (9:node@node-8.acme.org) Start | Succ 
+> [ 574.995300] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 574.995300] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 574.995300] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 574.995300] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 574.995300] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 601.994900] (1:node@node-0.acme.org) My finger table:
+> [ 601.994900] (1:node@node-0.acme.org) Start | Succ 
+> [ 601.994900] (1:node@node-0.acme.org)   43  | 366680 
+> [ 601.994900] (1:node@node-0.acme.org)   44  | 366680 
+> [ 601.994900] (1:node@node-0.acme.org)   46  | 366680 
+> [ 601.994900] (1:node@node-0.acme.org)   50  | 366680 
+> [ 601.994900] (1:node@node-0.acme.org)   58  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)   74  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  106  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  170  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  298  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  554  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  1066  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  2090  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  4138  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  8234  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  16426  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  32810  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  65578  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  131114  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  262186  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  524330  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 601.994900] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 606.994800] (3:node@node-2.acme.org) My finger table:
+> [ 606.994800] (3:node@node-2.acme.org) Start | Succ 
+> [ 606.994800] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 606.994800] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 606.994800] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 606.994800] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 606.994800] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 611.994800] (8:node@node-7.acme.org) My finger table:
+> [ 611.994800] (8:node@node-7.acme.org) Start | Succ 
+> [ 611.994800] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 611.994800] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 611.994800] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 611.994800] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 611.994800] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 615.994700] (2:node@node-1.acme.org) My finger table:
+> [ 615.994700] (2:node@node-1.acme.org) Start | Succ 
+> [ 615.994700] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 615.994700] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 615.994700] (2:node@node-1.acme.org)  366684  | 533744 
+> [ 615.994700] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 615.994700] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org) Predecessor: 42
+> [ 625.994600] (6:node@node-5.acme.org) My finger table:
+> [ 625.994600] (6:node@node-5.acme.org) Start | Succ 
+> [ 625.994600] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 625.994600] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 625.994600] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 625.994600] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 625.994600] (6:node@node-5.acme.org)  10874892  | 16509405 
+> [ 625.994600] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org) Predecessor: -1
+> [ 628.994600] (5:node@node-4.acme.org) My finger table:
+> [ 628.994600] (5:node@node-4.acme.org) Start | Succ 
+> [ 628.994600] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 628.994600] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 628.994600] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 628.994600] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 628.994600] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 633.994600] (10:node@node-9.acme.org) My finger table:
+> [ 633.994600] (10:node@node-9.acme.org) Start | Succ 
+> [ 633.994600] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 633.994600] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 633.994600] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 633.994600] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 633.994600] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 671.994100] (6:node@node-5.acme.org) My finger table:
+> [ 671.994100] (6:node@node-5.acme.org) Start | Succ 
+> [ 671.994100] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 671.994100] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 671.994100] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 671.994100] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 671.994100] (6:node@node-5.acme.org)  10874892  | 16509405 
+> [ 671.994100] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 672.994100] (7:node@node-6.acme.org) My finger table:
+> [ 672.994100] (7:node@node-6.acme.org) Start | Succ 
+> [ 672.994100] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 672.994100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 672.994100] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 672.994100] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 672.994100] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 672.994100] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 681.994100] (10:node@node-9.acme.org) My finger table:
+> [ 681.994100] (10:node@node-9.acme.org) Start | Succ 
+> [ 681.994100] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 681.994100] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 681.994100] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 681.994100] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 681.994100] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 681.994100] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 683.994100] (9:node@node-8.acme.org) My finger table:
+> [ 683.994100] (9:node@node-8.acme.org) Start | Succ 
+> [ 683.994100] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 687.994000] (5:node@node-4.acme.org) My finger table:
+> [ 687.994000] (5:node@node-4.acme.org) Start | Succ 
+> [ 687.994000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 687.994000] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 687.994000] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 687.994000] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 687.994000] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 687.994000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 690.994000] (4:node@node-3.acme.org) My finger table:
+> [ 690.994000] (4:node@node-3.acme.org) Start | Succ 
+> [ 690.994000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 690.994000] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 690.994000] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 690.994000] (4:node@node-3.acme.org)  1319746  | 6518808 
+> [ 690.994000] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 690.994000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 724.993500] (1:node@node-0.acme.org) My finger table:
+> [ 724.993500] (1:node@node-0.acme.org) Start | Succ 
+> [ 724.993500] (1:node@node-0.acme.org)   43  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   44  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   46  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   50  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   58  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   74  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  106  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  170  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  298  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  554  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  1066  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  2090  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  4138  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  8234  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  16426  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  32810  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  65578  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  131114  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  262186  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  524330  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 724.993500] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 727.993500] (3:node@node-2.acme.org) My finger table:
+> [ 727.993500] (3:node@node-2.acme.org) Start | Succ 
+> [ 727.993500] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 727.993500] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 727.993500] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 727.993500] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 727.993500] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 727.993500] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 752.993300] (8:node@node-7.acme.org) My finger table:
+> [ 752.993300] (8:node@node-7.acme.org) Start | Succ 
+> [ 752.993300] (8:node@node-7.acme.org)  10004761  | 10874876 
+> [ 752.993300] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 752.993300] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 752.993300] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 752.993300] (8:node@node-7.acme.org)  10004776  | 10874876 
+> [ 752.993300] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 756.993300] (6:node@node-5.acme.org) My finger table:
+> [ 756.993300] (6:node@node-5.acme.org) Start | Succ 
+> [ 756.993300] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 756.993300] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 756.993300] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 756.993300] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 756.993300] (6:node@node-5.acme.org)  10874892  | 16509405 
+> [ 756.993300] (6:node@node-5.acme.org)  10874908  | 16509405 
+> [ 756.993300] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 759.993200] (2:node@node-1.acme.org) My finger table:
+> [ 759.993200] (2:node@node-1.acme.org) Start | Succ 
+> [ 759.993200] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 759.993200] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 759.993200] (2:node@node-1.acme.org)  366684  | 533744 
+> [ 759.993200] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 759.993200] (2:node@node-1.acme.org)  366696  | 533744 
+> [ 759.993200] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org) Predecessor: 42
+> [ 794.992900] (7:node@node-6.acme.org) My finger table:
+> [ 794.992900] (7:node@node-6.acme.org) Start | Succ 
+> [ 794.992900] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 794.992900] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728128  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 806.992700] (9:node@node-8.acme.org) My finger table:
+> [ 806.992700] (9:node@node-8.acme.org) Start | Succ 
+> [ 806.992700] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518840  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 810.992700] (5:node@node-4.acme.org) My finger table:
+> [ 810.992700] (5:node@node-4.acme.org) Start | Succ 
+> [ 810.992700] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 810.992700] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509437  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 813.992600] (4:node@node-3.acme.org) My finger table:
+> [ 813.992600] (4:node@node-3.acme.org) Start | Succ 
+> [ 813.992600] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 813.992600] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 813.992600] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 813.992600] (4:node@node-3.acme.org)  1319746  | 6518808 
+> [ 813.992600] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 813.992600] (4:node@node-3.acme.org)  1319770  | 2015253 
+> [ 813.992600] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 824.992500] (10:node@node-9.acme.org) My finger table:
+> [ 824.992500] (10:node@node-9.acme.org) Start | Succ 
+> [ 824.992500] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 824.992500] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 824.992500] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 824.992500] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 824.992500] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 824.992500] (10:node@node-9.acme.org)  2015285  | 6518808 
+> [ 824.992500] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 846.992100] (1:node@node-0.acme.org) My finger table:
+> [ 846.992100] (1:node@node-0.acme.org) Start | Succ 
+> [ 846.992100] (1:node@node-0.acme.org)   43  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   44  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   46  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   50  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   58  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   74  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)  106  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  170  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  298  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  554  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  1066  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  2090  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  4138  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  8234  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  16426  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  32810  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  65578  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  131114  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  262186  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  524330  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 846.992100] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 870.991800] (3:node@node-2.acme.org) My finger table:
+> [ 870.991800] (3:node@node-2.acme.org) Start | Succ 
+> [ 870.991800] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 870.991800] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533776  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 891.991500] (6:node@node-5.acme.org) My finger table:
+> [ 891.991500] (6:node@node-5.acme.org) Start | Succ 
+> [ 891.991500] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 891.991500] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 891.991500] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 891.991500] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 891.991500] (6:node@node-5.acme.org)  10874892  | 16509405 
+> [ 891.991500] (6:node@node-5.acme.org)  10874908  | 16509405 
+> [ 891.991500] (6:node@node-5.acme.org)  10874940  | 16509405 
+> [ 891.991500] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 894.991500] (8:node@node-7.acme.org) My finger table:
+> [ 894.991500] (8:node@node-7.acme.org) Start | Succ 
+> [ 894.991500] (8:node@node-7.acme.org)  10004761  | 10874876 
+> [ 894.991500] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 894.991500] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 894.991500] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 894.991500] (8:node@node-7.acme.org)  10004776  | 10874876 
+> [ 894.991500] (8:node@node-7.acme.org)  10004792  | 10874876 
+> [ 894.991500] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 900.991400] (2:node@node-1.acme.org) My finger table:
+> [ 900.991400] (2:node@node-1.acme.org) Start | Succ 
+> [ 900.991400] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 900.991400] (2:node@node-1.acme.org)  366684  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366696  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366712  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org) Predecessor: 42
+> [ 923.991100] (7:node@node-6.acme.org) My finger table:
+> [ 923.991100] (7:node@node-6.acme.org) Start | Succ 
+> [ 923.991100] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 923.991100] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728128  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728160  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 935.990900] (5:node@node-4.acme.org) My finger table:
+> [ 935.990900] (5:node@node-4.acme.org) Start | Succ 
+> [ 935.990900] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 935.990900] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509437  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509469  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 945.990800] (4:node@node-3.acme.org) My finger table:
+> [ 945.990800] (4:node@node-3.acme.org) Start | Succ 
+> [ 945.990800] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 945.990800] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 945.990800] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 945.990800] (4:node@node-3.acme.org)  1319746  | 6518808 
+> [ 945.990800] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 945.990800] (4:node@node-3.acme.org)  1319770  | 2015253 
+> [ 945.990800] (4:node@node-3.acme.org)  1319802  | 2015253 
+> [ 945.990800] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 945.990800] (9:node@node-8.acme.org) My finger table:
+> [ 945.990800] (9:node@node-8.acme.org) Start | Succ 
+> [ 945.990800] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518840  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518872  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 947.990600] (10:node@node-9.acme.org) My finger table:
+> [ 947.990600] (10:node@node-9.acme.org) Start | Succ 
+> [ 947.990600] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 947.990600] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 947.990600] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015285  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015317  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 967.990400] (1:node@node-0.acme.org) My finger table:
+> [ 967.990400] (1:node@node-0.acme.org) Start | Succ 
+> [ 967.990400] (1:node@node-0.acme.org)   43  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   44  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   46  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   50  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   58  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   74  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)  106  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)  170  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  298  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  554  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  1066  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  2090  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  4138  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  8234  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  16426  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  32810  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  65578  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  131114  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  262186  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  524330  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 967.990400] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 998.990100] (3:node@node-2.acme.org) My finger table:
+> [ 998.990100] (3:node@node-2.acme.org) Start | Succ 
+> [ 998.990100] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 998.990100] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533776  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533808  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org) Predecessor: 366680
+> [1204.990100] (0:@) Messages created: 2714
+> [1204.990100] (0:@) Simulated time: 1204.99
index 37c6edf..e104c4f 100644 (file)
@@ -1,14 +1,14 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
-  <process host="c-0.me" function="node"><argument value="42"/><argument value="6000000"/></process>
-  <process host="c-1.me" function="node"><argument value="366680" /><argument value="42" /><argument value="10" /><argument value="6000000" /></process>
-  <process host="c-2.me" function="node"><argument value="533744" /><argument value="366680" /><argument value="20" /><argument value="6000000" /></process>
-  <process host="c-3.me" function="node"><argument value="1319738" /><argument value="42" /><argument value="30" /><argument value="6000000" /></process>
-  <process host="c-4.me" function="node"><argument value="16509405" /><argument value="366680" /><argument value="40" /><argument value="6000000" /></process>
-  <process host="c-5.me" function="node"><argument value="10874876" /><argument value="533744" /><argument value="50" /><argument value="6000000" /></process>
-  <process host="c-6.me" function="node"><argument value="16728096" /><argument value="1319738" /><argument value="60" /><argument value="6000000" /></process>
-  <process host="c-7.me" function="node"><argument value="10004760" /><argument value="16509405" /><argument value="70" /><argument value="6000000" /></process>
-  <process host="c-8.me" function="node"><argument value="6518808" /><argument value="42" /><argument value="80" /><argument value="6000000" /></process>
-  <process host="c-9.me" function="node"><argument value="2015253" /><argument value="1319738" /><argument value="90" /><argument value="6000000" /></process>
+  <process host="node-0.acme.org" function="node"><argument value="42"/><argument value="6000000"/></process>
+  <process host="node-1.acme.org" function="node"><argument value="366680" /><argument value="42" /><argument value="10" /><argument value="6000000" /></process>
+  <process host="node-2.acme.org" function="node"><argument value="533744" /><argument value="366680" /><argument value="20" /><argument value="6000000" /></process>
+  <process host="node-3.acme.org" function="node"><argument value="1319738" /><argument value="42" /><argument value="30" /><argument value="6000000" /></process>
+  <process host="node-4.acme.org" function="node"><argument value="16509405" /><argument value="366680" /><argument value="40" /><argument value="6000000" /></process>
+  <process host="node-5.acme.org" function="node"><argument value="10874876" /><argument value="533744" /><argument value="50" /><argument value="6000000" /></process>
+  <process host="node-6.acme.org" function="node"><argument value="16728096" /><argument value="1319738" /><argument value="60" /><argument value="6000000" /></process>
+  <process host="node-7.acme.org" function="node"><argument value="10004760" /><argument value="16509405" /><argument value="70" /><argument value="6000000" /></process>
+  <process host="node-8.acme.org" function="node"><argument value="6518808" /><argument value="42" /><argument value="80" /><argument value="6000000" /></process>
+  <process host="node-9.acme.org" function="node"><argument value="2015253" /><argument value="1319738" /><argument value="90" /><argument value="6000000" /></process>
 </platform>
index b179b61..192b77d 100644 (file)
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
-  <process host="c-0.me" function="node"><argument value="42"/><argument value="6000000"/></process>
-  <process host="c-1.me" function="node"><argument value="366680" /><argument value="42" /><argument value="10" /><argument value="6000000" /></process>
-  <process host="c-2.me" function="node"><argument value="533744" /><argument value="366680" /><argument value="20" /><argument value="6000000" /></process>
-  <process host="c-3.me" function="node"><argument value="1319738" /><argument value="42" /><argument value="30" /><argument value="6000000" /></process>
-  <process host="c-4.me" function="node"><argument value="16509405" /><argument value="366680" /><argument value="40" /><argument value="6000000" /></process>
-  <process host="c-5.me" function="node"><argument value="10874876" /><argument value="533744" /><argument value="50" /><argument value="6000000" /></process>
-  <process host="c-6.me" function="node"><argument value="16728096" /><argument value="1319738" /><argument value="60" /><argument value="6000000" /></process>
-  <process host="c-7.me" function="node"><argument value="10004760" /><argument value="16509405" /><argument value="70" /><argument value="6000000" /></process>
-  <process host="c-8.me" function="node"><argument value="6518808" /><argument value="42" /><argument value="80" /><argument value="6000000" /></process>
-  <process host="c-9.me" function="node"><argument value="2015253" /><argument value="1319738" /><argument value="90" /><argument value="6000000" /></process>
-  <process host="c-10.me" function="node"><argument value="10480191" /><argument value="42" /><argument value="100" /><argument value="6000000" /></process>
-  <process host="c-11.me" function="node"><argument value="13505621" /><argument value="10004760" /><argument value="110" /><argument value="6000000" /></process>
-  <process host="c-12.me" function="node"><argument value="13281914" /><argument value="10480191" /><argument value="120" /><argument value="6000000" /></process>
-  <process host="c-13.me" function="node"><argument value="13493864" /><argument value="6518808" /><argument value="130" /><argument value="6000000" /></process>
-  <process host="c-14.me" function="node"><argument value="15853741" /><argument value="6518808" /><argument value="140" /><argument value="6000000" /></process>
-  <process host="c-15.me" function="node"><argument value="12334717" /><argument value="2015253" /><argument value="150" /><argument value="6000000" /></process>
-  <process host="c-16.me" function="node"><argument value="13082922" /><argument value="2015253" /><argument value="160" /><argument value="6000000" /></process>
-  <process host="c-17.me" function="node"><argument value="11008018" /><argument value="13082922" /><argument value="170" /><argument value="6000000" /></process>
-  <process host="c-18.me" function="node"><argument value="14292368" /><argument value="13505621" /><argument value="180" /><argument value="6000000" /></process>
-  <process host="c-19.me" function="node"><argument value="13213873" /><argument value="16509405" /><argument value="190" /><argument value="6000000" /></process>
-  <process host="c-20.me" function="node"><argument value="16742003" /><argument value="11008018" /><argument value="200" /><argument value="6000000" /></process>
-  <process host="c-21.me" function="node"><argument value="8868836" /><argument value="6518808" /><argument value="210" /><argument value="6000000" /></process>
-  <process host="c-22.me" function="node"><argument value="596034" /><argument value="12334717" /><argument value="220" /><argument value="6000000" /></process>
-  <process host="c-23.me" function="node"><argument value="12957732" /><argument value="16728096" /><argument value="230" /><argument value="6000000" /></process>
-  <process host="c-24.me" function="node"><argument value="14183557" /><argument value="12334717" /><argument value="240" /><argument value="6000000" /></process>
-  <process host="c-25.me" function="node"><argument value="9710252" /><argument value="8868836" /><argument value="250" /><argument value="6000000" /></process>
-  <process host="c-26.me" function="node"><argument value="9592804" /><argument value="596034" /><argument value="260" /><argument value="6000000" /></process>
-  <process host="c-27.me" function="node"><argument value="10836171" /><argument value="366680" /><argument value="270" /><argument value="6000000" /></process>
-  <process host="c-28.me" function="node"><argument value="2610930" /><argument value="10836171" /><argument value="280" /><argument value="6000000" /></process>
-  <process host="c-29.me" function="node"><argument value="3938816" /><argument value="596034" /><argument value="290" /><argument value="6000000" /></process>
-  <process host="c-30.me" function="node"><argument value="9207700" /><argument value="1319738" /><argument value="300" /><argument value="6000000" /></process>
-  <process host="c-31.me" function="node"><argument value="11822289" /><argument value="10004760" /><argument value="310" /><argument value="6000000" /></process>
-  <process host="c-32.me" function="node"><argument value="6617885" /><argument value="10004760" /><argument value="320" /><argument value="6000000" /></process>
-  <process host="c-33.me" function="node"><argument value="10798069" /><argument value="366680" /><argument value="330" /><argument value="6000000" /></process>
-  <process host="c-34.me" function="node"><argument value="16224350" /><argument value="10836171" /><argument value="340" /><argument value="6000000" /></process>
-  <process host="c-35.me" function="node"><argument value="116769" /><argument value="13082922" /><argument value="350" /><argument value="6000000" /></process>
-  <process host="c-36.me" function="node"><argument value="8131023" /><argument value="2610930" /><argument value="360" /><argument value="6000000" /></process>
-  <process host="c-37.me" function="node"><argument value="15470236" /><argument value="116769" /><argument value="370" /><argument value="6000000" /></process>
-  <process host="c-38.me" function="node"><argument value="10364630" /><argument value="3938816" /><argument value="380" /><argument value="6000000" /></process>
-  <process host="c-39.me" function="node"><argument value="2379364" /><argument value="8868836" /><argument value="390" /><argument value="6000000" /></process>
-  <process host="c-40.me" function="node"><argument value="5944675" /><argument value="13281914" /><argument value="400" /><argument value="6000000" /></process>
-  <process host="c-41.me" function="node"><argument value="2772317" /><argument value="16224350" /><argument value="410" /><argument value="6000000" /></process>
-  <process host="c-42.me" function="node"><argument value="7514751" /><argument value="42" /><argument value="420" /><argument value="6000000" /></process>
-  <process host="c-43.me" function="node"><argument value="11363703" /><argument value="13505621" /><argument value="430" /><argument value="6000000" /></process>
-  <process host="c-44.me" function="node"><argument value="5864403" /><argument value="42" /><argument value="440" /><argument value="6000000" /></process>
-  <process host="c-45.me" function="node"><argument value="9509382" /><argument value="12957732" /><argument value="450" /><argument value="6000000" /></process>
-  <process host="c-46.me" function="node"><argument value="3107460" /><argument value="10364630" /><argument value="460" /><argument value="6000000" /></process>
-  <process host="c-47.me" function="node"><argument value="13568572" /><argument value="42" /><argument value="470" /><argument value="6000000" /></process>
-  <process host="c-48.me" function="node"><argument value="15651936" /><argument value="9710252" /><argument value="480" /><argument value="6000000" /></process>
-  <process host="c-49.me" function="node"><argument value="10558377" /><argument value="3938816" /><argument value="490" /><argument value="6000000" /></process>
-  <process host="c-50.me" function="node"><argument value="4285545" /><argument value="13493864" /><argument value="500" /><argument value="6000000" /></process>
-  <process host="c-51.me" function="node"><argument value="7467879" /><argument value="10480191" /><argument value="510" /><argument value="6000000" /></process>
-  <process host="c-52.me" function="node"><argument value="11019172" /><argument value="14183557" /><argument value="520" /><argument value="6000000" /></process>
-  <process host="c-53.me" function="node"><argument value="2358899" /><argument value="16728096" /><argument value="530" /><argument value="6000000" /></process>
-  <process host="c-54.me" function="node"><argument value="16134431" /><argument value="11822289" /><argument value="540" /><argument value="6000000" /></process>
-  <process host="c-55.me" function="node"><argument value="5244089" /><argument value="2015253" /><argument value="550" /><argument value="6000000" /></process>
-  <process host="c-56.me" function="node"><argument value="15499692" /><argument value="5944675" /><argument value="560" /><argument value="6000000" /></process>
-  <process host="c-57.me" function="node"><argument value="13922187" /><argument value="366680" /><argument value="570" /><argument value="6000000" /></process>
-  <process host="c-58.me" function="node"><argument value="12086592" /><argument value="2379364" /><argument value="580" /><argument value="6000000" /></process>
-  <process host="c-59.me" function="node"><argument value="10579841" /><argument value="8131023" /><argument value="590" /><argument value="6000000" /></process>
-  <process host="c-60.me" function="node"><argument value="14893867" /><argument value="10798069" /><argument value="600" /><argument value="6000000" /></process>
-  <process host="c-61.me" function="node"><argument value="11273607" /><argument value="12086592" /><argument value="610" /><argument value="6000000" /></process>
-  <process host="c-62.me" function="node"><argument value="810112" /><argument value="10558377" /><argument value="620" /><argument value="6000000" /></process>
-  <process host="c-63.me" function="node"><argument value="10874581" /><argument value="14893867" /><argument value="630" /><argument value="6000000" /></process>
-  <process host="c-64.me" function="node"><argument value="4339906" /><argument value="2379364" /><argument value="640" /><argument value="6000000" /></process>
-  <process host="c-65.me" function="node"><argument value="5230199" /><argument value="15651936" /><argument value="650" /><argument value="6000000" /></process>
-  <process host="c-66.me" function="node"><argument value="3459719" /><argument value="15651936" /><argument value="660" /><argument value="6000000" /></process>
-  <process host="c-67.me" function="node"><argument value="342511" /><argument value="11363703" /><argument value="670" /><argument value="6000000" /></process>
-  <process host="c-68.me" function="node"><argument value="12540825" /><argument value="13082922" /><argument value="680" /><argument value="6000000" /></process>
-  <process host="c-69.me" function="node"><argument value="3915035" /><argument value="16742003" /><argument value="690" /><argument value="6000000" /></process>
-  <process host="c-70.me" function="node"><argument value="9756331" /><argument value="14893867" /><argument value="700" /><argument value="6000000" /></process>
-  <process host="c-71.me" function="node"><argument value="1057" /><argument value="16224350" /><argument value="710" /><argument value="6000000" /></process>
-  <process host="c-72.me" function="node"><argument value="14905830" /><argument value="14292368" /><argument value="720" /><argument value="6000000" /></process>
-  <process host="c-73.me" function="node"><argument value="15011862" /><argument value="116769" /><argument value="730" /><argument value="6000000" /></process>
-  <process host="c-74.me" function="node"><argument value="16561708" /><argument value="2358899" /><argument value="740" /><argument value="6000000" /></process>
-  <process host="c-75.me" function="node"><argument value="15398543" /><argument value="13213873" /><argument value="750" /><argument value="6000000" /></process>
-  <process host="c-76.me" function="node"><argument value="182864" /><argument value="533744" /><argument value="760" /><argument value="6000000" /></process>
-  <process host="c-77.me" function="node"><argument value="6530186" /><argument value="13568572" /><argument value="770" /><argument value="6000000" /></process>
-  <process host="c-78.me" function="node"><argument value="11363165" /><argument value="13213873" /><argument value="780" /><argument value="6000000" /></process>
-  <process host="c-79.me" function="node"><argument value="8636303" /><argument value="15499692" /><argument value="790" /><argument value="6000000" /></process>
-  <process host="c-80.me" function="node"><argument value="11606104" /><argument value="5244089" /><argument value="800" /><argument value="6000000" /></process>
-  <process host="c-81.me" function="node"><argument value="7750053" /><argument value="13505621" /><argument value="810" /><argument value="6000000" /></process>
-  <process host="c-82.me" function="node"><argument value="15166832" /><argument value="3938816" /><argument value="820" /><argument value="6000000" /></process>
-  <process host="c-83.me" function="node"><argument value="4096877" /><argument value="11363703" /><argument value="830" /><argument value="6000000" /></process>
-  <process host="c-84.me" function="node"><argument value="15838695" /><argument value="1319738" /><argument value="840" /><argument value="6000000" /></process>
-  <process host="c-85.me" function="node"><argument value="16057285" /><argument value="182864" /><argument value="850" /><argument value="6000000" /></process>
-  <process host="c-86.me" function="node"><argument value="11161393" /><argument value="15166832" /><argument value="860" /><argument value="6000000" /></process>
-  <process host="c-87.me" function="node"><argument value="7283581" /><argument value="16224350" /><argument value="870" /><argument value="6000000" /></process>
-  <process host="c-88.me" function="node"><argument value="4769647" /><argument value="7750053" /><argument value="880" /><argument value="6000000" /></process>
-  <process host="c-89.me" function="node"><argument value="3395518" /><argument value="596034" /><argument value="890" /><argument value="6000000" /></process>
-  <process host="c-90.me" function="node"><argument value="11275302" /><argument value="10836171" /><argument value="900" /><argument value="6000000" /></process>
-  <process host="c-91.me" function="node"><argument value="1607535" /><argument value="15398543" /><argument value="910" /><argument value="6000000" /></process>
-  <process host="c-92.me" function="node"><argument value="9038828" /><argument value="1057" /><argument value="920" /><argument value="6000000" /></process>
-  <process host="c-93.me" function="node"><argument value="3254523" /><argument value="11363165" /><argument value="930" /><argument value="6000000" /></process>
-  <process host="c-94.me" function="node"><argument value="10826610" /><argument value="366680" /><argument value="940" /><argument value="6000000" /></process>
-  <process host="c-95.me" function="node"><argument value="2013580" /><argument value="11363165" /><argument value="950" /><argument value="6000000" /></process>
-  <process host="c-96.me" function="node"><argument value="4796981" /><argument value="14893867" /><argument value="960" /><argument value="6000000" /></process>
-  <process host="c-97.me" function="node"><argument value="5518537" /><argument value="4285545" /><argument value="970" /><argument value="6000000" /></process>
-  <process host="c-98.me" function="node"><argument value="15089786" /><argument value="15166832" /><argument value="980" /><argument value="6000000" /></process>
-  <process host="c-99.me" function="node"><argument value="8611178" /><argument value="3107460" /><argument value="990" /><argument value="6000000" /></process>
+  <process host="node-0.acme.org" function="node"><argument value="42"/><argument value="6000000"/></process>
+  <process host="node-1.acme.org" function="node"><argument value="366680" /><argument value="42" /><argument value="10" /><argument value="6000000" /></process>
+  <process host="node-2.acme.org" function="node"><argument value="533744" /><argument value="366680" /><argument value="20" /><argument value="6000000" /></process>
+  <process host="node-3.acme.org" function="node"><argument value="1319738" /><argument value="42" /><argument value="30" /><argument value="6000000" /></process>
+  <process host="node-4.acme.org" function="node"><argument value="16509405" /><argument value="366680" /><argument value="40" /><argument value="6000000" /></process>
+  <process host="node-5.acme.org" function="node"><argument value="10874876" /><argument value="533744" /><argument value="50" /><argument value="6000000" /></process>
+  <process host="node-6.acme.org" function="node"><argument value="16728096" /><argument value="1319738" /><argument value="60" /><argument value="6000000" /></process>
+  <process host="node-7.acme.org" function="node"><argument value="10004760" /><argument value="16509405" /><argument value="70" /><argument value="6000000" /></process>
+  <process host="node-8.acme.org" function="node"><argument value="6518808" /><argument value="42" /><argument value="80" /><argument value="6000000" /></process>
+  <process host="node-9.acme.org" function="node"><argument value="2015253" /><argument value="1319738" /><argument value="90" /><argument value="6000000" /></process>
+  <process host="node-10.acme.org" function="node"><argument value="10480191" /><argument value="42" /><argument value="100" /><argument value="6000000" /></process>
+  <process host="node-11.acme.org" function="node"><argument value="13505621" /><argument value="10004760" /><argument value="110" /><argument value="6000000" /></process>
+  <process host="node-12.acme.org" function="node"><argument value="13281914" /><argument value="10480191" /><argument value="120" /><argument value="6000000" /></process>
+  <process host="node-13.acme.org" function="node"><argument value="13493864" /><argument value="6518808" /><argument value="130" /><argument value="6000000" /></process>
+  <process host="node-14.acme.org" function="node"><argument value="15853741" /><argument value="6518808" /><argument value="140" /><argument value="6000000" /></process>
+  <process host="node-15.acme.org" function="node"><argument value="12334717" /><argument value="2015253" /><argument value="150" /><argument value="6000000" /></process>
+  <process host="node-16.acme.org" function="node"><argument value="13082922" /><argument value="2015253" /><argument value="160" /><argument value="6000000" /></process>
+  <process host="node-17.acme.org" function="node"><argument value="11008018" /><argument value="13082922" /><argument value="170" /><argument value="6000000" /></process>
+  <process host="node-18.acme.org" function="node"><argument value="14292368" /><argument value="13505621" /><argument value="180" /><argument value="6000000" /></process>
+  <process host="node-19.acme.org" function="node"><argument value="13213873" /><argument value="16509405" /><argument value="190" /><argument value="6000000" /></process>
+  <process host="node-20.acme.org" function="node"><argument value="16742003" /><argument value="11008018" /><argument value="200" /><argument value="6000000" /></process>
+  <process host="node-21.acme.org" function="node"><argument value="8868836" /><argument value="6518808" /><argument value="210" /><argument value="6000000" /></process>
+  <process host="node-22.acme.org" function="node"><argument value="596034" /><argument value="12334717" /><argument value="220" /><argument value="6000000" /></process>
+  <process host="node-23.acme.org" function="node"><argument value="12957732" /><argument value="16728096" /><argument value="230" /><argument value="6000000" /></process>
+  <process host="node-24.acme.org" function="node"><argument value="14183557" /><argument value="12334717" /><argument value="240" /><argument value="6000000" /></process>
+  <process host="node-25.acme.org" function="node"><argument value="9710252" /><argument value="8868836" /><argument value="250" /><argument value="6000000" /></process>
+  <process host="node-26.acme.org" function="node"><argument value="9592804" /><argument value="596034" /><argument value="260" /><argument value="6000000" /></process>
+  <process host="node-27.acme.org" function="node"><argument value="10836171" /><argument value="366680" /><argument value="270" /><argument value="6000000" /></process>
+  <process host="node-28.acme.org" function="node"><argument value="2610930" /><argument value="10836171" /><argument value="280" /><argument value="6000000" /></process>
+  <process host="node-29.acme.org" function="node"><argument value="3938816" /><argument value="596034" /><argument value="290" /><argument value="6000000" /></process>
+  <process host="node-30.acme.org" function="node"><argument value="9207700" /><argument value="1319738" /><argument value="300" /><argument value="6000000" /></process>
+  <process host="node-31.acme.org" function="node"><argument value="11822289" /><argument value="10004760" /><argument value="310" /><argument value="6000000" /></process>
+  <process host="node-32.acme.org" function="node"><argument value="6617885" /><argument value="10004760" /><argument value="320" /><argument value="6000000" /></process>
+  <process host="node-33.acme.org" function="node"><argument value="10798069" /><argument value="366680" /><argument value="330" /><argument value="6000000" /></process>
+  <process host="node-34.acme.org" function="node"><argument value="16224350" /><argument value="10836171" /><argument value="340" /><argument value="6000000" /></process>
+  <process host="node-35.acme.org" function="node"><argument value="116769" /><argument value="13082922" /><argument value="350" /><argument value="6000000" /></process>
+  <process host="node-36.acme.org" function="node"><argument value="8131023" /><argument value="2610930" /><argument value="360" /><argument value="6000000" /></process>
+  <process host="node-37.acme.org" function="node"><argument value="15470236" /><argument value="116769" /><argument value="370" /><argument value="6000000" /></process>
+  <process host="node-38.acme.org" function="node"><argument value="10364630" /><argument value="3938816" /><argument value="380" /><argument value="6000000" /></process>
+  <process host="node-39.acme.org" function="node"><argument value="2379364" /><argument value="8868836" /><argument value="390" /><argument value="6000000" /></process>
+  <process host="node-40.acme.org" function="node"><argument value="5944675" /><argument value="13281914" /><argument value="400" /><argument value="6000000" /></process>
+  <process host="node-41.acme.org" function="node"><argument value="2772317" /><argument value="16224350" /><argument value="410" /><argument value="6000000" /></process>
+  <process host="node-42.acme.org" function="node"><argument value="7514751" /><argument value="42" /><argument value="420" /><argument value="6000000" /></process>
+  <process host="node-43.acme.org" function="node"><argument value="11363703" /><argument value="13505621" /><argument value="430" /><argument value="6000000" /></process>
+  <process host="node-44.acme.org" function="node"><argument value="5864403" /><argument value="42" /><argument value="440" /><argument value="6000000" /></process>
+  <process host="node-45.acme.org" function="node"><argument value="9509382" /><argument value="12957732" /><argument value="450" /><argument value="6000000" /></process>
+  <process host="node-46.acme.org" function="node"><argument value="3107460" /><argument value="10364630" /><argument value="460" /><argument value="6000000" /></process>
+  <process host="node-47.acme.org" function="node"><argument value="13568572" /><argument value="42" /><argument value="470" /><argument value="6000000" /></process>
+  <process host="node-48.acme.org" function="node"><argument value="15651936" /><argument value="9710252" /><argument value="480" /><argument value="6000000" /></process>
+  <process host="node-49.acme.org" function="node"><argument value="10558377" /><argument value="3938816" /><argument value="490" /><argument value="6000000" /></process>
+  <process host="node-50.acme.org" function="node"><argument value="4285545" /><argument value="13493864" /><argument value="500" /><argument value="6000000" /></process>
+  <process host="node-51.acme.org" function="node"><argument value="7467879" /><argument value="10480191" /><argument value="510" /><argument value="6000000" /></process>
+  <process host="node-52.acme.org" function="node"><argument value="11019172" /><argument value="14183557" /><argument value="520" /><argument value="6000000" /></process>
+  <process host="node-53.acme.org" function="node"><argument value="2358899" /><argument value="16728096" /><argument value="530" /><argument value="6000000" /></process>
+  <process host="node-54.acme.org" function="node"><argument value="16134431" /><argument value="11822289" /><argument value="540" /><argument value="6000000" /></process>
+  <process host="node-55.acme.org" function="node"><argument value="5244089" /><argument value="2015253" /><argument value="550" /><argument value="6000000" /></process>
+  <process host="node-56.acme.org" function="node"><argument value="15499692" /><argument value="5944675" /><argument value="560" /><argument value="6000000" /></process>
+  <process host="node-57.acme.org" function="node"><argument value="13922187" /><argument value="366680" /><argument value="570" /><argument value="6000000" /></process>
+  <process host="node-58.acme.org" function="node"><argument value="12086592" /><argument value="2379364" /><argument value="580" /><argument value="6000000" /></process>
+  <process host="node-59.acme.org" function="node"><argument value="10579841" /><argument value="8131023" /><argument value="590" /><argument value="6000000" /></process>
+  <process host="node-60.acme.org" function="node"><argument value="14893867" /><argument value="10798069" /><argument value="600" /><argument value="6000000" /></process>
+  <process host="node-61.acme.org" function="node"><argument value="11273607" /><argument value="12086592" /><argument value="610" /><argument value="6000000" /></process>
+  <process host="node-62.acme.org" function="node"><argument value="810112" /><argument value="10558377" /><argument value="620" /><argument value="6000000" /></process>
+  <process host="node-63.acme.org" function="node"><argument value="10874581" /><argument value="14893867" /><argument value="630" /><argument value="6000000" /></process>
+  <process host="node-64.acme.org" function="node"><argument value="4339906" /><argument value="2379364" /><argument value="640" /><argument value="6000000" /></process>
+  <process host="node-65.acme.org" function="node"><argument value="5230199" /><argument value="15651936" /><argument value="650" /><argument value="6000000" /></process>
+  <process host="node-66.acme.org" function="node"><argument value="3459719" /><argument value="15651936" /><argument value="660" /><argument value="6000000" /></process>
+  <process host="node-67.acme.org" function="node"><argument value="342511" /><argument value="11363703" /><argument value="670" /><argument value="6000000" /></process>
+  <process host="node-68.acme.org" function="node"><argument value="12540825" /><argument value="13082922" /><argument value="680" /><argument value="6000000" /></process>
+  <process host="node-69.acme.org" function="node"><argument value="3915035" /><argument value="16742003" /><argument value="690" /><argument value="6000000" /></process>
+  <process host="node-70.acme.org" function="node"><argument value="9756331" /><argument value="14893867" /><argument value="700" /><argument value="6000000" /></process>
+  <process host="node-71.acme.org" function="node"><argument value="1057" /><argument value="16224350" /><argument value="710" /><argument value="6000000" /></process>
+  <process host="node-72.acme.org" function="node"><argument value="14905830" /><argument value="14292368" /><argument value="720" /><argument value="6000000" /></process>
+  <process host="node-73.acme.org" function="node"><argument value="15011862" /><argument value="116769" /><argument value="730" /><argument value="6000000" /></process>
+  <process host="node-74.acme.org" function="node"><argument value="16561708" /><argument value="2358899" /><argument value="740" /><argument value="6000000" /></process>
+  <process host="node-75.acme.org" function="node"><argument value="15398543" /><argument value="13213873" /><argument value="750" /><argument value="6000000" /></process>
+  <process host="node-76.acme.org" function="node"><argument value="182864" /><argument value="533744" /><argument value="760" /><argument value="6000000" /></process>
+  <process host="node-77.acme.org" function="node"><argument value="6530186" /><argument value="13568572" /><argument value="770" /><argument value="6000000" /></process>
+  <process host="node-78.acme.org" function="node"><argument value="11363165" /><argument value="13213873" /><argument value="780" /><argument value="6000000" /></process>
+  <process host="node-79.acme.org" function="node"><argument value="8636303" /><argument value="15499692" /><argument value="790" /><argument value="6000000" /></process>
+  <process host="node-80.acme.org" function="node"><argument value="11606104" /><argument value="5244089" /><argument value="800" /><argument value="6000000" /></process>
+  <process host="node-81.acme.org" function="node"><argument value="7750053" /><argument value="13505621" /><argument value="810" /><argument value="6000000" /></process>
+  <process host="node-82.acme.org" function="node"><argument value="15166832" /><argument value="3938816" /><argument value="820" /><argument value="6000000" /></process>
+  <process host="node-83.acme.org" function="node"><argument value="4096877" /><argument value="11363703" /><argument value="830" /><argument value="6000000" /></process>
+  <process host="node-84.acme.org" function="node"><argument value="15838695" /><argument value="1319738" /><argument value="840" /><argument value="6000000" /></process>
+  <process host="node-85.acme.org" function="node"><argument value="16057285" /><argument value="182864" /><argument value="850" /><argument value="6000000" /></process>
+  <process host="node-86.acme.org" function="node"><argument value="11161393" /><argument value="15166832" /><argument value="860" /><argument value="6000000" /></process>
+  <process host="node-87.acme.org" function="node"><argument value="7283581" /><argument value="16224350" /><argument value="870" /><argument value="6000000" /></process>
+  <process host="node-88.acme.org" function="node"><argument value="4769647" /><argument value="7750053" /><argument value="880" /><argument value="6000000" /></process>
+  <process host="node-89.acme.org" function="node"><argument value="3395518" /><argument value="596034" /><argument value="890" /><argument value="6000000" /></process>
+  <process host="node-90.acme.org" function="node"><argument value="11275302" /><argument value="10836171" /><argument value="900" /><argument value="6000000" /></process>
+  <process host="node-91.acme.org" function="node"><argument value="1607535" /><argument value="15398543" /><argument value="910" /><argument value="6000000" /></process>
+  <process host="node-92.acme.org" function="node"><argument value="9038828" /><argument value="1057" /><argument value="920" /><argument value="6000000" /></process>
+  <process host="node-93.acme.org" function="node"><argument value="3254523" /><argument value="11363165" /><argument value="930" /><argument value="6000000" /></process>
+  <process host="node-94.acme.org" function="node"><argument value="10826610" /><argument value="366680" /><argument value="940" /><argument value="6000000" /></process>
+  <process host="node-95.acme.org" function="node"><argument value="2013580" /><argument value="11363165" /><argument value="950" /><argument value="6000000" /></process>
+  <process host="node-96.acme.org" function="node"><argument value="4796981" /><argument value="14893867" /><argument value="960" /><argument value="6000000" /></process>
+  <process host="node-97.acme.org" function="node"><argument value="5518537" /><argument value="4285545" /><argument value="970" /><argument value="6000000" /></process>
+  <process host="node-98.acme.org" function="node"><argument value="15089786" /><argument value="15166832" /><argument value="980" /><argument value="6000000" /></process>
+  <process host="node-99.acme.org" function="node"><argument value="8611178" /><argument value="3107460" /><argument value="990" /><argument value="6000000" /></process>
 </platform>
index 86bf7c1..1a331b6 100644 (file)
@@ -4,13 +4,13 @@ p> Testing the Chord implementation with MSG
 
 ! output sort
 $ $SG_TEST_EXENV ${bindir:=.}/chord$EXEEXT -nb_bits=6 ${srcdir:=.}/../msg_platform.xml ${srcdir:=.}/chord.xml --log=msg_chord.thres:verbose "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (6:node@Jean_Yves) Joining the ring with id 14, knowing node 1
 > [  0.000000] (1:node@Gatien) Joining the ring with id 48, knowing node 1
-> [  0.000000] (4:node@Geoff) Joining the ring with id 32, knowing node 1
 > [  0.000000] (2:node@McGee) Joining the ring with id 42, knowing node 1
 > [  0.000000] (3:node@iRMX) Joining the ring with id 38, knowing node 1
-> [  0.000000] (7:node@Boivin) Joining the ring with id 8, knowing node 1
+> [  0.000000] (4:node@Geoff) Joining the ring with id 32, knowing node 1
 > [  0.000000] (5:node@TeX) Joining the ring with id 21, knowing node 1
+> [  0.000000] (6:node@Jean_Yves) Joining the ring with id 14, knowing node 1
+> [  0.000000] (7:node@Boivin) Joining the ring with id 8, knowing node 1
 > [  0.000000] (8:node@Jacquelin) My finger table:
 > [  0.000000] (8:node@Jacquelin) Start | Succ 
 > [  0.000000] (8:node@Jacquelin)    2  |   1 
@@ -459,2444 +459,2498 @@ $ $SG_TEST_EXENV ${bindir:=.}/chord$EXEEXT -nb_bits=6 ${srcdir:=.}/../msg_platfo
 $ $SG_TEST_EXENV ${bindir:=.}/chord$EXEEXT ${srcdir:=.}/../../platforms/cluster.xml ${srcdir:=.}/chord10.xml --log=msg_chord.thres:verbose "--log=root.fmt:[%11.6r]%e(%i:%P@%h)%e%m%n" --cfg=network/model:Constant
 > [   0.000000] (0:@) Configuration change: Set 'network/model' to 'Constant'
 > [   0.000000] (0:@) Switching workstation model to compound since you changed the network and/or cpu model(s)
-> [   0.000000] (8:node@c-7.me) Joining the ring with id 10004760, knowing node 16509405
-> [   0.000000] (1:node@c-0.me) My finger table:
-> [   0.000000] (9:node@c-8.me) Joining the ring with id 6518808, knowing node 42
-> [   0.000000] (4:node@c-3.me) Joining the ring with id 1319738, knowing node 42
-> [   0.000000] (5:node@c-4.me) Joining the ring with id 16509405, knowing node 366680
-> [   0.000000] (10:node@c-9.me) Joining the ring with id 2015253, knowing node 1319738
-> [   0.000000] (6:node@c-5.me) Joining the ring with id 10874876, knowing node 533744
-> [   0.000000] (3:node@c-2.me) Joining the ring with id 533744, knowing node 366680
-> [   0.000000] (2:node@c-1.me) Joining the ring with id 366680, knowing node 42
-> [   0.000000] (7:node@c-6.me) Joining the ring with id 16728096, knowing node 1319738
-> [   0.000000] (1:node@c-0.me) Start | Succ 
-> [   0.000000] (1:node@c-0.me)   43  |  42 
-> [   0.000000] (1:node@c-0.me)   44  |  42 
-> [   0.000000] (1:node@c-0.me)   46  |  42 
-> [   0.000000] (1:node@c-0.me)   50  |  42 
-> [   0.000000] (1:node@c-0.me)   58  |  42 
-> [   0.000000] (1:node@c-0.me)   74  |  42 
-> [   0.000000] (1:node@c-0.me)  106  |  42 
-> [   0.000000] (1:node@c-0.me)  170  |  42 
-> [   0.000000] (1:node@c-0.me)  298  |  42 
-> [   0.000000] (1:node@c-0.me)  554  |  42 
-> [   0.000000] (1:node@c-0.me)  1066  |  42 
-> [   0.000000] (1:node@c-0.me)  2090  |  42 
-> [   0.000000] (1:node@c-0.me)  4138  |  42 
-> [   0.000000] (1:node@c-0.me)  8234  |  42 
-> [   0.000000] (1:node@c-0.me)  16426  |  42 
-> [   0.000000] (1:node@c-0.me)  32810  |  42 
-> [   0.000000] (1:node@c-0.me)  65578  |  42 
-> [   0.000000] (1:node@c-0.me)  131114  |  42 
-> [   0.000000] (1:node@c-0.me)  262186  |  42 
-> [   0.000000] (1:node@c-0.me)  524330  |  42 
-> [   0.000000] (1:node@c-0.me)  1048618  |  42 
-> [   0.000000] (1:node@c-0.me)  2097194  |  42 
-> [   0.000000] (1:node@c-0.me)  4194346  |  42 
-> [   0.000000] (1:node@c-0.me)  8388650  |  42 
-> [   0.000000] (1:node@c-0.me) Predecessor: -1
-> [   4.000000] (3:node@c-2.me) My finger table:
-> [   4.000000] (3:node@c-2.me) Start | Succ 
-> [   4.000000] (3:node@c-2.me)  533745  | 366680 
-> [   4.000000] (6:node@c-5.me) My finger table:
-> [   4.000000] (3:node@c-2.me)  533746  | 533744 
-> [   4.000000] (6:node@c-5.me) Start | Succ 
-> [   4.000000] (3:node@c-2.me)  533748  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874877  | 533744 
-> [   4.000000] (3:node@c-2.me)  533752  | 533744 
-> [   4.000000] (3:node@c-2.me)  533760  | 533744 
-> [   4.000000] (3:node@c-2.me)  533776  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874878  | 10874876 
-> [   4.000000] (3:node@c-2.me)  533808  | 533744 
-> [   4.000000] (3:node@c-2.me)  533872  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874880  | 10874876 
-> [   4.000000] (3:node@c-2.me)  534000  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874884  | 10874876 
-> [   4.000000] (3:node@c-2.me)  534256  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874892  | 10874876 
-> [   4.000000] (3:node@c-2.me)  534768  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874908  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [   4.000000] (3:node@c-2.me)  535792  | 533744 
-> [   4.000000] (3:node@c-2.me)  537840  | 533744 
-> [   4.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [   4.000000] (3:node@c-2.me)  541936  | 533744 
-> [   4.000000] (3:node@c-2.me)  550128  | 533744 
-> [   4.000000] (3:node@c-2.me)  566512  | 533744 
-> [   4.000000] (3:node@c-2.me)  599280  | 533744 
-> [   4.000000] (3:node@c-2.me)  664816  | 533744 
-> [   4.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [   4.000000] (3:node@c-2.me)  795888  | 533744 
-> [   4.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [   4.000000] (3:node@c-2.me)  1058032  | 533744 
-> [   4.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [   4.000000] (3:node@c-2.me)  1582320  | 533744 
-> [   4.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [   4.000000] (3:node@c-2.me)  2630896  | 533744 
-> [   4.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [   4.000000] (3:node@c-2.me)  4728048  | 533744 
-> [   4.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [   4.000000] (3:node@c-2.me)  8922352  | 533744 
-> [   4.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [   4.000000] (3:node@c-2.me) Predecessor: -1
-> [   4.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [   4.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [   4.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [   4.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [   4.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [   4.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [   4.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [   4.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [   4.000000] (6:node@c-5.me) Predecessor: -1
-> [   5.000000] (8:node@c-7.me) My finger table:
-> [   5.000000] (8:node@c-7.me) Start | Succ 
-> [   5.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10004762  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004764  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004768  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004776  | 10004760 
-> [   5.000000] (5:node@c-4.me) My finger table:
-> [   5.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [   5.000000] (5:node@c-4.me) Start | Succ 
-> [   5.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509406  | 366680 
-> [   5.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509407  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509409  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509413  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509421  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [   5.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [   5.000000] (5:node@c-4.me)  256477  | 16509405 
-> [   5.000000] (5:node@c-4.me)  780765  | 16509405 
-> [   5.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [   5.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [   5.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [   5.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [   5.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [   5.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [   5.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [   5.000000] (5:node@c-4.me) Predecessor: -1
-> [   5.000000] (8:node@c-7.me) Predecessor: -1
-> [   5.999900] (2:node@c-1.me) My finger table:
-> [   5.999900] (2:node@c-1.me) Start | Succ 
-> [   5.999900] (2:node@c-1.me)  366681  |  42 
-> [   5.999900] (2:node@c-1.me)  366682  | 366680 
-> [   5.999900] (2:node@c-1.me)  366684  | 366680 
-> [   5.999900] (2:node@c-1.me)  366688  | 366680 
-> [   5.999900] (2:node@c-1.me)  366696  | 366680 
-> [   5.999900] (2:node@c-1.me)  366712  | 366680 
-> [   5.999900] (2:node@c-1.me)  366744  | 366680 
-> [   5.999900] (2:node@c-1.me)  366808  | 366680 
-> [   5.999900] (2:node@c-1.me)  366936  | 366680 
-> [   5.999900] (2:node@c-1.me)  367192  | 366680 
-> [   5.999900] (2:node@c-1.me)  367704  | 366680 
-> [   5.999900] (2:node@c-1.me)  368728  | 366680 
-> [   5.999900] (2:node@c-1.me)  370776  | 366680 
-> [   5.999900] (2:node@c-1.me)  374872  | 366680 
-> [   5.999900] (2:node@c-1.me)  383064  | 366680 
-> [   5.999900] (2:node@c-1.me)  399448  | 366680 
-> [   5.999900] (2:node@c-1.me)  432216  | 366680 
-> [   5.999900] (2:node@c-1.me)  497752  | 366680 
-> [   5.999900] (2:node@c-1.me)  628824  | 366680 
-> [   5.999900] (2:node@c-1.me)  890968  | 366680 
-> [   5.999900] (2:node@c-1.me)  1415256  | 366680 
-> [   5.999900] (2:node@c-1.me)  2463832  | 366680 
-> [   5.999900] (2:node@c-1.me)  4560984  | 366680 
-> [   5.999900] (2:node@c-1.me)  8755288  | 366680 
-> [   5.999900] (2:node@c-1.me) Predecessor: -1
-> [   7.999900] (7:node@c-6.me) My finger table:
-> [   7.999900] (7:node@c-6.me) Start | Succ 
-> [   7.999900] (7:node@c-6.me)  16728097  | 1319738 
-> [   7.999900] (7:node@c-6.me)  16728098  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728100  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728104  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728112  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728128  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728160  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728224  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728352  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16728608  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16729120  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16730144  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16732192  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16736288  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16744480  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16760864  | 16728096 
-> [   7.999900] (7:node@c-6.me)  16416  | 16728096 
-> [   7.999900] (7:node@c-6.me)  81952  | 16728096 
-> [   7.999900] (7:node@c-6.me)  213024  | 16728096 
-> [   7.999900] (7:node@c-6.me)  475168  | 16728096 
-> [   7.999900] (7:node@c-6.me)  999456  | 16728096 
-> [   7.999900] (7:node@c-6.me)  2048032  | 16728096 
-> [   7.999900] (7:node@c-6.me)  4145184  | 16728096 
-> [   7.999900] (7:node@c-6.me)  8339488  | 16728096 
-> [   7.999900] (7:node@c-6.me) Predecessor: -1
-> [   8.999900] (10:node@c-9.me) My finger table:
-> [   8.999900] (10:node@c-9.me) Start | Succ 
-> [   8.999900] (10:node@c-9.me)  2015254  | 1319738 
-> [   8.999900] (10:node@c-9.me)  2015255  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015257  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015261  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015269  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015285  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015317  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015381  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015509  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2015765  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2016277  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2017301  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2019349  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2023445  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2031637  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2048021  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2080789  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2146325  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2277397  | 2015253 
-> [   8.999900] (10:node@c-9.me)  2539541  | 2015253 
-> [   8.999900] (10:node@c-9.me)  3063829  | 2015253 
-> [   8.999900] (10:node@c-9.me)  4112405  | 2015253 
-> [   8.999900] (10:node@c-9.me)  6209557  | 2015253 
-> [   8.999900] (10:node@c-9.me)  10403861  | 2015253 
-> [   8.999900] (10:node@c-9.me) Predecessor: -1
-> [  10.999800] (4:node@c-3.me) My finger table:
-> [  10.999800] (4:node@c-3.me) Start | Succ 
-> [  10.999800] (4:node@c-3.me)  1319739  |  42 
-> [  10.999800] (4:node@c-3.me)  1319740  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319742  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319746  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319754  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319770  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319802  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319866  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1319994  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1320250  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1320762  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1321786  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1323834  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1327930  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1336122  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1352506  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1385274  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1450810  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1581882  | 1319738 
-> [  10.999800] (4:node@c-3.me)  1844026  | 1319738 
-> [  10.999800] (4:node@c-3.me)  2368314  | 1319738 
-> [  10.999800] (4:node@c-3.me)  3416890  | 1319738 
-> [  10.999800] (4:node@c-3.me)  5514042  | 1319738 
-> [  10.999800] (4:node@c-3.me)  9708346  | 1319738 
-> [  10.999800] (4:node@c-3.me) Predecessor: -1
-> [  15.999700] (9:node@c-8.me) My finger table:
-> [  15.999700] (9:node@c-8.me) Start | Succ 
-> [  15.999700] (9:node@c-8.me)  6518809  |  42 
-> [  15.999700] (9:node@c-8.me)  6518810  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518812  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518816  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518824  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518840  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518872  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6518936  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6519064  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6519320  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6519832  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6520856  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6522904  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6527000  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6535192  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6551576  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6584344  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6649880  | 6518808 
-> [  15.999700] (9:node@c-8.me)  6780952  | 6518808 
-> [  15.999700] (9:node@c-8.me)  7043096  | 6518808 
-> [  15.999700] (9:node@c-8.me)  7567384  | 6518808 
-> [  15.999700] (9:node@c-8.me)  8615960  | 6518808 
-> [  15.999700] (9:node@c-8.me)  10713112  | 6518808 
-> [  15.999700] (9:node@c-8.me)  14907416  | 6518808 
-> [  15.999700] (9:node@c-8.me) Predecessor: -1
-> [  24.999600] (3:node@c-2.me) My finger table:
-> [  24.999600] (3:node@c-2.me) Start | Succ 
-> [  24.999600] (4:node@c-3.me) My finger table:
-> [  24.999600] (3:node@c-2.me)  533745  | 366680 
-> [  24.999600] (4:node@c-3.me) Start | Succ 
-> [  24.999600] (3:node@c-2.me)  533746  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319739  |  42 
-> [  24.999600] (3:node@c-2.me)  533748  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319740  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533752  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319742  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533760  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319746  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533776  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319754  | 1319738 
-> [  24.999600] (4:node@c-3.me)  1319770  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533808  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319802  | 1319738 
-> [  24.999600] (3:node@c-2.me)  533872  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319866  | 1319738 
-> [  24.999600] (3:node@c-2.me)  534000  | 533744 
-> [  24.999600] (4:node@c-3.me)  1319994  | 1319738 
-> [  24.999600] (3:node@c-2.me)  534256  | 533744 
-> [  24.999600] (4:node@c-3.me)  1320250  | 1319738 
-> [  24.999600] (3:node@c-2.me)  534768  | 533744 
-> [  24.999600] (4:node@c-3.me)  1320762  | 1319738 
-> [  24.999600] (3:node@c-2.me)  535792  | 533744 
-> [  24.999600] (3:node@c-2.me)  537840  | 533744 
-> [  24.999600] (4:node@c-3.me)  1321786  | 1319738 
-> [  24.999600] (3:node@c-2.me)  541936  | 533744 
-> [  24.999600] (4:node@c-3.me)  1323834  | 1319738 
-> [  24.999600] (3:node@c-2.me)  550128  | 533744 
-> [  24.999600] (4:node@c-3.me)  1327930  | 1319738 
-> [  24.999600] (3:node@c-2.me)  566512  | 533744 
-> [  24.999600] (4:node@c-3.me)  1336122  | 1319738 
-> [  24.999600] (3:node@c-2.me)  599280  | 533744 
-> [  24.999600] (4:node@c-3.me)  1352506  | 1319738 
-> [  24.999600] (3:node@c-2.me)  664816  | 533744 
-> [  24.999600] (4:node@c-3.me)  1385274  | 1319738 
-> [  24.999600] (3:node@c-2.me)  795888  | 533744 
-> [  24.999600] (4:node@c-3.me)  1450810  | 1319738 
-> [  24.999600] (3:node@c-2.me)  1058032  | 533744 
-> [  24.999600] (3:node@c-2.me)  1582320  | 533744 
-> [  24.999600] (4:node@c-3.me)  1581882  | 1319738 
-> [  24.999600] (3:node@c-2.me)  2630896  | 533744 
-> [  24.999600] (4:node@c-3.me)  1844026  | 1319738 
-> [  24.999600] (4:node@c-3.me)  2368314  | 1319738 
-> [  24.999600] (3:node@c-2.me)  4728048  | 533744 
-> [  24.999600] (4:node@c-3.me)  3416890  | 1319738 
-> [  24.999600] (3:node@c-2.me)  8922352  | 533744 
-> [  24.999600] (3:node@c-2.me) Predecessor: 10874876
-> [  24.999600] (4:node@c-3.me)  5514042  | 1319738 
-> [  24.999600] (4:node@c-3.me)  9708346  | 1319738 
-> [  24.999600] (4:node@c-3.me) Predecessor: 16728096
-> [  32.999400] (2:node@c-1.me) My finger table:
-> [  32.999400] (2:node@c-1.me) Start | Succ 
-> [  32.999400] (2:node@c-1.me)  366681  |  42 
-> [  32.999400] (2:node@c-1.me)  366682  | 366680 
-> [  32.999400] (2:node@c-1.me)  366684  | 366680 
-> [  32.999400] (2:node@c-1.me)  366688  | 366680 
-> [  32.999400] (2:node@c-1.me)  366696  | 366680 
-> [  32.999400] (2:node@c-1.me)  366712  | 366680 
-> [  32.999400] (2:node@c-1.me)  366744  | 366680 
-> [  32.999400] (2:node@c-1.me)  366808  | 366680 
-> [  32.999400] (2:node@c-1.me)  366936  | 366680 
-> [  32.999400] (2:node@c-1.me)  367192  | 366680 
-> [  32.999400] (2:node@c-1.me)  367704  | 366680 
-> [  32.999400] (2:node@c-1.me)  368728  | 366680 
-> [  32.999400] (2:node@c-1.me)  370776  | 366680 
-> [  32.999400] (2:node@c-1.me)  374872  | 366680 
-> [  32.999400] (2:node@c-1.me)  383064  | 366680 
-> [  32.999400] (2:node@c-1.me)  399448  | 366680 
-> [  32.999400] (2:node@c-1.me)  432216  | 366680 
-> [  32.999400] (2:node@c-1.me)  497752  | 366680 
-> [  32.999400] (2:node@c-1.me)  628824  | 366680 
-> [  32.999400] (2:node@c-1.me)  890968  | 366680 
-> [  32.999400] (2:node@c-1.me)  1415256  | 366680 
-> [  32.999400] (2:node@c-1.me)  2463832  | 366680 
-> [  32.999400] (2:node@c-1.me)  4560984  | 366680 
-> [  32.999400] (2:node@c-1.me)  8755288  | 366680 
-> [  32.999400] (2:node@c-1.me) Predecessor: 533744
-> [  34.999400] (2:node@c-1.me) My finger table:
-> [  34.999400] (2:node@c-1.me) Start | Succ 
-> [  34.999400] (2:node@c-1.me)  366681  |  42 
-> [  34.999400] (2:node@c-1.me)  366682  | 366680 
-> [  34.999400] (2:node@c-1.me)  366684  | 366680 
-> [  34.999400] (2:node@c-1.me)  366688  | 366680 
-> [  34.999400] (2:node@c-1.me)  366696  | 366680 
-> [  34.999400] (2:node@c-1.me)  366712  | 366680 
-> [  34.999400] (2:node@c-1.me)  366744  | 366680 
-> [  34.999400] (2:node@c-1.me)  366808  | 366680 
-> [  34.999400] (2:node@c-1.me)  366936  | 366680 
-> [  34.999400] (2:node@c-1.me)  367192  | 366680 
-> [  34.999400] (2:node@c-1.me)  367704  | 366680 
-> [  34.999400] (2:node@c-1.me)  368728  | 366680 
-> [  34.999400] (2:node@c-1.me)  370776  | 366680 
-> [  34.999400] (2:node@c-1.me)  374872  | 366680 
-> [  34.999400] (2:node@c-1.me)  383064  | 366680 
-> [  34.999400] (2:node@c-1.me)  399448  | 366680 
-> [  34.999400] (2:node@c-1.me)  432216  | 366680 
-> [  34.999400] (2:node@c-1.me)  497752  | 366680 
-> [  34.999400] (2:node@c-1.me)  628824  | 366680 
-> [  34.999400] (2:node@c-1.me)  890968  | 366680 
-> [  34.999400] (2:node@c-1.me)  1415256  | 366680 
-> [  34.999400] (2:node@c-1.me)  2463832  | 366680 
-> [  34.999400] (2:node@c-1.me)  4560984  | 366680 
-> [  34.999400] (2:node@c-1.me)  8755288  | 366680 
-> [  34.999400] (2:node@c-1.me) Predecessor: 16509405
-> [  35.999400] (5:node@c-4.me) My finger table:
-> [  35.999400] (5:node@c-4.me) Start | Succ 
-> [  35.999400] (5:node@c-4.me)  16509406  | 366680 
-> [  35.999400] (5:node@c-4.me)  16509407  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509409  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509413  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509421  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509437  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509469  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509533  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509661  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16509917  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16510429  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16511453  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16513501  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16517597  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16525789  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16542173  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16574941  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16640477  | 16509405 
-> [  35.999400] (5:node@c-4.me)  16771549  | 16509405 
-> [  35.999400] (5:node@c-4.me)  256477  | 16509405 
-> [  35.999400] (5:node@c-4.me)  780765  | 16509405 
-> [  35.999400] (5:node@c-4.me)  1829341  | 16509405 
-> [  35.999400] (5:node@c-4.me)  3926493  | 16509405 
-> [  35.999400] (5:node@c-4.me)  8120797  | 16509405 
-> [  35.999400] (5:node@c-4.me) Predecessor: 10004760
-> [  49.999000] (1:node@c-0.me) My finger table:
-> [  49.999000] (1:node@c-0.me) Start | Succ 
-> [  49.999000] (1:node@c-0.me)   43  |  42 
-> [  49.999000] (1:node@c-0.me)   44  |  42 
-> [  49.999000] (1:node@c-0.me)   46  |  42 
-> [  49.999000] (1:node@c-0.me)   50  |  42 
-> [  49.999000] (1:node@c-0.me)   58  |  42 
-> [  49.999000] (1:node@c-0.me)   74  |  42 
-> [  49.999000] (1:node@c-0.me)  106  |  42 
-> [  49.999000] (1:node@c-0.me)  170  |  42 
-> [  49.999000] (1:node@c-0.me)  298  |  42 
-> [  49.999000] (1:node@c-0.me)  554  |  42 
-> [  49.999000] (1:node@c-0.me)  1066  |  42 
-> [  49.999000] (1:node@c-0.me)  2090  |  42 
-> [  49.999000] (1:node@c-0.me)  4138  |  42 
-> [  49.999000] (1:node@c-0.me)  8234  |  42 
-> [  49.999000] (1:node@c-0.me)  16426  |  42 
-> [  49.999000] (1:node@c-0.me)  32810  |  42 
-> [  49.999000] (1:node@c-0.me)  65578  |  42 
-> [  49.999000] (1:node@c-0.me)  131114  |  42 
-> [  49.999000] (1:node@c-0.me)  262186  |  42 
-> [  49.999000] (1:node@c-0.me)  524330  |  42 
-> [  49.999000] (1:node@c-0.me)  1048618  |  42 
-> [  49.999000] (1:node@c-0.me)  2097194  |  42 
-> [  49.999000] (1:node@c-0.me)  4194346  |  42 
-> [  49.999000] (1:node@c-0.me)  8388650  |  42 
-> [  49.999000] (1:node@c-0.me) Predecessor: 366680
-> [  54.998900] (1:node@c-0.me) My finger table:
-> [  54.998900] (1:node@c-0.me) Start | Succ 
-> [  54.998900] (1:node@c-0.me)   43  | 366680 
-> [  54.998900] (1:node@c-0.me)   44  |  42 
-> [  54.998900] (1:node@c-0.me)   46  |  42 
-> [  54.998900] (1:node@c-0.me)   50  |  42 
-> [  54.998900] (1:node@c-0.me)   58  |  42 
-> [  54.998900] (1:node@c-0.me)   74  |  42 
-> [  54.998900] (1:node@c-0.me)  106  |  42 
-> [  54.998900] (1:node@c-0.me)  170  |  42 
-> [  54.998900] (1:node@c-0.me)  298  |  42 
-> [  54.998900] (1:node@c-0.me)  554  |  42 
-> [  54.998900] (1:node@c-0.me)  1066  |  42 
-> [  54.998900] (1:node@c-0.me)  2090  |  42 
-> [  54.998900] (1:node@c-0.me)  4138  |  42 
-> [  54.998900] (1:node@c-0.me)  8234  |  42 
-> [  54.998900] (1:node@c-0.me)  16426  |  42 
-> [  54.998900] (1:node@c-0.me)  32810  |  42 
-> [  54.998900] (1:node@c-0.me)  65578  |  42 
-> [  54.998900] (1:node@c-0.me)  131114  |  42 
-> [  54.998900] (1:node@c-0.me)  262186  |  42 
-> [  54.998900] (1:node@c-0.me)  524330  |  42 
-> [  54.998900] (1:node@c-0.me)  1048618  |  42 
-> [  54.998900] (1:node@c-0.me)  2097194  |  42 
-> [  54.998900] (1:node@c-0.me)  4194346  |  42 
-> [  54.998900] (1:node@c-0.me)  8388650  |  42 
-> [  54.998900] (1:node@c-0.me) Predecessor: 1319738
-> [  91.998400] (7:node@c-6.me) My finger table:
-> [  91.998400] (7:node@c-6.me) Start | Succ 
-> [  91.998400] (7:node@c-6.me)  16728097  | 1319738 
-> [  91.998400] (7:node@c-6.me)  16728098  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728100  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728104  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728112  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728128  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728160  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728224  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728352  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16728608  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16729120  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16730144  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16732192  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16736288  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16744480  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16760864  | 16728096 
-> [  91.998400] (7:node@c-6.me)  16416  | 16728096 
-> [  91.998400] (7:node@c-6.me)  81952  | 16728096 
-> [  91.998400] (7:node@c-6.me)  213024  | 16728096 
-> [  91.998400] (7:node@c-6.me)  475168  | 16728096 
-> [  91.998400] (7:node@c-6.me)  999456  | 16728096 
-> [  91.998400] (7:node@c-6.me)  2048032  | 16728096 
-> [  91.998400] (7:node@c-6.me)  4145184  | 16728096 
-> [  91.998400] (7:node@c-6.me)  8339488  | 16728096 
-> [  91.998400] (7:node@c-6.me) Predecessor: 2015253
-> [ 109.998800] (1:node@c-0.me) My finger table:
-> [ 109.998800] (1:node@c-0.me) Start | Succ 
-> [ 109.998800] (1:node@c-0.me)   43  | 366680 
-> [ 109.998800] (1:node@c-0.me)   44  |  42 
-> [ 109.998800] (1:node@c-0.me)   46  |  42 
-> [ 109.998800] (1:node@c-0.me)   50  |  42 
-> [ 109.998800] (1:node@c-0.me)   58  |  42 
-> [ 109.998800] (1:node@c-0.me)   74  |  42 
-> [ 109.998800] (1:node@c-0.me)  106  |  42 
-> [ 109.998800] (1:node@c-0.me)  170  |  42 
-> [ 109.998800] (1:node@c-0.me)  298  |  42 
-> [ 109.998800] (1:node@c-0.me)  554  |  42 
-> [ 109.998800] (1:node@c-0.me)  1066  |  42 
-> [ 109.998800] (1:node@c-0.me)  2090  |  42 
-> [ 109.998800] (1:node@c-0.me)  4138  |  42 
-> [ 109.998800] (1:node@c-0.me)  8234  |  42 
-> [ 109.998800] (1:node@c-0.me)  16426  |  42 
-> [ 109.998800] (1:node@c-0.me)  32810  |  42 
-> [ 109.998800] (1:node@c-0.me)  65578  |  42 
-> [ 109.998800] (1:node@c-0.me)  131114  |  42 
-> [ 109.998800] (1:node@c-0.me)  262186  |  42 
-> [ 109.998800] (1:node@c-0.me)  524330  |  42 
-> [ 109.998800] (1:node@c-0.me)  1048618  |  42 
-> [ 109.998800] (1:node@c-0.me)  2097194  |  42 
-> [ 109.998800] (1:node@c-0.me)  4194346  |  42 
-> [ 109.998800] (1:node@c-0.me)  8388650  |  42 
-> [ 109.998800] (1:node@c-0.me) Predecessor: 6518808
-> [ 163.999100] (2:node@c-1.me) My finger table:
-> [ 163.999100] (2:node@c-1.me) Start | Succ 
-> [ 163.999100] (2:node@c-1.me)  366681  |  42 
-> [ 163.999100] (2:node@c-1.me)  366682  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366684  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366688  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366696  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366712  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366744  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366808  | 366680 
-> [ 163.999100] (2:node@c-1.me)  366936  | 366680 
-> [ 163.999100] (2:node@c-1.me)  367192  | 366680 
-> [ 163.999100] (2:node@c-1.me)  367704  | 366680 
-> [ 163.999100] (2:node@c-1.me)  368728  | 366680 
-> [ 163.999100] (2:node@c-1.me)  370776  | 366680 
-> [ 163.999100] (2:node@c-1.me)  374872  | 366680 
-> [ 163.999100] (2:node@c-1.me)  383064  | 366680 
-> [ 163.999100] (2:node@c-1.me)  399448  | 366680 
-> [ 163.999100] (2:node@c-1.me)  432216  | 366680 
-> [ 163.999100] (2:node@c-1.me)  497752  | 366680 
-> [ 163.999100] (2:node@c-1.me)  628824  | 366680 
-> [ 163.999100] (2:node@c-1.me)  890968  | 366680 
-> [ 163.999100] (2:node@c-1.me)  1415256  | 366680 
-> [ 163.999100] (2:node@c-1.me)  2463832  | 366680 
-> [ 163.999100] (2:node@c-1.me)  4560984  | 366680 
-> [ 163.999100] (2:node@c-1.me)  8755288  | 366680 
-> [ 163.999100] (2:node@c-1.me) Predecessor: 42
-> [ 195.998600] (9:node@c-8.me) My finger table:
-> [ 195.998600] (9:node@c-8.me) Start | Succ 
-> [ 195.998600] (9:node@c-8.me)  6518809  |  42 
-> [ 195.998600] (9:node@c-8.me)  6518810  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518812  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518816  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518824  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518840  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 195.998600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 195.998600] (9:node@c-8.me) Predecessor: 1319738
-> [ 205.998500] (8:node@c-7.me) My finger table:
-> [ 205.998500] (8:node@c-7.me) Start | Succ 
-> [ 205.998500] (8:node@c-7.me)  10004761  | 16509405 
-> [ 205.998500] (8:node@c-7.me)  10004762  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004764  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004768  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004776  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004792  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004824  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10004888  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10005016  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10005272  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10005784  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10006808  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10008856  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10012952  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10021144  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10037528  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10070296  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10135832  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10266904  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  10529048  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  11053336  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  12101912  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  14199064  | 10004760 
-> [ 205.998500] (8:node@c-7.me)  1616152  | 10004760 
-> [ 205.998500] (8:node@c-7.me) Predecessor: 533744
-> [ 206.998500] (1:node@c-0.me) My finger table:
-> [ 206.998500] (1:node@c-0.me) Start | Succ 
-> [ 206.998500] (1:node@c-0.me)   43  | 366680 
-> [ 206.998500] (1:node@c-0.me)   44  |  42 
-> [ 206.998500] (1:node@c-0.me)   46  |  42 
-> [ 206.998500] (1:node@c-0.me)   50  |  42 
-> [ 206.998500] (1:node@c-0.me)   58  |  42 
-> [ 206.998500] (1:node@c-0.me)   74  |  42 
-> [ 206.998500] (1:node@c-0.me)  106  |  42 
-> [ 206.998500] (1:node@c-0.me)  170  |  42 
-> [ 206.998500] (1:node@c-0.me)  298  |  42 
-> [ 206.998500] (1:node@c-0.me)  554  |  42 
-> [ 206.998500] (1:node@c-0.me)  1066  |  42 
-> [ 206.998500] (1:node@c-0.me)  2090  |  42 
-> [ 206.998500] (1:node@c-0.me)  4138  |  42 
-> [ 206.998500] (1:node@c-0.me)  8234  |  42 
-> [ 206.998500] (1:node@c-0.me)  16426  |  42 
-> [ 206.998500] (1:node@c-0.me)  32810  |  42 
-> [ 206.998500] (1:node@c-0.me)  65578  |  42 
-> [ 206.998500] (1:node@c-0.me)  131114  |  42 
-> [ 206.998500] (1:node@c-0.me)  262186  |  42 
-> [ 206.998500] (1:node@c-0.me)  524330  |  42 
-> [ 206.998500] (1:node@c-0.me)  1048618  |  42 
-> [ 206.998500] (1:node@c-0.me)  2097194  |  42 
-> [ 206.998500] (1:node@c-0.me)  4194346  |  42 
-> [ 206.998500] (1:node@c-0.me)  8388650  |  42 
-> [ 206.998500] (1:node@c-0.me) Predecessor: 16509405
-> [ 244.998100] (4:node@c-3.me) My finger table:
-> [ 244.998100] (4:node@c-3.me) Start | Succ 
-> [ 244.998100] (4:node@c-3.me)  1319739  | 6518808 
-> [ 244.998100] (4:node@c-3.me)  1319740  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319742  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319746  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319754  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319770  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319802  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319866  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1319994  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1320250  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1320762  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1321786  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1323834  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1327930  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1336122  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1352506  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1385274  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1450810  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1581882  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  1844026  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  2368314  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  3416890  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  5514042  | 1319738 
-> [ 244.998100] (4:node@c-3.me)  9708346  | 1319738 
-> [ 244.998100] (4:node@c-3.me) Predecessor: 366680
-> [ 246.998000] (6:node@c-5.me) My finger table:
-> [ 246.998000] (6:node@c-5.me) Start | Succ 
-> [ 246.998000] (6:node@c-5.me)  10874877  | 533744 
-> [ 246.998000] (6:node@c-5.me)  10874878  | 533744 
-> [ 246.998000] (6:node@c-5.me)  10874880  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10874884  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10874892  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10874908  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10874940  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 246.998000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 246.998000] (6:node@c-5.me) Predecessor: -1
-> [ 247.998000] (7:node@c-6.me) My finger table:
-> [ 247.998000] (7:node@c-6.me) Start | Succ 
-> [ 247.998000] (7:node@c-6.me)  16728097  | 1319738 
-> [ 247.998000] (7:node@c-6.me)  16728098  | 1319738 
-> [ 247.998000] (7:node@c-6.me)  16728100  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728104  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728112  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728128  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  16416  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  81952  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  213024  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  475168  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  999456  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 247.998000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 247.998000] (7:node@c-6.me) Predecessor: 2015253
-> [ 249.998000] (10:node@c-9.me) My finger table:
-> [ 249.998000] (10:node@c-9.me) Start | Succ 
-> [ 249.998000] (10:node@c-9.me)  2015254  | 16728096 
-> [ 249.998000] (10:node@c-9.me)  2015255  | 16728096 
-> [ 249.998000] (10:node@c-9.me)  2015257  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015261  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015269  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015285  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015317  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 249.998000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 249.998000] (10:node@c-9.me) Predecessor: -1
-> [ 275.997500] (3:node@c-2.me) My finger table:
-> [ 275.997500] (3:node@c-2.me) Start | Succ 
-> [ 275.997500] (3:node@c-2.me)  533745  | 10004760 
-> [ 275.997500] (3:node@c-2.me)  533746  | 10004760 
-> [ 275.997500] (3:node@c-2.me)  533748  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533752  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533760  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533776  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533808  | 533744 
-> [ 275.997500] (3:node@c-2.me)  533872  | 533744 
-> [ 275.997500] (3:node@c-2.me)  534000  | 533744 
-> [ 275.997500] (3:node@c-2.me)  534256  | 533744 
-> [ 275.997500] (3:node@c-2.me)  534768  | 533744 
-> [ 275.997500] (3:node@c-2.me)  535792  | 533744 
-> [ 275.997500] (3:node@c-2.me)  537840  | 533744 
-> [ 275.997500] (3:node@c-2.me)  541936  | 533744 
-> [ 275.997500] (3:node@c-2.me)  550128  | 533744 
-> [ 275.997500] (3:node@c-2.me)  566512  | 533744 
-> [ 275.997500] (3:node@c-2.me)  599280  | 533744 
-> [ 275.997500] (3:node@c-2.me)  664816  | 533744 
-> [ 275.997500] (3:node@c-2.me)  795888  | 533744 
-> [ 275.997500] (3:node@c-2.me)  1058032  | 533744 
-> [ 275.997500] (3:node@c-2.me)  1582320  | 533744 
-> [ 275.997500] (3:node@c-2.me)  2630896  | 533744 
-> [ 275.997500] (3:node@c-2.me)  4728048  | 533744 
-> [ 275.997500] (3:node@c-2.me)  8922352  | 533744 
-> [ 275.997500] (3:node@c-2.me) Predecessor: 10874876
-> [ 276.997600] (8:node@c-7.me) My finger table:
-> [ 276.997600] (8:node@c-7.me) Start | Succ 
-> [ 276.997600] (8:node@c-7.me)  10004761  | 16509405 
-> [ 276.997600] (8:node@c-7.me)  10004762  | 16509405 
-> [ 276.997600] (8:node@c-7.me)  10004764  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004768  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004776  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004792  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004824  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10004888  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10005016  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10005272  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10005784  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10006808  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10008856  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10012952  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10021144  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10037528  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10070296  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10135832  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10266904  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  10529048  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  11053336  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  12101912  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  14199064  | 10004760 
-> [ 276.997600] (8:node@c-7.me)  1616152  | 10004760 
-> [ 276.997600] (8:node@c-7.me) Predecessor: 533744
-> [ 276.997600] (2:node@c-1.me) My finger table:
-> [ 276.997600] (2:node@c-1.me) Start | Succ 
-> [ 276.997600] (2:node@c-1.me)  366681  | 1319738 
-> [ 276.997600] (2:node@c-1.me)  366682  | 1319738 
-> [ 276.997600] (2:node@c-1.me)  366684  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366688  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366696  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366712  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366744  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366808  | 366680 
-> [ 276.997600] (2:node@c-1.me)  366936  | 366680 
-> [ 276.997600] (2:node@c-1.me)  367192  | 366680 
-> [ 276.997600] (2:node@c-1.me)  367704  | 366680 
-> [ 276.997600] (2:node@c-1.me)  368728  | 366680 
-> [ 276.997600] (2:node@c-1.me)  370776  | 366680 
-> [ 276.997600] (2:node@c-1.me)  374872  | 366680 
-> [ 276.997600] (2:node@c-1.me)  383064  | 366680 
-> [ 276.997600] (2:node@c-1.me)  399448  | 366680 
-> [ 276.997600] (2:node@c-1.me)  432216  | 366680 
-> [ 276.997600] (2:node@c-1.me)  497752  | 366680 
-> [ 276.997600] (2:node@c-1.me)  628824  | 366680 
-> [ 276.997600] (2:node@c-1.me)  890968  | 366680 
-> [ 276.997600] (2:node@c-1.me)  1415256  | 366680 
-> [ 276.997600] (2:node@c-1.me)  2463832  | 366680 
-> [ 276.997600] (2:node@c-1.me)  4560984  | 366680 
-> [ 276.997600] (2:node@c-1.me)  8755288  | 366680 
-> [ 276.997600] (2:node@c-1.me) Predecessor: 42
-> [ 281.997600] (9:node@c-8.me) My finger table:
-> [ 281.997600] (9:node@c-8.me) Start | Succ 
-> [ 281.997600] (9:node@c-8.me)  6518809  | 10004760 
-> [ 281.997600] (9:node@c-8.me)  6518810  | 10004760 
-> [ 281.997600] (9:node@c-8.me)  6518812  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518816  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518824  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518840  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 281.997600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 281.997600] (9:node@c-8.me) Predecessor: 1319738
-> [ 283.997600] (8:node@c-7.me) My finger table:
-> [ 283.997600] (8:node@c-7.me) Start | Succ 
-> [ 283.997600] (8:node@c-7.me)  10004761  | 16509405 
-> [ 283.997600] (8:node@c-7.me)  10004762  | 16509405 
-> [ 283.997600] (8:node@c-7.me)  10004764  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004768  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004776  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004792  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004824  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10004888  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10005016  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10005272  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10005784  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10006808  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10008856  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10012952  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10021144  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10037528  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10070296  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10135832  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10266904  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  10529048  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  11053336  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  12101912  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  14199064  | 10004760 
-> [ 283.997600] (8:node@c-7.me)  1616152  | 10004760 
-> [ 283.997600] (8:node@c-7.me) Predecessor: 6518808
-> [ 285.997500] (4:node@c-3.me) My finger table:
-> [ 285.997500] (4:node@c-3.me) Start | Succ 
-> [ 285.997500] (4:node@c-3.me)  1319739  | 6518808 
-> [ 285.997500] (4:node@c-3.me)  1319740  | 6518808 
-> [ 285.997500] (4:node@c-3.me)  1319742  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319746  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319754  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319770  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319802  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319866  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1319994  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1320250  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1320762  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1321786  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1323834  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1327930  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1336122  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1352506  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1385274  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1450810  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1581882  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  1844026  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  2368314  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  3416890  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  5514042  | 1319738 
-> [ 285.997500] (4:node@c-3.me)  9708346  | 1319738 
-> [ 285.997500] (4:node@c-3.me) Predecessor: 366680
-> [ 285.997500] (1:node@c-0.me) My finger table:
-> [ 285.997500] (1:node@c-0.me) Start | Succ 
-> [ 285.997500] (1:node@c-0.me)   43  | 366680 
-> [ 285.997500] (1:node@c-0.me)   44  | 366680 
-> [ 285.997500] (1:node@c-0.me)   46  |  42 
-> [ 285.997500] (1:node@c-0.me)   50  |  42 
-> [ 285.997500] (1:node@c-0.me)   58  |  42 
-> [ 285.997500] (1:node@c-0.me)   74  |  42 
-> [ 285.997500] (1:node@c-0.me)  106  |  42 
-> [ 285.997500] (1:node@c-0.me)  170  |  42 
-> [ 285.997500] (1:node@c-0.me)  298  |  42 
-> [ 285.997500] (1:node@c-0.me)  554  |  42 
-> [ 285.997500] (1:node@c-0.me)  1066  |  42 
-> [ 285.997500] (1:node@c-0.me)  2090  |  42 
-> [ 285.997500] (1:node@c-0.me)  4138  |  42 
-> [ 285.997500] (1:node@c-0.me)  8234  |  42 
-> [ 285.997500] (1:node@c-0.me)  16426  |  42 
-> [ 285.997500] (1:node@c-0.me)  32810  |  42 
-> [ 285.997500] (1:node@c-0.me)  65578  |  42 
-> [ 285.997500] (1:node@c-0.me)  131114  |  42 
-> [ 285.997500] (1:node@c-0.me)  262186  |  42 
-> [ 285.997500] (1:node@c-0.me)  524330  |  42 
-> [ 285.997500] (1:node@c-0.me)  1048618  |  42 
-> [ 285.997500] (1:node@c-0.me)  2097194  |  42 
-> [ 285.997500] (1:node@c-0.me)  4194346  |  42 
-> [ 285.997500] (1:node@c-0.me)  8388650  |  42 
-> [ 285.997500] (1:node@c-0.me) Predecessor: 16509405
-> [ 290.997500] (5:node@c-4.me) My finger table:
-> [ 290.997500] (5:node@c-4.me) Start | Succ 
-> [ 290.997500] (5:node@c-4.me)  16509406  |  42 
-> [ 290.997500] (5:node@c-4.me)  16509407  |  42 
-> [ 290.997500] (5:node@c-4.me)  16509409  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509413  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509421  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509437  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509469  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509533  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509661  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16509917  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16510429  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16511453  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16513501  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16517597  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16525789  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16542173  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16574941  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16640477  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  16771549  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  256477  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  780765  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  1829341  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  3926493  | 16509405 
-> [ 290.997500] (5:node@c-4.me)  8120797  | 16509405 
-> [ 290.997500] (5:node@c-4.me) Predecessor: 10004760
-> [ 356.996500] (1:node@c-0.me) My finger table:
-> [ 356.996500] (1:node@c-0.me) Start | Succ 
-> [ 356.996500] (1:node@c-0.me)   43  | 366680 
-> [ 356.996500] (1:node@c-0.me)   44  | 366680 
-> [ 356.996500] (1:node@c-0.me)   46  |  42 
-> [ 356.996500] (1:node@c-0.me)   50  |  42 
-> [ 356.996500] (1:node@c-0.me)   58  |  42 
-> [ 356.996500] (1:node@c-0.me)   74  |  42 
-> [ 356.996500] (1:node@c-0.me)  106  |  42 
-> [ 356.996500] (1:node@c-0.me)  170  |  42 
-> [ 356.996500] (1:node@c-0.me)  298  |  42 
-> [ 356.996500] (1:node@c-0.me)  554  |  42 
-> [ 356.996500] (1:node@c-0.me)  1066  |  42 
-> [ 356.996500] (1:node@c-0.me)  2090  |  42 
-> [ 356.996500] (1:node@c-0.me)  4138  |  42 
-> [ 356.996500] (1:node@c-0.me)  8234  |  42 
-> [ 356.996500] (1:node@c-0.me)  16426  |  42 
-> [ 356.996500] (1:node@c-0.me)  32810  |  42 
-> [ 356.996500] (1:node@c-0.me)  65578  |  42 
-> [ 356.996500] (1:node@c-0.me)  131114  |  42 
-> [ 356.996500] (1:node@c-0.me)  262186  |  42 
-> [ 356.996500] (1:node@c-0.me)  524330  |  42 
-> [ 356.996500] (1:node@c-0.me)  1048618  |  42 
-> [ 356.996500] (1:node@c-0.me)  2097194  |  42 
-> [ 356.996500] (1:node@c-0.me)  4194346  |  42 
-> [ 356.996500] (1:node@c-0.me)  8388650  |  42 
-> [ 356.996500] (1:node@c-0.me) Predecessor: 16728096
-> [ 370.996400] (6:node@c-5.me) My finger table:
-> [ 370.996400] (7:node@c-6.me) My finger table:
-> [ 370.996400] (6:node@c-5.me) Start | Succ 
-> [ 370.996400] (7:node@c-6.me) Start | Succ 
-> [ 370.996400] (6:node@c-5.me)  10874877  | 533744 
-> [ 370.996400] (7:node@c-6.me)  16728097  |  42 
-> [ 370.996400] (6:node@c-5.me)  10874878  | 533744 
-> [ 370.996400] (7:node@c-6.me)  16728098  | 1319738 
-> [ 370.996400] (6:node@c-5.me)  10874880  | 533744 
-> [ 370.996400] (7:node@c-6.me)  16728100  |  42 
-> [ 370.996400] (6:node@c-5.me)  10874884  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728104  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10874892  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728112  | 16728096 
-> [ 370.996400] (7:node@c-6.me)  16728128  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10874908  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728160  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10874940  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728224  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10875004  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728352  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10875132  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16728608  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10875388  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16729120  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10875900  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16730144  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10876924  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16732192  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10878972  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16736288  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10883068  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16744480  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10891260  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16760864  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10907644  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  16416  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  10940412  | 10874876 
-> [ 370.996400] (6:node@c-5.me)  11005948  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  81952  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  11137020  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  213024  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  11399164  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  475168  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  11923452  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  999456  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  12972028  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  2048032  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  15069180  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  4145184  | 16728096 
-> [ 370.996400] (6:node@c-5.me)  2486268  | 10874876 
-> [ 370.996400] (7:node@c-6.me)  8339488  | 16728096 
-> [ 370.996400] (6:node@c-5.me) Predecessor: -1
-> [ 370.996400] (7:node@c-6.me) Predecessor: 2015253
-> [ 373.996300] (10:node@c-9.me) My finger table:
-> [ 373.996300] (10:node@c-9.me) Start | Succ 
-> [ 373.996300] (10:node@c-9.me)  2015254  | 16728096 
-> [ 373.996300] (10:node@c-9.me)  2015255  | 16728096 
-> [ 373.996300] (10:node@c-9.me)  2015257  | 16728096 
-> [ 373.996300] (10:node@c-9.me)  2015261  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015269  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015285  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015317  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015381  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015509  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2015765  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2016277  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2017301  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2019349  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2023445  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2031637  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2048021  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2080789  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2146325  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2277397  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  2539541  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  3063829  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  4112405  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  6209557  | 2015253 
-> [ 373.996300] (10:node@c-9.me)  10403861  | 2015253 
-> [ 373.996300] (10:node@c-9.me) Predecessor: -1
-> [ 387.996200] (7:node@c-6.me) My finger table:
-> [ 387.996200] (7:node@c-6.me) Start | Succ 
-> [ 387.996200] (7:node@c-6.me)  16728097  |  42 
-> [ 387.996200] (7:node@c-6.me)  16728098  | 1319738 
-> [ 387.996200] (7:node@c-6.me)  16728100  |  42 
-> [ 387.996200] (7:node@c-6.me)  16728104  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728112  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728128  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728160  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728224  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728352  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16728608  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16729120  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16730144  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16732192  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16736288  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16744480  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16760864  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  16416  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  81952  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  213024  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  475168  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  999456  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  2048032  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  4145184  | 16728096 
-> [ 387.996200] (7:node@c-6.me)  8339488  | 16728096 
-> [ 387.996200] (7:node@c-6.me) Predecessor: 16509405
-> [ 390.996100] (4:node@c-3.me) My finger table:
-> [ 390.996100] (4:node@c-3.me) Start | Succ 
-> [ 390.996100] (4:node@c-3.me)  1319739  | 6518808 
-> [ 390.996100] (4:node@c-3.me)  1319740  | 6518808 
-> [ 390.996100] (4:node@c-3.me)  1319742  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319746  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319754  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319770  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319802  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319866  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1319994  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1320250  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1320762  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1321786  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1323834  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1327930  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1336122  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1352506  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1385274  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1450810  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1581882  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  1844026  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  2368314  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  3416890  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  5514042  | 1319738 
-> [ 390.996100] (4:node@c-3.me)  9708346  | 1319738 
-> [ 390.996100] (4:node@c-3.me) Predecessor: 533744
-> [ 397.996000] (8:node@c-7.me) My finger table:
-> [ 397.996000] (8:node@c-7.me) Start | Succ 
-> [ 397.996000] (8:node@c-7.me)  10004761  | 16509405 
-> [ 397.996000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 397.996000] (8:node@c-7.me)  10004764  | 16509405 
-> [ 397.996000] (8:node@c-7.me)  10004768  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10004776  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10004792  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10004824  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 397.996000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 397.996000] (8:node@c-7.me) Predecessor: 6518808
-> [ 399.996000] (2:node@c-1.me) My finger table:
-> [ 399.996000] (2:node@c-1.me) Start | Succ 
-> [ 399.996000] (2:node@c-1.me)  366681  | 533744 
-> [ 399.996000] (2:node@c-1.me)  366682  | 1319738 
-> [ 399.996000] (2:node@c-1.me)  366684  | 533744 
-> [ 399.996000] (2:node@c-1.me)  366688  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366696  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366712  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366744  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366808  | 366680 
-> [ 399.996000] (2:node@c-1.me)  366936  | 366680 
-> [ 399.996000] (2:node@c-1.me)  367192  | 366680 
-> [ 399.996000] (2:node@c-1.me)  367704  | 366680 
-> [ 399.996000] (2:node@c-1.me)  368728  | 366680 
-> [ 399.996000] (2:node@c-1.me)  370776  | 366680 
-> [ 399.996000] (2:node@c-1.me)  374872  | 366680 
-> [ 399.996000] (2:node@c-1.me)  383064  | 366680 
-> [ 399.996000] (2:node@c-1.me)  399448  | 366680 
-> [ 399.996000] (2:node@c-1.me)  432216  | 366680 
-> [ 399.996000] (2:node@c-1.me)  497752  | 366680 
-> [ 399.996000] (2:node@c-1.me)  628824  | 366680 
-> [ 399.996000] (2:node@c-1.me)  890968  | 366680 
-> [ 399.996000] (2:node@c-1.me)  1415256  | 366680 
-> [ 399.996000] (2:node@c-1.me)  2463832  | 366680 
-> [ 399.996000] (2:node@c-1.me)  4560984  | 366680 
-> [ 399.996000] (2:node@c-1.me)  8755288  | 366680 
-> [ 399.996000] (2:node@c-1.me) Predecessor: 42
-> [ 400.996000] (3:node@c-2.me) My finger table:
-> [ 400.996000] (3:node@c-2.me) Start | Succ 
-> [ 400.996000] (3:node@c-2.me)  533745  | 1319738 
-> [ 400.996000] (3:node@c-2.me)  533746  | 10004760 
-> [ 400.996000] (3:node@c-2.me)  533748  | 1319738 
-> [ 400.996000] (3:node@c-2.me)  533752  | 533744 
-> [ 400.996000] (3:node@c-2.me)  533760  | 533744 
-> [ 400.996000] (3:node@c-2.me)  533776  | 533744 
-> [ 400.996000] (3:node@c-2.me)  533808  | 533744 
-> [ 400.996000] (3:node@c-2.me)  533872  | 533744 
-> [ 400.996000] (3:node@c-2.me)  534000  | 533744 
-> [ 400.996000] (3:node@c-2.me)  534256  | 533744 
-> [ 400.996000] (3:node@c-2.me)  534768  | 533744 
-> [ 400.996000] (3:node@c-2.me)  535792  | 533744 
-> [ 400.996000] (3:node@c-2.me)  537840  | 533744 
-> [ 400.996000] (3:node@c-2.me)  541936  | 533744 
-> [ 400.996000] (3:node@c-2.me)  550128  | 533744 
-> [ 400.996000] (3:node@c-2.me)  566512  | 533744 
-> [ 400.996000] (3:node@c-2.me)  599280  | 533744 
-> [ 400.996000] (3:node@c-2.me)  664816  | 533744 
-> [ 400.996000] (3:node@c-2.me)  795888  | 533744 
-> [ 400.996000] (3:node@c-2.me)  1058032  | 533744 
-> [ 400.996000] (3:node@c-2.me)  1582320  | 533744 
-> [ 400.996000] (3:node@c-2.me)  2630896  | 533744 
-> [ 400.996000] (3:node@c-2.me)  4728048  | 533744 
-> [ 400.996000] (3:node@c-2.me)  8922352  | 533744 
-> [ 400.996000] (3:node@c-2.me) Predecessor: 10874876
-> [ 402.996000] (9:node@c-8.me) My finger table:
-> [ 402.996000] (9:node@c-8.me) Start | Succ 
-> [ 402.996000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 402.996000] (9:node@c-8.me)  6518810  | 10004760 
-> [ 402.996000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 402.996000] (9:node@c-8.me)  6518816  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6518824  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 402.996000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 402.996000] (9:node@c-8.me) Predecessor: 1319738
-> [ 406.995900] (4:node@c-3.me) My finger table:
-> [ 406.995900] (4:node@c-3.me) Start | Succ 
-> [ 406.995900] (4:node@c-3.me)  1319739  | 6518808 
-> [ 406.995900] (4:node@c-3.me)  1319740  | 6518808 
-> [ 406.995900] (4:node@c-3.me)  1319742  | 6518808 
-> [ 406.995900] (4:node@c-3.me)  1319746  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319754  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319770  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319802  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319866  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1319994  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1320250  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1320762  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1321786  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1323834  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1327930  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1336122  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1352506  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1385274  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1450810  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1581882  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  1844026  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  2368314  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  3416890  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  5514042  | 1319738 
-> [ 406.995900] (4:node@c-3.me)  9708346  | 1319738 
-> [ 406.995900] (4:node@c-3.me) Predecessor: 533744
-> [ 409.995900] (1:node@c-0.me) My finger table:
-> [ 409.995900] (1:node@c-0.me) Start | Succ 
-> [ 409.995900] (1:node@c-0.me)   43  | 366680 
-> [ 409.995900] (1:node@c-0.me)   44  | 366680 
-> [ 409.995900] (1:node@c-0.me)   46  | 366680 
-> [ 409.995900] (1:node@c-0.me)   50  |  42 
-> [ 409.995900] (1:node@c-0.me)   58  |  42 
-> [ 409.995900] (1:node@c-0.me)   74  |  42 
-> [ 409.995900] (1:node@c-0.me)  106  |  42 
-> [ 409.995900] (1:node@c-0.me)  170  |  42 
-> [ 409.995900] (1:node@c-0.me)  298  |  42 
-> [ 409.995900] (1:node@c-0.me)  554  |  42 
-> [ 409.995900] (1:node@c-0.me)  1066  |  42 
-> [ 409.995900] (1:node@c-0.me)  2090  |  42 
-> [ 409.995900] (1:node@c-0.me)  4138  |  42 
-> [ 409.995900] (1:node@c-0.me)  8234  |  42 
-> [ 409.995900] (1:node@c-0.me)  16426  |  42 
-> [ 409.995900] (1:node@c-0.me)  32810  |  42 
-> [ 409.995900] (1:node@c-0.me)  65578  |  42 
-> [ 409.995900] (1:node@c-0.me)  131114  |  42 
-> [ 409.995900] (1:node@c-0.me)  262186  |  42 
-> [ 409.995900] (1:node@c-0.me)  524330  |  42 
-> [ 409.995900] (1:node@c-0.me)  1048618  |  42 
-> [ 409.995900] (1:node@c-0.me)  2097194  |  42 
-> [ 409.995900] (1:node@c-0.me)  4194346  |  42 
-> [ 409.995900] (1:node@c-0.me)  8388650  |  42 
-> [ 409.995900] (1:node@c-0.me) Predecessor: 16728096
-> [ 413.995800] (5:node@c-4.me) My finger table:
-> [ 413.995800] (5:node@c-4.me) Start | Succ 
-> [ 413.995800] (5:node@c-4.me)  16509406  | 16728096 
-> [ 413.995800] (5:node@c-4.me)  16509407  |  42 
-> [ 413.995800] (5:node@c-4.me)  16509409  | 16728096 
-> [ 413.995800] (5:node@c-4.me)  16509413  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509421  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509437  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509469  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509533  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509661  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16509917  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16510429  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16511453  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16513501  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16517597  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16525789  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16542173  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16574941  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16640477  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  16771549  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  256477  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  780765  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  1829341  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  3926493  | 16509405 
-> [ 413.995800] (5:node@c-4.me)  8120797  | 16509405 
-> [ 413.995800] (5:node@c-4.me) Predecessor: 10004760
-> [ 428.995800] (3:node@c-2.me) My finger table:
-> [ 428.995800] (3:node@c-2.me) Start | Succ 
-> [ 428.995800] (3:node@c-2.me)  533745  | 1319738 
-> [ 428.995800] (3:node@c-2.me)  533746  | 10004760 
-> [ 428.995800] (3:node@c-2.me)  533748  | 1319738 
-> [ 428.995800] (3:node@c-2.me)  533752  | 533744 
-> [ 428.995800] (3:node@c-2.me)  533760  | 533744 
-> [ 428.995800] (3:node@c-2.me)  533776  | 533744 
-> [ 428.995800] (3:node@c-2.me)  533808  | 533744 
-> [ 428.995800] (3:node@c-2.me)  533872  | 533744 
-> [ 428.995800] (3:node@c-2.me)  534000  | 533744 
-> [ 428.995800] (3:node@c-2.me)  534256  | 533744 
-> [ 428.995800] (3:node@c-2.me)  534768  | 533744 
-> [ 428.995800] (3:node@c-2.me)  535792  | 533744 
-> [ 428.995800] (3:node@c-2.me)  537840  | 533744 
-> [ 428.995800] (3:node@c-2.me)  541936  | 533744 
-> [ 428.995800] (3:node@c-2.me)  550128  | 533744 
-> [ 428.995800] (3:node@c-2.me)  566512  | 533744 
-> [ 428.995800] (3:node@c-2.me)  599280  | 533744 
-> [ 428.995800] (3:node@c-2.me)  664816  | 533744 
-> [ 428.995800] (3:node@c-2.me)  795888  | 533744 
-> [ 428.995800] (3:node@c-2.me)  1058032  | 533744 
-> [ 428.995800] (3:node@c-2.me)  1582320  | 533744 
-> [ 428.995800] (3:node@c-2.me)  2630896  | 533744 
-> [ 428.995800] (3:node@c-2.me)  4728048  | 533744 
-> [ 428.995800] (3:node@c-2.me)  8922352  | 533744 
-> [ 428.995800] (3:node@c-2.me) Predecessor: 366680
-> [ 494.995500] (7:node@c-6.me) My finger table:
-> [ 494.995500] (7:node@c-6.me) Start | Succ 
-> [ 494.995500] (7:node@c-6.me)  16728097  |  42 
-> [ 494.995500] (7:node@c-6.me)  16728098  | 1319738 
-> [ 494.995500] (7:node@c-6.me)  16728100  |  42 
-> [ 494.995500] (7:node@c-6.me)  16728104  |  42 
-> [ 494.995500] (7:node@c-6.me)  16728112  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728128  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728160  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728224  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728352  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16728608  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16729120  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16730144  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16732192  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16736288  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16744480  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16760864  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  16416  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  81952  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  213024  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  475168  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  999456  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  2048032  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  4145184  | 16728096 
-> [ 494.995500] (7:node@c-6.me)  8339488  | 16728096 
-> [ 494.995500] (7:node@c-6.me) Predecessor: 16509405
-> [ 499.995500] (10:node@c-9.me) My finger table:
-> [ 499.995500] (10:node@c-9.me) Start | Succ 
-> [ 499.995500] (10:node@c-9.me)  2015254  | 10004760 
-> [ 499.995500] (10:node@c-9.me)  2015255  | 16728096 
-> [ 499.995500] (10:node@c-9.me)  2015257  | 16728096 
-> [ 499.995500] (10:node@c-9.me)  2015261  | 10004760 
-> [ 499.995500] (10:node@c-9.me)  2015269  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015285  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015317  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015381  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015509  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2015765  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2016277  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2017301  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2019349  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2023445  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2031637  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2048021  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2080789  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2146325  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2277397  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  2539541  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  3063829  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  4112405  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  6209557  | 2015253 
-> [ 499.995500] (10:node@c-9.me)  10403861  | 2015253 
-> [ 499.995500] (10:node@c-9.me) Predecessor: -1
-> [ 501.995400] (6:node@c-5.me) My finger table:
-> [ 501.995400] (6:node@c-5.me) Start | Succ 
-> [ 501.995400] (6:node@c-5.me)  10874877  |  42 
-> [ 501.995400] (6:node@c-5.me)  10874878  | 533744 
-> [ 501.995400] (6:node@c-5.me)  10874880  | 533744 
-> [ 501.995400] (6:node@c-5.me)  10874884  |  42 
-> [ 501.995400] (6:node@c-5.me)  10874892  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10874908  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10874940  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10875004  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10875132  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10875388  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10875900  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10876924  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10878972  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10883068  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10891260  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10907644  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  10940412  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  11005948  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  11137020  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  11399164  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  11923452  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  12972028  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  15069180  | 10874876 
-> [ 501.995400] (6:node@c-5.me)  2486268  | 10874876 
-> [ 501.995400] (6:node@c-5.me) Predecessor: -1
-> [ 523.995200] (8:node@c-7.me) My finger table:
-> [ 523.995200] (8:node@c-7.me) Start | Succ 
-> [ 523.995200] (8:node@c-7.me)  10004761  | 16509405 
-> [ 523.995200] (8:node@c-7.me)  10004762  | 16509405 
-> [ 523.995200] (8:node@c-7.me)  10004764  | 16509405 
-> [ 523.995200] (8:node@c-7.me)  10004768  | 16509405 
-> [ 523.995200] (8:node@c-7.me)  10004776  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10004792  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10004824  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10004888  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10005016  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10005272  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10005784  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10006808  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10008856  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10012952  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10021144  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10037528  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10070296  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10135832  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10266904  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  10529048  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  11053336  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  12101912  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  14199064  | 10004760 
-> [ 523.995200] (8:node@c-7.me)  1616152  | 10004760 
-> [ 523.995200] (8:node@c-7.me) Predecessor: 6518808
-> [ 532.995100] (3:node@c-2.me) My finger table:
-> [ 532.995100] (3:node@c-2.me) Start | Succ 
-> [ 532.995100] (3:node@c-2.me)  533745  | 1319738 
-> [ 532.995100] (3:node@c-2.me)  533746  | 10004760 
-> [ 532.995100] (3:node@c-2.me)  533748  | 1319738 
-> [ 532.995100] (3:node@c-2.me)  533752  | 1319738 
-> [ 532.995100] (3:node@c-2.me)  533760  | 533744 
-> [ 532.995100] (3:node@c-2.me)  533776  | 533744 
-> [ 532.995100] (3:node@c-2.me)  533808  | 533744 
-> [ 532.995100] (3:node@c-2.me)  533872  | 533744 
-> [ 532.995100] (3:node@c-2.me)  534000  | 533744 
-> [ 532.995100] (3:node@c-2.me)  534256  | 533744 
-> [ 532.995100] (3:node@c-2.me)  534768  | 533744 
-> [ 532.995100] (3:node@c-2.me)  535792  | 533744 
-> [ 532.995100] (3:node@c-2.me)  537840  | 533744 
-> [ 532.995100] (3:node@c-2.me)  541936  | 533744 
-> [ 532.995100] (3:node@c-2.me)  550128  | 533744 
-> [ 532.995100] (3:node@c-2.me)  566512  | 533744 
-> [ 532.995100] (3:node@c-2.me)  599280  | 533744 
-> [ 532.995100] (3:node@c-2.me)  664816  | 533744 
-> [ 532.995100] (3:node@c-2.me)  795888  | 533744 
-> [ 532.995100] (3:node@c-2.me)  1058032  | 533744 
-> [ 532.995100] (3:node@c-2.me)  1582320  | 533744 
-> [ 532.995100] (3:node@c-2.me)  2630896  | 533744 
-> [ 532.995100] (3:node@c-2.me)  4728048  | 533744 
-> [ 532.995100] (3:node@c-2.me)  8922352  | 533744 
-> [ 532.995100] (3:node@c-2.me) Predecessor: 366680
-> [ 534.995100] (4:node@c-3.me) My finger table:
-> [ 534.995100] (9:node@c-8.me) My finger table:
-> [ 534.995100] (4:node@c-3.me) Start | Succ 
-> [ 534.995100] (9:node@c-8.me) Start | Succ 
-> [ 534.995100] (4:node@c-3.me)  1319739  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6518809  | 10004760 
-> [ 534.995100] (4:node@c-3.me)  1319740  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1319742  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1319746  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6518810  | 10004760 
-> [ 534.995100] (4:node@c-3.me)  1319754  | 1319738 
-> [ 534.995100] (4:node@c-3.me)  1319770  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6518812  | 10004760 
-> [ 534.995100] (4:node@c-3.me)  1319802  | 1319738 
-> [ 534.995100] (4:node@c-3.me)  1319866  | 1319738 
-> [ 534.995100] (4:node@c-3.me)  1319994  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6518816  | 10004760 
-> [ 534.995100] (4:node@c-3.me)  1320250  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6518824  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6518840  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1320762  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6518872  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1321786  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6518936  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1323834  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6519064  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1327930  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6519320  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1336122  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6519832  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1352506  | 1319738 
-> [ 534.995100] (4:node@c-3.me)  1385274  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6520856  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1450810  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6522904  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1581882  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6527000  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  1844026  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6535192  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  2368314  | 1319738 
-> [ 534.995100] (4:node@c-3.me)  3416890  | 1319738 
-> [ 534.995100] (4:node@c-3.me)  5514042  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6551576  | 6518808 
-> [ 534.995100] (4:node@c-3.me)  9708346  | 1319738 
-> [ 534.995100] (9:node@c-8.me)  6584344  | 6518808 
-> [ 534.995100] (4:node@c-3.me) Predecessor: 533744
-> [ 534.995100] (9:node@c-8.me)  6649880  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  6780952  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  7043096  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  7567384  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  8615960  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  10713112  | 6518808 
-> [ 534.995100] (9:node@c-8.me)  14907416  | 6518808 
-> [ 534.995100] (9:node@c-8.me) Predecessor: 1319738
-> [ 535.995000] (5:node@c-4.me) My finger table:
-> [ 535.995000] (5:node@c-4.me) Start | Succ 
-> [ 535.995000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 535.995000] (5:node@c-4.me)  16509407  |  42 
-> [ 535.995000] (5:node@c-4.me)  16509409  | 16728096 
-> [ 535.995000] (5:node@c-4.me)  16509413  | 16728096 
-> [ 535.995000] (5:node@c-4.me)  16509421  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509437  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509469  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  256477  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  780765  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 535.995000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 535.995000] (5:node@c-4.me) Predecessor: 10004760
-> [ 550.994900] (1:node@c-0.me) My finger table:
-> [ 550.994900] (1:node@c-0.me) Start | Succ 
-> [ 550.994900] (1:node@c-0.me)   43  | 366680 
-> [ 550.994900] (1:node@c-0.me)   44  | 366680 
-> [ 550.994900] (1:node@c-0.me)   46  | 366680 
-> [ 550.994900] (1:node@c-0.me)   50  | 366680 
-> [ 550.994900] (1:node@c-0.me)   58  |  42 
-> [ 550.994900] (1:node@c-0.me)   74  |  42 
-> [ 550.994900] (1:node@c-0.me)  106  |  42 
-> [ 550.994900] (1:node@c-0.me)  170  |  42 
-> [ 550.994900] (1:node@c-0.me)  298  |  42 
-> [ 550.994900] (1:node@c-0.me)  554  |  42 
-> [ 550.994900] (1:node@c-0.me)  1066  |  42 
-> [ 550.994900] (1:node@c-0.me)  2090  |  42 
-> [ 550.994900] (1:node@c-0.me)  4138  |  42 
-> [ 550.994900] (1:node@c-0.me)  8234  |  42 
-> [ 550.994900] (1:node@c-0.me)  16426  |  42 
-> [ 550.994900] (1:node@c-0.me)  32810  |  42 
-> [ 550.994900] (1:node@c-0.me)  65578  |  42 
-> [ 550.994900] (1:node@c-0.me)  131114  |  42 
-> [ 550.994900] (1:node@c-0.me)  262186  |  42 
-> [ 550.994900] (1:node@c-0.me)  524330  |  42 
-> [ 550.994900] (1:node@c-0.me)  1048618  |  42 
-> [ 550.994900] (1:node@c-0.me)  2097194  |  42 
-> [ 550.994900] (1:node@c-0.me)  4194346  |  42 
-> [ 550.994900] (1:node@c-0.me)  8388650  |  42 
-> [ 550.994900] (1:node@c-0.me) Predecessor: 16728096
-> [ 572.994600] (9:node@c-8.me) My finger table:
-> [ 572.994600] (9:node@c-8.me) Start | Succ 
-> [ 572.994600] (9:node@c-8.me)  6518809  | 10004760 
-> [ 572.994600] (9:node@c-8.me)  6518810  | 10004760 
-> [ 572.994600] (9:node@c-8.me)  6518812  | 10004760 
-> [ 572.994600] (9:node@c-8.me)  6518816  | 10004760 
-> [ 572.994600] (9:node@c-8.me)  6518824  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6518840  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 572.994600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 572.994600] (9:node@c-8.me) Predecessor: 2015253
-> [ 589.994400] (5:node@c-4.me) My finger table:
-> [ 589.994400] (5:node@c-4.me) Start | Succ 
-> [ 589.994400] (5:node@c-4.me)  16509406  | 16728096 
-> [ 589.994400] (5:node@c-4.me)  16509407  |  42 
-> [ 589.994400] (5:node@c-4.me)  16509409  | 16728096 
-> [ 589.994400] (5:node@c-4.me)  16509413  | 16728096 
-> [ 589.994400] (5:node@c-4.me)  16509421  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509437  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509469  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509533  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509661  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16509917  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16510429  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16511453  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16513501  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16517597  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16525789  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16542173  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16574941  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16640477  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  16771549  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  256477  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  780765  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  1829341  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  3926493  | 16509405 
-> [ 589.994400] (5:node@c-4.me)  8120797  | 16509405 
-> [ 589.994400] (5:node@c-4.me) Predecessor: 10874876
-> [ 622.994100] (10:node@c-9.me) My finger table:
-> [ 622.994100] (10:node@c-9.me) Start | Succ 
-> [ 622.994100] (10:node@c-9.me)  2015254  | 6518808 
-> [ 622.994100] (10:node@c-9.me)  2015255  | 16728096 
-> [ 622.994100] (10:node@c-9.me)  2015257  | 16728096 
-> [ 622.994100] (10:node@c-9.me)  2015261  | 10004760 
-> [ 622.994100] (10:node@c-9.me)  2015269  | 6518808 
-> [ 622.994100] (10:node@c-9.me)  2015285  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2015317  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2015381  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2015509  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2015765  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2016277  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2017301  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2019349  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2023445  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2031637  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2048021  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2080789  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2146325  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2277397  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  2539541  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  3063829  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  4112405  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  6209557  | 2015253 
-> [ 622.994100] (10:node@c-9.me)  10403861  | 2015253 
-> [ 622.994100] (10:node@c-9.me) Predecessor: -1
-> [ 624.994100] (7:node@c-6.me) My finger table:
-> [ 624.994100] (7:node@c-6.me) Start | Succ 
-> [ 624.994100] (7:node@c-6.me)  16728097  |  42 
-> [ 624.994100] (7:node@c-6.me)  16728098  | 1319738 
-> [ 624.994100] (7:node@c-6.me)  16728100  |  42 
-> [ 624.994100] (7:node@c-6.me)  16728104  |  42 
-> [ 624.994100] (7:node@c-6.me)  16728112  |  42 
-> [ 624.994100] (7:node@c-6.me)  16728128  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16728160  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16728224  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16728352  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16728608  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16729120  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16730144  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16732192  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16736288  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16744480  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16760864  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  16416  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  81952  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  213024  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  475168  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  999456  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  2048032  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  4145184  | 16728096 
-> [ 624.994100] (7:node@c-6.me)  8339488  | 16728096 
-> [ 624.994100] (7:node@c-6.me) Predecessor: 16509405
-> [ 632.993900] (10:node@c-9.me) My finger table:
-> [ 632.993900] (10:node@c-9.me) Start | Succ 
-> [ 632.993900] (10:node@c-9.me)  2015254  | 6518808 
-> [ 632.993900] (10:node@c-9.me)  2015255  | 16728096 
-> [ 632.993900] (10:node@c-9.me)  2015257  | 16728096 
-> [ 632.993900] (10:node@c-9.me)  2015261  | 10004760 
-> [ 632.993900] (10:node@c-9.me)  2015269  | 6518808 
-> [ 632.993900] (10:node@c-9.me)  2015285  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2015317  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2015381  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2015509  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2015765  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2016277  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2017301  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2019349  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2023445  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2031637  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2048021  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2080789  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2146325  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2277397  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  2539541  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  3063829  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  4112405  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  6209557  | 2015253 
-> [ 632.993900] (10:node@c-9.me)  10403861  | 2015253 
-> [ 632.993900] (10:node@c-9.me) Predecessor: 1319738
-> [ 639.993900] (6:node@c-5.me) My finger table:
-> [ 639.993900] (6:node@c-5.me) Start | Succ 
-> [ 639.993900] (6:node@c-5.me)  10874877  | 16509405 
-> [ 639.993900] (6:node@c-5.me)  10874878  | 533744 
-> [ 639.993900] (6:node@c-5.me)  10874880  | 533744 
-> [ 639.993900] (6:node@c-5.me)  10874884  |  42 
-> [ 639.993900] (6:node@c-5.me)  10874892  | 16509405 
-> [ 639.993900] (6:node@c-5.me)  10874908  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10874940  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10875004  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10875132  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10875388  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10875900  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10876924  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10878972  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10883068  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10891260  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10907644  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  10940412  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  11005948  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  11137020  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  11399164  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  11923452  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  12972028  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  15069180  | 10874876 
-> [ 639.993900] (6:node@c-5.me)  2486268  | 10874876 
-> [ 639.993900] (6:node@c-5.me) Predecessor: -1
-> [ 650.993800] (8:node@c-7.me) My finger table:
-> [ 650.993800] (8:node@c-7.me) Start | Succ 
-> [ 650.993800] (8:node@c-7.me)  10004761  | 10874876 
-> [ 650.993800] (8:node@c-7.me)  10004762  | 16509405 
-> [ 650.993800] (8:node@c-7.me)  10004764  | 16509405 
-> [ 650.993800] (8:node@c-7.me)  10004768  | 16509405 
-> [ 650.993800] (8:node@c-7.me)  10004776  | 10874876 
-> [ 650.993800] (8:node@c-7.me)  10004792  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10004824  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10004888  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10005016  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10005272  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10005784  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10006808  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10008856  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10012952  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10021144  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10037528  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10070296  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10135832  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10266904  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  10529048  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  11053336  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  12101912  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  14199064  | 10004760 
-> [ 650.993800] (8:node@c-7.me)  1616152  | 10004760 
-> [ 650.993800] (8:node@c-7.me) Predecessor: 6518808
-> [ 651.993800] (6:node@c-5.me) My finger table:
-> [ 651.993800] (6:node@c-5.me) Start | Succ 
-> [ 651.993800] (6:node@c-5.me)  10874877  | 16509405 
-> [ 651.993800] (6:node@c-5.me)  10874878  | 533744 
-> [ 651.993800] (6:node@c-5.me)  10874880  | 533744 
-> [ 651.993800] (6:node@c-5.me)  10874884  |  42 
-> [ 651.993800] (6:node@c-5.me)  10874892  | 16509405 
-> [ 651.993800] (6:node@c-5.me)  10874908  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10874940  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10875004  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10875132  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10875388  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10875900  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10876924  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10878972  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10883068  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10891260  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10907644  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  10940412  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  11005948  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  11137020  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  11399164  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  11923452  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  12972028  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  15069180  | 10874876 
-> [ 651.993800] (6:node@c-5.me)  2486268  | 10874876 
-> [ 651.993800] (6:node@c-5.me) Predecessor: 10004760
-> [ 655.993700] (3:node@c-2.me) My finger table:
-> [ 655.993700] (3:node@c-2.me) Start | Succ 
-> [ 655.993700] (3:node@c-2.me)  533745  | 1319738 
-> [ 655.993700] (3:node@c-2.me)  533746  | 10004760 
-> [ 655.993700] (3:node@c-2.me)  533748  | 1319738 
-> [ 655.993700] (3:node@c-2.me)  533752  | 1319738 
-> [ 655.993700] (3:node@c-2.me)  533760  | 1319738 
-> [ 655.993700] (3:node@c-2.me)  533776  | 533744 
-> [ 655.993700] (3:node@c-2.me)  533808  | 533744 
-> [ 655.993700] (3:node@c-2.me)  533872  | 533744 
-> [ 655.993700] (3:node@c-2.me)  534000  | 533744 
-> [ 655.993700] (3:node@c-2.me)  534256  | 533744 
-> [ 655.993700] (3:node@c-2.me)  534768  | 533744 
-> [ 655.993700] (3:node@c-2.me)  535792  | 533744 
-> [ 655.993700] (3:node@c-2.me)  537840  | 533744 
-> [ 655.993700] (3:node@c-2.me)  541936  | 533744 
-> [ 655.993700] (3:node@c-2.me)  550128  | 533744 
-> [ 655.993700] (3:node@c-2.me)  566512  | 533744 
-> [ 655.993700] (3:node@c-2.me)  599280  | 533744 
-> [ 655.993700] (3:node@c-2.me)  664816  | 533744 
-> [ 655.993700] (3:node@c-2.me)  795888  | 533744 
-> [ 655.993700] (3:node@c-2.me)  1058032  | 533744 
-> [ 655.993700] (3:node@c-2.me)  1582320  | 533744 
-> [ 655.993700] (3:node@c-2.me)  2630896  | 533744 
-> [ 655.993700] (3:node@c-2.me)  4728048  | 533744 
-> [ 655.993700] (3:node@c-2.me)  8922352  | 533744 
-> [ 655.993700] (3:node@c-2.me) Predecessor: 366680
-> [ 657.993700] (4:node@c-3.me) My finger table:
-> [ 657.993700] (4:node@c-3.me) Start | Succ 
-> [ 657.993700] (4:node@c-3.me)  1319739  | 2015253 
-> [ 657.993700] (4:node@c-3.me)  1319740  | 6518808 
-> [ 657.993700] (4:node@c-3.me)  1319742  | 6518808 
-> [ 657.993700] (4:node@c-3.me)  1319746  | 6518808 
-> [ 657.993700] (4:node@c-3.me)  1319754  | 2015253 
-> [ 657.993700] (4:node@c-3.me)  1319770  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1319802  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1319866  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1319994  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1320250  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1320762  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1321786  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1323834  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1327930  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1336122  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1352506  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1385274  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1450810  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1581882  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  1844026  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  2368314  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  3416890  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  5514042  | 1319738 
-> [ 657.993700] (4:node@c-3.me)  9708346  | 1319738 
-> [ 657.993700] (4:node@c-3.me) Predecessor: 533744
-> [ 661.993600] (9:node@c-8.me) My finger table:
-> [ 661.993600] (9:node@c-8.me) Start | Succ 
-> [ 661.993600] (9:node@c-8.me)  6518809  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518810  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518812  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518816  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518824  | 10004760 
-> [ 661.993600] (9:node@c-8.me)  6518840  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 661.993600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 661.993600] (9:node@c-8.me) Predecessor: 2015253
-> [ 663.993600] (5:node@c-4.me) My finger table:
-> [ 663.993600] (5:node@c-4.me) Start | Succ 
-> [ 663.993600] (5:node@c-4.me)  16509406  | 16728096 
-> [ 663.993600] (5:node@c-4.me)  16509407  |  42 
-> [ 663.993600] (5:node@c-4.me)  16509409  | 16728096 
-> [ 663.993600] (5:node@c-4.me)  16509413  | 16728096 
-> [ 663.993600] (5:node@c-4.me)  16509421  | 16728096 
-> [ 663.993600] (5:node@c-4.me)  16509437  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16509469  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16509533  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16509661  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16509917  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16510429  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16511453  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16513501  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16517597  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16525789  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16542173  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16574941  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16640477  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  16771549  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  256477  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  780765  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  1829341  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  3926493  | 16509405 
-> [ 663.993600] (5:node@c-4.me)  8120797  | 16509405 
-> [ 663.993600] (5:node@c-4.me) Predecessor: 10874876
-> [ 744.993200] (10:node@c-9.me) My finger table:
-> [ 744.993200] (10:node@c-9.me) Start | Succ 
-> [ 744.993200] (10:node@c-9.me)  2015254  | 6518808 
-> [ 744.993200] (10:node@c-9.me)  2015255  | 16728096 
-> [ 744.993200] (10:node@c-9.me)  2015257  | 16728096 
-> [ 744.993200] (10:node@c-9.me)  2015261  | 10004760 
-> [ 744.993200] (10:node@c-9.me)  2015269  | 6518808 
-> [ 744.993200] (10:node@c-9.me)  2015285  | 6518808 
-> [ 744.993200] (10:node@c-9.me)  2015317  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2015381  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2015509  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2015765  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2016277  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2017301  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2019349  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2023445  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2031637  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2048021  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2080789  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2146325  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2277397  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  2539541  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  3063829  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  4112405  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  6209557  | 2015253 
-> [ 744.993200] (10:node@c-9.me)  10403861  | 2015253 
-> [ 744.993200] (10:node@c-9.me) Predecessor: 1319738
-> [ 748.993100] (2:node@c-1.me) My finger table:
-> [ 748.993100] (2:node@c-1.me) Start | Succ 
-> [ 748.993100] (2:node@c-1.me)  366681  | 533744 
-> [ 748.993100] (2:node@c-1.me)  366682  | 1319738 
-> [ 748.993100] (2:node@c-1.me)  366684  | 533744 
-> [ 748.993100] (2:node@c-1.me)  366688  | 533744 
-> [ 748.993100] (2:node@c-1.me)  366696  | 366680 
-> [ 748.993100] (2:node@c-1.me)  366712  | 366680 
-> [ 748.993100] (2:node@c-1.me)  366744  | 366680 
-> [ 748.993100] (2:node@c-1.me)  366808  | 366680 
-> [ 748.993100] (2:node@c-1.me)  366936  | 366680 
-> [ 748.993100] (2:node@c-1.me)  367192  | 366680 
-> [ 748.993100] (2:node@c-1.me)  367704  | 366680 
-> [ 748.993100] (2:node@c-1.me)  368728  | 366680 
-> [ 748.993100] (2:node@c-1.me)  370776  | 366680 
-> [ 748.993100] (2:node@c-1.me)  374872  | 366680 
-> [ 748.993100] (2:node@c-1.me)  383064  | 366680 
-> [ 748.993100] (2:node@c-1.me)  399448  | 366680 
-> [ 748.993100] (2:node@c-1.me)  432216  | 366680 
-> [ 748.993100] (2:node@c-1.me)  497752  | 366680 
-> [ 748.993100] (2:node@c-1.me)  628824  | 366680 
-> [ 748.993100] (2:node@c-1.me)  890968  | 366680 
-> [ 748.993100] (2:node@c-1.me)  1415256  | 366680 
-> [ 748.993100] (2:node@c-1.me)  2463832  | 366680 
-> [ 748.993100] (2:node@c-1.me)  4560984  | 366680 
-> [ 748.993100] (2:node@c-1.me)  8755288  | 366680 
-> [ 748.993100] (2:node@c-1.me) Predecessor: 42
-> [ 748.993100] (7:node@c-6.me) My finger table:
-> [ 748.993100] (7:node@c-6.me) Start | Succ 
-> [ 748.993100] (7:node@c-6.me)  16728097  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728098  | 1319738 
-> [ 748.993100] (7:node@c-6.me)  16728100  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728104  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728112  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728128  |  42 
-> [ 748.993100] (7:node@c-6.me)  16728160  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16728224  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16728352  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16728608  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16729120  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16730144  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16732192  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16736288  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16744480  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16760864  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  16416  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  81952  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  213024  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  475168  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  999456  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  2048032  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  4145184  | 16728096 
-> [ 748.993100] (7:node@c-6.me)  8339488  | 16728096 
-> [ 748.993100] (7:node@c-6.me) Predecessor: 16509405
-> [ 768.992700] (6:node@c-5.me) My finger table:
-> [ 768.992700] (6:node@c-5.me) Start | Succ 
-> [ 768.992700] (6:node@c-5.me)  10874877  | 16509405 
-> [ 768.992700] (6:node@c-5.me)  10874878  | 533744 
-> [ 768.992700] (6:node@c-5.me)  10874880  | 533744 
-> [ 768.992700] (6:node@c-5.me)  10874884  |  42 
-> [ 768.992700] (6:node@c-5.me)  10874892  | 16509405 
-> [ 768.992700] (6:node@c-5.me)  10874908  | 16509405 
-> [ 768.992700] (6:node@c-5.me)  10874940  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10875004  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10875132  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10875388  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10875900  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10876924  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10878972  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10883068  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10891260  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10907644  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  10940412  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  11005948  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  11137020  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  11399164  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  11923452  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  12972028  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  15069180  | 10874876 
-> [ 768.992700] (6:node@c-5.me)  2486268  | 10874876 
-> [ 768.992700] (6:node@c-5.me) Predecessor: 10004760
-> [ 781.992700] (3:node@c-2.me) My finger table:
-> [ 781.992700] (3:node@c-2.me) Start | Succ 
-> [ 781.992700] (8:node@c-7.me) My finger table:
-> [ 781.992700] (3:node@c-2.me)  533745  | 1319738 
-> [ 781.992700] (8:node@c-7.me) Start | Succ 
-> [ 781.992700] (3:node@c-2.me)  533746  | 10004760 
-> [ 781.992700] (8:node@c-7.me)  10004761  | 10874876 
-> [ 781.992700] (3:node@c-2.me)  533748  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004762  | 16509405 
-> [ 781.992700] (3:node@c-2.me)  533752  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004764  | 16509405 
-> [ 781.992700] (3:node@c-2.me)  533760  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004768  | 16509405 
-> [ 781.992700] (8:node@c-7.me)  10004776  | 10874876 
-> [ 781.992700] (3:node@c-2.me)  533776  | 1319738 
-> [ 781.992700] (8:node@c-7.me)  10004792  | 10874876 
-> [ 781.992700] (8:node@c-7.me)  10004824  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  533808  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10004888  | 10004760 
-> [ 781.992700] (8:node@c-7.me)  10005016  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  533872  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10005272  | 10004760 
-> [ 781.992700] (8:node@c-7.me)  10005784  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  534000  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10006808  | 10004760 
-> [ 781.992700] (8:node@c-7.me)  10008856  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  534256  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10012952  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  534768  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10021144  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  535792  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10037528  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  537840  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10070296  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  541936  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10135832  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  550128  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10266904  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  566512  | 533744 
-> [ 781.992700] (8:node@c-7.me)  10529048  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  599280  | 533744 
-> [ 781.992700] (8:node@c-7.me)  11053336  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  664816  | 533744 
-> [ 781.992700] (8:node@c-7.me)  12101912  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  795888  | 533744 
-> [ 781.992700] (8:node@c-7.me)  14199064  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  1058032  | 533744 
-> [ 781.992700] (8:node@c-7.me)  1616152  | 10004760 
-> [ 781.992700] (3:node@c-2.me)  1582320  | 533744 
-> [ 781.992700] (8:node@c-7.me) Predecessor: 6518808
-> [ 781.992700] (3:node@c-2.me)  2630896  | 533744 
-> [ 781.992700] (3:node@c-2.me)  4728048  | 533744 
-> [ 781.992700] (3:node@c-2.me)  8922352  | 533744 
-> [ 781.992700] (3:node@c-2.me) Predecessor: 366680
-> [ 786.992400] (5:node@c-4.me) My finger table:
-> [ 786.992400] (5:node@c-4.me) Start | Succ 
-> [ 786.992400] (5:node@c-4.me)  16509406  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509407  |  42 
-> [ 786.992400] (5:node@c-4.me)  16509409  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509413  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509421  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509437  | 16728096 
-> [ 786.992400] (5:node@c-4.me)  16509469  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16509533  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16509661  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16509917  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16510429  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16511453  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16513501  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16517597  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16525789  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16542173  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16574941  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16640477  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  16771549  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  256477  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  780765  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  1829341  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  3926493  | 16509405 
-> [ 786.992400] (5:node@c-4.me)  8120797  | 16509405 
-> [ 786.992400] (5:node@c-4.me) Predecessor: 10874876
-> [ 786.992600] (9:node@c-8.me) My finger table:
-> [ 786.992600] (9:node@c-8.me) Start | Succ 
-> [ 786.992600] (9:node@c-8.me)  6518809  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518810  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518812  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518816  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518824  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518840  | 10004760 
-> [ 786.992600] (9:node@c-8.me)  6518872  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6518936  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6519064  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6519320  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6519832  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6520856  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6522904  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6527000  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6535192  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6551576  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6584344  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6649880  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  6780952  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  7043096  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  7567384  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  8615960  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  10713112  | 6518808 
-> [ 786.992600] (9:node@c-8.me)  14907416  | 6518808 
-> [ 786.992600] (9:node@c-8.me) Predecessor: 2015253
-> [ 795.992400] (4:node@c-3.me) My finger table:
-> [ 795.992400] (4:node@c-3.me) Start | Succ 
-> [ 795.992400] (4:node@c-3.me)  1319739  | 2015253 
-> [ 795.992400] (4:node@c-3.me)  1319740  | 6518808 
-> [ 795.992400] (4:node@c-3.me)  1319742  | 6518808 
-> [ 795.992400] (4:node@c-3.me)  1319746  | 6518808 
-> [ 795.992400] (4:node@c-3.me)  1319754  | 2015253 
-> [ 795.992400] (4:node@c-3.me)  1319770  | 2015253 
-> [ 795.992400] (4:node@c-3.me)  1319802  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1319866  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1319994  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1320250  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1320762  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1321786  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1323834  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1327930  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1336122  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1352506  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1385274  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1450810  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1581882  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  1844026  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  2368314  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  3416890  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  5514042  | 1319738 
-> [ 795.992400] (4:node@c-3.me)  9708346  | 1319738 
-> [ 795.992400] (4:node@c-3.me) Predecessor: 533744
-> [ 873.991200] (10:node@c-9.me) My finger table:
-> [ 873.991200] (10:node@c-9.me) Start | Succ 
-> [ 873.991200] (10:node@c-9.me)  2015254  | 6518808 
-> [ 873.991200] (10:node@c-9.me)  2015255  | 16728096 
-> [ 873.991200] (10:node@c-9.me)  2015257  | 16728096 
-> [ 873.991200] (10:node@c-9.me)  2015261  | 10004760 
-> [ 873.991200] (10:node@c-9.me)  2015269  | 6518808 
-> [ 873.991200] (10:node@c-9.me)  2015285  | 6518808 
-> [ 873.991200] (10:node@c-9.me)  2015317  | 6518808 
-> [ 873.991200] (10:node@c-9.me)  2015381  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2015509  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2015765  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2016277  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2017301  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2019349  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2023445  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2031637  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2048021  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2080789  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2146325  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2277397  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  2539541  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  3063829  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  4112405  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  6209557  | 2015253 
-> [ 873.991200] (10:node@c-9.me)  10403861  | 2015253 
-> [ 873.991200] (10:node@c-9.me) Predecessor: 1319738
-> [ 873.991300] (7:node@c-6.me) My finger table:
-> [ 873.991300] (7:node@c-6.me) Start | Succ 
-> [ 873.991300] (7:node@c-6.me)  16728097  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728098  | 1319738 
-> [ 873.991300] (7:node@c-6.me)  16728100  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728104  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728112  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728128  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728160  |  42 
-> [ 873.991300] (7:node@c-6.me)  16728224  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16728352  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16728608  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16729120  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16730144  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16732192  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16736288  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16744480  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16760864  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  16416  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  81952  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  213024  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  475168  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  999456  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  2048032  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  4145184  | 16728096 
-> [ 873.991300] (7:node@c-6.me)  8339488  | 16728096 
-> [ 873.991300] (7:node@c-6.me) Predecessor: 16509405
-> [ 875.991200] (2:node@c-1.me) My finger table:
-> [ 875.991200] (2:node@c-1.me) Start | Succ 
-> [ 875.991200] (2:node@c-1.me)  366681  | 533744 
-> [ 875.991200] (2:node@c-1.me)  366682  | 1319738 
-> [ 875.991200] (2:node@c-1.me)  366684  | 533744 
-> [ 875.991200] (2:node@c-1.me)  366688  | 533744 
-> [ 875.991200] (2:node@c-1.me)  366696  | 533744 
-> [ 875.991200] (2:node@c-1.me)  366712  | 366680 
-> [ 875.991200] (2:node@c-1.me)  366744  | 366680 
-> [ 875.991200] (2:node@c-1.me)  366808  | 366680 
-> [ 875.991200] (2:node@c-1.me)  366936  | 366680 
-> [ 875.991200] (2:node@c-1.me)  367192  | 366680 
-> [ 875.991200] (2:node@c-1.me)  367704  | 366680 
-> [ 875.991200] (2:node@c-1.me)  368728  | 366680 
-> [ 875.991200] (2:node@c-1.me)  370776  | 366680 
-> [ 875.991200] (2:node@c-1.me)  374872  | 366680 
-> [ 875.991200] (2:node@c-1.me)  383064  | 366680 
-> [ 875.991200] (2:node@c-1.me)  399448  | 366680 
-> [ 875.991200] (2:node@c-1.me)  432216  | 366680 
-> [ 875.991200] (2:node@c-1.me)  497752  | 366680 
-> [ 875.991200] (2:node@c-1.me)  628824  | 366680 
-> [ 875.991200] (2:node@c-1.me)  890968  | 366680 
-> [ 875.991200] (2:node@c-1.me)  1415256  | 366680 
-> [ 875.991200] (2:node@c-1.me)  2463832  | 366680 
-> [ 875.991200] (2:node@c-1.me)  4560984  | 366680 
-> [ 875.991200] (2:node@c-1.me)  8755288  | 366680 
-> [ 875.991200] (2:node@c-1.me) Predecessor: 42
-> [ 893.990900] (6:node@c-5.me) My finger table:
-> [ 893.990900] (6:node@c-5.me) Start | Succ 
-> [ 893.990900] (6:node@c-5.me)  10874877  | 16509405 
-> [ 893.990900] (6:node@c-5.me)  10874878  | 533744 
-> [ 893.990900] (6:node@c-5.me)  10874880  | 533744 
-> [ 893.990900] (6:node@c-5.me)  10874884  |  42 
-> [ 893.990900] (6:node@c-5.me)  10874892  | 16509405 
-> [ 893.990900] (6:node@c-5.me)  10874908  | 16509405 
-> [ 893.990900] (6:node@c-5.me)  10874940  | 16509405 
-> [ 893.990900] (6:node@c-5.me)  10875004  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10875132  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10875388  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10875900  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10876924  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10878972  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10883068  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10891260  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10907644  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  10940412  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  11005948  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  11137020  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  11399164  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  11923452  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  12972028  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  15069180  | 10874876 
-> [ 893.990900] (6:node@c-5.me)  2486268  | 10874876 
-> [ 893.990900] (6:node@c-5.me) Predecessor: 10004760
-> [ 905.990900] (3:node@c-2.me) My finger table:
-> [ 905.990900] (3:node@c-2.me) Start | Succ 
-> [ 905.990900] (3:node@c-2.me)  533745  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533746  | 10004760 
-> [ 905.990900] (3:node@c-2.me)  533748  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533752  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533760  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533776  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533808  | 1319738 
-> [ 905.990900] (3:node@c-2.me)  533872  | 533744 
-> [ 905.990900] (3:node@c-2.me)  534000  | 533744 
-> [ 905.990900] (3:node@c-2.me)  534256  | 533744 
-> [ 905.990900] (3:node@c-2.me)  534768  | 533744 
-> [ 905.990900] (3:node@c-2.me)  535792  | 533744 
-> [ 905.990900] (3:node@c-2.me)  537840  | 533744 
-> [ 905.990900] (3:node@c-2.me)  541936  | 533744 
-> [ 905.990900] (3:node@c-2.me)  550128  | 533744 
-> [ 905.990900] (3:node@c-2.me)  566512  | 533744 
-> [ 905.990900] (3:node@c-2.me)  599280  | 533744 
-> [ 905.990900] (3:node@c-2.me)  664816  | 533744 
-> [ 905.990900] (3:node@c-2.me)  795888  | 533744 
-> [ 905.990900] (3:node@c-2.me)  1058032  | 533744 
-> [ 905.990900] (3:node@c-2.me)  1582320  | 533744 
-> [ 905.990900] (3:node@c-2.me)  2630896  | 533744 
-> [ 905.990900] (3:node@c-2.me)  4728048  | 533744 
-> [ 905.990900] (3:node@c-2.me)  8922352  | 533744 
-> [ 905.990900] (3:node@c-2.me) Predecessor: 366680
-> [ 943.991000] (9:node@c-8.me) My finger table:
-> [ 943.991000] (9:node@c-8.me) Start | Succ 
-> [ 943.991000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518810  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518816  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518824  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518840  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518872  | 10004760 
-> [ 943.991000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 943.991000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 943.991000] (9:node@c-8.me) Predecessor: 2015253
-> [ 944.990900] (8:node@c-7.me) My finger table:
-> [ 944.990900] (8:node@c-7.me) Start | Succ 
-> [ 944.990900] (8:node@c-7.me)  10004761  | 10874876 
-> [ 944.990900] (8:node@c-7.me)  10004762  | 16509405 
-> [ 944.990900] (8:node@c-7.me)  10004764  | 16509405 
-> [ 944.990900] (8:node@c-7.me)  10004768  | 16509405 
-> [ 944.990900] (8:node@c-7.me)  10004776  | 10874876 
-> [ 944.990900] (8:node@c-7.me)  10004792  | 10874876 
-> [ 944.990900] (8:node@c-7.me)  10004824  | 10874876 
-> [ 944.990900] (8:node@c-7.me)  10004888  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10005016  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10005272  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10005784  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10006808  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10008856  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10012952  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10021144  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10037528  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10070296  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10135832  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10266904  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  10529048  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  11053336  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  12101912  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  14199064  | 10004760 
-> [ 944.990900] (8:node@c-7.me)  1616152  | 10004760 
-> [ 944.990900] (8:node@c-7.me) Predecessor: 6518808
-> [ 945.990900] (5:node@c-4.me) My finger table:
-> [ 945.990900] (5:node@c-4.me) Start | Succ 
-> [ 945.990900] (5:node@c-4.me)  16509406  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509407  |  42 
-> [ 945.990900] (5:node@c-4.me)  16509409  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509413  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509421  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509437  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509469  | 16728096 
-> [ 945.990900] (5:node@c-4.me)  16509533  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16509661  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16509917  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16510429  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16511453  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16513501  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16517597  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16525789  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16542173  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16574941  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16640477  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  16771549  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  256477  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  780765  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  1829341  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  3926493  | 16509405 
-> [ 945.990900] (5:node@c-4.me)  8120797  | 16509405 
-> [ 945.990900] (5:node@c-4.me) Predecessor: 10874876
-> [ 947.990900] (1:node@c-0.me) My finger table:
-> [ 947.990900] (1:node@c-0.me) Start | Succ 
-> [ 947.990900] (1:node@c-0.me)   43  | 366680 
-> [ 947.990900] (1:node@c-0.me)   44  | 366680 
-> [ 947.990900] (1:node@c-0.me)   46  | 366680 
-> [ 947.990900] (1:node@c-0.me)   50  | 366680 
-> [ 947.990900] (1:node@c-0.me)   58  | 366680 
-> [ 947.990900] (1:node@c-0.me)   74  |  42 
-> [ 947.990900] (1:node@c-0.me)  106  |  42 
-> [ 947.990900] (1:node@c-0.me)  170  |  42 
-> [ 947.990900] (1:node@c-0.me)  298  |  42 
-> [ 947.990900] (1:node@c-0.me)  554  |  42 
-> [ 947.990900] (1:node@c-0.me)  1066  |  42 
-> [ 947.990900] (1:node@c-0.me)  2090  |  42 
-> [ 947.990900] (1:node@c-0.me)  4138  |  42 
-> [ 947.990900] (1:node@c-0.me)  8234  |  42 
-> [ 947.990900] (1:node@c-0.me)  16426  |  42 
-> [ 947.990900] (1:node@c-0.me)  32810  |  42 
-> [ 947.990900] (1:node@c-0.me)  65578  |  42 
-> [ 947.990900] (1:node@c-0.me)  131114  |  42 
-> [ 947.990900] (1:node@c-0.me)  262186  |  42 
-> [ 947.990900] (1:node@c-0.me)  524330  |  42 
-> [ 947.990900] (1:node@c-0.me)  1048618  |  42 
-> [ 947.990900] (1:node@c-0.me)  2097194  |  42 
-> [ 947.990900] (1:node@c-0.me)  4194346  |  42 
-> [ 947.990900] (1:node@c-0.me)  8388650  |  42 
-> [ 947.990900] (1:node@c-0.me) Predecessor: 16728096
-> [ 964.990700] (4:node@c-3.me) My finger table:
-> [ 964.990700] (4:node@c-3.me) Start | Succ 
-> [ 964.990700] (4:node@c-3.me)  1319739  | 2015253 
-> [ 964.990700] (4:node@c-3.me)  1319740  | 6518808 
-> [ 964.990700] (4:node@c-3.me)  1319742  | 6518808 
-> [ 964.990700] (4:node@c-3.me)  1319746  | 6518808 
-> [ 964.990700] (4:node@c-3.me)  1319754  | 2015253 
-> [ 964.990700] (4:node@c-3.me)  1319770  | 2015253 
-> [ 964.990700] (4:node@c-3.me)  1319802  | 2015253 
-> [ 964.990700] (4:node@c-3.me)  1319866  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1319994  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1320250  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1320762  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1321786  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1323834  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1327930  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1336122  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1352506  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1385274  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1450810  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1581882  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  1844026  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  2368314  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  3416890  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  5514042  | 1319738 
-> [ 964.990700] (4:node@c-3.me)  9708346  | 1319738 
-> [ 964.990700] (4:node@c-3.me) Predecessor: 533744
-> [ 995.990200] (7:node@c-6.me) My finger table:
-> [ 995.990200] (7:node@c-6.me) Start | Succ 
-> [ 995.990200] (7:node@c-6.me)  16728097  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728098  | 1319738 
-> [ 995.990200] (7:node@c-6.me)  16728100  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728104  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728112  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728128  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728160  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728224  |  42 
-> [ 995.990200] (7:node@c-6.me)  16728352  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16728608  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16729120  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16730144  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16732192  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16736288  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16744480  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16760864  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  16416  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  81952  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  213024  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  475168  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  999456  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  2048032  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  4145184  | 16728096 
-> [ 995.990200] (7:node@c-6.me)  8339488  | 16728096 
-> [ 995.990200] (7:node@c-6.me) Predecessor: 16509405
-> [1182.990500] (0:@) Messages created: 2324
-> [1182.990500] (0:@) Simulated time: 1182.99
+> [   0.000000] (10:node@node-9.acme.org) Joining the ring with id 2015253, knowing node 1319738
+> [   0.000000] (1:node@node-0.acme.org) My finger table:
+> [   0.000000] (1:node@node-0.acme.org) Start | Succ 
+> [   0.000000] (1:node@node-0.acme.org)   43  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   44  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   46  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   50  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   58  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   74  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  106  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  170  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  298  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  554  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [   0.000000] (1:node@node-0.acme.org) Predecessor: -1
+> [   0.000000] (2:node@node-1.acme.org) Joining the ring with id 366680, knowing node 42
+> [   0.000000] (3:node@node-2.acme.org) Joining the ring with id 533744, knowing node 366680
+> [   0.000000] (4:node@node-3.acme.org) Joining the ring with id 1319738, knowing node 42
+> [   0.000000] (5:node@node-4.acme.org) Joining the ring with id 16509405, knowing node 366680
+> [   0.000000] (6:node@node-5.acme.org) Joining the ring with id 10874876, knowing node 533744
+> [   0.000000] (7:node@node-6.acme.org) Joining the ring with id 16728096, knowing node 1319738
+> [   0.000000] (8:node@node-7.acme.org) Joining the ring with id 10004760, knowing node 16509405
+> [   0.000000] (9:node@node-8.acme.org) Joining the ring with id 6518808, knowing node 42
+> [   4.000000] (3:node@node-2.acme.org) My finger table:
+> [   4.000000] (3:node@node-2.acme.org) Start | Succ 
+> [   4.000000] (3:node@node-2.acme.org)  533745  | 366680 
+> [   4.000000] (3:node@node-2.acme.org)  533746  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533748  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533752  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533760  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [   4.000000] (3:node@node-2.acme.org) Predecessor: -1
+> [   4.000000] (6:node@node-5.acme.org) My finger table:
+> [   4.000000] (6:node@node-5.acme.org) Start | Succ 
+> [   4.000000] (6:node@node-5.acme.org)  10874877  | 533744 
+> [   4.000000] (6:node@node-5.acme.org)  10874878  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874880  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org) Predecessor: -1
+> [   5.000000] (5:node@node-4.acme.org) My finger table:
+> [   5.000000] (5:node@node-4.acme.org) Start | Succ 
+> [   5.000000] (5:node@node-4.acme.org)  16509406  | 366680 
+> [   5.000000] (5:node@node-4.acme.org)  16509407  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org) Predecessor: -1
+> [   5.000000] (8:node@node-7.acme.org) My finger table:
+> [   5.000000] (8:node@node-7.acme.org) Start | Succ 
+> [   5.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [   5.000000] (8:node@node-7.acme.org)  10004762  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org) Predecessor: -1
+> [   5.999900] (2:node@node-1.acme.org) My finger table:
+> [   5.999900] (2:node@node-1.acme.org) Start | Succ 
+> [   5.999900] (2:node@node-1.acme.org)  366681  |  42 
+> [   5.999900] (2:node@node-1.acme.org)  366682  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366684  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366688  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366696  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366712  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366744  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366808  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  366936  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  367192  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  367704  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  368728  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  370776  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  374872  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  383064  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  399448  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  432216  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  497752  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  628824  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  890968  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  1415256  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  2463832  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  4560984  | 366680 
+> [   5.999900] (2:node@node-1.acme.org)  8755288  | 366680 
+> [   5.999900] (2:node@node-1.acme.org) Predecessor: -1
+> [   7.999900] (7:node@node-6.acme.org) My finger table:
+> [   7.999900] (7:node@node-6.acme.org) Start | Succ 
+> [   7.999900] (7:node@node-6.acme.org)  16728097  | 1319738 
+> [   7.999900] (7:node@node-6.acme.org)  16728098  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  16416  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  81952  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  213024  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  475168  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  999456  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [   7.999900] (7:node@node-6.acme.org) Predecessor: -1
+> [   8.999900] (10:node@node-9.acme.org) My finger table:
+> [   8.999900] (10:node@node-9.acme.org) Start | Succ 
+> [   8.999900] (10:node@node-9.acme.org)  2015254  | 1319738 
+> [   8.999900] (10:node@node-9.acme.org)  2015255  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015257  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [   8.999900] (10:node@node-9.acme.org) Predecessor: -1
+> [  10.999800] (4:node@node-3.acme.org) My finger table:
+> [  10.999800] (4:node@node-3.acme.org) Start | Succ 
+> [  10.999800] (4:node@node-3.acme.org)  1319739  |  42 
+> [  10.999800] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [  10.999800] (4:node@node-3.acme.org) Predecessor: -1
+> [  15.999700] (9:node@node-8.acme.org) My finger table:
+> [  15.999700] (9:node@node-8.acme.org) Start | Succ 
+> [  15.999700] (9:node@node-8.acme.org)  6518809  |  42 
+> [  15.999700] (9:node@node-8.acme.org)  6518810  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [  15.999700] (9:node@node-8.acme.org) Predecessor: -1
+> [  24.999600] (3:node@node-2.acme.org) My finger table:
+> [  24.999600] (3:node@node-2.acme.org) Start | Succ 
+> [  24.999600] (3:node@node-2.acme.org)  533745  | 366680 
+> [  24.999600] (3:node@node-2.acme.org)  533746  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533748  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533752  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533760  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533776  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533808  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  533872  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  534000  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  534256  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  534768  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  535792  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  537840  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  541936  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  550128  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  566512  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  599280  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  664816  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  795888  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  1058032  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  1582320  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  2630896  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  4728048  | 533744 
+> [  24.999600] (3:node@node-2.acme.org)  8922352  | 533744 
+> [  24.999600] (3:node@node-2.acme.org) Predecessor: 10874876
+> [  24.999600] (4:node@node-3.acme.org) My finger table:
+> [  24.999600] (4:node@node-3.acme.org) Start | Succ 
+> [  24.999600] (4:node@node-3.acme.org)  1319739  |  42 
+> [  24.999600] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [  24.999600] (4:node@node-3.acme.org) Predecessor: 16728096
+> [  32.999400] (2:node@node-1.acme.org) My finger table:
+> [  32.999400] (2:node@node-1.acme.org) Start | Succ 
+> [  32.999400] (2:node@node-1.acme.org)  366681  |  42 
+> [  32.999400] (2:node@node-1.acme.org)  366682  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366684  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366688  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366696  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366712  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366744  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366808  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  366936  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  367192  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  367704  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  368728  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  370776  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  374872  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  383064  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  399448  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  432216  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  497752  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  628824  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  890968  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  1415256  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  2463832  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  4560984  | 366680 
+> [  32.999400] (2:node@node-1.acme.org)  8755288  | 366680 
+> [  32.999400] (2:node@node-1.acme.org) Predecessor: 533744
+> [  34.999400] (2:node@node-1.acme.org) My finger table:
+> [  34.999400] (2:node@node-1.acme.org) Start | Succ 
+> [  34.999400] (2:node@node-1.acme.org)  366681  |  42 
+> [  34.999400] (2:node@node-1.acme.org)  366682  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366684  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366688  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366696  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366712  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366744  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366808  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  366936  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  367192  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  367704  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  368728  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  370776  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  374872  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  383064  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  399448  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  432216  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  497752  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  628824  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  890968  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  1415256  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  2463832  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  4560984  | 366680 
+> [  34.999400] (2:node@node-1.acme.org)  8755288  | 366680 
+> [  34.999400] (2:node@node-1.acme.org) Predecessor: 16509405
+> [  35.999400] (5:node@node-4.acme.org) My finger table:
+> [  35.999400] (5:node@node-4.acme.org) Start | Succ 
+> [  35.999400] (5:node@node-4.acme.org)  16509406  | 366680 
+> [  35.999400] (5:node@node-4.acme.org)  16509407  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  256477  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  780765  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [  35.999400] (5:node@node-4.acme.org) Predecessor: 10004760
+> [  49.999000] (1:node@node-0.acme.org) My finger table:
+> [  49.999000] (1:node@node-0.acme.org) Start | Succ 
+> [  49.999000] (1:node@node-0.acme.org)   43  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   44  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   46  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   50  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   58  |  42 
+> [  49.999000] (1:node@node-0.acme.org)   74  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  106  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  170  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  298  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  554  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  1066  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  2090  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  4138  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  8234  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  16426  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  32810  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  65578  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  131114  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  262186  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  524330  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  1048618  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  2097194  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  4194346  |  42 
+> [  49.999000] (1:node@node-0.acme.org)  8388650  |  42 
+> [  49.999000] (1:node@node-0.acme.org) Predecessor: 366680
+> [  59.998800] (1:node@node-0.acme.org) My finger table:
+> [  59.998800] (1:node@node-0.acme.org) Start | Succ 
+> [  59.998800] (1:node@node-0.acme.org)   43  | 366680 
+> [  59.998800] (1:node@node-0.acme.org)   44  |  42 
+> [  59.998800] (1:node@node-0.acme.org)   46  |  42 
+> [  59.998800] (1:node@node-0.acme.org)   50  |  42 
+> [  59.998800] (1:node@node-0.acme.org)   58  |  42 
+> [  59.998800] (1:node@node-0.acme.org)   74  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  106  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  170  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  298  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  554  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  1066  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  2090  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  4138  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  8234  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  16426  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  32810  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  65578  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  131114  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  262186  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  524330  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  1048618  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  2097194  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  4194346  |  42 
+> [  59.998800] (1:node@node-0.acme.org)  8388650  |  42 
+> [  59.998800] (1:node@node-0.acme.org) Predecessor: 1319738
+> [  94.998300] (7:node@node-6.acme.org) My finger table:
+> [  94.998300] (7:node@node-6.acme.org) Start | Succ 
+> [  94.998300] (7:node@node-6.acme.org)  16728097  | 1319738 
+> [  94.998300] (7:node@node-6.acme.org)  16728098  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  16416  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  81952  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  213024  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  475168  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  999456  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [  94.998300] (7:node@node-6.acme.org) Predecessor: 2015253
+> [ 159.998800] (1:node@node-0.acme.org) My finger table:
+> [ 159.998800] (1:node@node-0.acme.org) Start | Succ 
+> [ 159.998800] (1:node@node-0.acme.org)   43  | 366680 
+> [ 159.998800] (1:node@node-0.acme.org)   44  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)   46  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)   50  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)   58  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)   74  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  106  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  170  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  298  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  554  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  1066  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  2090  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  4138  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  8234  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  16426  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  32810  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  65578  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  131114  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  262186  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  524330  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 159.998800] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 159.998800] (1:node@node-0.acme.org) Predecessor: 6518808
+> [ 165.998900] (1:node@node-0.acme.org) My finger table:
+> [ 165.998900] (1:node@node-0.acme.org) Start | Succ 
+> [ 165.998900] (1:node@node-0.acme.org)   43  | 366680 
+> [ 165.998900] (1:node@node-0.acme.org)   44  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)   46  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)   50  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)   58  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)   74  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  106  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  170  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  298  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  554  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  1066  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  2090  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  4138  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  8234  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  16426  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  32810  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  65578  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  131114  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  262186  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  524330  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 165.998900] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 165.998900] (1:node@node-0.acme.org) Predecessor: 6518808
+> [ 174.998800] (2:node@node-1.acme.org) My finger table:
+> [ 174.998800] (2:node@node-1.acme.org) Start | Succ 
+> [ 174.998800] (2:node@node-1.acme.org)  366681  |  42 
+> [ 174.998800] (2:node@node-1.acme.org)  366682  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366684  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 174.998800] (2:node@node-1.acme.org) Predecessor: 42
+> [ 206.998400] (8:node@node-7.acme.org) My finger table:
+> [ 206.998400] (8:node@node-7.acme.org) Start | Succ 
+> [ 206.998400] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 206.998400] (8:node@node-7.acme.org)  10004762  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 206.998400] (8:node@node-7.acme.org) Predecessor: 533744
+> [ 214.998400] (9:node@node-8.acme.org) My finger table:
+> [ 214.998400] (9:node@node-8.acme.org) Start | Succ 
+> [ 214.998400] (9:node@node-8.acme.org)  6518809  |  42 
+> [ 214.998400] (9:node@node-8.acme.org)  6518810  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 214.998400] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 231.998200] (1:node@node-0.acme.org) My finger table:
+> [ 231.998200] (1:node@node-0.acme.org) Start | Succ 
+> [ 231.998200] (1:node@node-0.acme.org)   43  | 366680 
+> [ 231.998200] (1:node@node-0.acme.org)   44  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)   46  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)   50  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)   58  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)   74  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  106  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  170  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  298  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  554  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  1066  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  2090  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  4138  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  8234  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  16426  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  32810  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  65578  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  131114  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  262186  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  524330  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 231.998200] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 231.998200] (1:node@node-0.acme.org) Predecessor: 16509405
+> [ 241.998100] (7:node@node-6.acme.org) My finger table:
+> [ 241.998100] (7:node@node-6.acme.org) Start | Succ 
+> [ 241.998100] (7:node@node-6.acme.org)  16728097  | 1319738 
+> [ 241.998100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 241.998100] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 241.998100] (7:node@node-6.acme.org) Predecessor: 2015253
+> [ 246.998100] (6:node@node-5.acme.org) My finger table:
+> [ 246.998100] (6:node@node-5.acme.org) Start | Succ 
+> [ 246.998100] (6:node@node-5.acme.org)  10874877  | 533744 
+> [ 246.998100] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 246.998100] (6:node@node-5.acme.org)  10874880  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 246.998100] (6:node@node-5.acme.org) Predecessor: -1
+> [ 249.997800] (10:node@node-9.acme.org) My finger table:
+> [ 249.997800] (10:node@node-9.acme.org) Start | Succ 
+> [ 249.997800] (10:node@node-9.acme.org)  2015254  | 16728096 
+> [ 249.997800] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 249.997800] (10:node@node-9.acme.org)  2015257  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 249.997800] (10:node@node-9.acme.org) Predecessor: -1
+> [ 270.997600] (9:node@node-8.acme.org) My finger table:
+> [ 270.997600] (9:node@node-8.acme.org) Start | Succ 
+> [ 270.997600] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 270.997600] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 270.997600] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 270.997600] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 271.997600] (4:node@node-3.acme.org) My finger table:
+> [ 271.997600] (4:node@node-3.acme.org) Start | Succ 
+> [ 271.997600] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 271.997600] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 271.997600] (4:node@node-3.acme.org) Predecessor: 366680
+> [ 288.997400] (5:node@node-4.acme.org) My finger table:
+> [ 288.997400] (5:node@node-4.acme.org) Start | Succ 
+> [ 288.997400] (5:node@node-4.acme.org)  16509406  |  42 
+> [ 288.997400] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 288.997400] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 288.997400] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 304.997200] (4:node@node-3.acme.org) My finger table:
+> [ 304.997200] (4:node@node-3.acme.org) Start | Succ 
+> [ 304.997200] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 304.997200] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 304.997200] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 304.997200] (4:node@node-3.acme.org) Predecessor: 366680
+> [ 342.997400] (8:node@node-7.acme.org) My finger table:
+> [ 342.997400] (8:node@node-7.acme.org) Start | Succ 
+> [ 342.997400] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 342.997400] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 342.997400] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 342.997400] (8:node@node-7.acme.org) Predecessor: 533744
+> [ 346.997300] (1:node@node-0.acme.org) My finger table:
+> [ 346.997300] (1:node@node-0.acme.org) Start | Succ 
+> [ 346.997300] (1:node@node-0.acme.org)   43  | 366680 
+> [ 346.997300] (1:node@node-0.acme.org)   44  | 366680 
+> [ 346.997300] (1:node@node-0.acme.org)   46  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)   50  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)   58  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)   74  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  106  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  170  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  298  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  554  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  1066  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  2090  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  4138  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  8234  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  16426  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  32810  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  65578  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  131114  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  262186  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  524330  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 346.997300] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 346.997300] (1:node@node-0.acme.org) Predecessor: 16509405
+> [ 360.997100] (8:node@node-7.acme.org) My finger table:
+> [ 360.997100] (8:node@node-7.acme.org) Start | Succ 
+> [ 360.997100] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 360.997100] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 360.997100] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 360.997100] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 360.997200] (2:node@node-1.acme.org) My finger table:
+> [ 360.997200] (2:node@node-1.acme.org) Start | Succ 
+> [ 360.997200] (2:node@node-1.acme.org)  366681  | 1319738 
+> [ 360.997200] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 360.997200] (2:node@node-1.acme.org)  366684  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 360.997200] (2:node@node-1.acme.org) Predecessor: 42
+> [ 362.997100] (7:node@node-6.acme.org) My finger table:
+> [ 362.997100] (7:node@node-6.acme.org) Start | Succ 
+> [ 362.997100] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 362.997100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 362.997100] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 362.997100] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 362.997100] (7:node@node-6.acme.org) Predecessor: 2015253
+> [ 364.997100] (3:node@node-2.acme.org) My finger table:
+> [ 364.997100] (3:node@node-2.acme.org) Start | Succ 
+> [ 364.997100] (3:node@node-2.acme.org)  533745  | 6518808 
+> [ 364.997100] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 364.997100] (3:node@node-2.acme.org)  533748  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533752  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 364.997100] (3:node@node-2.acme.org) Predecessor: 10874876
+> [ 369.997000] (6:node@node-5.acme.org) My finger table:
+> [ 369.997000] (6:node@node-5.acme.org) Start | Succ 
+> [ 369.997000] (6:node@node-5.acme.org)  10874877  | 533744 
+> [ 369.997000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 369.997000] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 369.997000] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 369.997000] (6:node@node-5.acme.org) Predecessor: -1
+> [ 376.996900] (10:node@node-9.acme.org) My finger table:
+> [ 376.996900] (10:node@node-9.acme.org) Start | Succ 
+> [ 376.996900] (10:node@node-9.acme.org)  2015254  | 16728096 
+> [ 376.996900] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 376.996900] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 376.996900] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 376.996900] (10:node@node-9.acme.org) Predecessor: -1
+> [ 395.996800] (1:node@node-0.acme.org) My finger table:
+> [ 395.996800] (1:node@node-0.acme.org) Start | Succ 
+> [ 395.996800] (1:node@node-0.acme.org)   43  | 366680 
+> [ 395.996800] (1:node@node-0.acme.org)   44  | 366680 
+> [ 395.996800] (1:node@node-0.acme.org)   46  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)   50  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)   58  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)   74  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  106  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  170  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  298  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  554  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  1066  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  2090  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  4138  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  8234  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  16426  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  32810  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  65578  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  131114  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  262186  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  524330  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 395.996800] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 395.996800] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 395.996800] (9:node@node-8.acme.org) My finger table:
+> [ 395.996800] (9:node@node-8.acme.org) Start | Succ 
+> [ 395.996800] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 395.996800] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 395.996800] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 395.996800] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 395.996800] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 411.996500] (5:node@node-4.acme.org) My finger table:
+> [ 411.996500] (5:node@node-4.acme.org) Start | Succ 
+> [ 411.996500] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 411.996500] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 411.996500] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 411.996500] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 411.996500] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 416.996500] (4:node@node-3.acme.org) My finger table:
+> [ 416.996500] (4:node@node-3.acme.org) Start | Succ 
+> [ 416.996500] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 416.996500] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 416.996500] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 416.996500] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 440.996100] (4:node@node-3.acme.org) My finger table:
+> [ 440.996100] (4:node@node-3.acme.org) Start | Succ 
+> [ 440.996100] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 440.996100] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 440.996100] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 440.996100] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 440.996100] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 445.996100] (7:node@node-6.acme.org) My finger table:
+> [ 445.996100] (7:node@node-6.acme.org) Start | Succ 
+> [ 445.996100] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 445.996100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 445.996100] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 445.996100] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 445.996100] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 455.995900] (3:node@node-2.acme.org) My finger table:
+> [ 455.995900] (3:node@node-2.acme.org) Start | Succ 
+> [ 455.995900] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 455.995900] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 455.995900] (3:node@node-2.acme.org)  533748  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533752  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 455.995900] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 475.995700] (8:node@node-7.acme.org) My finger table:
+> [ 475.995700] (8:node@node-7.acme.org) Start | Succ 
+> [ 475.995700] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 475.995700] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 475.995700] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 475.995700] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 475.995700] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 480.995700] (1:node@node-0.acme.org) My finger table:
+> [ 480.995700] (1:node@node-0.acme.org) Start | Succ 
+> [ 480.995700] (1:node@node-0.acme.org)   43  | 366680 
+> [ 480.995700] (1:node@node-0.acme.org)   44  | 366680 
+> [ 480.995700] (1:node@node-0.acme.org)   46  | 366680 
+> [ 480.995700] (1:node@node-0.acme.org)   50  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)   58  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)   74  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  106  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  170  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  298  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  554  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  1066  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  2090  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  4138  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  8234  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  16426  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  32810  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  65578  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  131114  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  262186  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  524330  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 480.995700] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 480.995700] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 481.995600] (2:node@node-1.acme.org) My finger table:
+> [ 481.995600] (2:node@node-1.acme.org) Start | Succ 
+> [ 481.995600] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 481.995600] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 481.995600] (2:node@node-1.acme.org)  366684  | 533744 
+> [ 481.995600] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 481.995600] (2:node@node-1.acme.org) Predecessor: 42
+> [ 485.995500] (3:node@node-2.acme.org) My finger table:
+> [ 485.995500] (3:node@node-2.acme.org) Start | Succ 
+> [ 485.995500] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 485.995500] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 485.995500] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 485.995500] (3:node@node-2.acme.org)  533752  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 485.995500] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 495.995600] (6:node@node-5.acme.org) My finger table:
+> [ 495.995600] (6:node@node-5.acme.org) Start | Succ 
+> [ 495.995600] (6:node@node-5.acme.org)  10874877  | 366680 
+> [ 495.995600] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 495.995600] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 495.995600] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 495.995600] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 495.995600] (6:node@node-5.acme.org) Predecessor: -1
+> [ 537.995700] (7:node@node-6.acme.org) My finger table:
+> [ 537.995700] (7:node@node-6.acme.org) Start | Succ 
+> [ 537.995700] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 537.995700] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 537.995700] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 537.995700] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 537.995700] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 537.995700] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 538.995700] (10:node@node-9.acme.org) My finger table:
+> [ 538.995700] (10:node@node-9.acme.org) Start | Succ 
+> [ 538.995700] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 538.995700] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 538.995700] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 538.995700] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 538.995700] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 538.995700] (10:node@node-9.acme.org) Predecessor: -1
+> [ 551.995500] (5:node@node-4.acme.org) My finger table:
+> [ 551.995500] (5:node@node-4.acme.org) Start | Succ 
+> [ 551.995500] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 551.995500] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 551.995500] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 551.995500] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 551.995500] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 551.995500] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 561.995400] (4:node@node-3.acme.org) My finger table:
+> [ 561.995400] (4:node@node-3.acme.org) Start | Succ 
+> [ 561.995400] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 561.995400] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 561.995400] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 561.995400] (4:node@node-3.acme.org)  1319746  | 6518808 
+> [ 561.995400] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 561.995400] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 562.995300] (9:node@node-8.acme.org) My finger table:
+> [ 562.995300] (9:node@node-8.acme.org) Start | Succ 
+> [ 562.995300] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 562.995300] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 562.995300] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 562.995300] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 562.995300] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 562.995300] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 574.995300] (9:node@node-8.acme.org) My finger table:
+> [ 574.995300] (9:node@node-8.acme.org) Start | Succ 
+> [ 574.995300] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 574.995300] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 574.995300] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 574.995300] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 574.995300] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 574.995300] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 601.994900] (1:node@node-0.acme.org) My finger table:
+> [ 601.994900] (1:node@node-0.acme.org) Start | Succ 
+> [ 601.994900] (1:node@node-0.acme.org)   43  | 366680 
+> [ 601.994900] (1:node@node-0.acme.org)   44  | 366680 
+> [ 601.994900] (1:node@node-0.acme.org)   46  | 366680 
+> [ 601.994900] (1:node@node-0.acme.org)   50  | 366680 
+> [ 601.994900] (1:node@node-0.acme.org)   58  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)   74  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  106  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  170  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  298  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  554  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  1066  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  2090  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  4138  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  8234  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  16426  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  32810  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  65578  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  131114  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  262186  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  524330  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 601.994900] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 601.994900] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 606.994800] (3:node@node-2.acme.org) My finger table:
+> [ 606.994800] (3:node@node-2.acme.org) Start | Succ 
+> [ 606.994800] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 606.994800] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 606.994800] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 606.994800] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 606.994800] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 606.994800] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 611.994800] (8:node@node-7.acme.org) My finger table:
+> [ 611.994800] (8:node@node-7.acme.org) Start | Succ 
+> [ 611.994800] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 611.994800] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 611.994800] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 611.994800] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 611.994800] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 611.994800] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 615.994700] (2:node@node-1.acme.org) My finger table:
+> [ 615.994700] (2:node@node-1.acme.org) Start | Succ 
+> [ 615.994700] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 615.994700] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 615.994700] (2:node@node-1.acme.org)  366684  | 533744 
+> [ 615.994700] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 615.994700] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 615.994700] (2:node@node-1.acme.org) Predecessor: 42
+> [ 625.994600] (6:node@node-5.acme.org) My finger table:
+> [ 625.994600] (6:node@node-5.acme.org) Start | Succ 
+> [ 625.994600] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 625.994600] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 625.994600] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 625.994600] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 625.994600] (6:node@node-5.acme.org)  10874892  | 16509405 
+> [ 625.994600] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 625.994600] (6:node@node-5.acme.org) Predecessor: -1
+> [ 628.994600] (5:node@node-4.acme.org) My finger table:
+> [ 628.994600] (5:node@node-4.acme.org) Start | Succ 
+> [ 628.994600] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 628.994600] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 628.994600] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 628.994600] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 628.994600] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 628.994600] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 633.994600] (10:node@node-9.acme.org) My finger table:
+> [ 633.994600] (10:node@node-9.acme.org) Start | Succ 
+> [ 633.994600] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 633.994600] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 633.994600] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 633.994600] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 633.994600] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 633.994600] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 671.994100] (6:node@node-5.acme.org) My finger table:
+> [ 671.994100] (6:node@node-5.acme.org) Start | Succ 
+> [ 671.994100] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 671.994100] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 671.994100] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 671.994100] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 671.994100] (6:node@node-5.acme.org)  10874892  | 16509405 
+> [ 671.994100] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 671.994100] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 672.994100] (7:node@node-6.acme.org) My finger table:
+> [ 672.994100] (7:node@node-6.acme.org) Start | Succ 
+> [ 672.994100] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 672.994100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 672.994100] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 672.994100] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 672.994100] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 672.994100] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 672.994100] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 681.994100] (10:node@node-9.acme.org) My finger table:
+> [ 681.994100] (10:node@node-9.acme.org) Start | Succ 
+> [ 681.994100] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 681.994100] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 681.994100] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 681.994100] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 681.994100] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 681.994100] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 681.994100] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 683.994100] (9:node@node-8.acme.org) My finger table:
+> [ 683.994100] (9:node@node-8.acme.org) Start | Succ 
+> [ 683.994100] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 683.994100] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 683.994100] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 687.994000] (5:node@node-4.acme.org) My finger table:
+> [ 687.994000] (5:node@node-4.acme.org) Start | Succ 
+> [ 687.994000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 687.994000] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 687.994000] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 687.994000] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 687.994000] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 687.994000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 687.994000] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 690.994000] (4:node@node-3.acme.org) My finger table:
+> [ 690.994000] (4:node@node-3.acme.org) Start | Succ 
+> [ 690.994000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 690.994000] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 690.994000] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 690.994000] (4:node@node-3.acme.org)  1319746  | 6518808 
+> [ 690.994000] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 690.994000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 690.994000] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 724.993500] (1:node@node-0.acme.org) My finger table:
+> [ 724.993500] (1:node@node-0.acme.org) Start | Succ 
+> [ 724.993500] (1:node@node-0.acme.org)   43  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   44  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   46  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   50  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   58  | 366680 
+> [ 724.993500] (1:node@node-0.acme.org)   74  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  106  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  170  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  298  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  554  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  1066  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  2090  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  4138  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  8234  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  16426  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  32810  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  65578  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  131114  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  262186  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  524330  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 724.993500] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 724.993500] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 727.993500] (3:node@node-2.acme.org) My finger table:
+> [ 727.993500] (3:node@node-2.acme.org) Start | Succ 
+> [ 727.993500] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 727.993500] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 727.993500] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 727.993500] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 727.993500] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 727.993500] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 727.993500] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 752.993300] (8:node@node-7.acme.org) My finger table:
+> [ 752.993300] (8:node@node-7.acme.org) Start | Succ 
+> [ 752.993300] (8:node@node-7.acme.org)  10004761  | 10874876 
+> [ 752.993300] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 752.993300] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 752.993300] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 752.993300] (8:node@node-7.acme.org)  10004776  | 10874876 
+> [ 752.993300] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 752.993300] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 756.993300] (6:node@node-5.acme.org) My finger table:
+> [ 756.993300] (6:node@node-5.acme.org) Start | Succ 
+> [ 756.993300] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 756.993300] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 756.993300] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 756.993300] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 756.993300] (6:node@node-5.acme.org)  10874892  | 16509405 
+> [ 756.993300] (6:node@node-5.acme.org)  10874908  | 16509405 
+> [ 756.993300] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 756.993300] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 759.993200] (2:node@node-1.acme.org) My finger table:
+> [ 759.993200] (2:node@node-1.acme.org) Start | Succ 
+> [ 759.993200] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 759.993200] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 759.993200] (2:node@node-1.acme.org)  366684  | 533744 
+> [ 759.993200] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 759.993200] (2:node@node-1.acme.org)  366696  | 533744 
+> [ 759.993200] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 759.993200] (2:node@node-1.acme.org) Predecessor: 42
+> [ 794.992900] (7:node@node-6.acme.org) My finger table:
+> [ 794.992900] (7:node@node-6.acme.org) Start | Succ 
+> [ 794.992900] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 794.992900] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728128  |  42 
+> [ 794.992900] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 794.992900] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 806.992700] (9:node@node-8.acme.org) My finger table:
+> [ 806.992700] (9:node@node-8.acme.org) Start | Succ 
+> [ 806.992700] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518840  | 10004760 
+> [ 806.992700] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 806.992700] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 810.992700] (5:node@node-4.acme.org) My finger table:
+> [ 810.992700] (5:node@node-4.acme.org) Start | Succ 
+> [ 810.992700] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 810.992700] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509437  | 16728096 
+> [ 810.992700] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 810.992700] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 813.992600] (4:node@node-3.acme.org) My finger table:
+> [ 813.992600] (4:node@node-3.acme.org) Start | Succ 
+> [ 813.992600] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 813.992600] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 813.992600] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 813.992600] (4:node@node-3.acme.org)  1319746  | 6518808 
+> [ 813.992600] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 813.992600] (4:node@node-3.acme.org)  1319770  | 2015253 
+> [ 813.992600] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 813.992600] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 824.992500] (10:node@node-9.acme.org) My finger table:
+> [ 824.992500] (10:node@node-9.acme.org) Start | Succ 
+> [ 824.992500] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 824.992500] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 824.992500] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 824.992500] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 824.992500] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 824.992500] (10:node@node-9.acme.org)  2015285  | 6518808 
+> [ 824.992500] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 824.992500] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 846.992100] (1:node@node-0.acme.org) My finger table:
+> [ 846.992100] (1:node@node-0.acme.org) Start | Succ 
+> [ 846.992100] (1:node@node-0.acme.org)   43  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   44  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   46  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   50  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   58  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)   74  | 366680 
+> [ 846.992100] (1:node@node-0.acme.org)  106  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  170  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  298  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  554  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  1066  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  2090  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  4138  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  8234  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  16426  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  32810  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  65578  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  131114  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  262186  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  524330  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 846.992100] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 846.992100] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 870.991800] (3:node@node-2.acme.org) My finger table:
+> [ 870.991800] (3:node@node-2.acme.org) Start | Succ 
+> [ 870.991800] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 870.991800] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533776  | 1319738 
+> [ 870.991800] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 870.991800] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 891.991500] (6:node@node-5.acme.org) My finger table:
+> [ 891.991500] (6:node@node-5.acme.org) Start | Succ 
+> [ 891.991500] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 891.991500] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 891.991500] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 891.991500] (6:node@node-5.acme.org)  10874884  | 366680 
+> [ 891.991500] (6:node@node-5.acme.org)  10874892  | 16509405 
+> [ 891.991500] (6:node@node-5.acme.org)  10874908  | 16509405 
+> [ 891.991500] (6:node@node-5.acme.org)  10874940  | 16509405 
+> [ 891.991500] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 891.991500] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 894.991500] (8:node@node-7.acme.org) My finger table:
+> [ 894.991500] (8:node@node-7.acme.org) Start | Succ 
+> [ 894.991500] (8:node@node-7.acme.org)  10004761  | 10874876 
+> [ 894.991500] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 894.991500] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 894.991500] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 894.991500] (8:node@node-7.acme.org)  10004776  | 10874876 
+> [ 894.991500] (8:node@node-7.acme.org)  10004792  | 10874876 
+> [ 894.991500] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 894.991500] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 900.991400] (2:node@node-1.acme.org) My finger table:
+> [ 900.991400] (2:node@node-1.acme.org) Start | Succ 
+> [ 900.991400] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 900.991400] (2:node@node-1.acme.org)  366684  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366696  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366712  | 533744 
+> [ 900.991400] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 900.991400] (2:node@node-1.acme.org) Predecessor: 42
+> [ 923.991100] (7:node@node-6.acme.org) My finger table:
+> [ 923.991100] (7:node@node-6.acme.org) Start | Succ 
+> [ 923.991100] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728098  | 1319738 
+> [ 923.991100] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728128  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728160  |  42 
+> [ 923.991100] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 923.991100] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 935.990900] (5:node@node-4.acme.org) My finger table:
+> [ 935.990900] (5:node@node-4.acme.org) Start | Succ 
+> [ 935.990900] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509407  |  42 
+> [ 935.990900] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509437  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509469  | 16728096 
+> [ 935.990900] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 935.990900] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 945.990800] (4:node@node-3.acme.org) My finger table:
+> [ 945.990800] (4:node@node-3.acme.org) Start | Succ 
+> [ 945.990800] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 945.990800] (4:node@node-3.acme.org)  1319740  | 6518808 
+> [ 945.990800] (4:node@node-3.acme.org)  1319742  | 6518808 
+> [ 945.990800] (4:node@node-3.acme.org)  1319746  | 6518808 
+> [ 945.990800] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 945.990800] (4:node@node-3.acme.org)  1319770  | 2015253 
+> [ 945.990800] (4:node@node-3.acme.org)  1319802  | 2015253 
+> [ 945.990800] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 945.990800] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 945.990800] (9:node@node-8.acme.org) My finger table:
+> [ 945.990800] (9:node@node-8.acme.org) Start | Succ 
+> [ 945.990800] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518810  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518840  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518872  | 10004760 
+> [ 945.990800] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 945.990800] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 947.990600] (10:node@node-9.acme.org) My finger table:
+> [ 947.990600] (10:node@node-9.acme.org) Start | Succ 
+> [ 947.990600] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015255  | 16728096 
+> [ 947.990600] (10:node@node-9.acme.org)  2015257  | 16728096 
+> [ 947.990600] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015285  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015317  | 6518808 
+> [ 947.990600] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 947.990600] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 967.990400] (1:node@node-0.acme.org) My finger table:
+> [ 967.990400] (1:node@node-0.acme.org) Start | Succ 
+> [ 967.990400] (1:node@node-0.acme.org)   43  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   44  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   46  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   50  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   58  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)   74  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)  106  | 366680 
+> [ 967.990400] (1:node@node-0.acme.org)  170  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  298  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  554  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  1066  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  2090  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  4138  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  8234  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  16426  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  32810  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  65578  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  131114  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  262186  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  524330  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 967.990400] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 967.990400] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 998.990100] (3:node@node-2.acme.org) My finger table:
+> [ 998.990100] (3:node@node-2.acme.org) Start | Succ 
+> [ 998.990100] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533746  | 6518808 
+> [ 998.990100] (3:node@node-2.acme.org)  533748  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533776  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533808  | 1319738 
+> [ 998.990100] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 998.990100] (3:node@node-2.acme.org) Predecessor: 366680
+> [1204.990100] (0:@) Messages created: 2714
+> [1204.990100] (0:@) Simulated time: 1204.99
index 3d488ca..afc0ea9 100755 (executable)
@@ -27,7 +27,7 @@ all_ids = [42]
 sys.stdout.write("<?xml version='1.0'?>\n"
 "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n"
 "<platform version=\"3\">\n"
-"  <process host=\"c-0.me\" function=\"node\"><argument value=\"42\"/><argument value=\"%d\"/></process>\n" % end_date)
+"  <process host=\"node-0.acme.org\" function=\"node\"><argument value=\"42\"/><argument value=\"%d\"/></process>\n" % end_date)
 
 for i in range(1, nb_nodes):
 
@@ -38,7 +38,7 @@ for i in range(1, nb_nodes):
 
        known_id = all_ids[random.randint(0, len(all_ids) - 1)]
        start_date = i * 10
-       line = "  <process host=\"c-%d.me\" function=\"node\"><argument value=\"%d\" /><argument value=\"%d\" /><argument value=\"%d\" /><argument value=\"%d\" /></process>\n" % (i, my_id, known_id, start_date, end_date)
+       line = "  <process host=\"node-%d.acme.org\" function=\"node\"><argument value=\"%d\" /><argument value=\"%d\" /><argument value=\"%d\" /><argument value=\"%d\" /></process>\n" % (i, my_id, known_id, start_date, end_date)
        sys.stdout.write(line)
        all_ids.append(my_id)
 
index 66afe97..9915030 100644 (file)
@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 2.6)
 
 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 
+add_executable(master_worker_vm "master_worker_vm.c")
 add_executable(simple_vm "simple_vm.c")
 add_executable(migrate_vm "migrate_vm.c")
 add_executable(bound "bound.c")
@@ -10,6 +11,7 @@ add_executable(multicore "multicore.c")
 add_executable(two_tasks_vm "two_tasks_vm.c")
 
 ### Add definitions for compile
+target_link_libraries(master_worker_vm simgrid)
 target_link_libraries(simple_vm simgrid)
 target_link_libraries(migrate_vm simgrid)
 target_link_libraries(bound simgrid)
@@ -20,6 +22,7 @@ target_link_libraries(two_tasks_vm simgrid)
 
 set(tesh_files
   ${tesh_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/master_worker_vm.tesh
   ${CMAKE_CURRENT_SOURCE_DIR}/two_tasks_vm.tesh
    ${CMAKE_CURRENT_SOURCE_DIR}/simple_vm.tesh
   PARENT_SCOPE
@@ -32,6 +35,7 @@ set(xml_files
   )
 set(examples_src
   ${examples_src}
+  ${CMAKE_CURRENT_SOURCE_DIR}/master_worker_vm.c
   ${CMAKE_CURRENT_SOURCE_DIR}/simple_vm.c
   ${CMAKE_CURRENT_SOURCE_DIR}/migrate_vm.c
   ${CMAKE_CURRENT_SOURCE_DIR}/bound.c
diff --git a/examples/msg/cloud/master_worker_vm.c b/examples/msg/cloud/master_worker_vm.c
new file mode 100644 (file)
index 0000000..af24f85
--- /dev/null
@@ -0,0 +1,248 @@
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include <stdio.h>
+#include "msg/msg.h"
+#include "xbt/sysdep.h"         /* calloc, printf */
+
+/* Create a log channel to have nice outputs. */
+#include "xbt/log.h"
+#include "xbt/asserts.h"
+XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,
+                             "Messages specific for this msg example");
+
+#define MAXMBOXLEN 64
+
+/** @addtogroup MSG_examples
+ *
+ *  - <b>cloud/masterslave_virtual_machines.c: Master/workers
+ *    example on a cloud</b>. The classical example revisited to demonstrate the use of virtual machines.
+ */
+
+const double task_comp_size = 10000000;
+const double task_comm_size = 10000000;
+
+
+int master_fun(int argc, char *argv[]);
+int worker_fun(int argc, char *argv[]);
+
+
+static void send_tasks(int nb_workers)
+{
+  int i;
+  for (i = 0; i < nb_workers; i++) {
+    char *tname = bprintf("Task%02d", i);
+    char *mbox  = bprintf("MBOX:WRK%02d", i);
+
+    msg_task_t task = MSG_task_create(tname, task_comp_size, task_comm_size, NULL);
+
+    XBT_INFO("Send task(%s) to mailbox(%s)", tname, mbox);
+    MSG_task_send(task, mbox);
+
+    free(tname);
+    free(mbox);
+  }
+}
+
+int master_fun(int argc, char *argv[])
+{
+  msg_vm_t vm;
+  unsigned int i;
+
+  xbt_dynar_t worker_pms = MSG_process_get_data(MSG_process_self());
+  int nb_workers = xbt_dynar_length(worker_pms);
+
+  xbt_dynar_t vms = xbt_dynar_new(sizeof(msg_vm_t), NULL);
+
+
+  /* Launch VMs and worker processes. One VM per PM, and one worker process per VM. */
+
+  XBT_INFO("# Launch %d VMs", nb_workers);
+  for (i = 0; i< nb_workers; i++) {
+    char *vm_name = bprintf("VM%02d", i);
+    char *pr_name = bprintf("WRK%02d", i);
+
+    msg_host_t pm = xbt_dynar_get_as(worker_pms, i, msg_host_t);
+
+    XBT_INFO("create %s on PM(%s)", vm_name, MSG_host_get_name(pm));
+    msg_vm_t vm = MSG_vm_create_core(pm, vm_name);
+
+    s_ws_params_t params;
+    memset(&params, 0, sizeof(params));
+    params.ramsize = 1L * 1024 * 1024 * 1024; // 1Gbytes
+    MSG_host_set_params(vm, &params);
+
+    MSG_vm_start(vm);
+    xbt_dynar_push(vms, &vm);
+
+    XBT_INFO("put a process (%s) on %s", pr_name, vm_name);
+    MSG_process_create(pr_name, worker_fun, NULL, vm);
+
+    xbt_free(vm_name);
+    xbt_free(pr_name);
+  }
+
+
+  /* Send a bunch of work to every one */
+  XBT_INFO("# Send a task to %d worker process", nb_workers);
+  send_tasks(nb_workers);
+
+  XBT_INFO("# Suspend all VMs");
+  xbt_dynar_foreach(vms, i, vm) {
+    const char *vm_name = MSG_host_get_name(vm);
+    XBT_INFO("suspend %s", vm_name);
+    MSG_vm_suspend(vm);
+  }
+
+  XBT_INFO("# Wait a while");
+  MSG_process_sleep(2);
+
+  XBT_INFO("# Resume all VMs");
+  xbt_dynar_foreach(vms, i, vm) {
+    MSG_vm_resume(vm);
+  }
+
+
+  XBT_INFO("# Sleep long enough for everyone to be done with previous batch of work");
+  MSG_process_sleep(1000 - MSG_get_clock());
+
+  XBT_INFO("# Add one more process on each VM");
+  xbt_dynar_foreach(vms, i, vm) {
+    unsigned int index = i + xbt_dynar_length(vms);
+    char *vm_name = bprintf("VM%02d", i);
+    char *pr_name = bprintf("WRK%02d", index);
+
+    XBT_INFO("put a process (%s) on %s", pr_name, vm_name);
+    MSG_process_create(pr_name, worker_fun, NULL, vm);
+
+    xbt_free(vm_name);
+    xbt_free(pr_name);
+  }
+
+  XBT_INFO("# Send a task to %d worker process", nb_workers * 2);
+  send_tasks(nb_workers * 2);
+
+  msg_host_t worker_pm0 = xbt_dynar_get_as(worker_pms, 0, msg_host_t);
+  msg_host_t worker_pm1 = xbt_dynar_get_as(worker_pms, 1, msg_host_t);
+
+  XBT_INFO("# Migrate all VMs to PM(%s)", MSG_host_get_name(worker_pm0));
+  xbt_dynar_foreach(vms, i, vm) {
+    MSG_vm_migrate(vm, worker_pm0);
+  }
+
+  XBT_INFO("# Migrate all VMs to PM(%s)", MSG_host_get_name(worker_pm1));
+  xbt_dynar_foreach(vms, i, vm) {
+    MSG_vm_migrate(vm, worker_pm1);
+  }
+
+
+  XBT_INFO("# Shutdown the half of worker processes gracefuly. The remaining half will be forcibly killed.");
+  for (i = 0; i < nb_workers; i++) {
+    char mbox[MAXMBOXLEN];
+    snprintf(mbox, MAXMBOXLEN, "MBOX:WRK%02d", i);
+    msg_task_t finalize = MSG_task_create("finalize", 0, 0, 0);
+    MSG_task_send(finalize, mbox);
+  }
+
+  XBT_INFO("# Wait a while before effective shutdown.");
+  MSG_process_sleep(2);
+
+
+  XBT_INFO("# Shutdown and destroy all the VMs. The remaining worker processes will be forcibly killed.");
+  xbt_dynar_foreach(vms, i, vm) {
+    XBT_INFO("shutdown %s", MSG_host_get_name(vm));
+    MSG_vm_shutdown(vm);
+    XBT_INFO("destroy %s", MSG_host_get_name(vm));
+    MSG_vm_destroy(vm);
+  }
+
+  XBT_INFO("# Goodbye now!");
+  xbt_dynar_free(&vms);
+
+  return 0;
+}
+
+/** Receiver function  */
+int worker_fun(int argc, char *argv[])
+{
+  const char *pr_name = MSG_process_get_name(MSG_process_self());
+  char mbox[MAXMBOXLEN];
+  snprintf(mbox, MAXMBOXLEN, "MBOX:%s", pr_name);
+
+  XBT_INFO("%s is listenning on mailbox(%s)", pr_name, mbox);
+
+  for (;;) {
+    msg_task_t task = NULL;
+
+    msg_error_t res = MSG_task_receive(&task, mbox);
+    if (res != MSG_OK) {
+      XBT_CRITICAL("MSG_task_get failed");
+      DIE_IMPOSSIBLE;
+    }
+
+    XBT_INFO("%s received task(%s) from mailbox(%s)",
+        pr_name, MSG_task_get_name(task), mbox);
+
+    if (!strcmp(MSG_task_get_name(task), "finalize")) {
+      MSG_task_destroy(task);
+      break;
+    }
+
+    MSG_task_execute(task);
+    XBT_INFO("%s executed task(%s)", pr_name, MSG_task_get_name(task));
+    MSG_task_destroy(task);
+  }
+
+  return 0;
+}
+
+
+
+
+int main(int argc, char *argv[])
+{
+  const int nb_workers = 2;
+
+  MSG_init(&argc, argv);
+  if (argc != 2) {
+    printf("Usage: %s example/msg/msg_platform.xml\n", argv[0]);
+    return 1;
+  }
+
+  /* Load the platform file */
+  MSG_create_environment(argv[1]);
+
+  /* Retrieve hosts from the platform file */
+  xbt_dynar_t pms = MSG_hosts_as_dynar();
+
+  /* we need a master node and worker nodes */
+  if (xbt_dynar_length(pms) < nb_workers + 1) {
+    XBT_CRITICAL("need %d hosts", nb_workers + 1);
+    return 1;
+  }
+
+  /* the first pm is the master, the others are workers */
+  msg_host_t master_pm = xbt_dynar_get_as(pms, 0, msg_host_t);
+
+  xbt_dynar_t worker_pms = xbt_dynar_new(sizeof(msg_host_t), NULL);
+  int i;
+  for (i = 1; i < nb_workers + 1; i++) {
+    msg_host_t pm = xbt_dynar_get_as(pms, i, msg_host_t);
+    xbt_dynar_push(worker_pms, &pm);
+  }
+
+
+  /* Start the master process on the master pm. */
+  MSG_process_create("master", master_fun, worker_pms, master_pm);
+
+  msg_error_t res = MSG_main();
+  XBT_INFO("Bye (simulation time %g)", MSG_get_clock());
+
+  xbt_dynar_free(&worker_pms);
+  xbt_dynar_free(&pms);
+
+  return !(res == MSG_OK);
+}
diff --git a/examples/msg/cloud/master_worker_vm.tesh b/examples/msg/cloud/master_worker_vm.tesh
new file mode 100644 (file)
index 0000000..a19cdce
--- /dev/null
@@ -0,0 +1,90 @@
+#! ./tesh
+
+p Testing the Cloud API with a simple masterslave
+
+$ $SG_TEST_EXENV ${bindir:=.}/master_worker_vm$EXEEXT --log=no_loc ${srcdir:=.}/../msg_platform.xml
+> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] # Launch 2 VMs
+> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] create VM00 on PM(Intel)
+> [0.000000] [surf_vm_workstation/INFO] Create VM(VM00)@PM(Intel) with 0 mounted disks
+> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] put a process (WRK00) on VM00
+> [VM00:WRK00:(2) 0.000000] [msg_test/INFO] WRK00 is listenning on mailbox(MBOX:WRK00)
+> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] create VM01 on PM(Provost)
+> [0.000000] [surf_vm_workstation/INFO] Create VM(VM01)@PM(Provost) with 0 mounted disks
+> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] put a process (WRK01) on VM01
+> [VM01:WRK01:(3) 0.000000] [msg_test/INFO] WRK01 is listenning on mailbox(MBOX:WRK01)
+> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] # Send a task to 2 worker process
+> [Jacquelin:master:(1) 0.000000] [msg_test/INFO] Send task(Task00) to mailbox(MBOX:WRK00)
+> [VM00:WRK00:(2) 23.846402] [msg_test/INFO] WRK00 received task(Task00) from mailbox(MBOX:WRK00)
+> [Jacquelin:master:(1) 23.846402] [msg_test/INFO] Send task(Task01) to mailbox(MBOX:WRK01)
+> [VM00:WRK00:(2) 23.919218] [msg_test/INFO] WRK00 executed task(Task00)
+> [VM01:WRK01:(3) 48.653760] [msg_test/INFO] WRK01 received task(Task01) from mailbox(MBOX:WRK01)
+> [Jacquelin:master:(1) 48.653760] [msg_test/INFO] # Suspend all VMs
+> [Jacquelin:master:(1) 48.653760] [msg_test/INFO] suspend VM00
+> [Jacquelin:master:(1) 48.653760] [msg_test/INFO] suspend VM01
+> [Jacquelin:master:(1) 48.653760] [msg_test/INFO] # Wait a while
+> [Jacquelin:master:(1) 50.653760] [msg_test/INFO] # Resume all VMs
+> [Jacquelin:master:(1) 50.653760] [msg_test/INFO] # Sleep long enough for everyone to be done with previous batch of work
+> [VM01:WRK01:(3) 50.726576] [msg_test/INFO] WRK01 executed task(Task01)
+> [Jacquelin:master:(1) 1000.000000] [msg_test/INFO] # Add one more process on each VM
+> [Jacquelin:master:(1) 1000.000000] [msg_test/INFO] put a process (WRK02) on VM00
+> [VM00:WRK02:(4) 1000.000000] [msg_test/INFO] WRK02 is listenning on mailbox(MBOX:WRK02)
+> [Jacquelin:master:(1) 1000.000000] [msg_test/INFO] put a process (WRK03) on VM01
+> [VM01:WRK03:(5) 1000.000000] [msg_test/INFO] WRK03 is listenning on mailbox(MBOX:WRK03)
+> [Jacquelin:master:(1) 1000.000000] [msg_test/INFO] # Send a task to 4 worker process
+> [Jacquelin:master:(1) 1000.000000] [msg_test/INFO] Send task(Task00) to mailbox(MBOX:WRK00)
+> [VM00:WRK00:(2) 1023.846402] [msg_test/INFO] WRK00 received task(Task00) from mailbox(MBOX:WRK00)
+> [Jacquelin:master:(1) 1023.846402] [msg_test/INFO] Send task(Task01) to mailbox(MBOX:WRK01)
+> [VM00:WRK00:(2) 1023.919218] [msg_test/INFO] WRK00 executed task(Task00)
+> [VM01:WRK01:(3) 1048.653760] [msg_test/INFO] WRK01 received task(Task01) from mailbox(MBOX:WRK01)
+> [Jacquelin:master:(1) 1048.653760] [msg_test/INFO] Send task(Task02) to mailbox(MBOX:WRK02)
+> [VM01:WRK01:(3) 1048.726576] [msg_test/INFO] WRK01 executed task(Task01)
+> [VM00:WRK02:(4) 1072.500163] [msg_test/INFO] WRK02 received task(Task02) from mailbox(MBOX:WRK02)
+> [Jacquelin:master:(1) 1072.500163] [msg_test/INFO] Send task(Task03) to mailbox(MBOX:WRK03)
+> [VM00:WRK02:(4) 1072.572978] [msg_test/INFO] WRK02 executed task(Task02)
+> [VM01:WRK03:(5) 1097.307521] [msg_test/INFO] WRK03 received task(Task03) from mailbox(MBOX:WRK03)
+> [Jacquelin:master:(1) 1097.307521] [msg_test/INFO] # Migrate all VMs to PM(Intel)
+> [Intel:__pr_mig_tx:VM00(Intel-Intel):(7) 1097.307521] [msg_vm/WARNING] use the default max_downtime value 30ms
+> [Intel:__pr_mig_tx:VM00(Intel-Intel):(7) 1097.307521] [msg_vm/INFO] mig-stage1: remaining_size 1073741824.000000
+> [VM01:WRK03:(5) 1097.380336] [msg_test/INFO] WRK03 executed task(Task03)
+> [Intel:__pr_mig_tx:VM00(Intel-Intel):(7) 1099.463824] [msg_vm/INFO] actual bandwidth 474.886827 (MB/s), threshold 14938647.898422
+> [Intel:__pr_mig_tx:VM00(Intel-Intel):(7) 1099.463824] [msg_vm/INFO] mig-stage 2:0 updated_size 0.000000 computed_during_stage1 0.000000 dp_rate 0.000000 dp_cap 0.000000
+> [Intel:__pr_mig_tx:VM00(Intel-Intel):(7) 1099.463824] [msg_vm/INFO] mig-stage2.0: remaining_size 0.000000 (< threshold 14938647.898422)
+> [Intel:__pr_mig_tx:VM00(Intel-Intel):(7) 1099.463824] [msg_vm/INFO] mig-stage3: remaining_size 0.000000
+> [1099.464019] [surf_vm_workstation/INFO] migrate VM(VM00): set bound (137333000.000000) at Intel
+> [Intel:__pr_mig_rx:VM00(Intel-Intel):(6) 1099.464019] [msg_vm/INFO] set affinity(0x0000@Intel) for VM00
+> [Provost:__pr_mig_tx:VM01(Provost-Intel):(11) 1100.382717] [msg_vm/WARNING] use the default max_downtime value 30ms
+> [Provost:__pr_mig_tx:VM01(Provost-Intel):(11) 1100.382717] [msg_vm/INFO] mig-stage1: remaining_size 1073741824.000000
+> [Provost:__pr_mig_tx:VM01(Provost-Intel):(11) 3564.234309] [msg_vm/INFO] actual bandwidth 0.415609 (MB/s), threshold 13073.942775
+> [Provost:__pr_mig_tx:VM01(Provost-Intel):(11) 3564.234309] [msg_vm/INFO] mig-stage 2:0 updated_size 0.000000 computed_during_stage1 0.000000 dp_rate 0.000000 dp_cap 0.000000
+> [Provost:__pr_mig_tx:VM01(Provost-Intel):(11) 3564.234309] [msg_vm/INFO] mig-stage2.0: remaining_size 0.000000 (< threshold 13073.942775)
+> [Provost:__pr_mig_tx:VM01(Provost-Intel):(11) 3564.234309] [msg_vm/INFO] mig-stage3: remaining_size 0.000000
+> [3566.242426] [surf_vm_workstation/INFO] migrate VM(VM01): set bound (137333000.000000) at Intel
+> [Intel:__pr_mig_rx:VM01(Provost-Intel):(10) 3566.242426] [msg_vm/INFO] set affinity(0x0000@Intel) for VM01
+> [Jacquelin:master:(1) 3567.161124] [msg_test/INFO] # Migrate all VMs to PM(Provost)
+> [Intel:__pr_mig_tx:VM00(Intel-Provost):(15) 3567.161124] [msg_vm/WARNING] use the default max_downtime value 30ms
+> [Intel:__pr_mig_tx:VM00(Intel-Provost):(15) 3567.161124] [msg_vm/INFO] mig-stage1: remaining_size 1073741824.000000
+> [Intel:__pr_mig_tx:VM00(Intel-Provost):(15) 6031.012716] [msg_vm/INFO] actual bandwidth 0.415609 (MB/s), threshold 13073.942775
+> [Intel:__pr_mig_tx:VM00(Intel-Provost):(15) 6031.012716] [msg_vm/INFO] mig-stage 2:0 updated_size 0.000000 computed_during_stage1 0.000000 dp_rate 0.000000 dp_cap 0.000000
+> [Intel:__pr_mig_tx:VM00(Intel-Provost):(15) 6031.012716] [msg_vm/INFO] mig-stage2.0: remaining_size 0.000000 (< threshold 13073.942775)
+> [Intel:__pr_mig_tx:VM00(Intel-Provost):(15) 6031.012716] [msg_vm/INFO] mig-stage3: remaining_size 0.000000
+> [6033.020833] [surf_vm_workstation/INFO] migrate VM(VM00): set bound (137333000.000000) at Provost
+> [Provost:__pr_mig_rx:VM00(Intel-Provost):(14) 6033.020833] [msg_vm/INFO] set affinity(0x0000@Provost) for VM00
+> [Intel:__pr_mig_tx:VM01(Intel-Provost):(19) 6034.900487] [msg_vm/WARNING] use the default max_downtime value 30ms
+> [Intel:__pr_mig_tx:VM01(Intel-Provost):(19) 6034.900487] [msg_vm/INFO] mig-stage1: remaining_size 1073741824.000000
+> [Intel:__pr_mig_tx:VM01(Intel-Provost):(19) 8498.752079] [msg_vm/INFO] actual bandwidth 0.415609 (MB/s), threshold 13073.942775
+> [Intel:__pr_mig_tx:VM01(Intel-Provost):(19) 8498.752079] [msg_vm/INFO] mig-stage 2:0 updated_size 0.000000 computed_during_stage1 0.000000 dp_rate 0.000000 dp_cap 0.000000
+> [Intel:__pr_mig_tx:VM01(Intel-Provost):(19) 8498.752079] [msg_vm/INFO] mig-stage2.0: remaining_size 0.000000 (< threshold 13073.942775)
+> [Intel:__pr_mig_tx:VM01(Intel-Provost):(19) 8498.752079] [msg_vm/INFO] mig-stage3: remaining_size 0.000000
+> [8500.760196] [surf_vm_workstation/INFO] migrate VM(VM01): set bound (137333000.000000) at Provost
+> [Provost:__pr_mig_rx:VM01(Intel-Provost):(18) 8500.760196] [msg_vm/INFO] set affinity(0x0000@Provost) for VM01
+> [Jacquelin:master:(1) 8502.639850] [msg_test/INFO] # Shutdown the half of worker processes gracefuly. The remaining half will be forcibly killed.
+> [VM00:WRK00:(2) 8504.519504] [msg_test/INFO] WRK00 received task(finalize) from mailbox(MBOX:WRK00)
+> [VM01:WRK01:(3) 8506.399157] [msg_test/INFO] WRK01 received task(finalize) from mailbox(MBOX:WRK01)
+> [Jacquelin:master:(1) 8506.399157] [msg_test/INFO] # Wait a while before effective shutdown.
+> [Jacquelin:master:(1) 8508.399157] [msg_test/INFO] # Shutdown and destroy all the VMs. The remaining worker processes will be forcibly killed.
+> [Jacquelin:master:(1) 8508.399157] [msg_test/INFO] shutdown VM00
+> [Jacquelin:master:(1) 8508.399157] [msg_test/INFO] destroy VM00
+> [Jacquelin:master:(1) 8508.399157] [msg_test/INFO] shutdown VM01
+> [Jacquelin:master:(1) 8508.399157] [msg_test/INFO] destroy VM01
+> [Jacquelin:master:(1) 8508.399157] [msg_test/INFO] # Goodbye now!
+> [8508.399157] [msg_test/INFO] Bye (simulation time 8508.4)
index 12d0ad2..4e722aa 100644 (file)
@@ -67,7 +67,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/simple_vm$EXEEXT --log=no_loc ${srcdir:=.}/simple_
 > [PM0:__pr_mig_tx:VM0(PM0-PM1):(38) 49.010000] [msg_vm/WARNING] use the default max_downtime value 30ms
 > [PM0:__pr_mig_tx:VM0(PM0-PM1):(38) 49.010000] [msg_vm/INFO] mig-stage1: remaining_size 1073741824.000000
 > [PM2:comm_rx:(36) 49.293296] [msg_test/INFO] VM0:comm_tx to PM2:comm_rx => 0.293296 sec
-> [PM0:__pr_mig_tx:VM0(PM0-PM1):(38) 142.200526] [msg_vm/INFO] actual banwdidth 10.988241 (MB/s), threshold 345660.187833
+> [PM0:__pr_mig_tx:VM0(PM0-PM1):(38) 142.200526] [msg_vm/INFO] actual bandwidth 10.988241 (MB/s), threshold 345660.187833
 > [PM0:__pr_mig_tx:VM0(PM0-PM1):(38) 142.200526] [msg_vm/INFO] mig-stage 2:0 updated_size 0.000000 computed_during_stage1 0.000000 dp_rate 0.000000 dp_cap 0.000000
 > [PM0:__pr_mig_tx:VM0(PM0-PM1):(38) 142.200526] [msg_vm/INFO] mig-stage2.0: remaining_size 0.000000 (< threshold 345660.187833)
 > [PM0:__pr_mig_tx:VM0(PM0-PM1):(38) 142.200526] [msg_vm/INFO] mig-stage3: remaining_size 0.000000
@@ -75,7 +75,7 @@ $ $SG_TEST_EXENV ${bindir:=.}/simple_vm$EXEEXT --log=no_loc ${srcdir:=.}/simple_
 > [PM1:__pr_mig_rx:VM0(PM0-PM1):(37) 142.330626] [msg_vm/INFO] set affinity(0x0000@PM1) for VM0
 > [PM1:__pr_mig_tx:VM0(PM1-PM0):(42) 142.470726] [msg_vm/WARNING] use the default max_downtime value 30ms
 > [PM1:__pr_mig_tx:VM0(PM1-PM0):(42) 142.470726] [msg_vm/INFO] mig-stage1: remaining_size 1073741824.000000
-> [PM1:__pr_mig_tx:VM0(PM1-PM0):(42) 235.584654] [msg_vm/INFO] actual banwdidth 10.997281 (MB/s), threshold 345944.536891
+> [PM1:__pr_mig_tx:VM0(PM1-PM0):(42) 235.584654] [msg_vm/INFO] actual bandwidth 10.997281 (MB/s), threshold 345944.536891
 > [PM1:__pr_mig_tx:VM0(PM1-PM0):(42) 235.584654] [msg_vm/INFO] mig-stage 2:0 updated_size 0.000000 computed_during_stage1 0.000000 dp_rate 0.000000 dp_cap 0.000000
 > [PM1:__pr_mig_tx:VM0(PM1-PM0):(42) 235.584654] [msg_vm/INFO] mig-stage2.0: remaining_size 0.000000 (< threshold 345944.536891)
 > [PM1:__pr_mig_tx:VM0(PM1-PM0):(42) 235.584654] [msg_vm/INFO] mig-stage3: remaining_size 0.000000
index 42c3f2b..b8c0a04 100644 (file)
@@ -11,12 +11,13 @@ add_executable(remote remote.c)
 if(NOT WIN32)
   target_link_libraries(file simgrid pthread)
   target_link_libraries(file_unlink simgrid pthread)
-  target_link_libraries(storage simgrid pthread)
   target_link_libraries(remote simgrid pthread)
+  target_link_libraries(storage simgrid pthread)
 else()
   target_link_libraries(file simgrid)
   target_link_libraries(file_unlink simgrid)
   target_link_libraries(remote simgrid)
+  target_link_libraries(storage simgrid)
 endif()
 
 set(tesh_files
index 04e7bdd..c07e711 100644 (file)
@@ -48,6 +48,10 @@ int host(int argc, char *argv[])
   write = MSG_file_write(file,100000);  // Write for 100Ko
   XBT_INFO("\tHave written %llu on %s",write,MSG_file_get_name(file));
 
+  // Write into the new file
+  write = MSG_file_write(file,100000);  // Write for 100Ko
+  XBT_INFO("\tHave written %llu on %s",write,MSG_file_get_name(file));
+
   // Close the file
   XBT_INFO("\tClose file '%s'",MSG_file_get_name(file));
   MSG_file_close(file);
index 4afb302..bf22827 100644 (file)
@@ -27,33 +27,33 @@ $ ${bindir:=.}/io/file ${srcdir:=.}/examples/platforms/storage.xml "--log=root.f
 > [  0.002175] (2:1@alice)     Have written 100000 in 'c:\Windows\setupact.log'. Size now is: 201663
 > [  0.002175] (2:1@alice)     Capacity of the storage element 'c:\Windows\setupact.log' is stored on: 2391637133 / 536870912000
 > [  0.002175] (2:1@alice)     Coming back to the beginning of the stream for file 'c:\Windows\setupact.log'
-> [  0.002439] (1:0@denise)    Have read 110000 from '/home/doc/simgrid/examples/platforms/g5k.xml' (of size 117028)
-> [  0.002439] (1:0@denise)    Coming back to the beginning of the stream for file '/home/doc/simgrid/examples/platforms/g5k.xml'
-> [  0.002862] (2:1@alice)     Have read 110000 from 'c:\Windows\setupact.log' (of size 201663)
-> [  0.002862] (2:1@alice)     Coming back to the beginning of the stream for file 'c:\Windows\setupact.log'
+> [  0.002302] (1:0@denise)    Have read 110000 from '/home/doc/simgrid/examples/platforms/g5k.xml' (of size 117028)
+> [  0.002302] (1:0@denise)    Coming back to the beginning of the stream for file '/home/doc/simgrid/examples/platforms/g5k.xml'
+> [  0.002725] (2:1@alice)     Have read 110000 from 'c:\Windows\setupact.log' (of size 201663)
+> [  0.002725] (2:1@alice)     Coming back to the beginning of the stream for file 'c:\Windows\setupact.log'
 > [  0.003374] (4:3@bob)       Have written 100000 in '/home/doc/simgrid/examples/platforms/nancy.xml'. Size now is: 104028
 > [  0.003374] (4:3@bob)       Capacity of the storage element '/home/doc/simgrid/examples/platforms/nancy.xml' is stored on: 37046053 / 536870912000
 > [  0.003374] (4:3@bob)       Coming back to the beginning of the stream for file '/home/doc/simgrid/examples/platforms/nancy.xml'
 > [  0.003560] (3:2@carl)      Have written 100000 in '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml'. Size now is: 122645
 > [  0.003560] (3:2@carl)      Capacity of the storage element '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml' is stored on: 37046053 / 536870912000
 > [  0.003560] (3:2@carl)      Coming back to the beginning of the stream for file '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml'
-> [  0.004529] (4:3@bob)       Have read 104028 from '/home/doc/simgrid/examples/platforms/nancy.xml' (of size 104028)
-> [  0.004529] (4:3@bob)       Coming back to the beginning of the stream for file '/home/doc/simgrid/examples/platforms/nancy.xml'
-> [  0.004782] (3:2@carl)      Have read 110000 from '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml' (of size 122645)
-> [  0.004782] (3:2@carl)      Coming back to the beginning of the stream for file '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml'
-> [  0.006106] (1:0@denise)    Have written 110000 in '/home/doc/simgrid/examples/platforms/g5k.xml'. Size now is: 110000
-> [  0.006106] (1:0@denise)    Capacity of the storage element '/home/doc/simgrid/examples/platforms/g5k.xml' is stored on: 13314966 / 536870912000
-> [  0.006106] (1:0@denise)    Close file '/home/doc/simgrid/examples/platforms/g5k.xml'
-> [  0.006529] (2:1@alice)     Have written 110000 in 'c:\Windows\setupact.log'. Size now is: 110000
-> [  0.006529] (2:1@alice)     Capacity of the storage element 'c:\Windows\setupact.log' is stored on: 2391545470 / 536870912000
-> [  0.006529] (2:1@alice)     Close file 'c:\Windows\setupact.log'
-> [  0.011863] (4:3@bob)       Have written 110000 in '/home/doc/simgrid/examples/platforms/nancy.xml'. Size now is: 110000
-> [  0.011863] (4:3@bob)       Capacity of the storage element '/home/doc/simgrid/examples/platforms/nancy.xml' is stored on: 37052025 / 536870912000
-> [  0.011863] (4:3@bob)       Close file '/home/doc/simgrid/examples/platforms/nancy.xml'
-> [  0.012115] (3:2@carl)      Have written 110000 in '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml'. Size now is: 110000
-> [  0.012115] (3:2@carl)      Capacity of the storage element '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml' is stored on: 37033408 / 536870912000
-> [  0.012115] (3:2@carl)      Close file '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml'
-> [  0.012115] (0:@) Simulation time 0.0121153
+> [  0.004135] (1:0@denise)    Have written 110000 in '/home/doc/simgrid/examples/platforms/g5k.xml'. Size now is: 110000
+> [  0.004135] (1:0@denise)    Capacity of the storage element '/home/doc/simgrid/examples/platforms/g5k.xml' is stored on: 13314966 / 536870912000
+> [  0.004135] (1:0@denise)    Close file '/home/doc/simgrid/examples/platforms/g5k.xml'
+> [  0.004414] (4:3@bob)       Have read 104028 from '/home/doc/simgrid/examples/platforms/nancy.xml' (of size 104028)
+> [  0.004414] (4:3@bob)       Coming back to the beginning of the stream for file '/home/doc/simgrid/examples/platforms/nancy.xml'
+> [  0.004558] (2:1@alice)     Have written 110000 in 'c:\Windows\setupact.log'. Size now is: 110000
+> [  0.004558] (2:1@alice)     Capacity of the storage element 'c:\Windows\setupact.log' is stored on: 2391545470 / 536870912000
+> [  0.004558] (2:1@alice)     Close file 'c:\Windows\setupact.log'
+> [  0.004660] (3:2@carl)      Have read 110000 from '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml' (of size 122645)
+> [  0.004660] (3:2@carl)      Coming back to the beginning of the stream for file '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml'
+> [  0.008081] (4:3@bob)       Have written 110000 in '/home/doc/simgrid/examples/platforms/nancy.xml'. Size now is: 110000
+> [  0.008081] (4:3@bob)       Capacity of the storage element '/home/doc/simgrid/examples/platforms/nancy.xml' is stored on: 37052025 / 536870912000
+> [  0.008081] (4:3@bob)       Close file '/home/doc/simgrid/examples/platforms/nancy.xml'
+> [  0.008326] (3:2@carl)      Have written 110000 in '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml'. Size now is: 110000
+> [  0.008326] (3:2@carl)      Capacity of the storage element '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml' is stored on: 37033408 / 536870912000
+> [  0.008326] (3:2@carl)      Close file '/home/doc/simgrid/examples/platforms/g5k_cabinets.xml'
+> [  0.008326] (0:@) Simulation time 0.00832645
 
 $ ${bindir:=.}/io/file_unlink ${srcdir:=.}/examples/platforms/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:@) Number of host '4'
@@ -61,5 +61,6 @@ $ ${bindir:=.}/io/file_unlink ${srcdir:=.}/examples/platforms/storage.xml "--log
 > [  0.000000] (1:0@denise)    Unlink file '/home/doc/simgrid/examples/platforms/g5k.xml'
 > [  0.000000] (1:0@denise)    Open file '/home/doc/simgrid/examples/platforms/g5k.xml'
 > [  0.001667] (1:0@denise)    Have written 100000 on /home/doc/simgrid/examples/platforms/g5k.xml
-> [  0.001667] (1:0@denise)    Close file '/home/doc/simgrid/examples/platforms/g5k.xml'
-> [  0.001667] (0:@) Simulation time 0.00166667
+> [  0.003333] (1:0@denise)    Have written 100000 on /home/doc/simgrid/examples/platforms/g5k.xml
+> [  0.003333] (1:0@denise)    Close file '/home/doc/simgrid/examples/platforms/g5k.xml'
+> [  0.003333] (0:@) Simulation time 0.00333333
index 3a3efbc..3a141bc 100644 (file)
@@ -20,6 +20,8 @@
 #include "msg/msg.h"
 #include "surf/surf_private.h"
 
+#define INMEGA (1024*1024)
+
 int host(int argc, char *argv[]);
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(remote_io,
@@ -29,108 +31,83 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(remote_io,
 int host(int argc, char *argv[]){
   msg_file_t file = NULL;
   const char* filename;
-//  msg_storage_t st;
-  sg_size_t read;//,write;
+  sg_size_t read, write;
 
   file = MSG_file_open(argv[1], NULL);
   filename = MSG_file_get_name(file);
   XBT_INFO("Opened file '%s'",filename);
   MSG_file_dump(file);
 
- // st = MSG_storage_get_by_name(st_name);
-
   XBT_INFO("Try to read %llu from '%s'",MSG_file_get_size(file),filename);
   read = MSG_file_read(file, MSG_file_get_size(file));
-  XBT_INFO("Have read %llu from '%s'",read,filename);
+  XBT_INFO("Have read %llu from '%s'. Offset is now at: %llu",read,filename,
+      MSG_file_tell(file));
+  XBT_INFO("Seek back to the begining of the stream...");
+  MSG_file_seek(file, 0, SEEK_SET);
+  XBT_INFO("Offset is now at: %llu", MSG_file_tell(file));
 
   MSG_file_close(file);
+
+  if (argc > 5){
+    file = MSG_file_open(argv[2], NULL);
+    filename = MSG_file_get_name(file);
+    XBT_INFO("Opened file '%s'",filename);
+    XBT_INFO("Try to write %llu MiB to '%s'",
+        MSG_file_get_size(file)/1024,
+        filename);
+    write = MSG_file_write(file, MSG_file_get_size(file)*1024);
+    XBT_INFO("Have written %llu bytes to '%s'.",write,filename);
+
+    msg_host_t src, dest;
+    src= MSG_host_self();
+    dest = MSG_get_host_by_name(argv[3]);
+    if (atoi(argv[5])){
+      XBT_INFO("Move '%s' (of size %llu) from '%s' to '%s'", filename,
+           MSG_file_get_size(file), MSG_host_get_name(src),
+           argv[3]);
+      MSG_file_rmove(file, dest, argv[4]);
+    } else {
+      XBT_INFO("Copy '%s' (of size %llu) from '%s' to '%s'", filename,
+           MSG_file_get_size(file), MSG_host_get_name(src),
+           argv[3]);
+      MSG_file_rcopy(file, dest, argv[4]);
+      MSG_file_close(file);
+    }
+  }
+
   return 0;
 }
 
-//int host(int argc, char *argv[])
-//{
-//  msg_file_t file = NULL;
-//  sg_size_t read,write;
-//  msg_storage_t st;
-//  const char* st_name;
-//
-//  if(!strcmp(MSG_process_get_name(MSG_process_self()),"0")){
-//    file = MSG_file_open(FILENAME1, NULL);
-//    MSG_file_dump(file);
-//    st_name = "Disk4";
-//  } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"1")) {
-//    file = MSG_file_open(FILENAME2, NULL);
-//    st_name = "Disk2";
-//  } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"2")){
-//    file = MSG_file_open(FILENAME3, NULL);
-//    st_name = "Disk3";
-//  } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"3")){
-//    file = MSG_file_open(FILENAME4, NULL);
-//    st_name = "Disk1";
-//  }
-//  else xbt_die("FILENAME NOT DEFINED %s",MSG_process_get_name(MSG_process_self()));
-//
-//  const char* filename = MSG_file_get_name(file);
-//  XBT_INFO("\tOpen file '%s'",filename);
-//  st = MSG_storage_get_by_name(st_name);
-//
-//  XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu",
-//            filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st));
-//
-//  /* Try to read for 10MB */
-//  read = MSG_file_read(file, 10000000);
-//  XBT_INFO("\tHave read %llu from '%s'",read,filename);
-//
-//  /* Write 100KB in file from the current position, i.e, end of file or 10MB */
-//  write = MSG_file_write(file, 100000);
-//  XBT_INFO("\tHave written %llu in '%s'. Size now is: %llu",write,filename,
-//           MSG_file_get_size(file));
-//
-//
-//  XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu",
-//            filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st));
-//
-//  /* rewind to the beginning of the file */
-//  XBT_INFO("\tComing back to the beginning of the stream for file '%s'",
-//           filename);
-//  MSG_file_seek(file, 0, SEEK_SET);
-//
-//  /* Try to read 110KB */
-//  read = MSG_file_read(file, 110000);
-//  XBT_INFO("\tHave read %llu from '%s' (of size %llu)",read,filename,
-//      MSG_file_get_size(file));
-//
-//  /* rewind once again to the beginning of the file */
-//  XBT_INFO("\tComing back to the beginning of the stream for file '%s'",
-//           filename);
-//  MSG_file_seek(file, 0, SEEK_SET);
-//
-//  /* Write 110KB in file from the current position, i.e, end of file or 10MB */
-//  write = MSG_file_write(file, 110000);
-//  XBT_INFO("\tHave written %llu in '%s'. Size now is: %llu", write,filename,
-//      MSG_file_get_size(file));
-//
-//  XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu",
-//            filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st));
-//
-//  XBT_INFO("\tClose file '%s'",filename);
-//  MSG_file_close(file);
-//
-//
-//  return 0;
-//}
+
 
 int main(int argc, char **argv)
 {
   int res;
+  unsigned int cur;
+  xbt_dynar_t storages;
+  msg_storage_t st;
 
   MSG_init(&argc, argv);
   MSG_create_environment(argv[1]);
   MSG_function_register("host", host);
   MSG_launch_application(argv[2]);
 
+  storages = MSG_storages_as_dynar();
+  xbt_dynar_foreach(storages, cur, st){
+    XBT_INFO("Init: %llu MiB used on '%s'",
+        MSG_storage_get_used_size(st)/INMEGA,
+        MSG_storage_get_name(st));
+  }
+
   res = MSG_main();
 
+  xbt_dynar_foreach(storages, cur, st){
+    XBT_INFO("Init: %llu MiB used on '%s'",
+        MSG_storage_get_used_size(st)/INMEGA,
+        MSG_storage_get_name(st));
+  }
+  xbt_dynar_free_container(&storages);
+
   XBT_INFO("Simulation time %g", MSG_get_clock());
   if (res == MSG_OK)
     return 0;
index 73eacef..ddc15bc 100644 (file)
@@ -1,4 +1,64 @@
 #! ./tesh
 
-$ ${bindir:=.}/io/remote_io ${srcdir:=.}/examples/platforms/remote_io.xml \
-${srcdir:=.}/examples/platforms/deployment_remote_io.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/io/remote$EXEEXT ${srcdir:=.}/examples/platforms/remote_io.xml ${srcdir:=.}/examples/platforms/deployment_remote_io.xml "--log=root.fmt:[%10.6r]%e(%i@%5h)%e%m%n"
+> [  0.000000] (0@     ) Init: 12 MiB used on 'Disk1'
+> [  0.000000] (0@     ) Init: 2280 MiB used on 'Disk2'
+> [  0.000000] (1@alice) Opened file 'c:\Windows\setupact.log'
+> [  0.000000] (2@  bob) Opened file '/scratch/lib/libsimgrid.so.3.6.2'
+> [  0.000000] (3@ carl) Opened file '/scratch/lib/libsimgrid.so.3.6.2'
+> [  0.000000] (4@ dave) Opened file 'c:\Windows\bootstat.dat'
+> [  0.000000] (1@alice) File Descriptor information:
+>              Full path: 'c:\Windows\setupact.log'
+>              Size: 101663
+>              Mount point: 'c:'
+>              Storage Id: 'Disk2'
+>              Storage Type: 'SATA-II_HDD'
+>              Content Type: 'txt_windows'
+> [  0.000000] (2@  bob) File Descriptor information:
+>              Full path: '/scratch/lib/libsimgrid.so.3.6.2'
+>              Size: 12710497
+>              Mount point: '/scratch'
+>              Storage Id: 'Disk1'
+>              Storage Type: 'SATA-II_HDD'
+>              Content Type: 'txt_unix'
+> [  0.000000] (3@ carl) File Descriptor information:
+>              Full path: '/scratch/lib/libsimgrid.so.3.6.2'
+>              Size: 12710497
+>              Mount point: '/scratch'
+>              Storage Id: 'Disk1'
+>              Storage Type: 'SATA-II_HDD'
+>              Content Type: 'txt_unix'
+> [  0.000000] (4@ dave) File Descriptor information:
+>              Full path: 'c:\Windows\bootstat.dat'
+>              Size: 67584
+>              Mount point: 'c:'
+>              Storage Id: 'Disk2'
+>              Storage Type: 'SATA-II_HDD'
+>              Content Type: 'txt_windows'
+> [  0.000000] (1@alice) Try to read 101663 from 'c:\Windows\setupact.log'
+> [  0.000000] (2@  bob) Try to read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'
+> [  0.000000] (3@ carl) Try to read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'
+> [  0.000000] (4@ dave) Try to read 67584 from 'c:\Windows\bootstat.dat'
+> [  0.001469] (4@ dave) Have read 67584 from 'c:\Windows\bootstat.dat'. Offset is now at: 67584
+> [  0.001469] (4@ dave) Seek back to the begining of the stream...
+> [  0.001469] (4@ dave) Offset is now at: 0
+> [  0.001469] (4@ dave) Opened file 'c:\Windows\Professional.xml'
+> [  0.001469] (4@ dave) Try to write 31 MiB to 'c:\Windows\Professional.xml'
+> [  0.003559] (1@alice) Have read 101663 from 'c:\Windows\setupact.log'. Offset is now at: 101663
+> [  0.003559] (1@alice) Seek back to the begining of the stream...
+> [  0.003559] (1@alice) Offset is now at: 0
+> [  0.276315] (3@ carl) Have read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'. Offset is now at: 12710497
+> [  0.276315] (3@ carl) Seek back to the begining of the stream...
+> [  0.276315] (3@ carl) Offset is now at: 0
+> [  0.387036] (2@  bob) Have read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'. Offset is now at: 12710497
+> [  0.387036] (2@  bob) Seek back to the begining of the stream...
+> [  0.387036] (2@  bob) Offset is now at: 0
+> [  0.387036] (2@  bob) Opened file '/scratch/doc/simgrid/examples/platforms/g5k.xml'
+> [  0.387036] (2@  bob) Try to write 16 MiB to '/scratch/doc/simgrid/examples/platforms/g5k.xml'
+> [  0.528029] (4@ dave) Have written 32646144 bytes to 'c:\Windows\Professional.xml'.
+> [  0.528029] (4@ dave) Move 'c:\Windows\Professional.xml' (of size 32646144) from 'dave' to 'carl'
+> [  0.819921] (2@  bob) Have written 17436672 bytes to '/scratch/doc/simgrid/examples/platforms/g5k.xml'.
+> [  0.819921] (2@  bob) Copy '/scratch/doc/simgrid/examples/platforms/g5k.xml' (of size 17436672) from 'bob' to 'alice'
+> [  1.843786] (0@     ) Init: 60 MiB used on 'Disk1'
+> [  1.843786] (0@     ) Init: 2297 MiB used on 'Disk2'
+> [  1.843786] (0@     ) Simulation time 1.84379
index 05f14d1..22325ae 100644 (file)
@@ -89,15 +89,21 @@ static int host(int argc, char *argv[]){
   XBT_INFO("*** Move '/tmp/data.txt' into '/tmp/simgrid.readme'");
   MSG_file_move(file, "/home/tmp/simgrid.readme");
 
+  // Attach some user data to the file
+  MSG_file_set_data(file, xbt_strdup("777"));
+  // Retrieve these data
+  char *data = MSG_file_get_data(file);
+  XBT_INFO("User data attached to the file: %s", data);
+
   MSG_file_close(file);
   free(file_name);
 
   // Now attach some user data to disk1
   XBT_INFO("*** Get/set data for storage element: %s ***",storage_name);
 
-  char *data = MSG_storage_get_data(storage);
+  data = MSG_storage_get_data(storage);
 
-  XBT_INFO("Get data: '%s'", data);
+  XBT_INFO("Get storage data: '%s'", data);
 
   MSG_storage_set_data(storage, xbt_strdup("Some user data"));
   data = MSG_storage_get_data(storage);
index f3512c0..93393fc 100644 (file)
@@ -1,6 +1,6 @@
 #! ./tesh
 
-$ ${bindir:=.}/io/storage ${srcdir:=.}/examples/platforms/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/io/storage$EXEEXT ${srcdir:=.}/examples/platforms/storage.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:(null)@denise) *** Storage info on denise ***
 > [  0.000000] (1:(null)@denise) Storage name: Disk2, mount name: c:
 > [  0.000000] (1:(null)@denise) Total size: 536870912000 bytes
@@ -20,87 +20,88 @@ $ ${bindir:=.}/io/storage ${srcdir:=.}/examples/platforms/storage.xml "--log=roo
 >              Content Type: 'txt_unix'
 > [  0.003333] (1:(null)@denise) Free size: 536857490006 bytes
 > [  0.003333] (1:(null)@denise) Used size: 13421994 bytes
-> [  0.004583] (1:(null)@denise) Read 200000 bytes on /home/tmp/data.txt
-> [  0.007917] (1:(null)@denise) Write 100000 bytes on /home/tmp/data.txt
-> [  0.007917] (1:(null)@denise) File Descriptor information:
+> [  0.004333] (1:(null)@denise) Read 200000 bytes on /home/tmp/data.txt
+> [  0.006000] (1:(null)@denise) Write 100000 bytes on /home/tmp/data.txt
+> [  0.006000] (1:(null)@denise) File Descriptor information:
 >              Full path: '/home/tmp/data.txt'
 >              Size: 300000
 >              Mount point: '/home'
 >              Storage Id: 'Disk4'
 >              Storage Type: 'single_SSD'
 >              Content Type: 'txt_unix'
-> [  0.007917] (1:(null)@denise) *** Move '/tmp/data.txt' into '/tmp/simgrid.readme'
-> [  0.007917] (1:(null)@denise) *** Get/set data for storage element: Disk4 ***
-> [  0.007917] (1:(null)@denise) Get data: '(null)'
-> [  0.007917] (1:(null)@denise) Set and get data: 'Some user data'
-> [  0.007917] (1:(null)@denise) *** Dump content of denise ***
-> [  0.007917] (1:(null)@denise) Print the content of mount point: c:
-> [  0.007917] (1:(null)@denise) \Windows\win.ini size: 92 bytes
-> [  0.007917] (1:(null)@denise) \Windows\mib.bin size: 43131 bytes
-> [  0.007917] (1:(null)@denise) \Windows\DtcInstall.log size: 1955 bytes
-> [  0.007917] (1:(null)@denise) \Windows\vmgcoinstall.log size: 1585 bytes
-> [  0.007917] (1:(null)@denise) \Windows\Starter.xml size: 31537 bytes
-> [  0.007917] (1:(null)@denise) \Windows\_isusr32.dll size: 180320 bytes
-> [  0.007917] (1:(null)@denise) \Windows\winhlp32.exe size: 10752 bytes
-> [  0.007917] (1:(null)@denise) \Windows\setuperr.log size: 0 bytes
-> [  0.007917] (1:(null)@denise) \Windows\system.ini size: 219 bytes
-> [  0.007917] (1:(null)@denise) \Windows\hapint.exe size: 382056 bytes
-> [  0.007917] (1:(null)@denise) \Windows\Professional.xml size: 31881 bytes
-> [  0.007917] (1:(null)@denise) \Windows\regedit.exe size: 159232 bytes
-> [  0.007917] (1:(null)@denise) \Windows\setupact.log size: 101663 bytes
-> [  0.007917] (1:(null)@denise) \Windows\WindowsUpdate.log size: 1518934 bytes
-> [  0.007917] (1:(null)@denise) \Windows\explorer.exe size: 2380944 bytes
-> [  0.007917] (1:(null)@denise) \Windows\DirectX.log size: 10486 bytes
-> [  0.007917] (1:(null)@denise) \Windows\WMSysPr9.prx size: 316640 bytes
-> [  0.007917] (1:(null)@denise) \Windows\PFRO.log size: 6770 bytes
-> [  0.007917] (1:(null)@denise) \Windows\csup.txt size: 12 bytes
-> [  0.007917] (1:(null)@denise) \Windows\WLXPGSS.SCR size: 322048 bytes
-> [  0.007917] (1:(null)@denise) \Windows\avastSS.scr size: 41664 bytes
-> [  0.007917] (1:(null)@denise) \Windows\font1.sii size: 4907 bytes
-> [  0.007917] (1:(null)@denise) \Windows\write.exe size: 10752 bytes
-> [  0.007917] (1:(null)@denise) \Windows\font2.sii size: 8698 bytes
-> [  0.007917] (1:(null)@denise) \Windows\CoreSingleLanguage.xml size: 31497 bytes
-> [  0.007917] (1:(null)@denise) \Windows\dchcfg64.exe size: 335464 bytes
-> [  0.007917] (1:(null)@denise) \Windows\notepad.exe size: 243712 bytes
-> [  0.007917] (1:(null)@denise) \Windows\HelpPane.exe size: 883712 bytes
-> [  0.007917] (1:(null)@denise) \Windows\hh.exe size: 17408 bytes
-> [  0.007917] (1:(null)@denise) \Windows\DPINST.LOG size: 18944 bytes
-> [  0.007917] (1:(null)@denise) \Windows\bfsvc.exe size: 75264 bytes
-> [  0.007917] (1:(null)@denise) \Windows\splwow64.exe size: 126464 bytes
-> [  0.007917] (1:(null)@denise) \Windows\MEMORY.DMP size: 2384027342 bytes
-> [  0.007917] (1:(null)@denise) \Windows\dcmdev64.exe size: 93288 bytes
-> [  0.007917] (1:(null)@denise) \Windows\twain_32.dll size: 50176 bytes
-> [  0.007917] (1:(null)@denise) \Windows\bootstat.dat size: 67584 bytes
-> [  0.007917] (1:(null)@denise) Print the content of mount point: /home
-> [  0.007917] (1:(null)@denise) /include/simix/simix.h size: 13003 bytes
-> [  0.007917] (1:(null)@denise) /include/mc/modelchecker.h size: 96 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/msg/README size: 4805 bytes
-> [  0.007917] (1:(null)@denise) /include/instr/instr.h size: 5750 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/mc_bugged2.c size: 1387 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/html/group__XBT__str.html size: 36192 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/EP/README size: 347 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/DT/README size: 999 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/FT/README size: 276 bytes
-> [  0.007917] (1:(null)@denise) /lib/libsimgrid.so.3.6.2 size: 12710497 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/sys/README size: 1461 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/msg/alias/masterslave_forwarder_with_alias.c size: 6217 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/SP/README size: 926 bytes
-> [  0.007917] (1:(null)@denise) /tmp/simgrid.readme size: 300000 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/msg/parallel_task/test_ptask_deployment.xml size: 654 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/msg/icomms/small_platform.xml size: 972 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/MG/README size: 5465 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/msg/trace/test9.xml size: 598 bytes
-> [  0.007917] (1:(null)@denise) /include/smpi/mpif.h size: 4826 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/README size: 1857 bytes
-> [  0.007917] (1:(null)@denise) /bin/tesh size: 356434 bytes
-> [  0.007917] (1:(null)@denise) /include/simdag/simdag.h size: 10325 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/xbt/sem_basic.c size: 1970 bytes
-> [  0.007917] (1:(null)@denise) /include/xbt/fifo.h size: 3626 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/common/randdp.c size: 1441 bytes
-> [  0.007917] (1:(null)@denise) /include/msg/datatypes.h size: 4635 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/EP/randlc.c size: 3300 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/MPI_dummy/README size: 2406 bytes
-> [  0.007917] (1:(null)@denise) /doc/simgrid/examples/platforms/g5k.xml size: 17028 bytes
-> [  0.007917] (1:(null)@denise) /include/surf/simgrid_dtd.h size: 23583 bytes
-> [  0.007917] (1:(null)@denise) /bin/smpicc size: 918 bytes
-> [  0.007917] (0:@) Simulated time: 0.00791667
+> [  0.006000] (1:(null)@denise) *** Move '/tmp/data.txt' into '/tmp/simgrid.readme'
+> [  0.006000] (1:(null)@denise) User data attached to the file: 777
+> [  0.006000] (1:(null)@denise) *** Get/set data for storage element: Disk4 ***
+> [  0.006000] (1:(null)@denise) Get storage data: '(null)'
+> [  0.006000] (1:(null)@denise) Set and get data: 'Some user data'
+> [  0.006000] (1:(null)@denise) *** Dump content of denise ***
+> [  0.006000] (1:(null)@denise) Print the content of mount point: c:
+> [  0.006000] (1:(null)@denise) \Windows\win.ini size: 92 bytes
+> [  0.006000] (1:(null)@denise) \Windows\mib.bin size: 43131 bytes
+> [  0.006000] (1:(null)@denise) \Windows\DtcInstall.log size: 1955 bytes
+> [  0.006000] (1:(null)@denise) \Windows\vmgcoinstall.log size: 1585 bytes
+> [  0.006000] (1:(null)@denise) \Windows\Starter.xml size: 31537 bytes
+> [  0.006000] (1:(null)@denise) \Windows\_isusr32.dll size: 180320 bytes
+> [  0.006000] (1:(null)@denise) \Windows\winhlp32.exe size: 10752 bytes
+> [  0.006000] (1:(null)@denise) \Windows\setuperr.log size: 0 bytes
+> [  0.006000] (1:(null)@denise) \Windows\system.ini size: 219 bytes
+> [  0.006000] (1:(null)@denise) \Windows\hapint.exe size: 382056 bytes
+> [  0.006000] (1:(null)@denise) \Windows\Professional.xml size: 31881 bytes
+> [  0.006000] (1:(null)@denise) \Windows\regedit.exe size: 159232 bytes
+> [  0.006000] (1:(null)@denise) \Windows\setupact.log size: 101663 bytes
+> [  0.006000] (1:(null)@denise) \Windows\WindowsUpdate.log size: 1518934 bytes
+> [  0.006000] (1:(null)@denise) \Windows\explorer.exe size: 2380944 bytes
+> [  0.006000] (1:(null)@denise) \Windows\DirectX.log size: 10486 bytes
+> [  0.006000] (1:(null)@denise) \Windows\WMSysPr9.prx size: 316640 bytes
+> [  0.006000] (1:(null)@denise) \Windows\PFRO.log size: 6770 bytes
+> [  0.006000] (1:(null)@denise) \Windows\csup.txt size: 12 bytes
+> [  0.006000] (1:(null)@denise) \Windows\WLXPGSS.SCR size: 322048 bytes
+> [  0.006000] (1:(null)@denise) \Windows\avastSS.scr size: 41664 bytes
+> [  0.006000] (1:(null)@denise) \Windows\font1.sii size: 4907 bytes
+> [  0.006000] (1:(null)@denise) \Windows\write.exe size: 10752 bytes
+> [  0.006000] (1:(null)@denise) \Windows\font2.sii size: 8698 bytes
+> [  0.006000] (1:(null)@denise) \Windows\CoreSingleLanguage.xml size: 31497 bytes
+> [  0.006000] (1:(null)@denise) \Windows\dchcfg64.exe size: 335464 bytes
+> [  0.006000] (1:(null)@denise) \Windows\notepad.exe size: 243712 bytes
+> [  0.006000] (1:(null)@denise) \Windows\HelpPane.exe size: 883712 bytes
+> [  0.006000] (1:(null)@denise) \Windows\hh.exe size: 17408 bytes
+> [  0.006000] (1:(null)@denise) \Windows\DPINST.LOG size: 18944 bytes
+> [  0.006000] (1:(null)@denise) \Windows\bfsvc.exe size: 75264 bytes
+> [  0.006000] (1:(null)@denise) \Windows\splwow64.exe size: 126464 bytes
+> [  0.006000] (1:(null)@denise) \Windows\MEMORY.DMP size: 2384027342 bytes
+> [  0.006000] (1:(null)@denise) \Windows\dcmdev64.exe size: 93288 bytes
+> [  0.006000] (1:(null)@denise) \Windows\twain_32.dll size: 50176 bytes
+> [  0.006000] (1:(null)@denise) \Windows\bootstat.dat size: 67584 bytes
+> [  0.006000] (1:(null)@denise) Print the content of mount point: /home
+> [  0.006000] (1:(null)@denise) /include/simix/simix.h size: 13003 bytes
+> [  0.006000] (1:(null)@denise) /include/mc/modelchecker.h size: 96 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/msg/README size: 4805 bytes
+> [  0.006000] (1:(null)@denise) /include/instr/instr.h size: 5750 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/mc_bugged2.c size: 1387 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/html/group__XBT__str.html size: 36192 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/EP/README size: 347 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/DT/README size: 999 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/FT/README size: 276 bytes
+> [  0.006000] (1:(null)@denise) /lib/libsimgrid.so.3.6.2 size: 12710497 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/sys/README size: 1461 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/msg/alias/masterslave_forwarder_with_alias.c size: 6217 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/SP/README size: 926 bytes
+> [  0.006000] (1:(null)@denise) /tmp/simgrid.readme size: 300000 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/msg/parallel_task/test_ptask_deployment.xml size: 654 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/msg/icomms/small_platform.xml size: 972 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/MG/README size: 5465 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/msg/trace/test9.xml size: 598 bytes
+> [  0.006000] (1:(null)@denise) /include/smpi/mpif.h size: 4826 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/README size: 1857 bytes
+> [  0.006000] (1:(null)@denise) /bin/tesh size: 356434 bytes
+> [  0.006000] (1:(null)@denise) /include/simdag/simdag.h size: 10325 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/xbt/sem_basic.c size: 1970 bytes
+> [  0.006000] (1:(null)@denise) /include/xbt/fifo.h size: 3626 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/common/randdp.c size: 1441 bytes
+> [  0.006000] (1:(null)@denise) /include/msg/datatypes.h size: 4635 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/EP/randlc.c size: 3300 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/smpi/NAS/MPI_dummy/README size: 2406 bytes
+> [  0.006000] (1:(null)@denise) /doc/simgrid/examples/platforms/g5k.xml size: 17028 bytes
+> [  0.006000] (1:(null)@denise) /include/surf/simgrid_dtd.h size: 23583 bytes
+> [  0.006000] (1:(null)@denise) /bin/smpicc size: 918 bytes
+> [  0.006000] (0:@) Simulated time: 0.006
index ff7e71f..d59e88a 100644 (file)
@@ -2,13 +2,13 @@
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
 
-  <process host="c-2.me" function="master">
+  <process host="node-2.acme.org" function="master">
       <argument value="100"/>
-      <argument value="c-6.me"/>
+      <argument value="node-6.acme.org"/>
       <argument value="1"/>
   </process>
 
-  <process host="c-6.me" function="slave">
+  <process host="node-6.acme.org" function="slave">
     <argument value="1"/>
   </process>
      
index 52094b2..036f806 100644 (file)
@@ -29,11 +29,11 @@ p One cluster
 $ ns3/ns3 ${srcdir:=.}/examples/platforms/cluster.xml ${srcdir:=.}/examples/msg/ns3/One_cluster-d.xml --cfg=network/model:NS3
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s)
-> [c-6.me:slave:(2) 0.006755] [msg_test/INFO] FLOW[1] : Receive 100 bytes from c-2.me to c-6.me
+> [node-6.acme.org:slave:(2) 0.006755] [msg_test/INFO] FLOW[1] : Receive 100 bytes from node-2.acme.org to node-6.acme.org
 
 p Two clusters
 
 $ ns3/ns3 ${srcdir:=.}/examples/platforms/clusters_routing_full.xml ${srcdir:=.}/examples/msg/ns3/Two_clusters-d.xml --cfg=network/model:NS3
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
 > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s)
-> [c-16.me:slave:(2) 0.012729] [msg_test/INFO] FLOW[1] : Receive 100 bytes from c-3.me to c-16.me
+> [node-16.acme.org:slave:(2) 0.012729] [msg_test/INFO] FLOW[1] : Receive 100 bytes from node-3.acme.org to c-16.me
index dce7b71..b46d7ef 100644 (file)
@@ -441,2579 +441,2579 @@ $ $SG_TEST_EXENV ${bindir:=.}/chord$EXEEXT -nb_bits=6 ${srcdir:=.}/../msg_platfo
 $ $SG_TEST_EXENV ${bindir:=.}/chord$EXEEXT ${srcdir:=.}/../../platforms/cluster.xml ${srcdir:=.}/chord10.xml --log=msg_chord.thres:verbose "--log=root.fmt:[%11.6r]%e(%i:%P@%h)%e%m%n" --cfg=network/model:Constant
 > [   0.000000] (0:@) Configuration change: Set 'network/model' to 'Constant'
 > [   0.000000] (0:@) Switching workstation model to compound since you changed the network and/or cpu model(s)
-> [   0.000000] (10:node@c-9.me) Joining the ring with id 2015253, knowing node 1319738
-> [   0.000000] (1:node@c-0.me) My finger table:
-> [   0.000000] (1:node@c-0.me) Start | Succ 
-> [   0.000000] (1:node@c-0.me)   43  |  42 
-> [   0.000000] (1:node@c-0.me)   44  |  42 
-> [   0.000000] (1:node@c-0.me)   46  |  42 
-> [   0.000000] (1:node@c-0.me)   50  |  42 
-> [   0.000000] (1:node@c-0.me)   58  |  42 
-> [   0.000000] (1:node@c-0.me)   74  |  42 
-> [   0.000000] (1:node@c-0.me)  106  |  42 
-> [   0.000000] (1:node@c-0.me)  170  |  42 
-> [   0.000000] (1:node@c-0.me)  298  |  42 
-> [   0.000000] (1:node@c-0.me)  554  |  42 
-> [   0.000000] (1:node@c-0.me)  1066  |  42 
-> [   0.000000] (1:node@c-0.me)  2090  |  42 
-> [   0.000000] (1:node@c-0.me)  4138  |  42 
-> [   0.000000] (1:node@c-0.me)  8234  |  42 
-> [   0.000000] (1:node@c-0.me)  16426  |  42 
-> [   0.000000] (1:node@c-0.me)  32810  |  42 
-> [   0.000000] (1:node@c-0.me)  65578  |  42 
-> [   0.000000] (1:node@c-0.me)  131114  |  42 
-> [   0.000000] (1:node@c-0.me)  262186  |  42 
-> [   0.000000] (1:node@c-0.me)  524330  |  42 
-> [   0.000000] (1:node@c-0.me)  1048618  |  42 
-> [   0.000000] (1:node@c-0.me)  2097194  |  42 
-> [   0.000000] (1:node@c-0.me)  4194346  |  42 
-> [   0.000000] (1:node@c-0.me)  8388650  |  42 
-> [   0.000000] (1:node@c-0.me) Predecessor: -1
-> [   0.000000] (2:node@c-1.me) Joining the ring with id 366680, knowing node 42
-> [   0.000000] (3:node@c-2.me) Joining the ring with id 533744, knowing node 366680
-> [   0.000000] (4:node@c-3.me) Joining the ring with id 1319738, knowing node 42
-> [   0.000000] (5:node@c-4.me) Joining the ring with id 16509405, knowing node 366680
-> [   0.000000] (6:node@c-5.me) Joining the ring with id 10874876, knowing node 533744
-> [   0.000000] (7:node@c-6.me) Joining the ring with id 16728096, knowing node 1319738
-> [   0.000000] (8:node@c-7.me) Joining the ring with id 10004760, knowing node 16509405
-> [   0.000000] (9:node@c-8.me) Joining the ring with id 6518808, knowing node 42
-> [   4.000000] (3:node@c-2.me) My finger table:
-> [   4.000000] (3:node@c-2.me) Start | Succ 
-> [   4.000000] (3:node@c-2.me)  533745  | 366680 
-> [   4.000000] (3:node@c-2.me)  533746  | 533744 
-> [   4.000000] (3:node@c-2.me)  533748  | 533744 
-> [   4.000000] (3:node@c-2.me)  533752  | 533744 
-> [   4.000000] (3:node@c-2.me)  533760  | 533744 
-> [   4.000000] (3:node@c-2.me)  533776  | 533744 
-> [   4.000000] (3:node@c-2.me)  533808  | 533744 
-> [   4.000000] (3:node@c-2.me)  533872  | 533744 
-> [   4.000000] (3:node@c-2.me)  534000  | 533744 
-> [   4.000000] (3:node@c-2.me)  534256  | 533744 
-> [   4.000000] (3:node@c-2.me)  534768  | 533744 
-> [   4.000000] (3:node@c-2.me)  535792  | 533744 
-> [   4.000000] (3:node@c-2.me)  537840  | 533744 
-> [   4.000000] (3:node@c-2.me)  541936  | 533744 
-> [   4.000000] (3:node@c-2.me)  550128  | 533744 
-> [   4.000000] (3:node@c-2.me)  566512  | 533744 
-> [   4.000000] (3:node@c-2.me)  599280  | 533744 
-> [   4.000000] (3:node@c-2.me)  664816  | 533744 
-> [   4.000000] (3:node@c-2.me)  795888  | 533744 
-> [   4.000000] (3:node@c-2.me)  1058032  | 533744 
-> [   4.000000] (3:node@c-2.me)  1582320  | 533744 
-> [   4.000000] (3:node@c-2.me)  2630896  | 533744 
-> [   4.000000] (3:node@c-2.me)  4728048  | 533744 
-> [   4.000000] (3:node@c-2.me)  8922352  | 533744 
-> [   4.000000] (3:node@c-2.me) Predecessor: -1
-> [   4.000000] (6:node@c-5.me) My finger table:
-> [   4.000000] (6:node@c-5.me) Start | Succ 
-> [   4.000000] (6:node@c-5.me)  10874877  | 533744 
-> [   4.000000] (6:node@c-5.me)  10874878  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10874880  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10874884  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10874892  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10874908  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [   4.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [   4.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [   4.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [   4.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [   4.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [   4.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [   4.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [   4.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [   4.000000] (6:node@c-5.me) Predecessor: -1
-> [   5.000000] (5:node@c-4.me) My finger table:
-> [   5.000000] (5:node@c-4.me) Start | Succ 
-> [   5.000000] (5:node@c-4.me)  16509406  | 366680 
-> [   5.000000] (5:node@c-4.me)  16509407  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509409  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509413  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509421  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [   5.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [   5.000000] (5:node@c-4.me)  256477  | 16509405 
-> [   5.000000] (5:node@c-4.me)  780765  | 16509405 
-> [   5.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [   5.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [   5.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [   5.000000] (5:node@c-4.me) Predecessor: -1
-> [   5.000000] (8:node@c-7.me) My finger table:
-> [   5.000000] (8:node@c-7.me) Start | Succ 
-> [   5.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [   5.000000] (8:node@c-7.me)  10004762  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004764  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004768  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004776  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [   5.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [   5.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [   5.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [   5.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [   5.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [   5.000000] (8:node@c-7.me) Predecessor: -1
-> [   6.000000] (2:node@c-1.me) My finger table:
-> [   6.000000] (2:node@c-1.me) Start | Succ 
-> [   6.000000] (2:node@c-1.me)  366681  |  42 
-> [   6.000000] (2:node@c-1.me)  366682  | 366680 
-> [   6.000000] (2:node@c-1.me)  366684  | 366680 
-> [   6.000000] (2:node@c-1.me)  366688  | 366680 
-> [   6.000000] (2:node@c-1.me)  366696  | 366680 
-> [   6.000000] (2:node@c-1.me)  366712  | 366680 
-> [   6.000000] (2:node@c-1.me)  366744  | 366680 
-> [   6.000000] (2:node@c-1.me)  366808  | 366680 
-> [   6.000000] (2:node@c-1.me)  366936  | 366680 
-> [   6.000000] (2:node@c-1.me)  367192  | 366680 
-> [   6.000000] (2:node@c-1.me)  367704  | 366680 
-> [   6.000000] (2:node@c-1.me)  368728  | 366680 
-> [   6.000000] (2:node@c-1.me)  370776  | 366680 
-> [   6.000000] (2:node@c-1.me)  374872  | 366680 
-> [   6.000000] (2:node@c-1.me)  383064  | 366680 
-> [   6.000000] (2:node@c-1.me)  399448  | 366680 
-> [   6.000000] (2:node@c-1.me)  432216  | 366680 
-> [   6.000000] (2:node@c-1.me)  497752  | 366680 
-> [   6.000000] (2:node@c-1.me)  628824  | 366680 
-> [   6.000000] (2:node@c-1.me)  890968  | 366680 
-> [   6.000000] (2:node@c-1.me)  1415256  | 366680 
-> [   6.000000] (2:node@c-1.me)  2463832  | 366680 
-> [   6.000000] (2:node@c-1.me)  4560984  | 366680 
-> [   6.000000] (2:node@c-1.me)  8755288  | 366680 
-> [   6.000000] (2:node@c-1.me) Predecessor: -1
-> [   8.000000] (7:node@c-6.me) My finger table:
-> [   8.000000] (7:node@c-6.me) Start | Succ 
-> [   8.000000] (7:node@c-6.me)  16728097  | 1319738 
-> [   8.000000] (7:node@c-6.me)  16728098  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16728100  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16728104  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16728112  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16728128  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [   8.000000] (7:node@c-6.me)  16416  | 16728096 
-> [   8.000000] (7:node@c-6.me)  81952  | 16728096 
-> [   8.000000] (7:node@c-6.me)  213024  | 16728096 
-> [   8.000000] (7:node@c-6.me)  475168  | 16728096 
-> [   8.000000] (7:node@c-6.me)  999456  | 16728096 
-> [   8.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [   8.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [   8.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [   8.000000] (7:node@c-6.me) Predecessor: -1
-> [   9.000000] (10:node@c-9.me) My finger table:
-> [   9.000000] (10:node@c-9.me) Start | Succ 
-> [   9.000000] (10:node@c-9.me)  2015254  | 1319738 
-> [   9.000000] (10:node@c-9.me)  2015255  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2015257  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2015261  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2015269  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2015285  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2015317  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2015381  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2015509  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2015765  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2016277  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2017301  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2019349  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2023445  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2031637  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2048021  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2080789  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2146325  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2277397  | 2015253 
-> [   9.000000] (10:node@c-9.me)  2539541  | 2015253 
-> [   9.000000] (10:node@c-9.me)  3063829  | 2015253 
-> [   9.000000] (10:node@c-9.me)  4112405  | 2015253 
-> [   9.000000] (10:node@c-9.me)  6209557  | 2015253 
-> [   9.000000] (10:node@c-9.me)  10403861  | 2015253 
-> [   9.000000] (10:node@c-9.me) Predecessor: -1
-> [  11.000000] (4:node@c-3.me) My finger table:
-> [  11.000000] (4:node@c-3.me) Start | Succ 
-> [  11.000000] (4:node@c-3.me)  1319739  |  42 
-> [  11.000000] (4:node@c-3.me)  1319740  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1319742  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1319746  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1319754  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [  11.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [  11.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [  11.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [  11.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [  11.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [  11.000000] (4:node@c-3.me) Predecessor: -1
-> [  16.000000] (9:node@c-8.me) My finger table:
-> [  16.000000] (9:node@c-8.me) Start | Succ 
-> [  16.000000] (9:node@c-8.me)  6518809  |  42 
-> [  16.000000] (9:node@c-8.me)  6518810  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6518812  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6518816  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6518824  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6518840  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [  16.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [  16.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [  16.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [  16.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [  16.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [  16.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [  16.000000] (9:node@c-8.me) Predecessor: -1
-> [  26.000000] (4:node@c-3.me) My finger table:
-> [  26.000000] (4:node@c-3.me) Start | Succ 
-> [  26.000000] (4:node@c-3.me)  1319739  |  42 
-> [  26.000000] (4:node@c-3.me)  1319740  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1319742  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1319746  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1319754  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [  26.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [  26.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [  26.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [  26.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [  26.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [  26.000000] (4:node@c-3.me) Predecessor: 16728096
-> [  31.000000] (2:node@c-1.me) My finger table:
-> [  31.000000] (2:node@c-1.me) Start | Succ 
-> [  31.000000] (2:node@c-1.me)  366681  |  42 
-> [  31.000000] (2:node@c-1.me)  366682  | 366680 
-> [  31.000000] (2:node@c-1.me)  366684  | 366680 
-> [  31.000000] (2:node@c-1.me)  366688  | 366680 
-> [  31.000000] (2:node@c-1.me)  366696  | 366680 
-> [  31.000000] (2:node@c-1.me)  366712  | 366680 
-> [  31.000000] (2:node@c-1.me)  366744  | 366680 
-> [  31.000000] (2:node@c-1.me)  366808  | 366680 
-> [  31.000000] (2:node@c-1.me)  366936  | 366680 
-> [  31.000000] (2:node@c-1.me)  367192  | 366680 
-> [  31.000000] (2:node@c-1.me)  367704  | 366680 
-> [  31.000000] (2:node@c-1.me)  368728  | 366680 
-> [  31.000000] (2:node@c-1.me)  370776  | 366680 
-> [  31.000000] (2:node@c-1.me)  374872  | 366680 
-> [  31.000000] (2:node@c-1.me)  383064  | 366680 
-> [  31.000000] (2:node@c-1.me)  399448  | 366680 
-> [  31.000000] (2:node@c-1.me)  432216  | 366680 
-> [  31.000000] (2:node@c-1.me)  497752  | 366680 
-> [  31.000000] (2:node@c-1.me)  628824  | 366680 
-> [  31.000000] (2:node@c-1.me)  890968  | 366680 
-> [  31.000000] (2:node@c-1.me)  1415256  | 366680 
-> [  31.000000] (2:node@c-1.me)  2463832  | 366680 
-> [  31.000000] (2:node@c-1.me)  4560984  | 366680 
-> [  31.000000] (2:node@c-1.me)  8755288  | 366680 
-> [  31.000000] (2:node@c-1.me) Predecessor: 16509405
-> [  32.000000] (5:node@c-4.me) My finger table:
-> [  32.000000] (5:node@c-4.me) Start | Succ 
-> [  32.000000] (5:node@c-4.me)  16509406  | 366680 
-> [  32.000000] (5:node@c-4.me)  16509407  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16509409  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16509413  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16509421  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [  32.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [  32.000000] (5:node@c-4.me)  256477  | 16509405 
-> [  32.000000] (5:node@c-4.me)  780765  | 16509405 
-> [  32.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [  32.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [  32.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [  32.000000] (5:node@c-4.me) Predecessor: 10004760
-> [  38.000000] (3:node@c-2.me) My finger table:
-> [  38.000000] (3:node@c-2.me) Start | Succ 
-> [  38.000000] (3:node@c-2.me)  533745  | 16509405 
-> [  38.000000] (3:node@c-2.me)  533746  | 533744 
-> [  38.000000] (3:node@c-2.me)  533748  | 533744 
-> [  38.000000] (3:node@c-2.me)  533752  | 533744 
-> [  38.000000] (3:node@c-2.me)  533760  | 533744 
-> [  38.000000] (3:node@c-2.me)  533776  | 533744 
-> [  38.000000] (3:node@c-2.me)  533808  | 533744 
-> [  38.000000] (3:node@c-2.me)  533872  | 533744 
-> [  38.000000] (3:node@c-2.me)  534000  | 533744 
-> [  38.000000] (3:node@c-2.me)  534256  | 533744 
-> [  38.000000] (3:node@c-2.me)  534768  | 533744 
-> [  38.000000] (3:node@c-2.me)  535792  | 533744 
-> [  38.000000] (3:node@c-2.me)  537840  | 533744 
-> [  38.000000] (3:node@c-2.me)  541936  | 533744 
-> [  38.000000] (3:node@c-2.me)  550128  | 533744 
-> [  38.000000] (3:node@c-2.me)  566512  | 533744 
-> [  38.000000] (3:node@c-2.me)  599280  | 533744 
-> [  38.000000] (3:node@c-2.me)  664816  | 533744 
-> [  38.000000] (3:node@c-2.me)  795888  | 533744 
-> [  38.000000] (3:node@c-2.me)  1058032  | 533744 
-> [  38.000000] (3:node@c-2.me)  1582320  | 533744 
-> [  38.000000] (3:node@c-2.me)  2630896  | 533744 
-> [  38.000000] (3:node@c-2.me)  4728048  | 533744 
-> [  38.000000] (3:node@c-2.me)  8922352  | 533744 
-> [  38.000000] (3:node@c-2.me) Predecessor: 10874876
-> [  50.000000] (1:node@c-0.me) My finger table:
-> [  50.000000] (1:node@c-0.me) Start | Succ 
-> [  50.000000] (1:node@c-0.me)   43  |  42 
-> [  50.000000] (1:node@c-0.me)   44  |  42 
-> [  50.000000] (1:node@c-0.me)   46  |  42 
-> [  50.000000] (1:node@c-0.me)   50  |  42 
-> [  50.000000] (1:node@c-0.me)   58  |  42 
-> [  50.000000] (1:node@c-0.me)   74  |  42 
-> [  50.000000] (1:node@c-0.me)  106  |  42 
-> [  50.000000] (1:node@c-0.me)  170  |  42 
-> [  50.000000] (1:node@c-0.me)  298  |  42 
-> [  50.000000] (1:node@c-0.me)  554  |  42 
-> [  50.000000] (1:node@c-0.me)  1066  |  42 
-> [  50.000000] (1:node@c-0.me)  2090  |  42 
-> [  50.000000] (1:node@c-0.me)  4138  |  42 
-> [  50.000000] (1:node@c-0.me)  8234  |  42 
-> [  50.000000] (1:node@c-0.me)  16426  |  42 
-> [  50.000000] (1:node@c-0.me)  32810  |  42 
-> [  50.000000] (1:node@c-0.me)  65578  |  42 
-> [  50.000000] (1:node@c-0.me)  131114  |  42 
-> [  50.000000] (1:node@c-0.me)  262186  |  42 
-> [  50.000000] (1:node@c-0.me)  524330  |  42 
-> [  50.000000] (1:node@c-0.me)  1048618  |  42 
-> [  50.000000] (1:node@c-0.me)  2097194  |  42 
-> [  50.000000] (1:node@c-0.me)  4194346  |  42 
-> [  50.000000] (1:node@c-0.me)  8388650  |  42 
-> [  50.000000] (1:node@c-0.me) Predecessor: 366680
-> [  60.000000] (1:node@c-0.me) My finger table:
-> [  60.000000] (1:node@c-0.me) Start | Succ 
-> [  60.000000] (1:node@c-0.me)   43  |  42 
-> [  60.000000] (1:node@c-0.me)   44  |  42 
-> [  60.000000] (1:node@c-0.me)   46  |  42 
-> [  60.000000] (1:node@c-0.me)   50  |  42 
-> [  60.000000] (1:node@c-0.me)   58  |  42 
-> [  60.000000] (1:node@c-0.me)   74  |  42 
-> [  60.000000] (1:node@c-0.me)  106  |  42 
-> [  60.000000] (1:node@c-0.me)  170  |  42 
-> [  60.000000] (1:node@c-0.me)  298  |  42 
-> [  60.000000] (1:node@c-0.me)  554  |  42 
-> [  60.000000] (1:node@c-0.me)  1066  |  42 
-> [  60.000000] (1:node@c-0.me)  2090  |  42 
-> [  60.000000] (1:node@c-0.me)  4138  |  42 
-> [  60.000000] (1:node@c-0.me)  8234  |  42 
-> [  60.000000] (1:node@c-0.me)  16426  |  42 
-> [  60.000000] (1:node@c-0.me)  32810  |  42 
-> [  60.000000] (1:node@c-0.me)  65578  |  42 
-> [  60.000000] (1:node@c-0.me)  131114  |  42 
-> [  60.000000] (1:node@c-0.me)  262186  |  42 
-> [  60.000000] (1:node@c-0.me)  524330  |  42 
-> [  60.000000] (1:node@c-0.me)  1048618  |  42 
-> [  60.000000] (1:node@c-0.me)  2097194  |  42 
-> [  60.000000] (1:node@c-0.me)  4194346  |  42 
-> [  60.000000] (1:node@c-0.me)  8388650  |  42 
-> [  60.000000] (1:node@c-0.me) Predecessor: 1319738
-> [  70.000000] (1:node@c-0.me) My finger table:
-> [  70.000000] (1:node@c-0.me) Start | Succ 
-> [  70.000000] (1:node@c-0.me)   43  | 1319738 
-> [  70.000000] (1:node@c-0.me)   44  |  42 
-> [  70.000000] (1:node@c-0.me)   46  |  42 
-> [  70.000000] (1:node@c-0.me)   50  |  42 
-> [  70.000000] (1:node@c-0.me)   58  |  42 
-> [  70.000000] (1:node@c-0.me)   74  |  42 
-> [  70.000000] (1:node@c-0.me)  106  |  42 
-> [  70.000000] (1:node@c-0.me)  170  |  42 
-> [  70.000000] (1:node@c-0.me)  298  |  42 
-> [  70.000000] (1:node@c-0.me)  554  |  42 
-> [  70.000000] (1:node@c-0.me)  1066  |  42 
-> [  70.000000] (1:node@c-0.me)  2090  |  42 
-> [  70.000000] (1:node@c-0.me)  4138  |  42 
-> [  70.000000] (1:node@c-0.me)  8234  |  42 
-> [  70.000000] (1:node@c-0.me)  16426  |  42 
-> [  70.000000] (1:node@c-0.me)  32810  |  42 
-> [  70.000000] (1:node@c-0.me)  65578  |  42 
-> [  70.000000] (1:node@c-0.me)  131114  |  42 
-> [  70.000000] (1:node@c-0.me)  262186  |  42 
-> [  70.000000] (1:node@c-0.me)  524330  |  42 
-> [  70.000000] (1:node@c-0.me)  1048618  |  42 
-> [  70.000000] (1:node@c-0.me)  2097194  |  42 
-> [  70.000000] (1:node@c-0.me)  4194346  |  42 
-> [  70.000000] (1:node@c-0.me)  8388650  |  42 
-> [  70.000000] (1:node@c-0.me) Predecessor: 6518808
-> [  85.000000] (4:node@c-3.me) My finger table:
-> [  85.000000] (4:node@c-3.me) Start | Succ 
-> [  85.000000] (4:node@c-3.me)  1319739  | 6518808 
-> [  85.000000] (4:node@c-3.me)  1319740  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1319742  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1319746  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1319754  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [  85.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [  85.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [  85.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [  85.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [  85.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [  85.000000] (4:node@c-3.me) Predecessor: 42
-> [  86.000000] (8:node@c-7.me) My finger table:
-> [  86.000000] (8:node@c-7.me) Start | Succ 
-> [  86.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [  86.000000] (8:node@c-7.me)  10004762  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10004764  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10004768  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10004776  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [  86.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [  86.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [  86.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [  86.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [  86.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [  86.000000] (8:node@c-7.me) Predecessor: 533744
-> [  90.000000] (7:node@c-6.me) My finger table:
-> [  90.000000] (7:node@c-6.me) Start | Succ 
-> [  90.000000] (7:node@c-6.me)  16728097  | 1319738 
-> [  90.000000] (7:node@c-6.me)  16728098  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16728100  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16728104  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16728112  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16728128  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [  90.000000] (7:node@c-6.me)  16416  | 16728096 
-> [  90.000000] (7:node@c-6.me)  81952  | 16728096 
-> [  90.000000] (7:node@c-6.me)  213024  | 16728096 
-> [  90.000000] (7:node@c-6.me)  475168  | 16728096 
-> [  90.000000] (7:node@c-6.me)  999456  | 16728096 
-> [  90.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [  90.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [  90.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [  90.000000] (7:node@c-6.me) Predecessor: 2015253
-> [ 109.000000] (9:node@c-8.me) My finger table:
-> [ 109.000000] (9:node@c-8.me) Start | Succ 
-> [ 109.000000] (9:node@c-8.me)  6518809  |  42 
-> [ 109.000000] (9:node@c-8.me)  6518810  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6518812  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6518816  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6518824  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 109.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 109.000000] (9:node@c-8.me) Predecessor: 366680
-> [ 110.000000] (9:node@c-8.me) My finger table:
-> [ 110.000000] (9:node@c-8.me) Start | Succ 
-> [ 110.000000] (9:node@c-8.me)  6518809  |  42 
-> [ 110.000000] (9:node@c-8.me)  6518810  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6518812  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6518816  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6518824  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 110.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 110.000000] (9:node@c-8.me) Predecessor: 1319738
-> [ 145.000000] (1:node@c-0.me) My finger table:
-> [ 145.000000] (1:node@c-0.me) Start | Succ 
-> [ 145.000000] (1:node@c-0.me)   43  | 1319738 
-> [ 145.000000] (1:node@c-0.me)   44  |  42 
-> [ 145.000000] (1:node@c-0.me)   46  |  42 
-> [ 145.000000] (1:node@c-0.me)   50  |  42 
-> [ 145.000000] (1:node@c-0.me)   58  |  42 
-> [ 145.000000] (1:node@c-0.me)   74  |  42 
-> [ 145.000000] (1:node@c-0.me)  106  |  42 
-> [ 145.000000] (1:node@c-0.me)  170  |  42 
-> [ 145.000000] (1:node@c-0.me)  298  |  42 
-> [ 145.000000] (1:node@c-0.me)  554  |  42 
-> [ 145.000000] (1:node@c-0.me)  1066  |  42 
-> [ 145.000000] (1:node@c-0.me)  2090  |  42 
-> [ 145.000000] (1:node@c-0.me)  4138  |  42 
-> [ 145.000000] (1:node@c-0.me)  8234  |  42 
-> [ 145.000000] (1:node@c-0.me)  16426  |  42 
-> [ 145.000000] (1:node@c-0.me)  32810  |  42 
-> [ 145.000000] (1:node@c-0.me)  65578  |  42 
-> [ 145.000000] (1:node@c-0.me)  131114  |  42 
-> [ 145.000000] (1:node@c-0.me)  262186  |  42 
-> [ 145.000000] (1:node@c-0.me)  524330  |  42 
-> [ 145.000000] (1:node@c-0.me)  1048618  |  42 
-> [ 145.000000] (1:node@c-0.me)  2097194  |  42 
-> [ 145.000000] (1:node@c-0.me)  4194346  |  42 
-> [ 145.000000] (1:node@c-0.me)  8388650  |  42 
-> [ 145.000000] (1:node@c-0.me) Predecessor: 16728096
-> [ 157.000000] (4:node@c-3.me) My finger table:
-> [ 157.000000] (4:node@c-3.me) Start | Succ 
-> [ 157.000000] (4:node@c-3.me)  1319739  | 6518808 
-> [ 157.000000] (4:node@c-3.me)  1319740  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1319742  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1319746  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1319754  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [ 157.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [ 157.000000] (4:node@c-3.me) Predecessor: 366680
-> [ 184.000000] (7:node@c-6.me) My finger table:
-> [ 184.000000] (7:node@c-6.me) Start | Succ 
-> [ 184.000000] (7:node@c-6.me)  16728097  |  42 
-> [ 184.000000] (7:node@c-6.me)  16728098  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16728100  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16728104  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16728112  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16728128  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  16416  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  81952  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  213024  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  475168  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  999456  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 184.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 184.000000] (7:node@c-6.me) Predecessor: 6518808
-> [ 202.000000] (2:node@c-1.me) My finger table:
-> [ 202.000000] (2:node@c-1.me) Start | Succ 
-> [ 202.000000] (2:node@c-1.me)  366681  | 1319738 
-> [ 202.000000] (2:node@c-1.me)  366682  | 366680 
-> [ 202.000000] (2:node@c-1.me)  366684  | 366680 
-> [ 202.000000] (2:node@c-1.me)  366688  | 366680 
-> [ 202.000000] (2:node@c-1.me)  366696  | 366680 
-> [ 202.000000] (2:node@c-1.me)  366712  | 366680 
-> [ 202.000000] (2:node@c-1.me)  366744  | 366680 
-> [ 202.000000] (2:node@c-1.me)  366808  | 366680 
-> [ 202.000000] (2:node@c-1.me)  366936  | 366680 
-> [ 202.000000] (2:node@c-1.me)  367192  | 366680 
-> [ 202.000000] (2:node@c-1.me)  367704  | 366680 
-> [ 202.000000] (2:node@c-1.me)  368728  | 366680 
-> [ 202.000000] (2:node@c-1.me)  370776  | 366680 
-> [ 202.000000] (2:node@c-1.me)  374872  | 366680 
-> [ 202.000000] (2:node@c-1.me)  383064  | 366680 
-> [ 202.000000] (2:node@c-1.me)  399448  | 366680 
-> [ 202.000000] (2:node@c-1.me)  432216  | 366680 
-> [ 202.000000] (2:node@c-1.me)  497752  | 366680 
-> [ 202.000000] (2:node@c-1.me)  628824  | 366680 
-> [ 202.000000] (2:node@c-1.me)  890968  | 366680 
-> [ 202.000000] (2:node@c-1.me)  1415256  | 366680 
-> [ 202.000000] (2:node@c-1.me)  2463832  | 366680 
-> [ 202.000000] (2:node@c-1.me)  4560984  | 366680 
-> [ 202.000000] (2:node@c-1.me)  8755288  | 366680 
-> [ 202.000000] (2:node@c-1.me) Predecessor: 42
-> [ 221.000000] (9:node@c-8.me) My finger table:
-> [ 221.000000] (9:node@c-8.me) Start | Succ 
-> [ 221.000000] (9:node@c-8.me)  6518809  | 16728096 
-> [ 221.000000] (9:node@c-8.me)  6518810  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6518812  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6518816  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6518824  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 221.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 221.000000] (9:node@c-8.me) Predecessor: 2015253
-> [ 240.000000] (6:node@c-5.me) My finger table:
-> [ 240.000000] (6:node@c-5.me) Start | Succ 
-> [ 240.000000] (6:node@c-5.me)  10874877  | 533744 
-> [ 240.000000] (6:node@c-5.me)  10874878  | 533744 
-> [ 240.000000] (6:node@c-5.me)  10874880  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10874884  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10874892  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10874908  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 240.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 240.000000] (6:node@c-5.me) Predecessor: -1
-> [ 247.000000] (5:node@c-4.me) My finger table:
-> [ 247.000000] (5:node@c-4.me) Start | Succ 
-> [ 247.000000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 247.000000] (5:node@c-4.me)  16509407  | 16728096 
-> [ 247.000000] (5:node@c-4.me)  16509409  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16509413  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16509421  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  256477  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  780765  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 247.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 247.000000] (5:node@c-4.me) Predecessor: 10004760
-> [ 250.000000] (1:node@c-0.me) My finger table:
-> [ 250.000000] (1:node@c-0.me) Start | Succ 
-> [ 250.000000] (1:node@c-0.me)   43  | 366680 
-> [ 250.000000] (1:node@c-0.me)   44  | 366680 
-> [ 250.000000] (1:node@c-0.me)   46  |  42 
-> [ 250.000000] (1:node@c-0.me)   50  |  42 
-> [ 250.000000] (1:node@c-0.me)   58  |  42 
-> [ 250.000000] (1:node@c-0.me)   74  |  42 
-> [ 250.000000] (1:node@c-0.me)  106  |  42 
-> [ 250.000000] (1:node@c-0.me)  170  |  42 
-> [ 250.000000] (1:node@c-0.me)  298  |  42 
-> [ 250.000000] (1:node@c-0.me)  554  |  42 
-> [ 250.000000] (1:node@c-0.me)  1066  |  42 
-> [ 250.000000] (1:node@c-0.me)  2090  |  42 
-> [ 250.000000] (1:node@c-0.me)  4138  |  42 
-> [ 250.000000] (1:node@c-0.me)  8234  |  42 
-> [ 250.000000] (1:node@c-0.me)  16426  |  42 
-> [ 250.000000] (1:node@c-0.me)  32810  |  42 
-> [ 250.000000] (1:node@c-0.me)  65578  |  42 
-> [ 250.000000] (1:node@c-0.me)  131114  |  42 
-> [ 250.000000] (1:node@c-0.me)  262186  |  42 
-> [ 250.000000] (1:node@c-0.me)  524330  |  42 
-> [ 250.000000] (1:node@c-0.me)  1048618  |  42 
-> [ 250.000000] (1:node@c-0.me)  2097194  |  42 
-> [ 250.000000] (1:node@c-0.me)  4194346  |  42 
-> [ 250.000000] (1:node@c-0.me)  8388650  |  42 
-> [ 250.000000] (1:node@c-0.me) Predecessor: 16728096
-> [ 251.000000] (3:node@c-2.me) My finger table:
-> [ 251.000000] (3:node@c-2.me) Start | Succ 
-> [ 251.000000] (3:node@c-2.me)  533745  | 10004760 
-> [ 251.000000] (3:node@c-2.me)  533746  | 10004760 
-> [ 251.000000] (3:node@c-2.me)  533748  | 533744 
-> [ 251.000000] (3:node@c-2.me)  533752  | 533744 
-> [ 251.000000] (3:node@c-2.me)  533760  | 533744 
-> [ 251.000000] (3:node@c-2.me)  533776  | 533744 
-> [ 251.000000] (3:node@c-2.me)  533808  | 533744 
-> [ 251.000000] (3:node@c-2.me)  533872  | 533744 
-> [ 251.000000] (3:node@c-2.me)  534000  | 533744 
-> [ 251.000000] (3:node@c-2.me)  534256  | 533744 
-> [ 251.000000] (3:node@c-2.me)  534768  | 533744 
-> [ 251.000000] (3:node@c-2.me)  535792  | 533744 
-> [ 251.000000] (3:node@c-2.me)  537840  | 533744 
-> [ 251.000000] (3:node@c-2.me)  541936  | 533744 
-> [ 251.000000] (3:node@c-2.me)  550128  | 533744 
-> [ 251.000000] (3:node@c-2.me)  566512  | 533744 
-> [ 251.000000] (3:node@c-2.me)  599280  | 533744 
-> [ 251.000000] (3:node@c-2.me)  664816  | 533744 
-> [ 251.000000] (3:node@c-2.me)  795888  | 533744 
-> [ 251.000000] (3:node@c-2.me)  1058032  | 533744 
-> [ 251.000000] (3:node@c-2.me)  1582320  | 533744 
-> [ 251.000000] (3:node@c-2.me)  2630896  | 533744 
-> [ 251.000000] (3:node@c-2.me)  4728048  | 533744 
-> [ 251.000000] (3:node@c-2.me)  8922352  | 533744 
-> [ 251.000000] (3:node@c-2.me) Predecessor: 10874876
-> [ 253.000000] (8:node@c-7.me) My finger table:
-> [ 253.000000] (8:node@c-7.me) Start | Succ 
-> [ 253.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [ 253.000000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 253.000000] (8:node@c-7.me)  10004764  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10004768  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10004776  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 253.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 253.000000] (8:node@c-7.me) Predecessor: 533744
-> [ 263.000000] (2:node@c-1.me) My finger table:
-> [ 263.000000] (2:node@c-1.me) Start | Succ 
-> [ 263.000000] (2:node@c-1.me)  366681  | 1319738 
-> [ 263.000000] (2:node@c-1.me)  366682  | 1319738 
-> [ 263.000000] (2:node@c-1.me)  366684  | 366680 
-> [ 263.000000] (2:node@c-1.me)  366688  | 366680 
-> [ 263.000000] (2:node@c-1.me)  366696  | 366680 
-> [ 263.000000] (2:node@c-1.me)  366712  | 366680 
-> [ 263.000000] (2:node@c-1.me)  366744  | 366680 
-> [ 263.000000] (2:node@c-1.me)  366808  | 366680 
-> [ 263.000000] (2:node@c-1.me)  366936  | 366680 
-> [ 263.000000] (2:node@c-1.me)  367192  | 366680 
-> [ 263.000000] (2:node@c-1.me)  367704  | 366680 
-> [ 263.000000] (2:node@c-1.me)  368728  | 366680 
-> [ 263.000000] (2:node@c-1.me)  370776  | 366680 
-> [ 263.000000] (2:node@c-1.me)  374872  | 366680 
-> [ 263.000000] (2:node@c-1.me)  383064  | 366680 
-> [ 263.000000] (2:node@c-1.me)  399448  | 366680 
-> [ 263.000000] (2:node@c-1.me)  432216  | 366680 
-> [ 263.000000] (2:node@c-1.me)  497752  | 366680 
-> [ 263.000000] (2:node@c-1.me)  628824  | 366680 
-> [ 263.000000] (2:node@c-1.me)  890968  | 366680 
-> [ 263.000000] (2:node@c-1.me)  1415256  | 366680 
-> [ 263.000000] (2:node@c-1.me)  2463832  | 366680 
-> [ 263.000000] (2:node@c-1.me)  4560984  | 366680 
-> [ 263.000000] (2:node@c-1.me)  8755288  | 366680 
-> [ 263.000000] (2:node@c-1.me) Predecessor: 42
-> [ 268.000000] (4:node@c-3.me) My finger table:
-> [ 268.000000] (4:node@c-3.me) Start | Succ 
-> [ 268.000000] (4:node@c-3.me)  1319739  | 2015253 
-> [ 268.000000] (4:node@c-3.me)  1319740  | 2015253 
-> [ 268.000000] (4:node@c-3.me)  1319742  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1319746  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1319754  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [ 268.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [ 268.000000] (4:node@c-3.me) Predecessor: 366680
-> [ 269.000000] (10:node@c-9.me) My finger table:
-> [ 269.000000] (10:node@c-9.me) Start | Succ 
-> [ 269.000000] (10:node@c-9.me)  2015254  | 6518808 
-> [ 269.000000] (10:node@c-9.me)  2015255  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2015257  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2015261  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2015269  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2015285  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2015317  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 269.000000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 269.000000] (10:node@c-9.me) Predecessor: 1319738
-> [ 274.000000] (10:node@c-9.me) My finger table:
-> [ 274.000000] (10:node@c-9.me) Start | Succ 
-> [ 274.000000] (10:node@c-9.me)  2015254  | 6518808 
-> [ 274.000000] (10:node@c-9.me)  2015255  | 6518808 
-> [ 274.000000] (10:node@c-9.me)  2015257  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2015261  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2015269  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2015285  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2015317  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 274.000000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 274.000000] (10:node@c-9.me) Predecessor: 1319738
-> [ 274.000000] (9:node@c-8.me) My finger table:
-> [ 274.000000] (9:node@c-8.me) Start | Succ 
-> [ 274.000000] (9:node@c-8.me)  6518809  | 16728096 
-> [ 274.000000] (9:node@c-8.me)  6518810  | 16728096 
-> [ 274.000000] (9:node@c-8.me)  6518812  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6518816  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6518824  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 274.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 274.000000] (9:node@c-8.me) Predecessor: 2015253
-> [ 275.000000] (7:node@c-6.me) My finger table:
-> [ 275.000000] (7:node@c-6.me) Start | Succ 
-> [ 275.000000] (7:node@c-6.me)  16728097  |  42 
-> [ 275.000000] (7:node@c-6.me)  16728098  |  42 
-> [ 275.000000] (7:node@c-6.me)  16728100  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16728104  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16728112  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16728128  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  16416  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  81952  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  213024  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  475168  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  999456  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 275.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 275.000000] (7:node@c-6.me) Predecessor: 6518808
-> [ 288.000000] (7:node@c-6.me) My finger table:
-> [ 288.000000] (7:node@c-6.me) Start | Succ 
-> [ 288.000000] (7:node@c-6.me)  16728097  |  42 
-> [ 288.000000] (7:node@c-6.me)  16728098  |  42 
-> [ 288.000000] (7:node@c-6.me)  16728100  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16728104  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16728112  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16728128  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  16416  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  81952  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  213024  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  475168  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  999456  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 288.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 288.000000] (7:node@c-6.me) Predecessor: 16509405
-> [ 361.000000] (8:node@c-7.me) My finger table:
-> [ 361.000000] (8:node@c-7.me) Start | Succ 
-> [ 361.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [ 361.000000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 361.000000] (8:node@c-7.me)  10004764  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10004768  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10004776  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 361.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 361.000000] (8:node@c-7.me) Predecessor: 6518808
-> [ 364.000000] (6:node@c-5.me) My finger table:
-> [ 364.000000] (6:node@c-5.me) Start | Succ 
-> [ 364.000000] (6:node@c-5.me)  10874877  | 533744 
-> [ 364.000000] (6:node@c-5.me)  10874878  | 533744 
-> [ 364.000000] (6:node@c-5.me)  10874880  | 533744 
-> [ 364.000000] (6:node@c-5.me)  10874884  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10874892  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10874908  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 364.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 364.000000] (6:node@c-5.me) Predecessor: -1
-> [ 371.000000] (3:node@c-2.me) My finger table:
-> [ 371.000000] (3:node@c-2.me) Start | Succ 
-> [ 371.000000] (3:node@c-2.me)  533745  | 10004760 
-> [ 371.000000] (3:node@c-2.me)  533746  | 10004760 
-> [ 371.000000] (3:node@c-2.me)  533748  | 10004760 
-> [ 371.000000] (3:node@c-2.me)  533752  | 533744 
-> [ 371.000000] (3:node@c-2.me)  533760  | 533744 
-> [ 371.000000] (3:node@c-2.me)  533776  | 533744 
-> [ 371.000000] (3:node@c-2.me)  533808  | 533744 
-> [ 371.000000] (3:node@c-2.me)  533872  | 533744 
-> [ 371.000000] (3:node@c-2.me)  534000  | 533744 
-> [ 371.000000] (3:node@c-2.me)  534256  | 533744 
-> [ 371.000000] (3:node@c-2.me)  534768  | 533744 
-> [ 371.000000] (3:node@c-2.me)  535792  | 533744 
-> [ 371.000000] (3:node@c-2.me)  537840  | 533744 
-> [ 371.000000] (3:node@c-2.me)  541936  | 533744 
-> [ 371.000000] (3:node@c-2.me)  550128  | 533744 
-> [ 371.000000] (3:node@c-2.me)  566512  | 533744 
-> [ 371.000000] (3:node@c-2.me)  599280  | 533744 
-> [ 371.000000] (3:node@c-2.me)  664816  | 533744 
-> [ 371.000000] (3:node@c-2.me)  795888  | 533744 
-> [ 371.000000] (3:node@c-2.me)  1058032  | 533744 
-> [ 371.000000] (3:node@c-2.me)  1582320  | 533744 
-> [ 371.000000] (3:node@c-2.me)  2630896  | 533744 
-> [ 371.000000] (3:node@c-2.me)  4728048  | 533744 
-> [ 371.000000] (3:node@c-2.me)  8922352  | 533744 
-> [ 371.000000] (3:node@c-2.me) Predecessor: 10874876
-> [ 372.000000] (1:node@c-0.me) My finger table:
-> [ 372.000000] (1:node@c-0.me) Start | Succ 
-> [ 372.000000] (1:node@c-0.me)   43  | 366680 
-> [ 372.000000] (1:node@c-0.me)   44  | 366680 
-> [ 372.000000] (1:node@c-0.me)   46  | 366680 
-> [ 372.000000] (1:node@c-0.me)   50  |  42 
-> [ 372.000000] (1:node@c-0.me)   58  |  42 
-> [ 372.000000] (1:node@c-0.me)   74  |  42 
-> [ 372.000000] (1:node@c-0.me)  106  |  42 
-> [ 372.000000] (1:node@c-0.me)  170  |  42 
-> [ 372.000000] (1:node@c-0.me)  298  |  42 
-> [ 372.000000] (1:node@c-0.me)  554  |  42 
-> [ 372.000000] (1:node@c-0.me)  1066  |  42 
-> [ 372.000000] (1:node@c-0.me)  2090  |  42 
-> [ 372.000000] (1:node@c-0.me)  4138  |  42 
-> [ 372.000000] (1:node@c-0.me)  8234  |  42 
-> [ 372.000000] (1:node@c-0.me)  16426  |  42 
-> [ 372.000000] (1:node@c-0.me)  32810  |  42 
-> [ 372.000000] (1:node@c-0.me)  65578  |  42 
-> [ 372.000000] (1:node@c-0.me)  131114  |  42 
-> [ 372.000000] (1:node@c-0.me)  262186  |  42 
-> [ 372.000000] (1:node@c-0.me)  524330  |  42 
-> [ 372.000000] (1:node@c-0.me)  1048618  |  42 
-> [ 372.000000] (1:node@c-0.me)  2097194  |  42 
-> [ 372.000000] (1:node@c-0.me)  4194346  |  42 
-> [ 372.000000] (1:node@c-0.me)  8388650  |  42 
-> [ 372.000000] (1:node@c-0.me) Predecessor: 16728096
-> [ 374.000000] (8:node@c-7.me) My finger table:
-> [ 374.000000] (8:node@c-7.me) Start | Succ 
-> [ 374.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [ 374.000000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 374.000000] (8:node@c-7.me)  10004764  | 16509405 
-> [ 374.000000] (8:node@c-7.me)  10004768  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10004776  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 374.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 374.000000] (8:node@c-7.me) Predecessor: 6518808
-> [ 375.000000] (5:node@c-4.me) My finger table:
-> [ 375.000000] (5:node@c-4.me) Start | Succ 
-> [ 375.000000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 375.000000] (5:node@c-4.me)  16509407  | 16728096 
-> [ 375.000000] (5:node@c-4.me)  16509409  | 16728096 
-> [ 375.000000] (5:node@c-4.me)  16509413  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16509421  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  256477  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  780765  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 375.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 375.000000] (5:node@c-4.me) Predecessor: 10004760
-> [ 395.000000] (9:node@c-8.me) My finger table:
-> [ 395.000000] (9:node@c-8.me) Start | Succ 
-> [ 395.000000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 395.000000] (9:node@c-8.me)  6518810  | 16728096 
-> [ 395.000000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 395.000000] (9:node@c-8.me)  6518816  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6518824  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 395.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 395.000000] (9:node@c-8.me) Predecessor: 2015253
-> [ 398.000000] (7:node@c-6.me) My finger table:
-> [ 398.000000] (7:node@c-6.me) Start | Succ 
-> [ 398.000000] (7:node@c-6.me)  16728097  |  42 
-> [ 398.000000] (7:node@c-6.me)  16728098  |  42 
-> [ 398.000000] (7:node@c-6.me)  16728100  |  42 
-> [ 398.000000] (7:node@c-6.me)  16728104  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16728112  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16728128  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  16416  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  81952  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  213024  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  475168  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  999456  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 398.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 398.000000] (7:node@c-6.me) Predecessor: 16509405
-> [ 405.000000] (4:node@c-3.me) My finger table:
-> [ 405.000000] (4:node@c-3.me) Start | Succ 
-> [ 405.000000] (4:node@c-3.me)  1319739  | 2015253 
-> [ 405.000000] (4:node@c-3.me)  1319740  | 2015253 
-> [ 405.000000] (4:node@c-3.me)  1319742  | 2015253 
-> [ 405.000000] (4:node@c-3.me)  1319746  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1319754  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [ 405.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [ 405.000000] (4:node@c-3.me) Predecessor: 366680
-> [ 411.000000] (2:node@c-1.me) My finger table:
-> [ 411.000000] (2:node@c-1.me) Start | Succ 
-> [ 411.000000] (2:node@c-1.me)  366681  | 1319738 
-> [ 411.000000] (2:node@c-1.me)  366682  | 1319738 
-> [ 411.000000] (2:node@c-1.me)  366684  | 1319738 
-> [ 411.000000] (2:node@c-1.me)  366688  | 366680 
-> [ 411.000000] (2:node@c-1.me)  366696  | 366680 
-> [ 411.000000] (2:node@c-1.me)  366712  | 366680 
-> [ 411.000000] (2:node@c-1.me)  366744  | 366680 
-> [ 411.000000] (2:node@c-1.me)  366808  | 366680 
-> [ 411.000000] (2:node@c-1.me)  366936  | 366680 
-> [ 411.000000] (2:node@c-1.me)  367192  | 366680 
-> [ 411.000000] (2:node@c-1.me)  367704  | 366680 
-> [ 411.000000] (2:node@c-1.me)  368728  | 366680 
-> [ 411.000000] (2:node@c-1.me)  370776  | 366680 
-> [ 411.000000] (2:node@c-1.me)  374872  | 366680 
-> [ 411.000000] (2:node@c-1.me)  383064  | 366680 
-> [ 411.000000] (2:node@c-1.me)  399448  | 366680 
-> [ 411.000000] (2:node@c-1.me)  432216  | 366680 
-> [ 411.000000] (2:node@c-1.me)  497752  | 366680 
-> [ 411.000000] (2:node@c-1.me)  628824  | 366680 
-> [ 411.000000] (2:node@c-1.me)  890968  | 366680 
-> [ 411.000000] (2:node@c-1.me)  1415256  | 366680 
-> [ 411.000000] (2:node@c-1.me)  2463832  | 366680 
-> [ 411.000000] (2:node@c-1.me)  4560984  | 366680 
-> [ 411.000000] (2:node@c-1.me)  8755288  | 366680 
-> [ 411.000000] (2:node@c-1.me) Predecessor: 42
-> [ 426.000000] (10:node@c-9.me) My finger table:
-> [ 426.000000] (10:node@c-9.me) Start | Succ 
-> [ 426.000000] (10:node@c-9.me)  2015254  | 6518808 
-> [ 426.000000] (10:node@c-9.me)  2015255  | 6518808 
-> [ 426.000000] (10:node@c-9.me)  2015257  | 6518808 
-> [ 426.000000] (10:node@c-9.me)  2015261  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2015269  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2015285  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2015317  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 426.000000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 426.000000] (10:node@c-9.me) Predecessor: 1319738
-> [ 486.000000] (6:node@c-5.me) My finger table:
-> [ 486.000000] (6:node@c-5.me) Start | Succ 
-> [ 486.000000] (6:node@c-5.me)  10874877  | 533744 
-> [ 486.000000] (6:node@c-5.me)  10874878  | 533744 
-> [ 486.000000] (6:node@c-5.me)  10874880  | 533744 
-> [ 486.000000] (6:node@c-5.me)  10874884  | 533744 
-> [ 486.000000] (6:node@c-5.me)  10874892  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10874908  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 486.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 486.000000] (6:node@c-5.me) Predecessor: -1
-> [ 491.000000] (4:node@c-3.me) My finger table:
-> [ 491.000000] (4:node@c-3.me) Start | Succ 
-> [ 491.000000] (4:node@c-3.me)  1319739  | 2015253 
-> [ 491.000000] (4:node@c-3.me)  1319740  | 2015253 
-> [ 491.000000] (4:node@c-3.me)  1319742  | 2015253 
-> [ 491.000000] (4:node@c-3.me)  1319746  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1319754  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [ 491.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [ 491.000000] (4:node@c-3.me) Predecessor: 533744
-> [ 492.000000] (1:node@c-0.me) My finger table:
-> [ 492.000000] (1:node@c-0.me) Start | Succ 
-> [ 492.000000] (1:node@c-0.me)   43  | 366680 
-> [ 492.000000] (1:node@c-0.me)   44  | 366680 
-> [ 492.000000] (1:node@c-0.me)   46  | 366680 
-> [ 492.000000] (1:node@c-0.me)   50  | 366680 
-> [ 492.000000] (1:node@c-0.me)   58  |  42 
-> [ 492.000000] (1:node@c-0.me)   74  |  42 
-> [ 492.000000] (1:node@c-0.me)  106  |  42 
-> [ 492.000000] (1:node@c-0.me)  170  |  42 
-> [ 492.000000] (1:node@c-0.me)  298  |  42 
-> [ 492.000000] (1:node@c-0.me)  554  |  42 
-> [ 492.000000] (1:node@c-0.me)  1066  |  42 
-> [ 492.000000] (1:node@c-0.me)  2090  |  42 
-> [ 492.000000] (1:node@c-0.me)  4138  |  42 
-> [ 492.000000] (1:node@c-0.me)  8234  |  42 
-> [ 492.000000] (1:node@c-0.me)  16426  |  42 
-> [ 492.000000] (1:node@c-0.me)  32810  |  42 
-> [ 492.000000] (1:node@c-0.me)  65578  |  42 
-> [ 492.000000] (1:node@c-0.me)  131114  |  42 
-> [ 492.000000] (1:node@c-0.me)  262186  |  42 
-> [ 492.000000] (1:node@c-0.me)  524330  |  42 
-> [ 492.000000] (1:node@c-0.me)  1048618  |  42 
-> [ 492.000000] (1:node@c-0.me)  2097194  |  42 
-> [ 492.000000] (1:node@c-0.me)  4194346  |  42 
-> [ 492.000000] (1:node@c-0.me)  8388650  |  42 
-> [ 492.000000] (1:node@c-0.me) Predecessor: 16728096
-> [ 495.000000] (3:node@c-2.me) My finger table:
-> [ 495.000000] (3:node@c-2.me) Start | Succ 
-> [ 495.000000] (3:node@c-2.me)  533745  | 1319738 
-> [ 495.000000] (3:node@c-2.me)  533746  | 10004760 
-> [ 495.000000] (3:node@c-2.me)  533748  | 10004760 
-> [ 495.000000] (3:node@c-2.me)  533752  | 1319738 
-> [ 495.000000] (3:node@c-2.me)  533760  | 533744 
-> [ 495.000000] (3:node@c-2.me)  533776  | 533744 
-> [ 495.000000] (3:node@c-2.me)  533808  | 533744 
-> [ 495.000000] (3:node@c-2.me)  533872  | 533744 
-> [ 495.000000] (3:node@c-2.me)  534000  | 533744 
-> [ 495.000000] (3:node@c-2.me)  534256  | 533744 
-> [ 495.000000] (3:node@c-2.me)  534768  | 533744 
-> [ 495.000000] (3:node@c-2.me)  535792  | 533744 
-> [ 495.000000] (3:node@c-2.me)  537840  | 533744 
-> [ 495.000000] (3:node@c-2.me)  541936  | 533744 
-> [ 495.000000] (3:node@c-2.me)  550128  | 533744 
-> [ 495.000000] (3:node@c-2.me)  566512  | 533744 
-> [ 495.000000] (3:node@c-2.me)  599280  | 533744 
-> [ 495.000000] (3:node@c-2.me)  664816  | 533744 
-> [ 495.000000] (3:node@c-2.me)  795888  | 533744 
-> [ 495.000000] (3:node@c-2.me)  1058032  | 533744 
-> [ 495.000000] (3:node@c-2.me)  1582320  | 533744 
-> [ 495.000000] (3:node@c-2.me)  2630896  | 533744 
-> [ 495.000000] (3:node@c-2.me)  4728048  | 533744 
-> [ 495.000000] (3:node@c-2.me)  8922352  | 533744 
-> [ 495.000000] (3:node@c-2.me) Predecessor: 10874876
-> [ 502.000000] (8:node@c-7.me) My finger table:
-> [ 502.000000] (8:node@c-7.me) Start | Succ 
-> [ 502.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [ 502.000000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 502.000000] (8:node@c-7.me)  10004764  | 16509405 
-> [ 502.000000] (8:node@c-7.me)  10004768  | 16509405 
-> [ 502.000000] (8:node@c-7.me)  10004776  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 502.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 502.000000] (8:node@c-7.me) Predecessor: 6518808
-> [ 505.000000] (5:node@c-4.me) My finger table:
-> [ 505.000000] (5:node@c-4.me) Start | Succ 
-> [ 505.000000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 505.000000] (5:node@c-4.me)  16509407  | 16728096 
-> [ 505.000000] (5:node@c-4.me)  16509409  | 16728096 
-> [ 505.000000] (5:node@c-4.me)  16509413  | 16728096 
-> [ 505.000000] (5:node@c-4.me)  16509421  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  256477  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  780765  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 505.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 505.000000] (5:node@c-4.me) Predecessor: 10004760
-> [ 521.000000] (7:node@c-6.me) My finger table:
-> [ 521.000000] (7:node@c-6.me) Start | Succ 
-> [ 521.000000] (7:node@c-6.me)  16728097  |  42 
-> [ 521.000000] (7:node@c-6.me)  16728098  |  42 
-> [ 521.000000] (7:node@c-6.me)  16728100  |  42 
-> [ 521.000000] (7:node@c-6.me)  16728104  |  42 
-> [ 521.000000] (7:node@c-6.me)  16728112  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16728128  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  16416  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  81952  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  213024  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  475168  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  999456  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 521.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 521.000000] (7:node@c-6.me) Predecessor: 16509405
-> [ 535.000000] (9:node@c-8.me) My finger table:
-> [ 535.000000] (9:node@c-8.me) Start | Succ 
-> [ 535.000000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 535.000000] (9:node@c-8.me)  6518810  | 16728096 
-> [ 535.000000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 535.000000] (9:node@c-8.me)  6518816  | 10004760 
-> [ 535.000000] (9:node@c-8.me)  6518824  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 535.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 535.000000] (9:node@c-8.me) Predecessor: 2015253
-> [ 537.000000] (4:node@c-3.me) My finger table:
-> [ 537.000000] (4:node@c-3.me) Start | Succ 
-> [ 537.000000] (4:node@c-3.me)  1319739  | 2015253 
-> [ 537.000000] (4:node@c-3.me)  1319740  | 2015253 
-> [ 537.000000] (4:node@c-3.me)  1319742  | 2015253 
-> [ 537.000000] (4:node@c-3.me)  1319746  | 2015253 
-> [ 537.000000] (4:node@c-3.me)  1319754  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [ 537.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [ 537.000000] (4:node@c-3.me) Predecessor: 533744
-> [ 539.000000] (2:node@c-1.me) My finger table:
-> [ 539.000000] (2:node@c-1.me) Start | Succ 
-> [ 539.000000] (2:node@c-1.me)  366681  | 533744 
-> [ 539.000000] (2:node@c-1.me)  366682  | 1319738 
-> [ 539.000000] (2:node@c-1.me)  366684  | 1319738 
-> [ 539.000000] (2:node@c-1.me)  366688  | 533744 
-> [ 539.000000] (2:node@c-1.me)  366696  | 366680 
-> [ 539.000000] (2:node@c-1.me)  366712  | 366680 
-> [ 539.000000] (2:node@c-1.me)  366744  | 366680 
-> [ 539.000000] (2:node@c-1.me)  366808  | 366680 
-> [ 539.000000] (2:node@c-1.me)  366936  | 366680 
-> [ 539.000000] (2:node@c-1.me)  367192  | 366680 
-> [ 539.000000] (2:node@c-1.me)  367704  | 366680 
-> [ 539.000000] (2:node@c-1.me)  368728  | 366680 
-> [ 539.000000] (2:node@c-1.me)  370776  | 366680 
-> [ 539.000000] (2:node@c-1.me)  374872  | 366680 
-> [ 539.000000] (2:node@c-1.me)  383064  | 366680 
-> [ 539.000000] (2:node@c-1.me)  399448  | 366680 
-> [ 539.000000] (2:node@c-1.me)  432216  | 366680 
-> [ 539.000000] (2:node@c-1.me)  497752  | 366680 
-> [ 539.000000] (2:node@c-1.me)  628824  | 366680 
-> [ 539.000000] (2:node@c-1.me)  890968  | 366680 
-> [ 539.000000] (2:node@c-1.me)  1415256  | 366680 
-> [ 539.000000] (2:node@c-1.me)  2463832  | 366680 
-> [ 539.000000] (2:node@c-1.me)  4560984  | 366680 
-> [ 539.000000] (2:node@c-1.me)  8755288  | 366680 
-> [ 539.000000] (2:node@c-1.me) Predecessor: 42
-> [ 540.000000] (3:node@c-2.me) My finger table:
-> [ 540.000000] (3:node@c-2.me) Start | Succ 
-> [ 540.000000] (3:node@c-2.me)  533745  | 1319738 
-> [ 540.000000] (3:node@c-2.me)  533746  | 10004760 
-> [ 540.000000] (3:node@c-2.me)  533748  | 10004760 
-> [ 540.000000] (3:node@c-2.me)  533752  | 1319738 
-> [ 540.000000] (3:node@c-2.me)  533760  | 533744 
-> [ 540.000000] (3:node@c-2.me)  533776  | 533744 
-> [ 540.000000] (3:node@c-2.me)  533808  | 533744 
-> [ 540.000000] (3:node@c-2.me)  533872  | 533744 
-> [ 540.000000] (3:node@c-2.me)  534000  | 533744 
-> [ 540.000000] (3:node@c-2.me)  534256  | 533744 
-> [ 540.000000] (3:node@c-2.me)  534768  | 533744 
-> [ 540.000000] (3:node@c-2.me)  535792  | 533744 
-> [ 540.000000] (3:node@c-2.me)  537840  | 533744 
-> [ 540.000000] (3:node@c-2.me)  541936  | 533744 
-> [ 540.000000] (3:node@c-2.me)  550128  | 533744 
-> [ 540.000000] (3:node@c-2.me)  566512  | 533744 
-> [ 540.000000] (3:node@c-2.me)  599280  | 533744 
-> [ 540.000000] (3:node@c-2.me)  664816  | 533744 
-> [ 540.000000] (3:node@c-2.me)  795888  | 533744 
-> [ 540.000000] (3:node@c-2.me)  1058032  | 533744 
-> [ 540.000000] (3:node@c-2.me)  1582320  | 533744 
-> [ 540.000000] (3:node@c-2.me)  2630896  | 533744 
-> [ 540.000000] (3:node@c-2.me)  4728048  | 533744 
-> [ 540.000000] (3:node@c-2.me)  8922352  | 533744 
-> [ 540.000000] (3:node@c-2.me) Predecessor: 366680
-> [ 567.000000] (10:node@c-9.me) My finger table:
-> [ 567.000000] (10:node@c-9.me) Start | Succ 
-> [ 567.000000] (10:node@c-9.me)  2015254  | 6518808 
-> [ 567.000000] (10:node@c-9.me)  2015255  | 6518808 
-> [ 567.000000] (10:node@c-9.me)  2015257  | 6518808 
-> [ 567.000000] (10:node@c-9.me)  2015261  | 6518808 
-> [ 567.000000] (10:node@c-9.me)  2015269  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2015285  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2015317  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 567.000000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 567.000000] (10:node@c-9.me) Predecessor: 1319738
-> [ 613.000000] (1:node@c-0.me) My finger table:
-> [ 613.000000] (1:node@c-0.me) Start | Succ 
-> [ 613.000000] (1:node@c-0.me)   43  | 366680 
-> [ 613.000000] (1:node@c-0.me)   44  | 366680 
-> [ 613.000000] (1:node@c-0.me)   46  | 366680 
-> [ 613.000000] (1:node@c-0.me)   50  | 366680 
-> [ 613.000000] (1:node@c-0.me)   58  | 366680 
-> [ 613.000000] (1:node@c-0.me)   74  |  42 
-> [ 613.000000] (1:node@c-0.me)  106  |  42 
-> [ 613.000000] (1:node@c-0.me)  170  |  42 
-> [ 613.000000] (1:node@c-0.me)  298  |  42 
-> [ 613.000000] (1:node@c-0.me)  554  |  42 
-> [ 613.000000] (1:node@c-0.me)  1066  |  42 
-> [ 613.000000] (1:node@c-0.me)  2090  |  42 
-> [ 613.000000] (1:node@c-0.me)  4138  |  42 
-> [ 613.000000] (1:node@c-0.me)  8234  |  42 
-> [ 613.000000] (1:node@c-0.me)  16426  |  42 
-> [ 613.000000] (1:node@c-0.me)  32810  |  42 
-> [ 613.000000] (1:node@c-0.me)  65578  |  42 
-> [ 613.000000] (1:node@c-0.me)  131114  |  42 
-> [ 613.000000] (1:node@c-0.me)  262186  |  42 
-> [ 613.000000] (1:node@c-0.me)  524330  |  42 
-> [ 613.000000] (1:node@c-0.me)  1048618  |  42 
-> [ 613.000000] (1:node@c-0.me)  2097194  |  42 
-> [ 613.000000] (1:node@c-0.me)  4194346  |  42 
-> [ 613.000000] (1:node@c-0.me)  8388650  |  42 
-> [ 613.000000] (1:node@c-0.me) Predecessor: 16728096
-> [ 616.000000] (3:node@c-2.me) My finger table:
-> [ 616.000000] (3:node@c-2.me) Start | Succ 
-> [ 616.000000] (3:node@c-2.me)  533745  | 1319738 
-> [ 616.000000] (3:node@c-2.me)  533746  | 10004760 
-> [ 616.000000] (3:node@c-2.me)  533748  | 10004760 
-> [ 616.000000] (3:node@c-2.me)  533752  | 1319738 
-> [ 616.000000] (3:node@c-2.me)  533760  | 1319738 
-> [ 616.000000] (3:node@c-2.me)  533776  | 533744 
-> [ 616.000000] (3:node@c-2.me)  533808  | 533744 
-> [ 616.000000] (3:node@c-2.me)  533872  | 533744 
-> [ 616.000000] (3:node@c-2.me)  534000  | 533744 
-> [ 616.000000] (3:node@c-2.me)  534256  | 533744 
-> [ 616.000000] (3:node@c-2.me)  534768  | 533744 
-> [ 616.000000] (3:node@c-2.me)  535792  | 533744 
-> [ 616.000000] (3:node@c-2.me)  537840  | 533744 
-> [ 616.000000] (3:node@c-2.me)  541936  | 533744 
-> [ 616.000000] (3:node@c-2.me)  550128  | 533744 
-> [ 616.000000] (3:node@c-2.me)  566512  | 533744 
-> [ 616.000000] (3:node@c-2.me)  599280  | 533744 
-> [ 616.000000] (3:node@c-2.me)  664816  | 533744 
-> [ 616.000000] (3:node@c-2.me)  795888  | 533744 
-> [ 616.000000] (3:node@c-2.me)  1058032  | 533744 
-> [ 616.000000] (3:node@c-2.me)  1582320  | 533744 
-> [ 616.000000] (3:node@c-2.me)  2630896  | 533744 
-> [ 616.000000] (3:node@c-2.me)  4728048  | 533744 
-> [ 616.000000] (3:node@c-2.me)  8922352  | 533744 
-> [ 616.000000] (3:node@c-2.me) Predecessor: 366680
-> [ 620.000000] (6:node@c-5.me) My finger table:
-> [ 620.000000] (6:node@c-5.me) Start | Succ 
-> [ 620.000000] (6:node@c-5.me)  10874877  | 16728096 
-> [ 620.000000] (6:node@c-5.me)  10874878  | 533744 
-> [ 620.000000] (6:node@c-5.me)  10874880  | 533744 
-> [ 620.000000] (6:node@c-5.me)  10874884  | 533744 
-> [ 620.000000] (6:node@c-5.me)  10874892  | 16728096 
-> [ 620.000000] (6:node@c-5.me)  10874908  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 620.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 620.000000] (6:node@c-5.me) Predecessor: -1
-> [ 629.000000] (8:node@c-7.me) My finger table:
-> [ 629.000000] (8:node@c-7.me) Start | Succ 
-> [ 629.000000] (8:node@c-7.me)  10004761  | 16509405 
-> [ 629.000000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 629.000000] (8:node@c-7.me)  10004764  | 16509405 
-> [ 629.000000] (8:node@c-7.me)  10004768  | 16509405 
-> [ 629.000000] (8:node@c-7.me)  10004776  | 16509405 
-> [ 629.000000] (8:node@c-7.me)  10004792  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 629.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 629.000000] (8:node@c-7.me) Predecessor: 6518808
-> [ 630.000000] (5:node@c-4.me) My finger table:
-> [ 630.000000] (5:node@c-4.me) Start | Succ 
-> [ 630.000000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 630.000000] (5:node@c-4.me)  16509407  | 16728096 
-> [ 630.000000] (5:node@c-4.me)  16509409  | 16728096 
-> [ 630.000000] (5:node@c-4.me)  16509413  | 16728096 
-> [ 630.000000] (5:node@c-4.me)  16509421  | 16728096 
-> [ 630.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  256477  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  780765  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 630.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 630.000000] (5:node@c-4.me) Predecessor: 10004760
-> [ 653.000000] (7:node@c-6.me) My finger table:
-> [ 653.000000] (7:node@c-6.me) Start | Succ 
-> [ 653.000000] (7:node@c-6.me)  16728097  |  42 
-> [ 653.000000] (7:node@c-6.me)  16728098  |  42 
-> [ 653.000000] (7:node@c-6.me)  16728100  |  42 
-> [ 653.000000] (7:node@c-6.me)  16728104  |  42 
-> [ 653.000000] (7:node@c-6.me)  16728112  |  42 
-> [ 653.000000] (7:node@c-6.me)  16728128  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  16416  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  81952  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  213024  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  475168  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  999456  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 653.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 653.000000] (7:node@c-6.me) Predecessor: 16509405
-> [ 663.000000] (2:node@c-1.me) My finger table:
-> [ 663.000000] (2:node@c-1.me) Start | Succ 
-> [ 663.000000] (2:node@c-1.me)  366681  | 533744 
-> [ 663.000000] (2:node@c-1.me)  366682  | 1319738 
-> [ 663.000000] (2:node@c-1.me)  366684  | 1319738 
-> [ 663.000000] (2:node@c-1.me)  366688  | 533744 
-> [ 663.000000] (2:node@c-1.me)  366696  | 533744 
-> [ 663.000000] (2:node@c-1.me)  366712  | 366680 
-> [ 663.000000] (2:node@c-1.me)  366744  | 366680 
-> [ 663.000000] (2:node@c-1.me)  366808  | 366680 
-> [ 663.000000] (2:node@c-1.me)  366936  | 366680 
-> [ 663.000000] (2:node@c-1.me)  367192  | 366680 
-> [ 663.000000] (2:node@c-1.me)  367704  | 366680 
-> [ 663.000000] (2:node@c-1.me)  368728  | 366680 
-> [ 663.000000] (2:node@c-1.me)  370776  | 366680 
-> [ 663.000000] (2:node@c-1.me)  374872  | 366680 
-> [ 663.000000] (2:node@c-1.me)  383064  | 366680 
-> [ 663.000000] (2:node@c-1.me)  399448  | 366680 
-> [ 663.000000] (2:node@c-1.me)  432216  | 366680 
-> [ 663.000000] (2:node@c-1.me)  497752  | 366680 
-> [ 663.000000] (2:node@c-1.me)  628824  | 366680 
-> [ 663.000000] (2:node@c-1.me)  890968  | 366680 
-> [ 663.000000] (2:node@c-1.me)  1415256  | 366680 
-> [ 663.000000] (2:node@c-1.me)  2463832  | 366680 
-> [ 663.000000] (2:node@c-1.me)  4560984  | 366680 
-> [ 663.000000] (2:node@c-1.me)  8755288  | 366680 
-> [ 663.000000] (2:node@c-1.me) Predecessor: 42
-> [ 668.000000] (4:node@c-3.me) My finger table:
-> [ 668.000000] (4:node@c-3.me) Start | Succ 
-> [ 668.000000] (4:node@c-3.me)  1319739  | 2015253 
-> [ 668.000000] (4:node@c-3.me)  1319740  | 2015253 
-> [ 668.000000] (4:node@c-3.me)  1319742  | 2015253 
-> [ 668.000000] (4:node@c-3.me)  1319746  | 2015253 
-> [ 668.000000] (4:node@c-3.me)  1319754  | 2015253 
-> [ 668.000000] (4:node@c-3.me)  1319770  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [ 668.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [ 668.000000] (4:node@c-3.me) Predecessor: 533744
-> [ 683.000000] (5:node@c-4.me) My finger table:
-> [ 683.000000] (5:node@c-4.me) Start | Succ 
-> [ 683.000000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 683.000000] (5:node@c-4.me)  16509407  | 16728096 
-> [ 683.000000] (5:node@c-4.me)  16509409  | 16728096 
-> [ 683.000000] (5:node@c-4.me)  16509413  | 16728096 
-> [ 683.000000] (5:node@c-4.me)  16509421  | 16728096 
-> [ 683.000000] (5:node@c-4.me)  16509437  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  256477  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  780765  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 683.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 683.000000] (5:node@c-4.me) Predecessor: 10874876
-> [ 688.000000] (9:node@c-8.me) My finger table:
-> [ 688.000000] (9:node@c-8.me) Start | Succ 
-> [ 688.000000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 688.000000] (9:node@c-8.me)  6518810  | 16728096 
-> [ 688.000000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 688.000000] (9:node@c-8.me)  6518816  | 10004760 
-> [ 688.000000] (9:node@c-8.me)  6518824  | 10004760 
-> [ 688.000000] (9:node@c-8.me)  6518840  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 688.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 688.000000] (9:node@c-8.me) Predecessor: 2015253
-> [ 699.000000] (10:node@c-9.me) My finger table:
-> [ 699.000000] (10:node@c-9.me) Start | Succ 
-> [ 699.000000] (10:node@c-9.me)  2015254  | 6518808 
-> [ 699.000000] (10:node@c-9.me)  2015255  | 6518808 
-> [ 699.000000] (10:node@c-9.me)  2015257  | 6518808 
-> [ 699.000000] (10:node@c-9.me)  2015261  | 6518808 
-> [ 699.000000] (10:node@c-9.me)  2015269  | 6518808 
-> [ 699.000000] (10:node@c-9.me)  2015285  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2015317  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 699.000000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 699.000000] (10:node@c-9.me) Predecessor: 1319738
-> [ 733.000000] (6:node@c-5.me) My finger table:
-> [ 733.000000] (6:node@c-5.me) Start | Succ 
-> [ 733.000000] (6:node@c-5.me)  10874877  | 16509405 
-> [ 733.000000] (6:node@c-5.me)  10874878  | 533744 
-> [ 733.000000] (6:node@c-5.me)  10874880  | 533744 
-> [ 733.000000] (6:node@c-5.me)  10874884  | 533744 
-> [ 733.000000] (6:node@c-5.me)  10874892  | 16728096 
-> [ 733.000000] (6:node@c-5.me)  10874908  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 733.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 733.000000] (6:node@c-5.me) Predecessor: 10004760
-> [ 735.000000] (1:node@c-0.me) My finger table:
-> [ 735.000000] (1:node@c-0.me) Start | Succ 
-> [ 735.000000] (1:node@c-0.me)   43  | 366680 
-> [ 735.000000] (1:node@c-0.me)   44  | 366680 
-> [ 735.000000] (1:node@c-0.me)   46  | 366680 
-> [ 735.000000] (1:node@c-0.me)   50  | 366680 
-> [ 735.000000] (1:node@c-0.me)   58  | 366680 
-> [ 735.000000] (1:node@c-0.me)   74  | 366680 
-> [ 735.000000] (1:node@c-0.me)  106  |  42 
-> [ 735.000000] (1:node@c-0.me)  170  |  42 
-> [ 735.000000] (1:node@c-0.me)  298  |  42 
-> [ 735.000000] (1:node@c-0.me)  554  |  42 
-> [ 735.000000] (1:node@c-0.me)  1066  |  42 
-> [ 735.000000] (1:node@c-0.me)  2090  |  42 
-> [ 735.000000] (1:node@c-0.me)  4138  |  42 
-> [ 735.000000] (1:node@c-0.me)  8234  |  42 
-> [ 735.000000] (1:node@c-0.me)  16426  |  42 
-> [ 735.000000] (1:node@c-0.me)  32810  |  42 
-> [ 735.000000] (1:node@c-0.me)  65578  |  42 
-> [ 735.000000] (1:node@c-0.me)  131114  |  42 
-> [ 735.000000] (1:node@c-0.me)  262186  |  42 
-> [ 735.000000] (1:node@c-0.me)  524330  |  42 
-> [ 735.000000] (1:node@c-0.me)  1048618  |  42 
-> [ 735.000000] (1:node@c-0.me)  2097194  |  42 
-> [ 735.000000] (1:node@c-0.me)  4194346  |  42 
-> [ 735.000000] (1:node@c-0.me)  8388650  |  42 
-> [ 735.000000] (1:node@c-0.me) Predecessor: 16728096
-> [ 743.000000] (3:node@c-2.me) My finger table:
-> [ 743.000000] (3:node@c-2.me) Start | Succ 
-> [ 743.000000] (3:node@c-2.me)  533745  | 1319738 
-> [ 743.000000] (3:node@c-2.me)  533746  | 10004760 
-> [ 743.000000] (3:node@c-2.me)  533748  | 10004760 
-> [ 743.000000] (3:node@c-2.me)  533752  | 1319738 
-> [ 743.000000] (3:node@c-2.me)  533760  | 1319738 
-> [ 743.000000] (3:node@c-2.me)  533776  | 1319738 
-> [ 743.000000] (3:node@c-2.me)  533808  | 533744 
-> [ 743.000000] (3:node@c-2.me)  533872  | 533744 
-> [ 743.000000] (3:node@c-2.me)  534000  | 533744 
-> [ 743.000000] (3:node@c-2.me)  534256  | 533744 
-> [ 743.000000] (3:node@c-2.me)  534768  | 533744 
-> [ 743.000000] (3:node@c-2.me)  535792  | 533744 
-> [ 743.000000] (3:node@c-2.me)  537840  | 533744 
-> [ 743.000000] (3:node@c-2.me)  541936  | 533744 
-> [ 743.000000] (3:node@c-2.me)  550128  | 533744 
-> [ 743.000000] (3:node@c-2.me)  566512  | 533744 
-> [ 743.000000] (3:node@c-2.me)  599280  | 533744 
-> [ 743.000000] (3:node@c-2.me)  664816  | 533744 
-> [ 743.000000] (3:node@c-2.me)  795888  | 533744 
-> [ 743.000000] (3:node@c-2.me)  1058032  | 533744 
-> [ 743.000000] (3:node@c-2.me)  1582320  | 533744 
-> [ 743.000000] (3:node@c-2.me)  2630896  | 533744 
-> [ 743.000000] (3:node@c-2.me)  4728048  | 533744 
-> [ 743.000000] (3:node@c-2.me)  8922352  | 533744 
-> [ 743.000000] (3:node@c-2.me) Predecessor: 366680
-> [ 752.000000] (5:node@c-4.me) My finger table:
-> [ 752.000000] (5:node@c-4.me) Start | Succ 
-> [ 752.000000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 752.000000] (5:node@c-4.me)  16509407  | 16728096 
-> [ 752.000000] (5:node@c-4.me)  16509409  | 16728096 
-> [ 752.000000] (5:node@c-4.me)  16509413  | 16728096 
-> [ 752.000000] (5:node@c-4.me)  16509421  | 16728096 
-> [ 752.000000] (5:node@c-4.me)  16509437  | 16728096 
-> [ 752.000000] (5:node@c-4.me)  16509469  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  256477  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  780765  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 752.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 752.000000] (5:node@c-4.me) Predecessor: 10874876
-> [ 753.000000] (6:node@c-5.me) My finger table:
-> [ 753.000000] (6:node@c-5.me) Start | Succ 
-> [ 753.000000] (6:node@c-5.me)  10874877  | 16509405 
-> [ 753.000000] (6:node@c-5.me)  10874878  | 533744 
-> [ 753.000000] (6:node@c-5.me)  10874880  | 533744 
-> [ 753.000000] (6:node@c-5.me)  10874884  | 533744 
-> [ 753.000000] (6:node@c-5.me)  10874892  | 16728096 
-> [ 753.000000] (6:node@c-5.me)  10874908  | 16509405 
-> [ 753.000000] (6:node@c-5.me)  10874940  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 753.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 753.000000] (6:node@c-5.me) Predecessor: 10004760
-> [ 765.000000] (8:node@c-7.me) My finger table:
-> [ 765.000000] (8:node@c-7.me) Start | Succ 
-> [ 765.000000] (8:node@c-7.me)  10004761  | 10874876 
-> [ 765.000000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 765.000000] (8:node@c-7.me)  10004764  | 16509405 
-> [ 765.000000] (8:node@c-7.me)  10004768  | 16509405 
-> [ 765.000000] (8:node@c-7.me)  10004776  | 16509405 
-> [ 765.000000] (8:node@c-7.me)  10004792  | 10874876 
-> [ 765.000000] (8:node@c-7.me)  10004824  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 765.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 765.000000] (8:node@c-7.me) Predecessor: 6518808
-> [ 774.000000] (7:node@c-6.me) My finger table:
-> [ 774.000000] (7:node@c-6.me) Start | Succ 
-> [ 774.000000] (7:node@c-6.me)  16728097  |  42 
-> [ 774.000000] (7:node@c-6.me)  16728098  |  42 
-> [ 774.000000] (7:node@c-6.me)  16728100  |  42 
-> [ 774.000000] (7:node@c-6.me)  16728104  |  42 
-> [ 774.000000] (7:node@c-6.me)  16728112  |  42 
-> [ 774.000000] (7:node@c-6.me)  16728128  |  42 
-> [ 774.000000] (7:node@c-6.me)  16728160  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  16416  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  81952  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  213024  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  475168  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  999456  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 774.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 774.000000] (7:node@c-6.me) Predecessor: 16509405
-> [ 796.000000] (2:node@c-1.me) My finger table:
-> [ 796.000000] (2:node@c-1.me) Start | Succ 
-> [ 796.000000] (2:node@c-1.me)  366681  | 533744 
-> [ 796.000000] (2:node@c-1.me)  366682  | 1319738 
-> [ 796.000000] (2:node@c-1.me)  366684  | 1319738 
-> [ 796.000000] (2:node@c-1.me)  366688  | 533744 
-> [ 796.000000] (2:node@c-1.me)  366696  | 533744 
-> [ 796.000000] (2:node@c-1.me)  366712  | 533744 
-> [ 796.000000] (2:node@c-1.me)  366744  | 366680 
-> [ 796.000000] (2:node@c-1.me)  366808  | 366680 
-> [ 796.000000] (2:node@c-1.me)  366936  | 366680 
-> [ 796.000000] (2:node@c-1.me)  367192  | 366680 
-> [ 796.000000] (2:node@c-1.me)  367704  | 366680 
-> [ 796.000000] (2:node@c-1.me)  368728  | 366680 
-> [ 796.000000] (2:node@c-1.me)  370776  | 366680 
-> [ 796.000000] (2:node@c-1.me)  374872  | 366680 
-> [ 796.000000] (2:node@c-1.me)  383064  | 366680 
-> [ 796.000000] (2:node@c-1.me)  399448  | 366680 
-> [ 796.000000] (2:node@c-1.me)  432216  | 366680 
-> [ 796.000000] (2:node@c-1.me)  497752  | 366680 
-> [ 796.000000] (2:node@c-1.me)  628824  | 366680 
-> [ 796.000000] (2:node@c-1.me)  890968  | 366680 
-> [ 796.000000] (2:node@c-1.me)  1415256  | 366680 
-> [ 796.000000] (2:node@c-1.me)  2463832  | 366680 
-> [ 796.000000] (2:node@c-1.me)  4560984  | 366680 
-> [ 796.000000] (2:node@c-1.me)  8755288  | 366680 
-> [ 796.000000] (2:node@c-1.me) Predecessor: 42
-> [ 808.000000] (9:node@c-8.me) My finger table:
-> [ 808.000000] (9:node@c-8.me) Start | Succ 
-> [ 808.000000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 808.000000] (9:node@c-8.me)  6518810  | 16728096 
-> [ 808.000000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 808.000000] (9:node@c-8.me)  6518816  | 10004760 
-> [ 808.000000] (9:node@c-8.me)  6518824  | 10004760 
-> [ 808.000000] (9:node@c-8.me)  6518840  | 10004760 
-> [ 808.000000] (9:node@c-8.me)  6518872  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 808.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 808.000000] (9:node@c-8.me) Predecessor: 2015253
-> [ 810.000000] (4:node@c-3.me) My finger table:
-> [ 810.000000] (4:node@c-3.me) Start | Succ 
-> [ 810.000000] (4:node@c-3.me)  1319739  | 2015253 
-> [ 810.000000] (4:node@c-3.me)  1319740  | 2015253 
-> [ 810.000000] (4:node@c-3.me)  1319742  | 2015253 
-> [ 810.000000] (4:node@c-3.me)  1319746  | 2015253 
-> [ 810.000000] (4:node@c-3.me)  1319754  | 2015253 
-> [ 810.000000] (4:node@c-3.me)  1319770  | 2015253 
-> [ 810.000000] (4:node@c-3.me)  1319802  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [ 810.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [ 810.000000] (4:node@c-3.me) Predecessor: 533744
-> [ 831.000000] (10:node@c-9.me) My finger table:
-> [ 831.000000] (10:node@c-9.me) Start | Succ 
-> [ 831.000000] (10:node@c-9.me)  2015254  | 6518808 
-> [ 831.000000] (10:node@c-9.me)  2015255  | 6518808 
-> [ 831.000000] (10:node@c-9.me)  2015257  | 6518808 
-> [ 831.000000] (10:node@c-9.me)  2015261  | 6518808 
-> [ 831.000000] (10:node@c-9.me)  2015269  | 6518808 
-> [ 831.000000] (10:node@c-9.me)  2015285  | 6518808 
-> [ 831.000000] (10:node@c-9.me)  2015317  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 831.000000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 831.000000] (10:node@c-9.me) Predecessor: 1319738
-> [ 859.000000] (1:node@c-0.me) My finger table:
-> [ 859.000000] (1:node@c-0.me) Start | Succ 
-> [ 859.000000] (1:node@c-0.me)   43  | 366680 
-> [ 859.000000] (1:node@c-0.me)   44  | 366680 
-> [ 859.000000] (1:node@c-0.me)   46  | 366680 
-> [ 859.000000] (1:node@c-0.me)   50  | 366680 
-> [ 859.000000] (1:node@c-0.me)   58  | 366680 
-> [ 859.000000] (1:node@c-0.me)   74  | 366680 
-> [ 859.000000] (1:node@c-0.me)  106  | 366680 
-> [ 859.000000] (1:node@c-0.me)  170  |  42 
-> [ 859.000000] (1:node@c-0.me)  298  |  42 
-> [ 859.000000] (1:node@c-0.me)  554  |  42 
-> [ 859.000000] (1:node@c-0.me)  1066  |  42 
-> [ 859.000000] (1:node@c-0.me)  2090  |  42 
-> [ 859.000000] (1:node@c-0.me)  4138  |  42 
-> [ 859.000000] (1:node@c-0.me)  8234  |  42 
-> [ 859.000000] (1:node@c-0.me)  16426  |  42 
-> [ 859.000000] (1:node@c-0.me)  32810  |  42 
-> [ 859.000000] (1:node@c-0.me)  65578  |  42 
-> [ 859.000000] (1:node@c-0.me)  131114  |  42 
-> [ 859.000000] (1:node@c-0.me)  262186  |  42 
-> [ 859.000000] (1:node@c-0.me)  524330  |  42 
-> [ 859.000000] (1:node@c-0.me)  1048618  |  42 
-> [ 859.000000] (1:node@c-0.me)  2097194  |  42 
-> [ 859.000000] (1:node@c-0.me)  4194346  |  42 
-> [ 859.000000] (1:node@c-0.me)  8388650  |  42 
-> [ 859.000000] (1:node@c-0.me) Predecessor: 16728096
-> [ 873.000000] (5:node@c-4.me) My finger table:
-> [ 873.000000] (5:node@c-4.me) Start | Succ 
-> [ 873.000000] (5:node@c-4.me)  16509406  | 16728096 
-> [ 873.000000] (5:node@c-4.me)  16509407  | 16728096 
-> [ 873.000000] (5:node@c-4.me)  16509409  | 16728096 
-> [ 873.000000] (5:node@c-4.me)  16509413  | 16728096 
-> [ 873.000000] (5:node@c-4.me)  16509421  | 16728096 
-> [ 873.000000] (5:node@c-4.me)  16509437  | 16728096 
-> [ 873.000000] (5:node@c-4.me)  16509469  | 16728096 
-> [ 873.000000] (5:node@c-4.me)  16509533  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16509661  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16509917  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16510429  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16511453  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16513501  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16517597  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16525789  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16542173  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16574941  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16640477  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  16771549  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  256477  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  780765  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  1829341  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  3926493  | 16509405 
-> [ 873.000000] (5:node@c-4.me)  8120797  | 16509405 
-> [ 873.000000] (5:node@c-4.me) Predecessor: 10874876
-> [ 893.000000] (3:node@c-2.me) My finger table:
-> [ 893.000000] (3:node@c-2.me) Start | Succ 
-> [ 893.000000] (3:node@c-2.me)  533745  | 1319738 
-> [ 893.000000] (3:node@c-2.me)  533746  | 10004760 
-> [ 893.000000] (3:node@c-2.me)  533748  | 10004760 
-> [ 893.000000] (3:node@c-2.me)  533752  | 1319738 
-> [ 893.000000] (3:node@c-2.me)  533760  | 1319738 
-> [ 893.000000] (3:node@c-2.me)  533776  | 1319738 
-> [ 893.000000] (3:node@c-2.me)  533808  | 1319738 
-> [ 893.000000] (3:node@c-2.me)  533872  | 533744 
-> [ 893.000000] (3:node@c-2.me)  534000  | 533744 
-> [ 893.000000] (3:node@c-2.me)  534256  | 533744 
-> [ 893.000000] (3:node@c-2.me)  534768  | 533744 
-> [ 893.000000] (3:node@c-2.me)  535792  | 533744 
-> [ 893.000000] (3:node@c-2.me)  537840  | 533744 
-> [ 893.000000] (3:node@c-2.me)  541936  | 533744 
-> [ 893.000000] (3:node@c-2.me)  550128  | 533744 
-> [ 893.000000] (3:node@c-2.me)  566512  | 533744 
-> [ 893.000000] (3:node@c-2.me)  599280  | 533744 
-> [ 893.000000] (3:node@c-2.me)  664816  | 533744 
-> [ 893.000000] (3:node@c-2.me)  795888  | 533744 
-> [ 893.000000] (3:node@c-2.me)  1058032  | 533744 
-> [ 893.000000] (3:node@c-2.me)  1582320  | 533744 
-> [ 893.000000] (3:node@c-2.me)  2630896  | 533744 
-> [ 893.000000] (3:node@c-2.me)  4728048  | 533744 
-> [ 893.000000] (3:node@c-2.me)  8922352  | 533744 
-> [ 893.000000] (3:node@c-2.me) Predecessor: 366680
-> [ 896.000000] (7:node@c-6.me) My finger table:
-> [ 896.000000] (7:node@c-6.me) Start | Succ 
-> [ 896.000000] (7:node@c-6.me)  16728097  |  42 
-> [ 896.000000] (7:node@c-6.me)  16728098  |  42 
-> [ 896.000000] (7:node@c-6.me)  16728100  |  42 
-> [ 896.000000] (7:node@c-6.me)  16728104  |  42 
-> [ 896.000000] (7:node@c-6.me)  16728112  |  42 
-> [ 896.000000] (7:node@c-6.me)  16728128  |  42 
-> [ 896.000000] (7:node@c-6.me)  16728160  |  42 
-> [ 896.000000] (7:node@c-6.me)  16728224  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16728352  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16728608  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16729120  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16730144  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16732192  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16736288  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16744480  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16760864  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  16416  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  81952  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  213024  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  475168  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  999456  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  2048032  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  4145184  | 16728096 
-> [ 896.000000] (7:node@c-6.me)  8339488  | 16728096 
-> [ 896.000000] (7:node@c-6.me) Predecessor: 16509405
-> [ 899.000000] (6:node@c-5.me) My finger table:
-> [ 899.000000] (6:node@c-5.me) Start | Succ 
-> [ 899.000000] (6:node@c-5.me)  10874877  | 16509405 
-> [ 899.000000] (6:node@c-5.me)  10874878  | 533744 
-> [ 899.000000] (6:node@c-5.me)  10874880  | 533744 
-> [ 899.000000] (6:node@c-5.me)  10874884  | 533744 
-> [ 899.000000] (6:node@c-5.me)  10874892  | 16728096 
-> [ 899.000000] (6:node@c-5.me)  10874908  | 16509405 
-> [ 899.000000] (6:node@c-5.me)  10874940  | 16509405 
-> [ 899.000000] (6:node@c-5.me)  10875004  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10875132  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10875388  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10875900  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10876924  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10878972  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10883068  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10891260  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10907644  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  10940412  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  11005948  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  11137020  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  11399164  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  11923452  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  12972028  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  15069180  | 10874876 
-> [ 899.000000] (6:node@c-5.me)  2486268  | 10874876 
-> [ 899.000000] (6:node@c-5.me) Predecessor: 10004760
-> [ 899.000000] (8:node@c-7.me) My finger table:
-> [ 899.000000] (8:node@c-7.me) Start | Succ 
-> [ 899.000000] (8:node@c-7.me)  10004761  | 10874876 
-> [ 899.000000] (8:node@c-7.me)  10004762  | 16509405 
-> [ 899.000000] (8:node@c-7.me)  10004764  | 16509405 
-> [ 899.000000] (8:node@c-7.me)  10004768  | 16509405 
-> [ 899.000000] (8:node@c-7.me)  10004776  | 16509405 
-> [ 899.000000] (8:node@c-7.me)  10004792  | 10874876 
-> [ 899.000000] (8:node@c-7.me)  10004824  | 10874876 
-> [ 899.000000] (8:node@c-7.me)  10004888  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10005016  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10005272  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10005784  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10006808  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10008856  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10012952  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10021144  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10037528  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10070296  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10135832  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10266904  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  10529048  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  11053336  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  12101912  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  14199064  | 10004760 
-> [ 899.000000] (8:node@c-7.me)  1616152  | 10004760 
-> [ 899.000000] (8:node@c-7.me) Predecessor: 6518808
-> [ 921.000000] (2:node@c-1.me) My finger table:
-> [ 921.000000] (2:node@c-1.me) Start | Succ 
-> [ 921.000000] (2:node@c-1.me)  366681  | 533744 
-> [ 921.000000] (2:node@c-1.me)  366682  | 1319738 
-> [ 921.000000] (2:node@c-1.me)  366684  | 1319738 
-> [ 921.000000] (2:node@c-1.me)  366688  | 533744 
-> [ 921.000000] (2:node@c-1.me)  366696  | 533744 
-> [ 921.000000] (2:node@c-1.me)  366712  | 533744 
-> [ 921.000000] (2:node@c-1.me)  366744  | 533744 
-> [ 921.000000] (2:node@c-1.me)  366808  | 366680 
-> [ 921.000000] (2:node@c-1.me)  366936  | 366680 
-> [ 921.000000] (2:node@c-1.me)  367192  | 366680 
-> [ 921.000000] (2:node@c-1.me)  367704  | 366680 
-> [ 921.000000] (2:node@c-1.me)  368728  | 366680 
-> [ 921.000000] (2:node@c-1.me)  370776  | 366680 
-> [ 921.000000] (2:node@c-1.me)  374872  | 366680 
-> [ 921.000000] (2:node@c-1.me)  383064  | 366680 
-> [ 921.000000] (2:node@c-1.me)  399448  | 366680 
-> [ 921.000000] (2:node@c-1.me)  432216  | 366680 
-> [ 921.000000] (2:node@c-1.me)  497752  | 366680 
-> [ 921.000000] (2:node@c-1.me)  628824  | 366680 
-> [ 921.000000] (2:node@c-1.me)  890968  | 366680 
-> [ 921.000000] (2:node@c-1.me)  1415256  | 366680 
-> [ 921.000000] (2:node@c-1.me)  2463832  | 366680 
-> [ 921.000000] (2:node@c-1.me)  4560984  | 366680 
-> [ 921.000000] (2:node@c-1.me)  8755288  | 366680 
-> [ 921.000000] (2:node@c-1.me) Predecessor: 42
-> [ 928.000000] (9:node@c-8.me) My finger table:
-> [ 928.000000] (9:node@c-8.me) Start | Succ 
-> [ 928.000000] (9:node@c-8.me)  6518809  | 10004760 
-> [ 928.000000] (9:node@c-8.me)  6518810  | 16728096 
-> [ 928.000000] (9:node@c-8.me)  6518812  | 10004760 
-> [ 928.000000] (9:node@c-8.me)  6518816  | 10004760 
-> [ 928.000000] (9:node@c-8.me)  6518824  | 10004760 
-> [ 928.000000] (9:node@c-8.me)  6518840  | 10004760 
-> [ 928.000000] (9:node@c-8.me)  6518872  | 10004760 
-> [ 928.000000] (9:node@c-8.me)  6518936  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6519064  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6519320  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6519832  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6520856  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6522904  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6527000  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6535192  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6551576  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6584344  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6649880  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  6780952  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  7043096  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  7567384  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  8615960  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  10713112  | 6518808 
-> [ 928.000000] (9:node@c-8.me)  14907416  | 6518808 
-> [ 928.000000] (9:node@c-8.me) Predecessor: 2015253
-> [ 930.000000] (4:node@c-3.me) My finger table:
-> [ 930.000000] (4:node@c-3.me) Start | Succ 
-> [ 930.000000] (4:node@c-3.me)  1319739  | 2015253 
-> [ 930.000000] (4:node@c-3.me)  1319740  | 2015253 
-> [ 930.000000] (4:node@c-3.me)  1319742  | 2015253 
-> [ 930.000000] (4:node@c-3.me)  1319746  | 2015253 
-> [ 930.000000] (4:node@c-3.me)  1319754  | 2015253 
-> [ 930.000000] (4:node@c-3.me)  1319770  | 2015253 
-> [ 930.000000] (4:node@c-3.me)  1319802  | 2015253 
-> [ 930.000000] (4:node@c-3.me)  1319866  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1319994  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1320250  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1320762  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1321786  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1323834  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1327930  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1336122  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1352506  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1385274  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1450810  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1581882  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  1844026  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  2368314  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  3416890  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  5514042  | 1319738 
-> [ 930.000000] (4:node@c-3.me)  9708346  | 1319738 
-> [ 930.000000] (4:node@c-3.me) Predecessor: 533744
-> [ 962.000000] (10:node@c-9.me) My finger table:
-> [ 962.000000] (10:node@c-9.me) Start | Succ 
-> [ 962.000000] (10:node@c-9.me)  2015254  | 6518808 
-> [ 962.000000] (10:node@c-9.me)  2015255  | 6518808 
-> [ 962.000000] (10:node@c-9.me)  2015257  | 6518808 
-> [ 962.000000] (10:node@c-9.me)  2015261  | 6518808 
-> [ 962.000000] (10:node@c-9.me)  2015269  | 6518808 
-> [ 962.000000] (10:node@c-9.me)  2015285  | 6518808 
-> [ 962.000000] (10:node@c-9.me)  2015317  | 6518808 
-> [ 962.000000] (10:node@c-9.me)  2015381  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2015509  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2015765  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2016277  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2017301  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2019349  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2023445  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2031637  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2048021  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2080789  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2146325  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2277397  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  2539541  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  3063829  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  4112405  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  6209557  | 2015253 
-> [ 962.000000] (10:node@c-9.me)  10403861  | 2015253 
-> [ 962.000000] (10:node@c-9.me) Predecessor: 1319738
-> [ 982.000000] (1:node@c-0.me) My finger table:
-> [ 982.000000] (1:node@c-0.me) Start | Succ 
-> [ 982.000000] (1:node@c-0.me)   43  | 366680 
-> [ 982.000000] (1:node@c-0.me)   44  | 366680 
-> [ 982.000000] (1:node@c-0.me)   46  | 366680 
-> [ 982.000000] (1:node@c-0.me)   50  | 366680 
-> [ 982.000000] (1:node@c-0.me)   58  | 366680 
-> [ 982.000000] (1:node@c-0.me)   74  | 366680 
-> [ 982.000000] (1:node@c-0.me)  106  | 366680 
-> [ 982.000000] (1:node@c-0.me)  170  | 366680 
-> [ 982.000000] (1:node@c-0.me)  298  |  42 
-> [ 982.000000] (1:node@c-0.me)  554  |  42 
-> [ 982.000000] (1:node@c-0.me)  1066  |  42 
-> [ 982.000000] (1:node@c-0.me)  2090  |  42 
-> [ 982.000000] (1:node@c-0.me)  4138  |  42 
-> [ 982.000000] (1:node@c-0.me)  8234  |  42 
-> [ 982.000000] (1:node@c-0.me)  16426  |  42 
-> [ 982.000000] (1:node@c-0.me)  32810  |  42 
-> [ 982.000000] (1:node@c-0.me)  65578  |  42 
-> [ 982.000000] (1:node@c-0.me)  131114  |  42 
-> [ 982.000000] (1:node@c-0.me)  262186  |  42 
-> [ 982.000000] (1:node@c-0.me)  524330  |  42 
-> [ 982.000000] (1:node@c-0.me)  1048618  |  42 
-> [ 982.000000] (1:node@c-0.me)  2097194  |  42 
-> [ 982.000000] (1:node@c-0.me)  4194346  |  42 
-> [ 982.000000] (1:node@c-0.me)  8388650  |  42 
-> [ 982.000000] (1:node@c-0.me) Predecessor: 16728096
+> [   0.000000] (10:node@node-9.acme.org) Joining the ring with id 2015253, knowing node 1319738
+> [   0.000000] (1:node@node-0.acme.org) My finger table:
+> [   0.000000] (1:node@node-0.acme.org) Start | Succ 
+> [   0.000000] (1:node@node-0.acme.org)   43  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   44  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   46  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   50  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   58  |  42 
+> [   0.000000] (1:node@node-0.acme.org)   74  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  106  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  170  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  298  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  554  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [   0.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [   0.000000] (1:node@node-0.acme.org) Predecessor: -1
+> [   0.000000] (2:node@node-1.acme.org) Joining the ring with id 366680, knowing node 42
+> [   0.000000] (3:node@node-2.acme.org) Joining the ring with id 533744, knowing node 366680
+> [   0.000000] (4:node@node-3.acme.org) Joining the ring with id 1319738, knowing node 42
+> [   0.000000] (5:node@node-4.acme.org) Joining the ring with id 16509405, knowing node 366680
+> [   0.000000] (6:node@node-5.acme.org) Joining the ring with id 10874876, knowing node 533744
+> [   0.000000] (7:node@node-6.acme.org) Joining the ring with id 16728096, knowing node 1319738
+> [   0.000000] (8:node@node-7.acme.org) Joining the ring with id 10004760, knowing node 16509405
+> [   0.000000] (9:node@node-8.acme.org) Joining the ring with id 6518808, knowing node 42
+> [   4.000000] (3:node@node-2.acme.org) My finger table:
+> [   4.000000] (3:node@node-2.acme.org) Start | Succ 
+> [   4.000000] (3:node@node-2.acme.org)  533745  | 366680 
+> [   4.000000] (3:node@node-2.acme.org)  533746  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533748  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533752  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533760  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [   4.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [   4.000000] (3:node@node-2.acme.org) Predecessor: -1
+> [   4.000000] (6:node@node-5.acme.org) My finger table:
+> [   4.000000] (6:node@node-5.acme.org) Start | Succ 
+> [   4.000000] (6:node@node-5.acme.org)  10874877  | 533744 
+> [   4.000000] (6:node@node-5.acme.org)  10874878  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874880  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [   4.000000] (6:node@node-5.acme.org) Predecessor: -1
+> [   5.000000] (5:node@node-4.acme.org) My finger table:
+> [   5.000000] (5:node@node-4.acme.org) Start | Succ 
+> [   5.000000] (5:node@node-4.acme.org)  16509406  | 366680 
+> [   5.000000] (5:node@node-4.acme.org)  16509407  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [   5.000000] (5:node@node-4.acme.org) Predecessor: -1
+> [   5.000000] (8:node@node-7.acme.org) My finger table:
+> [   5.000000] (8:node@node-7.acme.org) Start | Succ 
+> [   5.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [   5.000000] (8:node@node-7.acme.org)  10004762  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [   5.000000] (8:node@node-7.acme.org) Predecessor: -1
+> [   6.000000] (2:node@node-1.acme.org) My finger table:
+> [   6.000000] (2:node@node-1.acme.org) Start | Succ 
+> [   6.000000] (2:node@node-1.acme.org)  366681  |  42 
+> [   6.000000] (2:node@node-1.acme.org)  366682  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  366684  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  366688  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  366696  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  366712  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  366744  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [   6.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [   6.000000] (2:node@node-1.acme.org) Predecessor: -1
+> [   8.000000] (7:node@node-6.acme.org) My finger table:
+> [   8.000000] (7:node@node-6.acme.org) Start | Succ 
+> [   8.000000] (7:node@node-6.acme.org)  16728097  | 1319738 
+> [   8.000000] (7:node@node-6.acme.org)  16728098  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [   8.000000] (7:node@node-6.acme.org) Predecessor: -1
+> [   9.000000] (10:node@node-9.acme.org) My finger table:
+> [   9.000000] (10:node@node-9.acme.org) Start | Succ 
+> [   9.000000] (10:node@node-9.acme.org)  2015254  | 1319738 
+> [   9.000000] (10:node@node-9.acme.org)  2015255  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2015257  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [   9.000000] (10:node@node-9.acme.org) Predecessor: -1
+> [  11.000000] (4:node@node-3.acme.org) My finger table:
+> [  11.000000] (4:node@node-3.acme.org) Start | Succ 
+> [  11.000000] (4:node@node-3.acme.org)  1319739  |  42 
+> [  11.000000] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [  11.000000] (4:node@node-3.acme.org) Predecessor: -1
+> [  16.000000] (9:node@node-8.acme.org) My finger table:
+> [  16.000000] (9:node@node-8.acme.org) Start | Succ 
+> [  16.000000] (9:node@node-8.acme.org)  6518809  |  42 
+> [  16.000000] (9:node@node-8.acme.org)  6518810  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [  16.000000] (9:node@node-8.acme.org) Predecessor: -1
+> [  26.000000] (4:node@node-3.acme.org) My finger table:
+> [  26.000000] (4:node@node-3.acme.org) Start | Succ 
+> [  26.000000] (4:node@node-3.acme.org)  1319739  |  42 
+> [  26.000000] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [  26.000000] (4:node@node-3.acme.org) Predecessor: 16728096
+> [  31.000000] (2:node@node-1.acme.org) My finger table:
+> [  31.000000] (2:node@node-1.acme.org) Start | Succ 
+> [  31.000000] (2:node@node-1.acme.org)  366681  |  42 
+> [  31.000000] (2:node@node-1.acme.org)  366682  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  366684  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  366688  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  366696  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  366712  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  366744  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [  31.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [  31.000000] (2:node@node-1.acme.org) Predecessor: 16509405
+> [  32.000000] (5:node@node-4.acme.org) My finger table:
+> [  32.000000] (5:node@node-4.acme.org) Start | Succ 
+> [  32.000000] (5:node@node-4.acme.org)  16509406  | 366680 
+> [  32.000000] (5:node@node-4.acme.org)  16509407  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [  32.000000] (5:node@node-4.acme.org) Predecessor: 10004760
+> [  38.000000] (3:node@node-2.acme.org) My finger table:
+> [  38.000000] (3:node@node-2.acme.org) Start | Succ 
+> [  38.000000] (3:node@node-2.acme.org)  533745  | 16509405 
+> [  38.000000] (3:node@node-2.acme.org)  533746  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  533748  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  533752  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  533760  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [  38.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [  38.000000] (3:node@node-2.acme.org) Predecessor: 10874876
+> [  50.000000] (1:node@node-0.acme.org) My finger table:
+> [  50.000000] (1:node@node-0.acme.org) Start | Succ 
+> [  50.000000] (1:node@node-0.acme.org)   43  |  42 
+> [  50.000000] (1:node@node-0.acme.org)   44  |  42 
+> [  50.000000] (1:node@node-0.acme.org)   46  |  42 
+> [  50.000000] (1:node@node-0.acme.org)   50  |  42 
+> [  50.000000] (1:node@node-0.acme.org)   58  |  42 
+> [  50.000000] (1:node@node-0.acme.org)   74  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  106  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  170  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  298  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  554  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [  50.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [  50.000000] (1:node@node-0.acme.org) Predecessor: 366680
+> [  60.000000] (1:node@node-0.acme.org) My finger table:
+> [  60.000000] (1:node@node-0.acme.org) Start | Succ 
+> [  60.000000] (1:node@node-0.acme.org)   43  |  42 
+> [  60.000000] (1:node@node-0.acme.org)   44  |  42 
+> [  60.000000] (1:node@node-0.acme.org)   46  |  42 
+> [  60.000000] (1:node@node-0.acme.org)   50  |  42 
+> [  60.000000] (1:node@node-0.acme.org)   58  |  42 
+> [  60.000000] (1:node@node-0.acme.org)   74  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  106  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  170  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  298  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  554  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [  60.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [  60.000000] (1:node@node-0.acme.org) Predecessor: 1319738
+> [  70.000000] (1:node@node-0.acme.org) My finger table:
+> [  70.000000] (1:node@node-0.acme.org) Start | Succ 
+> [  70.000000] (1:node@node-0.acme.org)   43  | 1319738 
+> [  70.000000] (1:node@node-0.acme.org)   44  |  42 
+> [  70.000000] (1:node@node-0.acme.org)   46  |  42 
+> [  70.000000] (1:node@node-0.acme.org)   50  |  42 
+> [  70.000000] (1:node@node-0.acme.org)   58  |  42 
+> [  70.000000] (1:node@node-0.acme.org)   74  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  106  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  170  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  298  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  554  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [  70.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [  70.000000] (1:node@node-0.acme.org) Predecessor: 6518808
+> [  85.000000] (4:node@node-3.acme.org) My finger table:
+> [  85.000000] (4:node@node-3.acme.org) Start | Succ 
+> [  85.000000] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [  85.000000] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [  85.000000] (4:node@node-3.acme.org) Predecessor: 42
+> [  86.000000] (8:node@node-7.acme.org) My finger table:
+> [  86.000000] (8:node@node-7.acme.org) Start | Succ 
+> [  86.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [  86.000000] (8:node@node-7.acme.org)  10004762  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [  86.000000] (8:node@node-7.acme.org) Predecessor: 533744
+> [  90.000000] (7:node@node-6.acme.org) My finger table:
+> [  90.000000] (7:node@node-6.acme.org) Start | Succ 
+> [  90.000000] (7:node@node-6.acme.org)  16728097  | 1319738 
+> [  90.000000] (7:node@node-6.acme.org)  16728098  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [  90.000000] (7:node@node-6.acme.org) Predecessor: 2015253
+> [ 109.000000] (9:node@node-8.acme.org) My finger table:
+> [ 109.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 109.000000] (9:node@node-8.acme.org)  6518809  |  42 
+> [ 109.000000] (9:node@node-8.acme.org)  6518810  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 109.000000] (9:node@node-8.acme.org) Predecessor: 366680
+> [ 110.000000] (9:node@node-8.acme.org) My finger table:
+> [ 110.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 110.000000] (9:node@node-8.acme.org)  6518809  |  42 
+> [ 110.000000] (9:node@node-8.acme.org)  6518810  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 110.000000] (9:node@node-8.acme.org) Predecessor: 1319738
+> [ 145.000000] (1:node@node-0.acme.org) My finger table:
+> [ 145.000000] (1:node@node-0.acme.org) Start | Succ 
+> [ 145.000000] (1:node@node-0.acme.org)   43  | 1319738 
+> [ 145.000000] (1:node@node-0.acme.org)   44  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)   46  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)   50  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)   58  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)   74  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  106  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  170  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  298  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  554  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 145.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 145.000000] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 157.000000] (4:node@node-3.acme.org) My finger table:
+> [ 157.000000] (4:node@node-3.acme.org) Start | Succ 
+> [ 157.000000] (4:node@node-3.acme.org)  1319739  | 6518808 
+> [ 157.000000] (4:node@node-3.acme.org)  1319740  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 157.000000] (4:node@node-3.acme.org) Predecessor: 366680
+> [ 184.000000] (7:node@node-6.acme.org) My finger table:
+> [ 184.000000] (7:node@node-6.acme.org) Start | Succ 
+> [ 184.000000] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 184.000000] (7:node@node-6.acme.org)  16728098  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 184.000000] (7:node@node-6.acme.org) Predecessor: 6518808
+> [ 202.000000] (2:node@node-1.acme.org) My finger table:
+> [ 202.000000] (2:node@node-1.acme.org) Start | Succ 
+> [ 202.000000] (2:node@node-1.acme.org)  366681  | 1319738 
+> [ 202.000000] (2:node@node-1.acme.org)  366682  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  366684  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 202.000000] (2:node@node-1.acme.org) Predecessor: 42
+> [ 221.000000] (9:node@node-8.acme.org) My finger table:
+> [ 221.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 221.000000] (9:node@node-8.acme.org)  6518809  | 16728096 
+> [ 221.000000] (9:node@node-8.acme.org)  6518810  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 221.000000] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 240.000000] (6:node@node-5.acme.org) My finger table:
+> [ 240.000000] (6:node@node-5.acme.org) Start | Succ 
+> [ 240.000000] (6:node@node-5.acme.org)  10874877  | 533744 
+> [ 240.000000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 240.000000] (6:node@node-5.acme.org)  10874880  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 240.000000] (6:node@node-5.acme.org) Predecessor: -1
+> [ 247.000000] (5:node@node-4.acme.org) My finger table:
+> [ 247.000000] (5:node@node-4.acme.org) Start | Succ 
+> [ 247.000000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 247.000000] (5:node@node-4.acme.org)  16509407  | 16728096 
+> [ 247.000000] (5:node@node-4.acme.org)  16509409  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 247.000000] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 250.000000] (1:node@node-0.acme.org) My finger table:
+> [ 250.000000] (1:node@node-0.acme.org) Start | Succ 
+> [ 250.000000] (1:node@node-0.acme.org)   43  | 366680 
+> [ 250.000000] (1:node@node-0.acme.org)   44  | 366680 
+> [ 250.000000] (1:node@node-0.acme.org)   46  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)   50  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)   58  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)   74  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  106  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  170  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  298  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  554  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 250.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 250.000000] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 251.000000] (3:node@node-2.acme.org) My finger table:
+> [ 251.000000] (3:node@node-2.acme.org) Start | Succ 
+> [ 251.000000] (3:node@node-2.acme.org)  533745  | 10004760 
+> [ 251.000000] (3:node@node-2.acme.org)  533746  | 10004760 
+> [ 251.000000] (3:node@node-2.acme.org)  533748  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  533752  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 251.000000] (3:node@node-2.acme.org) Predecessor: 10874876
+> [ 253.000000] (8:node@node-7.acme.org) My finger table:
+> [ 253.000000] (8:node@node-7.acme.org) Start | Succ 
+> [ 253.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 253.000000] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 253.000000] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 253.000000] (8:node@node-7.acme.org) Predecessor: 533744
+> [ 263.000000] (2:node@node-1.acme.org) My finger table:
+> [ 263.000000] (2:node@node-1.acme.org) Start | Succ 
+> [ 263.000000] (2:node@node-1.acme.org)  366681  | 1319738 
+> [ 263.000000] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 263.000000] (2:node@node-1.acme.org)  366684  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 263.000000] (2:node@node-1.acme.org) Predecessor: 42
+> [ 268.000000] (4:node@node-3.acme.org) My finger table:
+> [ 268.000000] (4:node@node-3.acme.org) Start | Succ 
+> [ 268.000000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 268.000000] (4:node@node-3.acme.org)  1319740  | 2015253 
+> [ 268.000000] (4:node@node-3.acme.org)  1319742  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 268.000000] (4:node@node-3.acme.org) Predecessor: 366680
+> [ 269.000000] (10:node@node-9.acme.org) My finger table:
+> [ 269.000000] (10:node@node-9.acme.org) Start | Succ 
+> [ 269.000000] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 269.000000] (10:node@node-9.acme.org)  2015255  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2015257  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 269.000000] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 274.000000] (10:node@node-9.acme.org) My finger table:
+> [ 274.000000] (10:node@node-9.acme.org) Start | Succ 
+> [ 274.000000] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 274.000000] (10:node@node-9.acme.org)  2015255  | 6518808 
+> [ 274.000000] (10:node@node-9.acme.org)  2015257  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 274.000000] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 274.000000] (9:node@node-8.acme.org) My finger table:
+> [ 274.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 274.000000] (9:node@node-8.acme.org)  6518809  | 16728096 
+> [ 274.000000] (9:node@node-8.acme.org)  6518810  | 16728096 
+> [ 274.000000] (9:node@node-8.acme.org)  6518812  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 274.000000] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 275.000000] (7:node@node-6.acme.org) My finger table:
+> [ 275.000000] (7:node@node-6.acme.org) Start | Succ 
+> [ 275.000000] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 275.000000] (7:node@node-6.acme.org)  16728098  |  42 
+> [ 275.000000] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 275.000000] (7:node@node-6.acme.org) Predecessor: 6518808
+> [ 288.000000] (7:node@node-6.acme.org) My finger table:
+> [ 288.000000] (7:node@node-6.acme.org) Start | Succ 
+> [ 288.000000] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 288.000000] (7:node@node-6.acme.org)  16728098  |  42 
+> [ 288.000000] (7:node@node-6.acme.org)  16728100  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 288.000000] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 361.000000] (8:node@node-7.acme.org) My finger table:
+> [ 361.000000] (8:node@node-7.acme.org) Start | Succ 
+> [ 361.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 361.000000] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 361.000000] (8:node@node-7.acme.org)  10004764  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 361.000000] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 364.000000] (6:node@node-5.acme.org) My finger table:
+> [ 364.000000] (6:node@node-5.acme.org) Start | Succ 
+> [ 364.000000] (6:node@node-5.acme.org)  10874877  | 533744 
+> [ 364.000000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 364.000000] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 364.000000] (6:node@node-5.acme.org)  10874884  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 364.000000] (6:node@node-5.acme.org) Predecessor: -1
+> [ 371.000000] (3:node@node-2.acme.org) My finger table:
+> [ 371.000000] (3:node@node-2.acme.org) Start | Succ 
+> [ 371.000000] (3:node@node-2.acme.org)  533745  | 10004760 
+> [ 371.000000] (3:node@node-2.acme.org)  533746  | 10004760 
+> [ 371.000000] (3:node@node-2.acme.org)  533748  | 10004760 
+> [ 371.000000] (3:node@node-2.acme.org)  533752  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 371.000000] (3:node@node-2.acme.org) Predecessor: 10874876
+> [ 372.000000] (1:node@node-0.acme.org) My finger table:
+> [ 372.000000] (1:node@node-0.acme.org) Start | Succ 
+> [ 372.000000] (1:node@node-0.acme.org)   43  | 366680 
+> [ 372.000000] (1:node@node-0.acme.org)   44  | 366680 
+> [ 372.000000] (1:node@node-0.acme.org)   46  | 366680 
+> [ 372.000000] (1:node@node-0.acme.org)   50  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)   58  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)   74  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  106  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  170  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  298  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  554  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 372.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 372.000000] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 374.000000] (8:node@node-7.acme.org) My finger table:
+> [ 374.000000] (8:node@node-7.acme.org) Start | Succ 
+> [ 374.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 374.000000] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 374.000000] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 374.000000] (8:node@node-7.acme.org)  10004768  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 374.000000] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 375.000000] (5:node@node-4.acme.org) My finger table:
+> [ 375.000000] (5:node@node-4.acme.org) Start | Succ 
+> [ 375.000000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 375.000000] (5:node@node-4.acme.org)  16509407  | 16728096 
+> [ 375.000000] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 375.000000] (5:node@node-4.acme.org)  16509413  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 375.000000] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 395.000000] (9:node@node-8.acme.org) My finger table:
+> [ 395.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 395.000000] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 395.000000] (9:node@node-8.acme.org)  6518810  | 16728096 
+> [ 395.000000] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 395.000000] (9:node@node-8.acme.org)  6518816  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 395.000000] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 398.000000] (7:node@node-6.acme.org) My finger table:
+> [ 398.000000] (7:node@node-6.acme.org) Start | Succ 
+> [ 398.000000] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 398.000000] (7:node@node-6.acme.org)  16728098  |  42 
+> [ 398.000000] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 398.000000] (7:node@node-6.acme.org)  16728104  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 398.000000] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 405.000000] (4:node@node-3.acme.org) My finger table:
+> [ 405.000000] (4:node@node-3.acme.org) Start | Succ 
+> [ 405.000000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 405.000000] (4:node@node-3.acme.org)  1319740  | 2015253 
+> [ 405.000000] (4:node@node-3.acme.org)  1319742  | 2015253 
+> [ 405.000000] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 405.000000] (4:node@node-3.acme.org) Predecessor: 366680
+> [ 411.000000] (2:node@node-1.acme.org) My finger table:
+> [ 411.000000] (2:node@node-1.acme.org) Start | Succ 
+> [ 411.000000] (2:node@node-1.acme.org)  366681  | 1319738 
+> [ 411.000000] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 411.000000] (2:node@node-1.acme.org)  366684  | 1319738 
+> [ 411.000000] (2:node@node-1.acme.org)  366688  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 411.000000] (2:node@node-1.acme.org) Predecessor: 42
+> [ 426.000000] (10:node@node-9.acme.org) My finger table:
+> [ 426.000000] (10:node@node-9.acme.org) Start | Succ 
+> [ 426.000000] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 426.000000] (10:node@node-9.acme.org)  2015255  | 6518808 
+> [ 426.000000] (10:node@node-9.acme.org)  2015257  | 6518808 
+> [ 426.000000] (10:node@node-9.acme.org)  2015261  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 426.000000] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 486.000000] (6:node@node-5.acme.org) My finger table:
+> [ 486.000000] (6:node@node-5.acme.org) Start | Succ 
+> [ 486.000000] (6:node@node-5.acme.org)  10874877  | 533744 
+> [ 486.000000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 486.000000] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 486.000000] (6:node@node-5.acme.org)  10874884  | 533744 
+> [ 486.000000] (6:node@node-5.acme.org)  10874892  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 486.000000] (6:node@node-5.acme.org) Predecessor: -1
+> [ 491.000000] (4:node@node-3.acme.org) My finger table:
+> [ 491.000000] (4:node@node-3.acme.org) Start | Succ 
+> [ 491.000000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 491.000000] (4:node@node-3.acme.org)  1319740  | 2015253 
+> [ 491.000000] (4:node@node-3.acme.org)  1319742  | 2015253 
+> [ 491.000000] (4:node@node-3.acme.org)  1319746  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 491.000000] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 492.000000] (1:node@node-0.acme.org) My finger table:
+> [ 492.000000] (1:node@node-0.acme.org) Start | Succ 
+> [ 492.000000] (1:node@node-0.acme.org)   43  | 366680 
+> [ 492.000000] (1:node@node-0.acme.org)   44  | 366680 
+> [ 492.000000] (1:node@node-0.acme.org)   46  | 366680 
+> [ 492.000000] (1:node@node-0.acme.org)   50  | 366680 
+> [ 492.000000] (1:node@node-0.acme.org)   58  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)   74  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  106  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  170  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  298  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  554  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 492.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 492.000000] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 495.000000] (3:node@node-2.acme.org) My finger table:
+> [ 495.000000] (3:node@node-2.acme.org) Start | Succ 
+> [ 495.000000] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 495.000000] (3:node@node-2.acme.org)  533746  | 10004760 
+> [ 495.000000] (3:node@node-2.acme.org)  533748  | 10004760 
+> [ 495.000000] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 495.000000] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 495.000000] (3:node@node-2.acme.org) Predecessor: 10874876
+> [ 502.000000] (8:node@node-7.acme.org) My finger table:
+> [ 502.000000] (8:node@node-7.acme.org) Start | Succ 
+> [ 502.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 502.000000] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 502.000000] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 502.000000] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 502.000000] (8:node@node-7.acme.org)  10004776  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 502.000000] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 505.000000] (5:node@node-4.acme.org) My finger table:
+> [ 505.000000] (5:node@node-4.acme.org) Start | Succ 
+> [ 505.000000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 505.000000] (5:node@node-4.acme.org)  16509407  | 16728096 
+> [ 505.000000] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 505.000000] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 505.000000] (5:node@node-4.acme.org)  16509421  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 505.000000] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 521.000000] (7:node@node-6.acme.org) My finger table:
+> [ 521.000000] (7:node@node-6.acme.org) Start | Succ 
+> [ 521.000000] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 521.000000] (7:node@node-6.acme.org)  16728098  |  42 
+> [ 521.000000] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 521.000000] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 521.000000] (7:node@node-6.acme.org)  16728112  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 521.000000] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 535.000000] (9:node@node-8.acme.org) My finger table:
+> [ 535.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 535.000000] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 535.000000] (9:node@node-8.acme.org)  6518810  | 16728096 
+> [ 535.000000] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 535.000000] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 535.000000] (9:node@node-8.acme.org)  6518824  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 535.000000] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 537.000000] (4:node@node-3.acme.org) My finger table:
+> [ 537.000000] (4:node@node-3.acme.org) Start | Succ 
+> [ 537.000000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 537.000000] (4:node@node-3.acme.org)  1319740  | 2015253 
+> [ 537.000000] (4:node@node-3.acme.org)  1319742  | 2015253 
+> [ 537.000000] (4:node@node-3.acme.org)  1319746  | 2015253 
+> [ 537.000000] (4:node@node-3.acme.org)  1319754  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 537.000000] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 539.000000] (2:node@node-1.acme.org) My finger table:
+> [ 539.000000] (2:node@node-1.acme.org) Start | Succ 
+> [ 539.000000] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 539.000000] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 539.000000] (2:node@node-1.acme.org)  366684  | 1319738 
+> [ 539.000000] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 539.000000] (2:node@node-1.acme.org)  366696  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 539.000000] (2:node@node-1.acme.org) Predecessor: 42
+> [ 540.000000] (3:node@node-2.acme.org) My finger table:
+> [ 540.000000] (3:node@node-2.acme.org) Start | Succ 
+> [ 540.000000] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 540.000000] (3:node@node-2.acme.org)  533746  | 10004760 
+> [ 540.000000] (3:node@node-2.acme.org)  533748  | 10004760 
+> [ 540.000000] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 540.000000] (3:node@node-2.acme.org)  533760  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 540.000000] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 567.000000] (10:node@node-9.acme.org) My finger table:
+> [ 567.000000] (10:node@node-9.acme.org) Start | Succ 
+> [ 567.000000] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 567.000000] (10:node@node-9.acme.org)  2015255  | 6518808 
+> [ 567.000000] (10:node@node-9.acme.org)  2015257  | 6518808 
+> [ 567.000000] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 567.000000] (10:node@node-9.acme.org)  2015269  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 567.000000] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 613.000000] (1:node@node-0.acme.org) My finger table:
+> [ 613.000000] (1:node@node-0.acme.org) Start | Succ 
+> [ 613.000000] (1:node@node-0.acme.org)   43  | 366680 
+> [ 613.000000] (1:node@node-0.acme.org)   44  | 366680 
+> [ 613.000000] (1:node@node-0.acme.org)   46  | 366680 
+> [ 613.000000] (1:node@node-0.acme.org)   50  | 366680 
+> [ 613.000000] (1:node@node-0.acme.org)   58  | 366680 
+> [ 613.000000] (1:node@node-0.acme.org)   74  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  106  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  170  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  298  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  554  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 613.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 613.000000] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 616.000000] (3:node@node-2.acme.org) My finger table:
+> [ 616.000000] (3:node@node-2.acme.org) Start | Succ 
+> [ 616.000000] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 616.000000] (3:node@node-2.acme.org)  533746  | 10004760 
+> [ 616.000000] (3:node@node-2.acme.org)  533748  | 10004760 
+> [ 616.000000] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 616.000000] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 616.000000] (3:node@node-2.acme.org)  533776  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 616.000000] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 620.000000] (6:node@node-5.acme.org) My finger table:
+> [ 620.000000] (6:node@node-5.acme.org) Start | Succ 
+> [ 620.000000] (6:node@node-5.acme.org)  10874877  | 16728096 
+> [ 620.000000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 620.000000] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 620.000000] (6:node@node-5.acme.org)  10874884  | 533744 
+> [ 620.000000] (6:node@node-5.acme.org)  10874892  | 16728096 
+> [ 620.000000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 620.000000] (6:node@node-5.acme.org) Predecessor: -1
+> [ 629.000000] (8:node@node-7.acme.org) My finger table:
+> [ 629.000000] (8:node@node-7.acme.org) Start | Succ 
+> [ 629.000000] (8:node@node-7.acme.org)  10004761  | 16509405 
+> [ 629.000000] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 629.000000] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 629.000000] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 629.000000] (8:node@node-7.acme.org)  10004776  | 16509405 
+> [ 629.000000] (8:node@node-7.acme.org)  10004792  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 629.000000] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 630.000000] (5:node@node-4.acme.org) My finger table:
+> [ 630.000000] (5:node@node-4.acme.org) Start | Succ 
+> [ 630.000000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 630.000000] (5:node@node-4.acme.org)  16509407  | 16728096 
+> [ 630.000000] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 630.000000] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 630.000000] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 630.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 630.000000] (5:node@node-4.acme.org) Predecessor: 10004760
+> [ 653.000000] (7:node@node-6.acme.org) My finger table:
+> [ 653.000000] (7:node@node-6.acme.org) Start | Succ 
+> [ 653.000000] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 653.000000] (7:node@node-6.acme.org)  16728098  |  42 
+> [ 653.000000] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 653.000000] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 653.000000] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 653.000000] (7:node@node-6.acme.org)  16728128  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 653.000000] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 663.000000] (2:node@node-1.acme.org) My finger table:
+> [ 663.000000] (2:node@node-1.acme.org) Start | Succ 
+> [ 663.000000] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 663.000000] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 663.000000] (2:node@node-1.acme.org)  366684  | 1319738 
+> [ 663.000000] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 663.000000] (2:node@node-1.acme.org)  366696  | 533744 
+> [ 663.000000] (2:node@node-1.acme.org)  366712  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 663.000000] (2:node@node-1.acme.org) Predecessor: 42
+> [ 668.000000] (4:node@node-3.acme.org) My finger table:
+> [ 668.000000] (4:node@node-3.acme.org) Start | Succ 
+> [ 668.000000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 668.000000] (4:node@node-3.acme.org)  1319740  | 2015253 
+> [ 668.000000] (4:node@node-3.acme.org)  1319742  | 2015253 
+> [ 668.000000] (4:node@node-3.acme.org)  1319746  | 2015253 
+> [ 668.000000] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 668.000000] (4:node@node-3.acme.org)  1319770  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 668.000000] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 683.000000] (5:node@node-4.acme.org) My finger table:
+> [ 683.000000] (5:node@node-4.acme.org) Start | Succ 
+> [ 683.000000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 683.000000] (5:node@node-4.acme.org)  16509407  | 16728096 
+> [ 683.000000] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 683.000000] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 683.000000] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 683.000000] (5:node@node-4.acme.org)  16509437  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 683.000000] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 688.000000] (9:node@node-8.acme.org) My finger table:
+> [ 688.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 688.000000] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 688.000000] (9:node@node-8.acme.org)  6518810  | 16728096 
+> [ 688.000000] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 688.000000] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 688.000000] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 688.000000] (9:node@node-8.acme.org)  6518840  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 688.000000] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 699.000000] (10:node@node-9.acme.org) My finger table:
+> [ 699.000000] (10:node@node-9.acme.org) Start | Succ 
+> [ 699.000000] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 699.000000] (10:node@node-9.acme.org)  2015255  | 6518808 
+> [ 699.000000] (10:node@node-9.acme.org)  2015257  | 6518808 
+> [ 699.000000] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 699.000000] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 699.000000] (10:node@node-9.acme.org)  2015285  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 699.000000] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 733.000000] (6:node@node-5.acme.org) My finger table:
+> [ 733.000000] (6:node@node-5.acme.org) Start | Succ 
+> [ 733.000000] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 733.000000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 733.000000] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 733.000000] (6:node@node-5.acme.org)  10874884  | 533744 
+> [ 733.000000] (6:node@node-5.acme.org)  10874892  | 16728096 
+> [ 733.000000] (6:node@node-5.acme.org)  10874908  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 733.000000] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 735.000000] (1:node@node-0.acme.org) My finger table:
+> [ 735.000000] (1:node@node-0.acme.org) Start | Succ 
+> [ 735.000000] (1:node@node-0.acme.org)   43  | 366680 
+> [ 735.000000] (1:node@node-0.acme.org)   44  | 366680 
+> [ 735.000000] (1:node@node-0.acme.org)   46  | 366680 
+> [ 735.000000] (1:node@node-0.acme.org)   50  | 366680 
+> [ 735.000000] (1:node@node-0.acme.org)   58  | 366680 
+> [ 735.000000] (1:node@node-0.acme.org)   74  | 366680 
+> [ 735.000000] (1:node@node-0.acme.org)  106  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  170  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  298  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  554  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 735.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 735.000000] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 743.000000] (3:node@node-2.acme.org) My finger table:
+> [ 743.000000] (3:node@node-2.acme.org) Start | Succ 
+> [ 743.000000] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 743.000000] (3:node@node-2.acme.org)  533746  | 10004760 
+> [ 743.000000] (3:node@node-2.acme.org)  533748  | 10004760 
+> [ 743.000000] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 743.000000] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 743.000000] (3:node@node-2.acme.org)  533776  | 1319738 
+> [ 743.000000] (3:node@node-2.acme.org)  533808  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 743.000000] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 752.000000] (5:node@node-4.acme.org) My finger table:
+> [ 752.000000] (5:node@node-4.acme.org) Start | Succ 
+> [ 752.000000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 752.000000] (5:node@node-4.acme.org)  16509407  | 16728096 
+> [ 752.000000] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 752.000000] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 752.000000] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 752.000000] (5:node@node-4.acme.org)  16509437  | 16728096 
+> [ 752.000000] (5:node@node-4.acme.org)  16509469  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 752.000000] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 753.000000] (6:node@node-5.acme.org) My finger table:
+> [ 753.000000] (6:node@node-5.acme.org) Start | Succ 
+> [ 753.000000] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 753.000000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 753.000000] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 753.000000] (6:node@node-5.acme.org)  10874884  | 533744 
+> [ 753.000000] (6:node@node-5.acme.org)  10874892  | 16728096 
+> [ 753.000000] (6:node@node-5.acme.org)  10874908  | 16509405 
+> [ 753.000000] (6:node@node-5.acme.org)  10874940  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 753.000000] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 765.000000] (8:node@node-7.acme.org) My finger table:
+> [ 765.000000] (8:node@node-7.acme.org) Start | Succ 
+> [ 765.000000] (8:node@node-7.acme.org)  10004761  | 10874876 
+> [ 765.000000] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 765.000000] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 765.000000] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 765.000000] (8:node@node-7.acme.org)  10004776  | 16509405 
+> [ 765.000000] (8:node@node-7.acme.org)  10004792  | 10874876 
+> [ 765.000000] (8:node@node-7.acme.org)  10004824  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 765.000000] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 774.000000] (7:node@node-6.acme.org) My finger table:
+> [ 774.000000] (7:node@node-6.acme.org) Start | Succ 
+> [ 774.000000] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 774.000000] (7:node@node-6.acme.org)  16728098  |  42 
+> [ 774.000000] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 774.000000] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 774.000000] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 774.000000] (7:node@node-6.acme.org)  16728128  |  42 
+> [ 774.000000] (7:node@node-6.acme.org)  16728160  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 774.000000] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 796.000000] (2:node@node-1.acme.org) My finger table:
+> [ 796.000000] (2:node@node-1.acme.org) Start | Succ 
+> [ 796.000000] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 796.000000] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 796.000000] (2:node@node-1.acme.org)  366684  | 1319738 
+> [ 796.000000] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 796.000000] (2:node@node-1.acme.org)  366696  | 533744 
+> [ 796.000000] (2:node@node-1.acme.org)  366712  | 533744 
+> [ 796.000000] (2:node@node-1.acme.org)  366744  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 796.000000] (2:node@node-1.acme.org) Predecessor: 42
+> [ 808.000000] (9:node@node-8.acme.org) My finger table:
+> [ 808.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 808.000000] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 808.000000] (9:node@node-8.acme.org)  6518810  | 16728096 
+> [ 808.000000] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 808.000000] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 808.000000] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 808.000000] (9:node@node-8.acme.org)  6518840  | 10004760 
+> [ 808.000000] (9:node@node-8.acme.org)  6518872  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 808.000000] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 810.000000] (4:node@node-3.acme.org) My finger table:
+> [ 810.000000] (4:node@node-3.acme.org) Start | Succ 
+> [ 810.000000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 810.000000] (4:node@node-3.acme.org)  1319740  | 2015253 
+> [ 810.000000] (4:node@node-3.acme.org)  1319742  | 2015253 
+> [ 810.000000] (4:node@node-3.acme.org)  1319746  | 2015253 
+> [ 810.000000] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 810.000000] (4:node@node-3.acme.org)  1319770  | 2015253 
+> [ 810.000000] (4:node@node-3.acme.org)  1319802  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 810.000000] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 831.000000] (10:node@node-9.acme.org) My finger table:
+> [ 831.000000] (10:node@node-9.acme.org) Start | Succ 
+> [ 831.000000] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 831.000000] (10:node@node-9.acme.org)  2015255  | 6518808 
+> [ 831.000000] (10:node@node-9.acme.org)  2015257  | 6518808 
+> [ 831.000000] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 831.000000] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 831.000000] (10:node@node-9.acme.org)  2015285  | 6518808 
+> [ 831.000000] (10:node@node-9.acme.org)  2015317  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 831.000000] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 859.000000] (1:node@node-0.acme.org) My finger table:
+> [ 859.000000] (1:node@node-0.acme.org) Start | Succ 
+> [ 859.000000] (1:node@node-0.acme.org)   43  | 366680 
+> [ 859.000000] (1:node@node-0.acme.org)   44  | 366680 
+> [ 859.000000] (1:node@node-0.acme.org)   46  | 366680 
+> [ 859.000000] (1:node@node-0.acme.org)   50  | 366680 
+> [ 859.000000] (1:node@node-0.acme.org)   58  | 366680 
+> [ 859.000000] (1:node@node-0.acme.org)   74  | 366680 
+> [ 859.000000] (1:node@node-0.acme.org)  106  | 366680 
+> [ 859.000000] (1:node@node-0.acme.org)  170  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  298  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  554  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 859.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 859.000000] (1:node@node-0.acme.org) Predecessor: 16728096
+> [ 873.000000] (5:node@node-4.acme.org) My finger table:
+> [ 873.000000] (5:node@node-4.acme.org) Start | Succ 
+> [ 873.000000] (5:node@node-4.acme.org)  16509406  | 16728096 
+> [ 873.000000] (5:node@node-4.acme.org)  16509407  | 16728096 
+> [ 873.000000] (5:node@node-4.acme.org)  16509409  | 16728096 
+> [ 873.000000] (5:node@node-4.acme.org)  16509413  | 16728096 
+> [ 873.000000] (5:node@node-4.acme.org)  16509421  | 16728096 
+> [ 873.000000] (5:node@node-4.acme.org)  16509437  | 16728096 
+> [ 873.000000] (5:node@node-4.acme.org)  16509469  | 16728096 
+> [ 873.000000] (5:node@node-4.acme.org)  16509533  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16509661  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16509917  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16510429  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16511453  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16513501  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16517597  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16525789  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16542173  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16574941  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16640477  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  16771549  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  256477  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  780765  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  1829341  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  3926493  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org)  8120797  | 16509405 
+> [ 873.000000] (5:node@node-4.acme.org) Predecessor: 10874876
+> [ 893.000000] (3:node@node-2.acme.org) My finger table:
+> [ 893.000000] (3:node@node-2.acme.org) Start | Succ 
+> [ 893.000000] (3:node@node-2.acme.org)  533745  | 1319738 
+> [ 893.000000] (3:node@node-2.acme.org)  533746  | 10004760 
+> [ 893.000000] (3:node@node-2.acme.org)  533748  | 10004760 
+> [ 893.000000] (3:node@node-2.acme.org)  533752  | 1319738 
+> [ 893.000000] (3:node@node-2.acme.org)  533760  | 1319738 
+> [ 893.000000] (3:node@node-2.acme.org)  533776  | 1319738 
+> [ 893.000000] (3:node@node-2.acme.org)  533808  | 1319738 
+> [ 893.000000] (3:node@node-2.acme.org)  533872  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  534000  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  534256  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  534768  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  535792  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  537840  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  541936  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  550128  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  566512  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  599280  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  664816  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  795888  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  1058032  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  1582320  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  2630896  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  4728048  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org)  8922352  | 533744 
+> [ 893.000000] (3:node@node-2.acme.org) Predecessor: 366680
+> [ 896.000000] (7:node@node-6.acme.org) My finger table:
+> [ 896.000000] (7:node@node-6.acme.org) Start | Succ 
+> [ 896.000000] (7:node@node-6.acme.org)  16728097  |  42 
+> [ 896.000000] (7:node@node-6.acme.org)  16728098  |  42 
+> [ 896.000000] (7:node@node-6.acme.org)  16728100  |  42 
+> [ 896.000000] (7:node@node-6.acme.org)  16728104  |  42 
+> [ 896.000000] (7:node@node-6.acme.org)  16728112  |  42 
+> [ 896.000000] (7:node@node-6.acme.org)  16728128  |  42 
+> [ 896.000000] (7:node@node-6.acme.org)  16728160  |  42 
+> [ 896.000000] (7:node@node-6.acme.org)  16728224  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16728352  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16728608  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16729120  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16730144  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16732192  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16736288  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16744480  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16760864  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  16416  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  81952  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  213024  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  475168  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  999456  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  2048032  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  4145184  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org)  8339488  | 16728096 
+> [ 896.000000] (7:node@node-6.acme.org) Predecessor: 16509405
+> [ 899.000000] (6:node@node-5.acme.org) My finger table:
+> [ 899.000000] (6:node@node-5.acme.org) Start | Succ 
+> [ 899.000000] (6:node@node-5.acme.org)  10874877  | 16509405 
+> [ 899.000000] (6:node@node-5.acme.org)  10874878  | 533744 
+> [ 899.000000] (6:node@node-5.acme.org)  10874880  | 533744 
+> [ 899.000000] (6:node@node-5.acme.org)  10874884  | 533744 
+> [ 899.000000] (6:node@node-5.acme.org)  10874892  | 16728096 
+> [ 899.000000] (6:node@node-5.acme.org)  10874908  | 16509405 
+> [ 899.000000] (6:node@node-5.acme.org)  10874940  | 16509405 
+> [ 899.000000] (6:node@node-5.acme.org)  10875004  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10875132  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10875388  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10875900  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10876924  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10878972  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10883068  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10891260  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10907644  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  10940412  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  11005948  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  11137020  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  11399164  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  11923452  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  12972028  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  15069180  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org)  2486268  | 10874876 
+> [ 899.000000] (6:node@node-5.acme.org) Predecessor: 10004760
+> [ 899.000000] (8:node@node-7.acme.org) My finger table:
+> [ 899.000000] (8:node@node-7.acme.org) Start | Succ 
+> [ 899.000000] (8:node@node-7.acme.org)  10004761  | 10874876 
+> [ 899.000000] (8:node@node-7.acme.org)  10004762  | 16509405 
+> [ 899.000000] (8:node@node-7.acme.org)  10004764  | 16509405 
+> [ 899.000000] (8:node@node-7.acme.org)  10004768  | 16509405 
+> [ 899.000000] (8:node@node-7.acme.org)  10004776  | 16509405 
+> [ 899.000000] (8:node@node-7.acme.org)  10004792  | 10874876 
+> [ 899.000000] (8:node@node-7.acme.org)  10004824  | 10874876 
+> [ 899.000000] (8:node@node-7.acme.org)  10004888  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10005016  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10005272  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10005784  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10006808  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10008856  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10012952  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10021144  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10037528  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10070296  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10135832  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10266904  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  10529048  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  11053336  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  12101912  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  14199064  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org)  1616152  | 10004760 
+> [ 899.000000] (8:node@node-7.acme.org) Predecessor: 6518808
+> [ 921.000000] (2:node@node-1.acme.org) My finger table:
+> [ 921.000000] (2:node@node-1.acme.org) Start | Succ 
+> [ 921.000000] (2:node@node-1.acme.org)  366681  | 533744 
+> [ 921.000000] (2:node@node-1.acme.org)  366682  | 1319738 
+> [ 921.000000] (2:node@node-1.acme.org)  366684  | 1319738 
+> [ 921.000000] (2:node@node-1.acme.org)  366688  | 533744 
+> [ 921.000000] (2:node@node-1.acme.org)  366696  | 533744 
+> [ 921.000000] (2:node@node-1.acme.org)  366712  | 533744 
+> [ 921.000000] (2:node@node-1.acme.org)  366744  | 533744 
+> [ 921.000000] (2:node@node-1.acme.org)  366808  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  366936  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  367192  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  367704  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  368728  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  370776  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  374872  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  383064  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  399448  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  432216  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  497752  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  628824  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  890968  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  1415256  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  2463832  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  4560984  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org)  8755288  | 366680 
+> [ 921.000000] (2:node@node-1.acme.org) Predecessor: 42
+> [ 928.000000] (9:node@node-8.acme.org) My finger table:
+> [ 928.000000] (9:node@node-8.acme.org) Start | Succ 
+> [ 928.000000] (9:node@node-8.acme.org)  6518809  | 10004760 
+> [ 928.000000] (9:node@node-8.acme.org)  6518810  | 16728096 
+> [ 928.000000] (9:node@node-8.acme.org)  6518812  | 10004760 
+> [ 928.000000] (9:node@node-8.acme.org)  6518816  | 10004760 
+> [ 928.000000] (9:node@node-8.acme.org)  6518824  | 10004760 
+> [ 928.000000] (9:node@node-8.acme.org)  6518840  | 10004760 
+> [ 928.000000] (9:node@node-8.acme.org)  6518872  | 10004760 
+> [ 928.000000] (9:node@node-8.acme.org)  6518936  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6519064  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6519320  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6519832  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6520856  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6522904  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6527000  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6535192  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6551576  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6584344  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6649880  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  6780952  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  7043096  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  7567384  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  8615960  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  10713112  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org)  14907416  | 6518808 
+> [ 928.000000] (9:node@node-8.acme.org) Predecessor: 2015253
+> [ 930.000000] (4:node@node-3.acme.org) My finger table:
+> [ 930.000000] (4:node@node-3.acme.org) Start | Succ 
+> [ 930.000000] (4:node@node-3.acme.org)  1319739  | 2015253 
+> [ 930.000000] (4:node@node-3.acme.org)  1319740  | 2015253 
+> [ 930.000000] (4:node@node-3.acme.org)  1319742  | 2015253 
+> [ 930.000000] (4:node@node-3.acme.org)  1319746  | 2015253 
+> [ 930.000000] (4:node@node-3.acme.org)  1319754  | 2015253 
+> [ 930.000000] (4:node@node-3.acme.org)  1319770  | 2015253 
+> [ 930.000000] (4:node@node-3.acme.org)  1319802  | 2015253 
+> [ 930.000000] (4:node@node-3.acme.org)  1319866  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1319994  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1320250  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1320762  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1321786  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1323834  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1327930  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1336122  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1352506  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1385274  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1450810  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1581882  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  1844026  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  2368314  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  3416890  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  5514042  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org)  9708346  | 1319738 
+> [ 930.000000] (4:node@node-3.acme.org) Predecessor: 533744
+> [ 962.000000] (10:node@node-9.acme.org) My finger table:
+> [ 962.000000] (10:node@node-9.acme.org) Start | Succ 
+> [ 962.000000] (10:node@node-9.acme.org)  2015254  | 6518808 
+> [ 962.000000] (10:node@node-9.acme.org)  2015255  | 6518808 
+> [ 962.000000] (10:node@node-9.acme.org)  2015257  | 6518808 
+> [ 962.000000] (10:node@node-9.acme.org)  2015261  | 6518808 
+> [ 962.000000] (10:node@node-9.acme.org)  2015269  | 6518808 
+> [ 962.000000] (10:node@node-9.acme.org)  2015285  | 6518808 
+> [ 962.000000] (10:node@node-9.acme.org)  2015317  | 6518808 
+> [ 962.000000] (10:node@node-9.acme.org)  2015381  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2015509  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2015765  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2016277  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2017301  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2019349  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2023445  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2031637  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2048021  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2080789  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2146325  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2277397  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  2539541  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  3063829  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  4112405  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  6209557  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org)  10403861  | 2015253 
+> [ 962.000000] (10:node@node-9.acme.org) Predecessor: 1319738
+> [ 982.000000] (1:node@node-0.acme.org) My finger table:
+> [ 982.000000] (1:node@node-0.acme.org) Start | Succ 
+> [ 982.000000] (1:node@node-0.acme.org)   43  | 366680 
+> [ 982.000000] (1:node@node-0.acme.org)   44  | 366680 
+> [ 982.000000] (1:node@node-0.acme.org)   46  | 366680 
+> [ 982.000000] (1:node@node-0.acme.org)   50  | 366680 
+> [ 982.000000] (1:node@node-0.acme.org)   58  | 366680 
+> [ 982.000000] (1:node@node-0.acme.org)   74  | 366680 
+> [ 982.000000] (1:node@node-0.acme.org)  106  | 366680 
+> [ 982.000000] (1:node@node-0.acme.org)  170  | 366680 
+> [ 982.000000] (1:node@node-0.acme.org)  298  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  554  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  1066  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  2090  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  4138  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  8234  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  16426  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  32810  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  65578  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  131114  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  262186  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  524330  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  1048618  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  2097194  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  4194346  |  42 
+> [ 982.000000] (1:node@node-0.acme.org)  8388650  |  42 
+> [ 982.000000] (1:node@node-0.acme.org) Predecessor: 16728096
 > [1154.000000] (0:@) Messages created: 2049
 > [1154.000000] (0:@) Simulated time: 1154
index 8c977f3..44c61f4 100644 (file)
@@ -4,95 +4,95 @@ p Testing the Parallel Matrix Multiplication
 
 ! timeout 120
 $ ./pmm/msg_pmm --log=msg_pmm.thres:verbose --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/pmm/pmm_9_deploy.xml
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 0
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 1
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 2
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 3
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 4
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 5
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 6
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 7
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 8
-> [c-0.me:node:(1) 0.000000] [msg_pmm/VERBOSE] Broadcast Jobs
-> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Got Job (0,2)
-> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,2) to col 2
-> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Got Job (0,1)
-> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,1) to col 1
-> [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Got Job (2,2)
-> [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-8.me:node:(9) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.007813] [msg_pmm/VERBOSE] Got Job (2,1)
-> [c-7.me:node:(8) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-7.me:node:(8) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-6.me:node:(7) 0.007813] [msg_pmm/VERBOSE] Got Job (2,0)
-> [c-6.me:node:(7) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-6.me:node:(7) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(2,0) to row 2
-> [c-5.me:node:(6) 0.007813] [msg_pmm/VERBOSE] Got Job (1,2)
-> [c-5.me:node:(6) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-5.me:node:(6) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-4.me:node:(5) 0.007813] [msg_pmm/VERBOSE] Got Job (1,1)
-> [c-4.me:node:(5) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-4.me:node:(5) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Got Job (1,0)
-> [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(1,0) to row 1
-> [c-2.me:node:(3) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-1.me:node:(2) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-6.me:node:(7) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-3.me:node:(4) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(0,0) to row 0
-> [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,0) to col 0
-> [c-0.me:node:(1) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-4.me:node:(5) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-8.me:node:(9) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-5.me:node:(6) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-6.me:node:(7) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-2.me:node:(3) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-3.me:node:(4) 0.015619] [msg_pmm/VERBOSE] Broadcast sB(1,0) to col 0
-> [c-1.me:node:(2) 0.015619] [msg_pmm/VERBOSE] Broadcast sA(0,1) to row 0
-> [c-3.me:node:(4) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-1.me:node:(2) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-8.me:node:(9) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-2.me:node:(3) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(2,1) to row 2
-> [c-5.me:node:(6) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,2) to col 2
-> [c-6.me:node:(7) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(1,1) to row 1
-> [c-0.me:node:(1) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-5.me:node:(6) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,1) to col 1
-> [c-4.me:node:(5) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-2.me:node:(3) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(0,2) to row 0
-> [c-0.me:node:(1) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-6.me:node:(7) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,0) to col 0
-> [c-8.me:node:(9) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-5.me:node:(6) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(1,2) to row 1
-> [c-3.me:node:(4) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-1.me:node:(2) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,1) to col 1
-> [c-2.me:node:(3) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-6.me:node:(7) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-5.me:node:(6) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-7.me:node:(8) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-0.me:node:(1) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-1.me:node:(2) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sA(2,2) to row 2
-> [c-3.me:node:(4) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-4.me:node:(5) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sB(2,2) to col 2
-> [c-8.me:node:(9) 0.039040] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-1.me:node:(2) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-4.me:node:(5) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-3.me:node:(4) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-0.me:node:(1) 0.046847] [msg_pmm/VERBOSE] Multiplication done.
-> [c-0.me:node:(1) 0.046847] [msg_pmm/VERBOSE] Receive Results.
-> [c-6.me:node:(7) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-2.me:node:(3) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-5.me:node:(6) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [c-7.me:node:(8) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 0
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 1
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 2
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 3
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 4
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 5
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 6
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 7
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 8
+> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Broadcast Jobs
+> [node-2.acme.org:node:(3) 0.007813] [msg_pmm/VERBOSE] Got Job (0,2)
+> [node-2.acme.org:node:(3) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-2.acme.org:node:(3) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,2) to col 2
+> [node-1.acme.org:node:(2) 0.007813] [msg_pmm/VERBOSE] Got Job (0,1)
+> [node-1.acme.org:node:(2) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-1.acme.org:node:(2) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,1) to col 1
+> [node-8.acme.org:node:(9) 0.007813] [msg_pmm/VERBOSE] Got Job (2,2)
+> [node-8.acme.org:node:(9) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-8.acme.org:node:(9) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-7.acme.org:node:(8) 0.007813] [msg_pmm/VERBOSE] Got Job (2,1)
+> [node-7.acme.org:node:(8) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-7.acme.org:node:(8) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-6.acme.org:node:(7) 0.007813] [msg_pmm/VERBOSE] Got Job (2,0)
+> [node-6.acme.org:node:(7) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-6.acme.org:node:(7) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(2,0) to row 2
+> [node-5.acme.org:node:(6) 0.007813] [msg_pmm/VERBOSE] Got Job (1,2)
+> [node-5.acme.org:node:(6) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-5.acme.org:node:(6) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-4.acme.org:node:(5) 0.007813] [msg_pmm/VERBOSE] Got Job (1,1)
+> [node-4.acme.org:node:(5) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-4.acme.org:node:(5) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-3.acme.org:node:(4) 0.007813] [msg_pmm/VERBOSE] Got Job (1,0)
+> [node-3.acme.org:node:(4) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-3.acme.org:node:(4) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(1,0) to row 1
+> [node-2.acme.org:node:(3) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-1.acme.org:node:(2) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-6.acme.org:node:(7) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-3.acme.org:node:(4) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-0.acme.org:node:(1) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
+> [node-0.acme.org:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(0,0) to row 0
+> [node-0.acme.org:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,0) to col 0
+> [node-0.acme.org:node:(1) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-7.acme.org:node:(8) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-4.acme.org:node:(5) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-8.acme.org:node:(9) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-5.acme.org:node:(6) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-6.acme.org:node:(7) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-2.acme.org:node:(3) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-3.acme.org:node:(4) 0.015619] [msg_pmm/VERBOSE] Broadcast sB(1,0) to col 0
+> [node-1.acme.org:node:(2) 0.015619] [msg_pmm/VERBOSE] Broadcast sA(0,1) to row 0
+> [node-3.acme.org:node:(4) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-1.acme.org:node:(2) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-8.acme.org:node:(9) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-2.acme.org:node:(3) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-7.acme.org:node:(8) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(2,1) to row 2
+> [node-5.acme.org:node:(6) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,2) to col 2
+> [node-6.acme.org:node:(7) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-4.acme.org:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(1,1) to row 1
+> [node-0.acme.org:node:(1) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-7.acme.org:node:(8) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-5.acme.org:node:(6) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-4.acme.org:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,1) to col 1
+> [node-4.acme.org:node:(5) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-2.acme.org:node:(3) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(0,2) to row 0
+> [node-0.acme.org:node:(1) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-6.acme.org:node:(7) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,0) to col 0
+> [node-8.acme.org:node:(9) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-5.acme.org:node:(6) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(1,2) to row 1
+> [node-3.acme.org:node:(4) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-1.acme.org:node:(2) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-7.acme.org:node:(8) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,1) to col 1
+> [node-2.acme.org:node:(3) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-6.acme.org:node:(7) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-5.acme.org:node:(6) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-7.acme.org:node:(8) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-0.acme.org:node:(1) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-1.acme.org:node:(2) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-8.acme.org:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sA(2,2) to row 2
+> [node-3.acme.org:node:(4) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-4.acme.org:node:(5) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
+> [node-8.acme.org:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sB(2,2) to col 2
+> [node-8.acme.org:node:(9) 0.039040] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [node-1.acme.org:node:(2) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [node-4.acme.org:node:(5) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [node-3.acme.org:node:(4) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [node-0.acme.org:node:(1) 0.046847] [msg_pmm/VERBOSE] Multiplication done.
+> [node-0.acme.org:node:(1) 0.046847] [msg_pmm/VERBOSE] Receive Results.
+> [node-6.acme.org:node:(7) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [node-2.acme.org:node:(3) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [node-5.acme.org:node:(6) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
+> [node-7.acme.org:node:(8) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
 > [0.054659] [msg_pmm/CRITICAL] Simulated time: 0.0546594
index 53850bf..8782331 100644 (file)
@@ -1,13 +1,13 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
-  <process host="c-0.me" function="node"><argument value="0"/></process>
-  <process host="c-1.me" function="node"><argument value="1"/></process>
-  <process host="c-2.me" function="node"><argument value="2"/></process>
-  <process host="c-3.me" function="node"><argument value="3"/></process>
-  <process host="c-4.me" function="node"><argument value="4"/></process>
-  <process host="c-5.me" function="node"><argument value="5"/></process>
-  <process host="c-6.me" function="node"><argument value="6"/></process>
-  <process host="c-7.me" function="node"><argument value="7"/></process>
-  <process host="c-8.me" function="node"><argument value="8"/></process>
+  <process host="node-0.acme.org" function="node"><argument value="0"/></process>
+  <process host="node-1.acme.org" function="node"><argument value="1"/></process>
+  <process host="node-2.acme.org" function="node"><argument value="2"/></process>
+  <process host="node-3.acme.org" function="node"><argument value="3"/></process>
+  <process host="node-4.acme.org" function="node"><argument value="4"/></process>
+  <process host="node-5.acme.org" function="node"><argument value="5"/></process>
+  <process host="node-6.acme.org" function="node"><argument value="6"/></process>
+  <process host="node-7.acme.org" function="node"><argument value="7"/></process>
+  <process host="node-8.acme.org" function="node"><argument value="8"/></process>
 </platform>
index e660024..6ea54d8 100644 (file)
@@ -62,7 +62,7 @@ static void test_host(const char*hostname)
   XBT_INFO("   Property: %s old value: %s", exist, value);
 
   XBT_INFO("== Trying to modify a host property");
-  MSG_host_set_property_value(thehost, exist, xbt_strdup("250"), NULL);
+  MSG_host_set_property_value(thehost, exist, xbt_strdup("250"), xbt_free_f);
 
   /* Test if we have changed the value */
   value = MSG_host_get_property_value(thehost, exist);
@@ -73,7 +73,7 @@ static void test_host(const char*hostname)
   XBT_INFO("   Property: %s old value: %s", exist, value);
 
   /* Restore the value for the next test */
-  MSG_host_set_property_value(thehost, exist, xbt_strdup("180"), NULL);
+  MSG_host_set_property_value(thehost, exist, xbt_strdup("180"), xbt_free_f);
 }
 
 int alice(int argc, char *argv[]) { /* Dump what we have on the current host */
index 0656eb2..cca42ac 100644 (file)
@@ -29,7 +29,7 @@ int receiver(int argc, char *argv[]);
 msg_error_t test_all(const char *platform_file,
                      const char *application_file);
 
-double task_comm_size_lat = 10e0;
+double task_comm_size_lat = 1;
 double task_comm_size_bw = 10e8;
 
 /** Emitter function  */
index f795621..0d9b72f 100644 (file)
@@ -12,11 +12,11 @@ $ $SG_TEST_EXENV sendrecv/sendrecv$EXEEXT ${srcdir:=.}/sendrecv/platform_sendrec
 > [  0.000000] (1:sender@Inmos) host = Bellevue
 > [  0.000000] (1:sender@Inmos) task_la->data = 0.000000e+00
 > [  0.000000] (2:receiver@Bellevue) receiver
-> [  0.100010] (1:sender@Inmos) task_bw->data = 1.000100e-01
-> [  0.100010] (2:receiver@Bellevue) Task received : latency task
-> [  0.100010] (2:receiver@Bellevue) Communic. time 1.000100e-01
-> [  0.100010] (2:receiver@Bellevue) --- la 0.100010 ----
-> [1000.200010] (0:@) Total simulation time: 1.000200e+03
-> [1000.200010] (2:receiver@Bellevue) Task received : bandwidth task
-> [1000.200010] (2:receiver@Bellevue) Communic. time 1.000100e+03
-> [1000.200010] (2:receiver@Bellevue) --- bw 999900.009999 ----
+> [  0.100001] (1:sender@Inmos) task_bw->data = 1.000010e-01
+> [  0.100001] (2:receiver@Bellevue) Task received : latency task
+> [  0.100001] (2:receiver@Bellevue) Communic. time 1.000010e-01
+> [  0.100001] (2:receiver@Bellevue) --- la 0.100001 ----
+> [1000.200001] (0:@) Total simulation time: 1.000200e+03
+> [1000.200001] (2:receiver@Bellevue) Task received : bandwidth task
+> [1000.200001] (2:receiver@Bellevue) Communic. time 1.000100e+03
+> [1000.200001] (2:receiver@Bellevue) --- bw 999900.009999 ----
index bcbf65b..5daf28f 100644 (file)
@@ -12,11 +12,11 @@ $ $SG_TEST_EXENV sendrecv/sendrecv$EXEEXT ${srcdir:=.}/sendrecv/platform_sendrec
 > [  0.000000] (1:sender@Inmos) host = Bellevue
 > [  0.000000] (1:sender@Inmos) task_la->data = 0.000000e+00
 > [  0.000000] (2:receiver@Bellevue) receiver
-> [  1.040011] (1:sender@Inmos) task_bw->data = 1.040011e+00
-> [  1.040011] (2:receiver@Bellevue) Task received : latency task
-> [  1.040011] (2:receiver@Bellevue) Communic. time 1.040011e+00
-> [  1.040011] (2:receiver@Bellevue) --- la 1.040011 ----
-> [1089.036533] (0:@) Total simulation time: 1.089037e+03
-> [1089.036533] (2:receiver@Bellevue) Task received : bandwidth task
-> [1089.036533] (2:receiver@Bellevue) Communic. time 1.087997e+03
-> [1089.036533] (2:receiver@Bellevue) --- bw 919120.585424 ----
+> [  1.040001] (1:sender@Inmos) task_bw->data = 1.040001e+00
+> [  1.040001] (2:receiver@Bellevue) Task received : latency task
+> [  1.040001] (2:receiver@Bellevue) Communic. time 1.040001e+00
+> [  1.040001] (2:receiver@Bellevue) --- la 1.040001 ----
+> [1089.036523] (0:@) Total simulation time: 1.089037e+03
+> [1089.036523] (2:receiver@Bellevue) Task received : bandwidth task
+> [1089.036523] (2:receiver@Bellevue) Communic. time 1.087997e+03
+> [1089.036523] (2:receiver@Bellevue) --- bw 919120.585424 ----
index 058ce43..ae11e2e 100644 (file)
@@ -12,11 +12,11 @@ $ $SG_TEST_EXENV sendrecv/sendrecv$EXEEXT ${srcdir:=.}/sendrecv/platform_sendrec
 > [  0.000000] (1:sender@Inmos) host = Bellevue
 > [  0.000000] (1:sender@Inmos) task_la->data = 0.000000e+00
 > [  0.000000] (2:receiver@Bellevue) receiver
-> [  1.040011] (1:sender@Inmos) task_bw->data = 1.040011e+00
-> [  1.040011] (2:receiver@Bellevue) Task received : latency task
-> [  1.040011] (2:receiver@Bellevue) Communic. time 1.040011e+00
-> [  1.040011] (2:receiver@Bellevue) --- la 1.040011 ----
-> [1089.036533] (0:@) Total simulation time: 1.089037e+03
-> [1089.036533] (2:receiver@Bellevue) Task received : bandwidth task
-> [1089.036533] (2:receiver@Bellevue) Communic. time 1.087997e+03
-> [1089.036533] (2:receiver@Bellevue) --- bw 919120.585424 ----
+> [  1.040001] (1:sender@Inmos) task_bw->data = 1.040001e+00
+> [  1.040001] (2:receiver@Bellevue) Task received : latency task
+> [  1.040001] (2:receiver@Bellevue) Communic. time 1.040001e+00
+> [  1.040001] (2:receiver@Bellevue) --- la 1.040001 ----
+> [1089.036523] (0:@) Total simulation time: 1.089037e+03
+> [1089.036523] (2:receiver@Bellevue) Task received : bandwidth task
+> [1089.036523] (2:receiver@Bellevue) Communic. time 1.087997e+03
+> [1089.036523] (2:receiver@Bellevue) --- bw 919120.585424 ----
index 77a7713..fefeb8e 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
-    <process host="c-0.me" function="master"/>
-       <process host="c-1.me" function="slave"/>
-       <process host="c-2.me" function="slave"/>
-       <process host="c-3.me" function="slave"/>
-       <process host="c-4.me" function="slave"/>
-       <process host="c-5.me" function="slave"/>
-</platform>
\ No newline at end of file
+    <process host="node-0.acme.org" function="master"/>
+       <process host="node-1.acme.org" function="slave"/>
+       <process host="node-2.acme.org" function="slave"/>
+       <process host="node-3.acme.org" function="slave"/>
+       <process host="node-4.acme.org" function="slave"/>
+       <process host="node-5.acme.org" function="slave"/>
+</platform>
index c8fe38c..39cdf4e 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
-    <process host="c-0.me" function="master"/>
-       <process host="c-1.me" function="slave" kill_time="6"/>
-       <process host="c-2.me" function="slave" kill_time="6"/>
-       <process host="c-3.me" function="slave" kill_time="6"/>
-       <process host="c-4.me" function="slave" kill_time="6"/>
-       <process host="c-5.me" function="slave" kill_time="6"/>
-</platform>
\ No newline at end of file
+    <process host="node-0.acme.org" function="master"/>
+       <process host="node-1.acme.org" function="slave" kill_time="6"/>
+       <process host="node-2.acme.org" function="slave" kill_time="6"/>
+       <process host="node-3.acme.org" function="slave" kill_time="6"/>
+       <process host="node-4.acme.org" function="slave" kill_time="6"/>
+       <process host="node-5.acme.org" function="slave" kill_time="6"/>
+</platform>
index a5c56f0..203df2b 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
-    <process host="c-0.me" function="master"/>
-       <process host="c-1.me" function="slave" start_time="1"/>
-       <process host="c-2.me" function="slave" start_time="2"/>
-       <process host="c-3.me" function="slave" start_time="3"/>
-       <process host="c-4.me" function="slave" start_time="4"/>
-       <process host="c-5.me" function="slave" start_time="5"/>
-</platform>
\ No newline at end of file
+    <process host="node-0.acme.org" function="master"/>
+       <process host="node-1.acme.org" function="slave" start_time="1"/>
+       <process host="node-2.acme.org" function="slave" start_time="2"/>
+       <process host="node-3.acme.org" function="slave" start_time="3"/>
+       <process host="node-4.acme.org" function="slave" start_time="4"/>
+       <process host="node-5.acme.org" function="slave" start_time="5"/>
+</platform>
index 4342a09..d4beac4 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
-    <process host="c-0.me" function="master"/>
-       <process host="c-1.me" function="slave" start_time="1" kill_time="5"/>
-       <process host="c-2.me" function="slave" start_time="2" kill_time="6"/>
-       <process host="c-3.me" function="slave" start_time="3" kill_time="7"/>
-       <process host="c-4.me" function="slave" start_time="4" kill_time="8"/>
-       <process host="c-5.me" function="slave" start_time="5" kill_time="9"/>
-</platform>
\ No newline at end of file
+    <process host="node-0.acme.org" function="master"/>
+       <process host="node-1.acme.org" function="slave" start_time="1" kill_time="5"/>
+       <process host="node-2.acme.org" function="slave" start_time="2" kill_time="6"/>
+       <process host="node-3.acme.org" function="slave" start_time="3" kill_time="7"/>
+       <process host="node-4.acme.org" function="slave" start_time="4" kill_time="8"/>
+       <process host="node-5.acme.org" function="slave" start_time="5" kill_time="9"/>
+</platform>
index f54c9d6..4e98d61 100644 (file)
@@ -3,57 +3,57 @@
 p Test0 Process without time
 
 $ $SG_TEST_EXENV ${bindir:=.}/start_kill_time/sk_time ${srcdir:=.}/examples/platforms/cluster.xml ${srcdir:=.}/examples/msg/start_kill_time/deployment.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:master@c-0.me) Hello!
-> [  0.000000] (2:slave@c-1.me) Hello!
-> [  0.000000] (3:slave@c-2.me) Hello!
-> [  0.000000] (4:slave@c-3.me) Hello!
-> [  0.000000] (5:slave@c-4.me) Hello!
-> [  0.000000] (6:slave@c-5.me) Hello!
-> [ 10.000000] (6:slave@c-5.me) OK, goodbye now.
-> [ 10.000000] (1:master@c-0.me) OK, goodbye now.
-> [ 10.000000] (2:slave@c-1.me) OK, goodbye now.
-> [ 10.000000] (3:slave@c-2.me) OK, goodbye now.
-> [ 10.000000] (4:slave@c-3.me) OK, goodbye now.
-> [ 10.000000] (5:slave@c-4.me) OK, goodbye now.
+> [  0.000000] (1:master@node-0.acme.org) Hello!
+> [  0.000000] (2:slave@node-1.acme.org) Hello!
+> [  0.000000] (3:slave@node-2.acme.org) Hello!
+> [  0.000000] (4:slave@node-3.acme.org) Hello!
+> [  0.000000] (5:slave@node-4.acme.org) Hello!
+> [  0.000000] (6:slave@node-5.acme.org) Hello!
+> [ 10.000000] (6:slave@node-5.acme.org) OK, goodbye now.
+> [ 10.000000] (1:master@node-0.acme.org) OK, goodbye now.
+> [ 10.000000] (2:slave@node-1.acme.org) OK, goodbye now.
+> [ 10.000000] (3:slave@node-2.acme.org) OK, goodbye now.
+> [ 10.000000] (4:slave@node-3.acme.org) OK, goodbye now.
+> [ 10.000000] (5:slave@node-4.acme.org) OK, goodbye now.
 > [ 10.000000] (0:@) Simulation time 10
 
 p Test1 Process with start time
 
 $ $SG_TEST_EXENV ${bindir:=.}/start_kill_time/sk_time ${srcdir:=.}/examples/platforms/cluster.xml ${srcdir:=.}/examples/msg/start_kill_time/deployment_start.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:master@c-0.me) Hello!
-> [  1.000000] (2:slave@c-1.me) Hello!
-> [  2.000000] (3:slave@c-2.me) Hello!
-> [  3.000000] (4:slave@c-3.me) Hello!
-> [  4.000000] (5:slave@c-4.me) Hello!
-> [  5.000000] (6:slave@c-5.me) Hello!
-> [ 10.000000] (1:master@c-0.me) OK, goodbye now.
-> [ 11.000000] (2:slave@c-1.me) OK, goodbye now.
-> [ 12.000000] (3:slave@c-2.me) OK, goodbye now.
-> [ 13.000000] (4:slave@c-3.me) OK, goodbye now.
-> [ 14.000000] (5:slave@c-4.me) OK, goodbye now.
-> [ 15.000000] (6:slave@c-5.me) OK, goodbye now.
+> [  0.000000] (1:master@node-0.acme.org) Hello!
+> [  1.000000] (2:slave@node-1.acme.org) Hello!
+> [  2.000000] (3:slave@node-2.acme.org) Hello!
+> [  3.000000] (4:slave@node-3.acme.org) Hello!
+> [  4.000000] (5:slave@node-4.acme.org) Hello!
+> [  5.000000] (6:slave@node-5.acme.org) Hello!
+> [ 10.000000] (1:master@node-0.acme.org) OK, goodbye now.
+> [ 11.000000] (2:slave@node-1.acme.org) OK, goodbye now.
+> [ 12.000000] (3:slave@node-2.acme.org) OK, goodbye now.
+> [ 13.000000] (4:slave@node-3.acme.org) OK, goodbye now.
+> [ 14.000000] (5:slave@node-4.acme.org) OK, goodbye now.
+> [ 15.000000] (6:slave@node-5.acme.org) OK, goodbye now.
 > [ 15.000000] (0:@) Simulation time 15
 
 p Test1 Process with kill time
 
 $ $SG_TEST_EXENV ${bindir:=.}/start_kill_time/sk_time ${srcdir:=.}/examples/platforms/cluster.xml ${srcdir:=.}/examples/msg/start_kill_time/deployment_kill.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:master@c-0.me) Hello!
-> [  0.000000] (2:slave@c-1.me) Hello!
-> [  0.000000] (3:slave@c-2.me) Hello!
-> [  0.000000] (4:slave@c-3.me) Hello!
-> [  0.000000] (5:slave@c-4.me) Hello!
-> [  0.000000] (6:slave@c-5.me) Hello!
-> [ 10.000000] (1:master@c-0.me) OK, goodbye now.
+> [  0.000000] (1:master@node-0.acme.org) Hello!
+> [  0.000000] (2:slave@node-1.acme.org) Hello!
+> [  0.000000] (3:slave@node-2.acme.org) Hello!
+> [  0.000000] (4:slave@node-3.acme.org) Hello!
+> [  0.000000] (5:slave@node-4.acme.org) Hello!
+> [  0.000000] (6:slave@node-5.acme.org) Hello!
+> [ 10.000000] (1:master@node-0.acme.org) OK, goodbye now.
 > [ 10.000000] (0:@) Simulation time 10
 
 p Test2 Process with start and kill times
 
 $ $SG_TEST_EXENV ${bindir:=.}/start_kill_time/sk_time ${srcdir:=.}/examples/platforms/cluster.xml ${srcdir:=.}/examples/msg/start_kill_time/deployment_start_kill.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:master@c-0.me) Hello!
-> [  1.000000] (2:slave@c-1.me) Hello!
-> [  2.000000] (3:slave@c-2.me) Hello!
-> [  3.000000] (4:slave@c-3.me) Hello!
-> [  4.000000] (5:slave@c-4.me) Hello!
-> [  5.000000] (6:slave@c-5.me) Hello!
-> [ 10.000000] (1:master@c-0.me) OK, goodbye now.
+> [  0.000000] (1:master@node-0.acme.org) Hello!
+> [  1.000000] (2:slave@node-1.acme.org) Hello!
+> [  2.000000] (3:slave@node-2.acme.org) Hello!
+> [  3.000000] (4:slave@node-3.acme.org) Hello!
+> [  4.000000] (5:slave@node-4.acme.org) Hello!
+> [  5.000000] (6:slave@node-5.acme.org) Hello!
+> [ 10.000000] (1:master@node-0.acme.org) OK, goodbye now.
 > [ 10.000000] (0:@) Simulation time 10
index 4b67f5b..d87ee87 100644 (file)
@@ -8,12 +8,12 @@
     l0|        l1| l2|           l97| l96 |   | l99
       |   |   |   ........   |     |   |
       |                                |
-    c-0.me                             c-99.me 
+  node-0.acme.org                  node-99.acme.org
 -->
 <platform version="3">
-<AS  id="AS0"  routing="Full">
-  <cluster id="my_cluster_1" prefix="c-" suffix=".me"
-               radical="0-99"  power="1Gf"    bw="125MBps"     lat="50us"
-        bb_bw="2.25GBps" bb_lat="500us"/>
-</AS>
+  <cluster id="acme"
+           prefix="node-"    suffix=".acme.org"
+           radical="0-99"    power="1Gf" 
+          bw="125MBps"      lat="50us"
+           bb_bw="2.25GBps"  bb_lat="500us"/>
 </platform>
index d957aee..41cb6c8 100644 (file)
@@ -6,11 +6,19 @@
   </process>
   <process host="bob" function="host">
     <argument value = "/scratch/lib/libsimgrid.so.3.6.2"/>
+    <argument value = "/scratch/doc/simgrid/examples/platforms/g5k.xml"/>
+    <argument value = "alice"/>
+    <argument value = "c:\Windows\Platforms\g5k.xml"/>
+    <argument value = "0"/>
   </process>
   <process host="carl" function="host">
     <argument value = "/scratch/lib/libsimgrid.so.3.6.2"/>
   </process>
   <process host="dave" function="host">
     <argument value = "c:\Windows\bootstat.dat"/>
+    <argument value = "c:\Windows\Professional.xml"/>
+    <argument value = "carl"/>
+    <argument value = "/scratch/mailbox/Professional.xml"/>
+    <argument value = "1"/>
   </process>
 </platform>
diff --git a/examples/platforms/fat_tree_cluster.xml b/examples/platforms/fat_tree_cluster.xml
new file mode 100644 (file)
index 0000000..d20e7fb
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+
+<!-- This is an example for a fat tree cluster. 
+This is taken from figure 1/ b/ of the paper "D-Mod-K Routing Providing 
+Non-Blocking Traffic for Shift Permutations on Real Life Fat Trees"  
+available at webee.technion.ac.il/publication-link/index/id/574
+This defines a two levels fat-tree, with 4 leaf switches connected to 4 nodes each
+and 2 core switches connected to each leaf switch by two cables
+-->
+
+<platform version="3">
+<AS id="AS0" routing="Full">
+<cluster id="bob_cluster" prefix="bob" suffix=".hamburger.edu"
+  radical="0-15" power="1Gf" bw="125MBps" lat="50us" topology="FAT_TREE" topo_parameters="2;4,4;1,2;1,2" 
+  loopback_bw="100000000" loopback_lat="0"/>
+</AS>
+</platform>
index 5736762..0ffef3d 100644 (file)
@@ -54,7 +54,7 @@ int main(int argc, char **argv)
 
 
   /* Trying to set a new property */
-  xbt_dict_set(props, "NewProp", strdup("newValue"), NULL);
+  xbt_dict_set(props, "NewProp", strdup("newValue"), xbt_free_f);
 
   /* Print the properties of the workstation 1 */
   xbt_dict_foreach(props, cursor, key, data) {
@@ -88,7 +88,7 @@ int main(int argc, char **argv)
     XBT_INFO("\tProperty: %s is undefined", exist);
   else {
     XBT_INFO("\tProperty: %s old value: %s", exist, value);
-    xbt_dict_set(props, exist, strdup("250"), NULL);
+    xbt_dict_set(props, exist, strdup("250"), xbt_free_f);
   }
 
   /* Test if we have changed the value */
index 52709c2..6fd67a1 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND SMPI_F2C)
+if(enable_smpi AND SMPI_FORTRAN)
   set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
 
   set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
index 1f4b353..a8f82fd 100644 (file)
@@ -10,17 +10,17 @@ $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platf
 > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s)
 > [80.000000] [surf_energy/INFO] Total energy (Joules) of host MyHost1: 12900.000000
 > [80.000000] [surf_energy/INFO] Total energy (Joules) of host MyHost2: 2000.000000
->  [  0.] [rank  0] 3 pstates available
->  [  0.] [rank  1] 1 pstates available
->  [  0.] [rank  0] Power:   100000000.
->  [  0.] [rank  1] Power:   100000000.
->  [  0.] [rank  0] Power:   50000000.
->  [  0.] [rank  0] Power:   20000000.
->  [  0.] [rank  1] Current pstate:  0; Current power:   100000000.
->  [  0.] [rank  0] Current pstate:  0; Current power:   100000000.
->  [  10.] [rank  1] Energy consumed (Joules):   2000.
->  [  10.] [rank  0] Energy consumed (Joules):   2000.
->  [  10.] [rank  0] Current pstate:  1; Current power:   50000000.
->  [  30.] [rank  0] Energy consumed (Joules):   5400.
->  [  30.] [rank  0] Current pstate:  2; Current power:   20000000.
->  [  80.] [rank  0] Energy consumed (Joules):   12900.
+>  [   0.0000000000000000      ] [rank            0 ]           3  pstates available
+>  [   0.0000000000000000      ] [rank            1 ]           1  pstates available
+>  [   0.0000000000000000      ] [rank            0 ] Power:    100000000.00000000     
+>  [   0.0000000000000000      ] [rank            1 ] Power:    100000000.00000000     
+>  [   0.0000000000000000      ] [rank            0 ] Power:    50000000.000000000     
+>  [   0.0000000000000000      ] [rank            0 ] Power:    20000000.000000000     
+>  [   0.0000000000000000      ] [rank            1 ] Current pstate:            0 ; Current power:    100000000.00000000     
+>  [   0.0000000000000000      ] [rank            0 ] Current pstate:            0 ; Current power:    100000000.00000000     
+>  [   10.000000000000000      ] [rank            1 ] Energy consumed (Joules):    2000.0000000000000     
+>  [   10.000000000000000      ] [rank            0 ] Energy consumed (Joules):    2000.0000000000000     
+>  [   10.000000000000000      ] [rank            0 ] Current pstate:            1 ; Current power:    50000000.000000000     
+>  [   30.000000000000000      ] [rank            0 ] Energy consumed (Joules):    5400.0000000000000     
+>  [   30.000000000000000      ] [rank            0 ] Current pstate:            2 ; Current power:    20000000.000000000     
+>  [   80.000000000000000      ] [rank            0 ] Energy consumed (Joules):    12900.000000000000     
index 84b55b5..9187792 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND SMPI_F90)
+if(enable_smpi AND SMPI_FORTRAN)
   set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
 
   set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
index b6d1c07..4ae7dab 100644 (file)
@@ -1,3 +1,3 @@
-c-1.me
-c-2.me
-c-3.me
+node-1.acme.org
+node-2.acme.org
+node-3.acme.org
index b6d1c07..4ae7dab 100644 (file)
@@ -1,3 +1,3 @@
-c-1.me
-c-2.me
-c-3.me
+node-1.acme.org
+node-2.acme.org
+node-3.acme.org
index 7c988f8..c5d2c79 100644 (file)
@@ -1,36 +1,36 @@
-c-1.me
-c-2.me
-c-3.me
-c-4.me
-c-5.me
-c-6.me
-c-7.me
-c-8.me
-c-9.me
-c-10.me
-c-11.me
-c-12.me
-c-13.me
-c-14.me
-c-15.me
-c-16.me
-c-17.me
-c-18.me
-c-19.me
-c-20.me
-c-21.me
-c-22.me
-c-23.me
-c-24.me
-c-25.me
-c-26.me
-c-27.me
-c-28.me
-c-29.me
-c-30.me
-c-31.me
-c-32.me
-c-33.me
-c-34.me
-c-35.me
-c-36.me
+node-1.acme.org
+node-2.acme.org
+node-3.acme.org
+node-4.acme.org
+node-5.acme.org
+node-6.acme.org
+node-7.acme.org
+node-8.acme.org
+node-9.acme.org
+node-10.acme.org
+node-11.acme.org
+node-12.acme.org
+node-13.acme.org
+node-14.acme.org
+node-15.acme.org
+node-16.acme.org
+node-17.acme.org
+node-18.acme.org
+node-19.acme.org
+node-20.acme.org
+node-21.acme.org
+node-22.acme.org
+node-23.acme.org
+node-24.acme.org
+node-25.acme.org
+node-26.acme.org
+node-27.acme.org
+node-28.acme.org
+node-29.acme.org
+node-30.acme.org
+node-31.acme.org
+node-32.acme.org
+node-33.acme.org
+node-34.acme.org
+node-35.acme.org
+node-36.acme.org
index b6d1c07..4ae7dab 100644 (file)
@@ -1,3 +1,3 @@
-c-1.me
-c-2.me
-c-3.me
+node-1.acme.org
+node-2.acme.org
+node-3.acme.org
index b6d1c07..4ae7dab 100644 (file)
@@ -1,3 +1,3 @@
-c-1.me
-c-2.me
-c-3.me
+node-1.acme.org
+node-2.acme.org
+node-3.acme.org
index e5120db..5ea8b13 100644 (file)
@@ -20,28 +20,28 @@ $ ../../../smpi_script/bin/smpirun -hostfile ${srcdir:=.}/hostfile_non_determini
 > [0.000000] [mc_comm_determinism/INFO] ****************************************************
 > [0.000000] [mc_comm_determinism/INFO] ** Initial communications pattern (per process): **
 > [0.000000] [mc_comm_determinism/INFO] Communications from the process 1:
-> [0.000000] [mc_comm_determinism/INFO] [(1) c-1.me <- (2) c-2.me] iRecv 
-> [0.000000] [mc_comm_determinism/INFO] [(1) c-1.me -> (2) c-2.me] iSend 
-> [0.000000] [mc_comm_determinism/INFO] [(1) c-1.me <- (3) c-3.me] iRecv 
-> [0.000000] [mc_comm_determinism/INFO] [(1) c-1.me -> (3) c-3.me] iSend 
+> [0.000000] [mc_comm_determinism/INFO] [(1) node-1.acme.org <- (2) node-2.acme.org] iRecv 
+> [0.000000] [mc_comm_determinism/INFO] [(1) node-1.acme.org -> (2) node-2.acme.org] iSend 
+> [0.000000] [mc_comm_determinism/INFO] [(1) node-1.acme.org <- (3) node-3.acme.org] iRecv 
+> [0.000000] [mc_comm_determinism/INFO] [(1) node-1.acme.org -> (3) node-3.acme.org] iSend 
 > [0.000000] [mc_comm_determinism/INFO] Communications from the process 2:
-> [0.000000] [mc_comm_determinism/INFO] [(2) c-2.me -> (1) c-1.me] iSend 
-> [0.000000] [mc_comm_determinism/INFO] [(2) c-2.me <- (1) c-1.me] iRecv 
+> [0.000000] [mc_comm_determinism/INFO] [(2) node-2.acme.org -> (1) node-1.acme.org] iSend 
+> [0.000000] [mc_comm_determinism/INFO] [(2) node-2.acme.org <- (1) node-1.acme.org] iRecv 
 > [0.000000] [mc_comm_determinism/INFO] Communications from the process 3:
-> [0.000000] [mc_comm_determinism/INFO] [(3) c-3.me -> (1) c-1.me] iSend 
-> [0.000000] [mc_comm_determinism/INFO] [(3) c-3.me <- (1) c-1.me] iRecv 
+> [0.000000] [mc_comm_determinism/INFO] [(3) node-3.acme.org -> (1) node-1.acme.org] iSend 
+> [0.000000] [mc_comm_determinism/INFO] [(3) node-3.acme.org <- (1) node-1.acme.org] iRecv 
 > [0.000000] [mc_comm_determinism/INFO] ** Communications pattern counter-example (per process): **
 > [0.000000] [mc_comm_determinism/INFO] Communications from the process 1:
-> [0.000000] [mc_comm_determinism/INFO] [(1) c-1.me <- (3) c-3.me] iRecv 
-> [0.000000] [mc_comm_determinism/INFO] [(1) c-1.me -> (3) c-3.me] iSend 
-> [0.000000] [mc_comm_determinism/INFO] [(1) c-1.me <- (2) c-2.me] iRecv 
-> [0.000000] [mc_comm_determinism/INFO] [(1) c-1.me -> (2) c-2.me] iSend 
+> [0.000000] [mc_comm_determinism/INFO] [(1) node-1.acme.org <- (3) node-3.acme.org] iRecv 
+> [0.000000] [mc_comm_determinism/INFO] [(1) node-1.acme.org -> (3) node-3.acme.org] iSend 
+> [0.000000] [mc_comm_determinism/INFO] [(1) node-1.acme.org <- (2) node-2.acme.org] iRecv 
+> [0.000000] [mc_comm_determinism/INFO] [(1) node-1.acme.org -> (2) node-2.acme.org] iSend 
 > [0.000000] [mc_comm_determinism/INFO] Communications from the process 2:
-> [0.000000] [mc_comm_determinism/INFO] [(2) c-2.me -> (1) c-1.me] iSend 
-> [0.000000] [mc_comm_determinism/INFO] [(2) c-2.me <- (1) c-1.me] iRecv 
+> [0.000000] [mc_comm_determinism/INFO] [(2) node-2.acme.org -> (1) node-1.acme.org] iSend 
+> [0.000000] [mc_comm_determinism/INFO] [(2) node-2.acme.org <- (1) node-1.acme.org] iRecv 
 > [0.000000] [mc_comm_determinism/INFO] Communications from the process 3:
-> [0.000000] [mc_comm_determinism/INFO] [(3) c-3.me -> (1) c-1.me] iSend 
-> [0.000000] [mc_comm_determinism/INFO] [(3) c-3.me <- (1) c-1.me] iRecv 
+> [0.000000] [mc_comm_determinism/INFO] [(3) node-3.acme.org -> (1) node-1.acme.org] iSend 
+> [0.000000] [mc_comm_determinism/INFO] [(3) node-3.acme.org <- (1) node-1.acme.org] iRecv 
 > [0.000000] [mc_global/INFO] Expanded states = 16037
 > [0.000000] [mc_global/INFO] Visited states = 80801
 > [0.000000] [mc_global/INFO] Executed transitions = 76048
index 341afa2..0d07825 100644 (file)
@@ -91,7 +91,7 @@ XBT_PUBLIC(int) MSG_file_close(msg_file_t fd);
 XBT_PUBLIC(sg_size_t) MSG_file_get_size(msg_file_t fd);
 XBT_PUBLIC(void) MSG_file_dump(msg_file_t fd);
 XBT_PUBLIC(msg_error_t) MSG_file_unlink(msg_file_t fd);
-XBT_PUBLIC(msg_error_t) MSG_file_seek(msg_file_t fd, sg_size_t offset, int origin);
+XBT_PUBLIC(msg_error_t) MSG_file_seek(msg_file_t fd, sg_offset_t offset, int origin);
 XBT_PUBLIC(sg_size_t) MSG_file_tell (msg_file_t fd);
 XBT_PUBLIC(void) __MSG_file_get_info(msg_file_t fd);
 XBT_PUBLIC(void) __MSG_file_priv_free(msg_file_priv_t priv);
@@ -107,6 +107,7 @@ XBT_PUBLIC(sg_size_t) MSG_storage_get_used_size(msg_storage_t storage);
 XBT_PUBLIC(msg_storage_t) MSG_storage_get_by_name(const char *name);
 XBT_PUBLIC(xbt_dict_t) MSG_storage_get_properties(msg_storage_t storage);
 XBT_PUBLIC(void) MSG_storage_set_property_value(msg_storage_t storage, const char *name, char *value,void_f_pvoid_t free_ctn);
+XBT_PUBLIC(const char *)MSG_storage_get_property_value(msg_storage_t storage, const char *name);
 XBT_PUBLIC(xbt_dynar_t) MSG_storages_as_dynar(void);
 XBT_PUBLIC(msg_error_t) MSG_storage_set_data(msg_storage_t host, void *data);
 XBT_PUBLIC(void *) MSG_storage_get_data(msg_storage_t storage);
index 4399096..edcd301 100644 (file)
@@ -95,6 +95,11 @@ static inline char* sg_storage_name(sg_storage_t storage) {
  */
 typedef unsigned long long sg_size_t;
 
+/** @ingroup m_datatypes_management_details
+ * @brief Type for any simgrid offset
+ */
+typedef long long sg_offset_t;
+
 /*
  * Platform creation functions. Instead of passing 123 arguments to the creation functions
  * (one for each possible XML attribute), we pass structures containing them all. It removes the
@@ -358,7 +363,6 @@ XBT_PUBLIC(void) sg_platf_new_prop (sg_platf_prop_cbarg_t prop); // Add a prop
 XBT_PUBLIC(void) sg_platf_new_trace(sg_platf_trace_cbarg_t trace);
 XBT_PUBLIC(void) sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect);
 
-XBT_PUBLIC(void) sg_platf_new_storage(sg_platf_storage_cbarg_t storage); // Add a storage to the currently described AS
 XBT_PUBLIC(void) sg_platf_new_storage(sg_platf_storage_cbarg_t storage); // Add a storage to the currently described AS
 XBT_PUBLIC(void) sg_platf_new_mstorage(sg_platf_mstorage_cbarg_t mstorage);
 XBT_PUBLIC(void) sg_platf_new_storage_type(sg_platf_storage_type_cbarg_t storage_type);
index 2b0b200..0af8212 100644 (file)
@@ -414,14 +414,15 @@ XBT_PUBLIC(xbt_dict_t) SIMIX_get_rdv_points(void);
 
 /***** Communication simcalls *****/
 
-XBT_PUBLIC(void) simcall_comm_send(smx_rdv_t rdv, double task_size,
+XBT_PUBLIC(void) simcall_comm_send(smx_process_t src, smx_rdv_t rdv, double task_size,
                                      double rate, void *src_buff,
                                      size_t src_buff_size,
                                      int (*match_fun)(void *, void *, smx_action_t),
                                      void (*copy_data_fun)(smx_action_t, void*, size_t),
                                      void *data, double timeout);
 
-XBT_PUBLIC(smx_action_t) simcall_comm_isend(smx_rdv_t rdv, double task_size,
+XBT_PUBLIC(smx_action_t) simcall_comm_isend(smx_process_t src, smx_rdv_t rdv, 
+                                              double task_size,
                                               double rate, void *src_buff,
                                               size_t src_buff_size,
                                               int (*match_fun)(void *, void *, smx_action_t),
@@ -501,11 +502,11 @@ XBT_PUBLIC(sg_size_t) simcall_file_read(smx_file_t fd, sg_size_t size, smx_host_
 XBT_PUBLIC(sg_size_t) simcall_file_write(smx_file_t fd, sg_size_t size, smx_host_t host);
 XBT_PUBLIC(smx_file_t) simcall_file_open(const char* fullpath, smx_host_t host);
 XBT_PUBLIC(int) simcall_file_close(smx_file_t fd, smx_host_t host);
-XBT_PUBLIC(int) simcall_file_unlink(smx_file_t fd);
+XBT_PUBLIC(int) simcall_file_unlink(smx_file_t fd, smx_host_t host);
 XBT_PUBLIC(sg_size_t) simcall_file_get_size(smx_file_t fd);
 XBT_PUBLIC(xbt_dynar_t) simcall_file_get_info(smx_file_t fd);
 XBT_PUBLIC(sg_size_t) simcall_file_tell(smx_file_t fd);
-XBT_PUBLIC(int) simcall_file_seek(smx_file_t fd, sg_size_t offset, int origin);
+XBT_PUBLIC(int) simcall_file_seek(smx_file_t fd, sg_offset_t offset, int origin);
 XBT_PUBLIC(int) simcall_file_move(smx_file_t fd, const char* fullpath);
 /*****************************   Storage   **********************************/
 XBT_PUBLIC(sg_size_t) simcall_storage_get_free_size (smx_storage_t storage);
index b74f559..4e73752 100644 (file)
       parameter(MPI_ORDER_FORTRAN=0)
 
       external MPI_INIT, MPI_FINALIZE, MPI_ABORT
-      external MPI_COMM_RANK, MPI_COMM_SIZE, MPI_COMM_DUP, MPI_COMM_SPLIT
-      external MPI_SEND_INIT, MPI_ISEND, MPI_SEND
+      external MPI_COMM_RANK, MPI_COMM_SIZE, MPI_COMM_DUP
+      external MPI_SEND_INIT, MPI_ISEND, MPI_SEND, MPI_COMM_SPLIT
       external MPI_RECV_INIT, MPI_IRECV, MPI_RECV
       external MPI_START, MPI_STARTALL
       external MPI_WAIT, MPI_WAITANY, MPI_WAITALL
index f9ebc00..788e001 100644 (file)
@@ -68,6 +68,7 @@ SG_BEGIN_DECL()
 #define MPI_ERR_DIMS      17
 #define MPI_ERR_TOPOLOGY  18
 #define MPI_ERR_NO_MEM    19
+#define MPI_ERR_WIN       20
 #define MPI_ERRCODES_IGNORE (int *)0
 #define MPI_IDENT     0
 #define MPI_SIMILAR   1
@@ -79,6 +80,14 @@ SG_BEGIN_DECL()
 #define MPI_IO               0
 #define MPI_BSEND_OVERHEAD   0
 
+
+#define MPI_MODE_NOSTORE 0x1
+#define MPI_MODE_NOPUT 0x2
+#define MPI_MODE_NOPRECEDE 0x4
+#define MPI_MODE_NOSUCCEED 0x8
+#define MPI_MODE_NOCHECK 0x10
+
+
 #define MPI_KEYVAL_INVALID 0
 #define MPI_NULL_COPY_FN NULL
 #define MPI_NULL_DELETE_FN NULL
@@ -122,6 +131,7 @@ SG_BEGIN_DECL()
 #define MPI_ROOT 0
 #define MPI_INFO_NULL -1
 #define MPI_COMM_TYPE_SHARED    1
+#define MPI_WIN_NULL NULL
 
 #define MPI_VERSION 1
 #define MPI_SUBVERSION 1
@@ -131,6 +141,7 @@ SG_BEGIN_DECL()
 #define MPI_LOCK_EXCLUSIVE           1
 #define MPI_LOCK_SHARED              2
 
+// FIXME : used nowhere...
 typedef enum MPIR_Combiner_enum{
   MPI_COMBINER_NAMED,
   MPI_COMBINER_DUP,
@@ -181,6 +192,10 @@ typedef struct {
   int count;
 } MPI_Status;
 
+struct s_smpi_mpi_win;
+typedef struct s_smpi_mpi_win* MPI_Win;
+typedef int MPI_Info;
+
 #define MPI_STATUS_IGNORE ((MPI_Status*)NULL)
 #define MPI_STATUSES_IGNORE ((MPI_Status*)NULL)
 
@@ -250,10 +265,12 @@ XBT_PUBLIC_DATA( MPI_Op ) MPI_LXOR;
 XBT_PUBLIC_DATA( MPI_Op ) MPI_BAND;
 XBT_PUBLIC_DATA( MPI_Op ) MPI_BOR;
 XBT_PUBLIC_DATA( MPI_Op ) MPI_BXOR;
+//For accumulate
+XBT_PUBLIC_DATA( MPI_Op ) MPI_REPLACE;
 
 struct s_smpi_mpi_topology;
 typedef struct s_smpi_mpi_topology *MPI_Topology;
-                          
+                                   
 struct s_smpi_mpi_group;
 typedef struct s_smpi_mpi_group *MPI_Group;
 
@@ -530,11 +547,26 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Get_library_version,
 MPI_CALL(XBT_PUBLIC(int), MPI_Reduce_local,(void *inbuf, void *inoutbuf, int count,
     MPI_Datatype datatype, MPI_Op op));
 
+MPI_CALL(XBT_PUBLIC(int), MPI_Win_free,( MPI_Win* win));
+
+MPI_CALL(XBT_PUBLIC(int), MPI_Win_create,( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win));
+
+MPI_CALL(XBT_PUBLIC(int), MPI_Win_fence,( int assert,  MPI_Win win));
+
+MPI_CALL(XBT_PUBLIC(int), MPI_Get,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+    MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win));
+MPI_CALL(XBT_PUBLIC(int), MPI_Put,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+    MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win));
+MPI_CALL(XBT_PUBLIC(int), MPI_Accumulate,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+    MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win));
+MPI_CALL(XBT_PUBLIC(int), MPI_Alloc_mem, (MPI_Aint size, MPI_Info info, void *baseptr));
+MPI_CALL(XBT_PUBLIC(int), MPI_Free_mem, (void *base));
+
+
 //FIXME: these are not yet implemented
 
 typedef void MPI_Handler_function(MPI_Comm*, int*, ...);
-typedef int MPI_Win;
-typedef int MPI_Info;
+
 typedef void* MPI_Errhandler;
 
 typedef int MPI_Copy_function(MPI_Comm oldcomm, int keyval, void* extra_state, void* attribute_val_in,
@@ -637,9 +669,7 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Get_elements, (MPI_Status* status, MPI_Datatype da
 MPI_CALL(XBT_PUBLIC(int), MPI_Dims_create, (int nnodes, int ndims, int* dims));
 MPI_CALL(XBT_PUBLIC(int), MPI_Initialized, (int* flag));
 MPI_CALL(XBT_PUBLIC(int), MPI_Pcontrol, (const int level ));
-MPI_CALL(XBT_PUBLIC(int), MPI_Win_fence,( int assert,  MPI_Win win));
-MPI_CALL(XBT_PUBLIC(int), MPI_Win_free,( MPI_Win* win));
-MPI_CALL(XBT_PUBLIC(int), MPI_Win_create,( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win));
+
 MPI_CALL(XBT_PUBLIC(int), MPI_Info_create,( MPI_Info *info));
 MPI_CALL(XBT_PUBLIC(int), MPI_Info_set,( MPI_Info info, char *key, char *value));
 MPI_CALL(XBT_PUBLIC(int), MPI_Info_get,(MPI_Info info,char *key,int valuelen, char *value, int *flag));
@@ -650,8 +680,8 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_nkeys,( MPI_Info info, int *nkeys));
 MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_nthkey,( MPI_Info info, int n, char *key));
 MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_valuelen,( MPI_Info info, char *key, int *valuelen, int *flag));
 
-MPI_CALL(XBT_PUBLIC(int), MPI_Get,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
-    MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win));
+
+MPI_CALL(XBT_PUBLIC(int), MPI_Win_set_errhandler, (MPI_Win win, MPI_Errhandler errhandler));
 MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_envelope,(MPI_Datatype datatype,int *num_integers,int *num_addresses,int *num_datatypes, int *combiner));
 MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_contents,(MPI_Datatype datatype, int max_integers, int max_addresses,
                             int max_datatypes, int* array_of_integers, MPI_Aint* array_of_addresses, 
index c4ea46f..f938a9b 100644 (file)
@@ -56,7 +56,7 @@ XBT_PUBLIC(void) smpi_free_static(void);
 static type *name = NULL;                                   \
 if(!name) {                                                 \
    name = (type*)calloc(smpi_global_size(), sizeof(type));  \
-   smpi_register_static(name, xbt_free);                    \
+   smpi_register_static(name, xbt_free_f);                  \
 }
 
 #define SMPI_VARINIT_STATIC_AND_SET(name,type,expr) \
@@ -69,7 +69,7 @@ if(!name) {                                         \
    for(i = 0; i < size; i++) {                      \
       name[i] = value;                              \
    }                                                \
-   smpi_register_static(name, xbt_free);            \
+   smpi_register_static(name, xbt_free_f);          \
 }
 
 #define SMPI_VARGET_STATIC(name) name[smpi_process_index()]
diff --git a/include/smpi/smpif.h.in b/include/smpi/smpif.h.in
deleted file mode 100644 (file)
index a61dabc..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (c) 2007-2014. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#ifndef SMPIF_H
-#define SMPIF_H
-
-#cmakedefine SMPI_F2C @SMPI_F2C@
-
-#ifdef SMPI_F2C
-
-#include <xbt/misc.h>
-#include <smpi/smpi.h>
-/* those are defined in f2c.h */
-#undef min
-#undef max
-#include <f2c.h>
-
-XBT_PUBLIC_DATA(__thread int) smpi_current_rank;
-
-XBT_PUBLIC(int) smpi_process_argc(void);
-XBT_PUBLIC(int) smpi_process_getarg(integer* index, char* dst, ftnlen len);
-
-#define smpi_sample_local__(pi,pt) \
-   { \
-      if(smpi_sample_1(0, __FILE__, __LINE__, *pi, *pt)) { \
-         smpi_sample_3(0, __FILE__, __LINE__); \
-      } \
-      if(!smpi_sample_2(0, __FILE__, __LINE__)) { \
-         continue; \
-      } \
-   }
-
-#define smpi_sample_global__(pi,pt) \
-   { \
-      if(smpi_sample_1(1, __FILE__, __LINE__, *pi, *pt)) { \
-         smpi_sample_3(1, __FILE__, __LINE__); \
-      } \
-      if(!smpi_sample_2(1, __FILE__, __LINE__)) { \
-         continue; \
-      } \
-   }
-
-
-#endif
-
-#endif // SMPI_F2C
index bea720b..b5b18e4 100644 (file)
@@ -108,598 +108,598 @@ XBT_PUBLIC(void) STag_surfxml_model___prop(void);
 XBT_PUBLIC(void) ETag_surfxml_model___prop(void);
 
 /* XML application data. */
-typedef int AT_surfxml_cluster_bb___lat;
-#define AU_surfxml_cluster_bb___lat NULL
-typedef int AT_surfxml_random_max;
-#define AU_surfxml_random_max NULL
-typedef int AT_surfxml_host_availability___file;
-#define AU_surfxml_host_availability___file NULL
-typedef int AT_surfxml_ASroute_src;
-#define AU_surfxml_ASroute_src NULL
-typedef int AT_surfxml_cabinet_id;
-#define AU_surfxml_cabinet_id NULL
-typedef int AT_surfxml_cabinet_prefix;
-#define AU_surfxml_cabinet_prefix NULL
-typedef int AT_surfxml_process_function;
-#define AU_surfxml_process_function NULL
-typedef int AT_surfxml_ASroute_gw___dst;
-#define AU_surfxml_ASroute_gw___dst NULL
-typedef int AT_surfxml_storage___type_content___type;
-#define AU_surfxml_storage___type_content___type NULL
-typedef int AT_surfxml_include_file;
-#define AU_surfxml_include_file NULL
-typedef int AT_surfxml_link_bandwidth___file;
-#define AU_surfxml_link_bandwidth___file NULL
-typedef int AT_surfxml_process_kill___time;
-#define AU_surfxml_process_kill___time NULL
-typedef int AT_surfxml_link_bandwidth;
-#define AU_surfxml_link_bandwidth NULL
-typedef int AT_surfxml_trace_periodicity;
-#define AU_surfxml_trace_periodicity NULL
-typedef int AT_surfxml_storage_typeId;
-#define AU_surfxml_storage_typeId NULL
-typedef int AT_surfxml_cabinet_suffix;
-#define AU_surfxml_cabinet_suffix NULL
-typedef int AT_surfxml_link_latency___file;
-#define AU_surfxml_link_latency___file NULL
-typedef int AT_surfxml_link_id;
-#define AU_surfxml_link_id NULL
-typedef int AT_surfxml_trace_id;
-#define AU_surfxml_trace_id NULL
-typedef enum { AU_surfxml_cluster_bb___sharing___policy, A_surfxml_cluster_bb___sharing___policy_SHARED,A_surfxml_cluster_bb___sharing___policy_FATPIPE } AT_surfxml_cluster_bb___sharing___policy;
-typedef int AT_surfxml_cabinet_radical;
-#define AU_surfxml_cabinet_radical NULL
+typedef int AT_surfxml_storage_id;
+#define AU_surfxml_storage_id NULL
+typedef enum { AU_surfxml_link_sharing___policy, A_surfxml_link_sharing___policy_SHARED,A_surfxml_link_sharing___policy_FATPIPE,A_surfxml_link_sharing___policy_FULLDUPLEX } AT_surfxml_link_sharing___policy;
+typedef int AT_surfxml_trace___connect_element;
+#define AU_surfxml_trace___connect_element NULL
+typedef int AT_surfxml_ASroute_dst;
+#define AU_surfxml_ASroute_dst NULL
 typedef int AT_surfxml_cluster_lat;
 #define AU_surfxml_cluster_lat NULL
-typedef int AT_surfxml_process_host;
-#define AU_surfxml_process_host NULL
-typedef int AT_surfxml_cluster_core;
-#define AU_surfxml_cluster_core NULL
-typedef int AT_surfxml_peer_id;
-#define AU_surfxml_peer_id NULL
-typedef int AT_surfxml_storage___type_content;
-#define AU_surfxml_storage___type_content NULL
-typedef enum { AU_surfxml_link___ctn_direction, A_surfxml_link___ctn_direction_UP,A_surfxml_link___ctn_direction_DOWN,A_surfxml_link___ctn_direction_NONE } AT_surfxml_link___ctn_direction;
-typedef enum { AU_surfxml_random_generator, A_surfxml_random_generator_DRAND48,A_surfxml_random_generator_RAND,A_surfxml_random_generator_RNGSTREAM,A_surfxml_random_generator_NONE } AT_surfxml_random_generator;
-typedef int AT_surfxml_bypassRoute_dst;
-#define AU_surfxml_bypassRoute_dst NULL
-typedef int AT_surfxml_cluster_loopback___lat;
-#define AU_surfxml_cluster_loopback___lat NULL
-typedef int AT_surfxml_bypassRoute_src;
-#define AU_surfxml_bypassRoute_src NULL
-typedef int AT_surfxml_cluster_limiter___link;
-#define AU_surfxml_cluster_limiter___link NULL
-typedef int AT_surfxml_mstorage_typeId;
-#define AU_surfxml_mstorage_typeId NULL
+typedef int AT_surfxml_random_min;
+#define AU_surfxml_random_min NULL
+typedef int AT_surfxml_storage___type_id;
+#define AU_surfxml_storage___type_id NULL
+typedef int AT_surfxml_host___link_up;
+#define AU_surfxml_host___link_up NULL
 typedef int AT_surfxml_random_seed;
 #define AU_surfxml_random_seed NULL
-typedef int AT_surfxml_random_mean;
-#define AU_surfxml_random_mean NULL
-typedef int AT_surfxml_link___ctn_id;
-#define AU_surfxml_link___ctn_id NULL
-typedef int AT_surfxml_model___prop_value;
-#define AU_surfxml_model___prop_value NULL
+typedef int AT_surfxml_cluster_suffix;
+#define AU_surfxml_cluster_suffix NULL
+typedef enum { AU_surfxml_link___ctn_direction, A_surfxml_link___ctn_direction_UP,A_surfxml_link___ctn_direction_DOWN,A_surfxml_link___ctn_direction_NONE } AT_surfxml_link___ctn_direction;
+typedef int AT_surfxml_storage___type_content;
+#define AU_surfxml_storage___type_content NULL
 typedef int AT_surfxml_peer_bw___out;
 #define AU_surfxml_peer_bw___out NULL
-typedef int AT_surfxml_bypassASroute_src;
-#define AU_surfxml_bypassASroute_src NULL
-typedef int AT_surfxml_backbone_bandwidth;
-#define AU_surfxml_backbone_bandwidth NULL
-typedef int AT_surfxml_host___link_up;
-#define AU_surfxml_host___link_up NULL
-typedef enum { AU_surfxml_cluster_topology, A_surfxml_cluster_topology_FLAT,A_surfxml_cluster_topology_TORUS,A_surfxml_cluster_topology_FAT___TREE } AT_surfxml_cluster_topology;
 typedef int AT_surfxml_ASroute_gw___src;
 #define AU_surfxml_ASroute_gw___src NULL
+typedef int AT_surfxml_bypassASroute_gw___dst;
+#define AU_surfxml_bypassASroute_gw___dst NULL
+typedef int AT_surfxml_process_kill___time;
+#define AU_surfxml_process_kill___time NULL
+typedef int AT_surfxml_route_src;
+#define AU_surfxml_route_src NULL
+typedef int AT_surfxml_argument_value;
+#define AU_surfxml_argument_value NULL
+typedef int AT_surfxml_peer_availability___file;
+#define AU_surfxml_peer_availability___file NULL
+typedef int AT_surfxml_cabinet_radical;
+#define AU_surfxml_cabinet_radical NULL
+typedef int AT_surfxml_trace___connect_trace;
+#define AU_surfxml_trace___connect_trace NULL
+typedef int AT_surfxml_mount_name;
+#define AU_surfxml_mount_name NULL
+typedef int AT_surfxml_host_core;
+#define AU_surfxml_host_core NULL
+typedef int AT_surfxml_route_dst;
+#define AU_surfxml_route_dst NULL
+typedef int AT_surfxml_cluster_limiter___link;
+#define AU_surfxml_cluster_limiter___link NULL
+typedef int AT_surfxml_host_pstate;
+#define AU_surfxml_host_pstate NULL
+typedef int AT_surfxml_cluster_availability___file;
+#define AU_surfxml_cluster_availability___file NULL
 typedef int AT_surfxml_random_id;
 #define AU_surfxml_random_id NULL
-typedef int AT_surfxml_peer_power;
-#define AU_surfxml_peer_power NULL
+typedef int AT_surfxml_random_radical;
+#define AU_surfxml_random_radical NULL
+typedef int AT_surfxml_router_coordinates;
+#define AU_surfxml_router_coordinates NULL
+typedef enum { AU_surfxml_ASroute_symmetrical, A_surfxml_ASroute_symmetrical_YES,A_surfxml_ASroute_symmetrical_NO } AT_surfxml_ASroute_symmetrical;
+typedef int AT_surfxml_gpu_name;
+#define AU_surfxml_gpu_name NULL
+typedef enum { AU_surfxml_link_state, A_surfxml_link_state_ON,A_surfxml_link_state_OFF } AT_surfxml_link_state;
+typedef int AT_surfxml_bypassRoute_src;
+#define AU_surfxml_bypassRoute_src NULL
 typedef enum { AU_surfxml_AS_routing, A_surfxml_AS_routing_Full,A_surfxml_AS_routing_Floyd,A_surfxml_AS_routing_Dijkstra,A_surfxml_AS_routing_DijkstraCache,A_surfxml_AS_routing_None,A_surfxml_AS_routing_Vivaldi,A_surfxml_AS_routing_Cluster,A_surfxml_AS_routing_Cluster___torus,A_surfxml_AS_routing_Cluster___fat___tree } AT_surfxml_AS_routing;
-typedef int AT_surfxml_process_start___time;
-#define AU_surfxml_process_start___time NULL
-typedef int AT_surfxml_cluster_topo___parameters;
-#define AU_surfxml_cluster_topo___parameters NULL
-typedef int AT_surfxml_route_dst;
-#define AU_surfxml_route_dst NULL
-typedef int AT_surfxml_host_coordinates;
-#define AU_surfxml_host_coordinates NULL
-typedef int AT_surfxml_host___link_down;
-#define AU_surfxml_host___link_down NULL
 typedef int AT_surfxml_cluster_radical;
 #define AU_surfxml_cluster_radical NULL
-typedef int AT_surfxml_config_id;
-#define AU_surfxml_config_id NULL
-typedef int AT_surfxml_cabinet_power;
-#define AU_surfxml_cabinet_power NULL
-typedef int AT_surfxml_model___prop_id;
-#define AU_surfxml_model___prop_id NULL
-typedef int AT_surfxml_peer_coordinates;
-#define AU_surfxml_peer_coordinates NULL
+typedef int AT_surfxml_link_id;
+#define AU_surfxml_link_id NULL
+typedef enum { AU_surfxml_process_on___failure, A_surfxml_process_on___failure_DIE,A_surfxml_process_on___failure_RESTART } AT_surfxml_process_on___failure;
+typedef int AT_surfxml_backbone_bandwidth;
+#define AU_surfxml_backbone_bandwidth NULL
 typedef int AT_surfxml_mstorage_name;
 #define AU_surfxml_mstorage_name NULL
-typedef int AT_surfxml_host___link_id;
-#define AU_surfxml_host___link_id NULL
-typedef int AT_surfxml_cluster_loopback___bw;
-#define AU_surfxml_cluster_loopback___bw NULL
-typedef int AT_surfxml_cluster_suffix;
-#define AU_surfxml_cluster_suffix NULL
-typedef int AT_surfxml_cluster_router___id;
-#define AU_surfxml_cluster_router___id NULL
-typedef int AT_surfxml_prop_id;
-#define AU_surfxml_prop_id NULL
-typedef int AT_surfxml_backbone_id;
-#define AU_surfxml_backbone_id NULL
-typedef int AT_surfxml_link_state___file;
-#define AU_surfxml_link_state___file NULL
-typedef int AT_surfxml_cabinet_lat;
-#define AU_surfxml_cabinet_lat NULL
-typedef int AT_surfxml_storage___type_id;
-#define AU_surfxml_storage___type_id NULL
-typedef int AT_surfxml_storage_content___type;
-#define AU_surfxml_storage_content___type NULL
-typedef int AT_surfxml_random_radical;
-#define AU_surfxml_random_radical NULL
-typedef int AT_surfxml_cluster_power;
-#define AU_surfxml_cluster_power NULL
-typedef int AT_surfxml_trace___connect_element;
-#define AU_surfxml_trace___connect_element NULL
-typedef int AT_surfxml_link_latency;
-#define AU_surfxml_link_latency NULL
-typedef enum { AU_surfxml_host_state, A_surfxml_host_state_ON,A_surfxml_host_state_OFF } AT_surfxml_host_state;
-typedef int AT_surfxml_host_core;
-#define AU_surfxml_host_core NULL
-typedef int AT_surfxml_storage___type_size;
-#define AU_surfxml_storage___type_size NULL
-typedef int AT_surfxml_mount_name;
-#define AU_surfxml_mount_name NULL
-typedef int AT_surfxml_cluster_id;
-#define AU_surfxml_cluster_id NULL
-typedef int AT_surfxml_peer_state___file;
-#define AU_surfxml_peer_state___file NULL
-typedef int AT_surfxml_host_state___file;
-#define AU_surfxml_host_state___file NULL
-typedef int AT_surfxml_bypassASroute_dst;
-#define AU_surfxml_bypassASroute_dst NULL
-typedef enum { AU_surfxml_link_state, A_surfxml_link_state_ON,A_surfxml_link_state_OFF } AT_surfxml_link_state;
-typedef int AT_surfxml_bypassASroute_gw___dst;
-#define AU_surfxml_bypassASroute_gw___dst NULL
-typedef int AT_surfxml_random_std___deviation;
-#define AU_surfxml_random_std___deviation NULL
-typedef int AT_surfxml_cluster_bb___bw;
-#define AU_surfxml_cluster_bb___bw NULL
-typedef int AT_surfxml_trace___connect_trace;
-#define AU_surfxml_trace___connect_trace NULL
-typedef int AT_surfxml_peer_lat;
-#define AU_surfxml_peer_lat NULL
 typedef int AT_surfxml_cabinet_bw;
 #define AU_surfxml_cabinet_bw NULL
-typedef int AT_surfxml_cluster_prefix;
-#define AU_surfxml_cluster_prefix NULL
-typedef int AT_surfxml_storage_attach;
-#define AU_surfxml_storage_attach NULL
-typedef int AT_surfxml_random_min;
-#define AU_surfxml_random_min NULL
-typedef enum { AU_surfxml_trace___connect_kind, A_surfxml_trace___connect_kind_HOST___AVAIL,A_surfxml_trace___connect_kind_POWER,A_surfxml_trace___connect_kind_LINK___AVAIL,A_surfxml_trace___connect_kind_BANDWIDTH,A_surfxml_trace___connect_kind_LATENCY } AT_surfxml_trace___connect_kind;
-typedef int AT_surfxml_router_coordinates;
-#define AU_surfxml_router_coordinates NULL
 typedef int AT_surfxml_bypassASroute_gw___src;
 #define AU_surfxml_bypassASroute_gw___src NULL
-typedef int AT_surfxml_backbone_latency;
-#define AU_surfxml_backbone_latency NULL
-typedef int AT_surfxml_host_id;
-#define AU_surfxml_host_id NULL
-typedef int AT_surfxml_AS_id;
-#define AU_surfxml_AS_id NULL
-typedef int AT_surfxml_cluster_state___file;
-#define AU_surfxml_cluster_state___file NULL
+typedef int AT_surfxml_cluster_id;
+#define AU_surfxml_cluster_id NULL
+typedef int AT_surfxml_host_availability;
+#define AU_surfxml_host_availability NULL
+typedef int AT_surfxml_peer_id;
+#define AU_surfxml_peer_id NULL
+typedef int AT_surfxml_link_bandwidth___file;
+#define AU_surfxml_link_bandwidth___file NULL
+typedef int AT_surfxml_peer_coordinates;
+#define AU_surfxml_peer_coordinates NULL
+typedef int AT_surfxml_bypassASroute_src;
+#define AU_surfxml_bypassASroute_src NULL
+typedef enum { AU_surfxml_cluster_bb___sharing___policy, A_surfxml_cluster_bb___sharing___policy_SHARED,A_surfxml_cluster_bb___sharing___policy_FATPIPE } AT_surfxml_cluster_bb___sharing___policy;
+typedef int AT_surfxml_ASroute_gw___dst;
+#define AU_surfxml_ASroute_gw___dst NULL
 typedef int AT_surfxml_peer_bw___in;
 #define AU_surfxml_peer_bw___in NULL
-typedef int AT_surfxml_ASroute_dst;
-#define AU_surfxml_ASroute_dst NULL
-typedef int AT_surfxml_trace_file;
-#define AU_surfxml_trace_file NULL
-typedef int AT_surfxml_router_id;
-#define AU_surfxml_router_id NULL
+typedef int AT_surfxml_storage_typeId;
+#define AU_surfxml_storage_typeId NULL
+typedef int AT_surfxml_storage___type_model;
+#define AU_surfxml_storage___type_model NULL
+typedef int AT_surfxml_link_bandwidth;
+#define AU_surfxml_link_bandwidth NULL
+typedef int AT_surfxml_cluster_router___id;
+#define AU_surfxml_cluster_router___id NULL
+typedef int AT_surfxml_link___ctn_id;
+#define AU_surfxml_link___ctn_id NULL
 typedef int AT_surfxml_prop_value;
 #define AU_surfxml_prop_value NULL
-typedef int AT_surfxml_storage_id;
-#define AU_surfxml_storage_id NULL
-typedef int AT_surfxml_storage_content;
-#define AU_surfxml_storage_content NULL
-typedef enum { AU_surfxml_link_sharing___policy, A_surfxml_link_sharing___policy_SHARED,A_surfxml_link_sharing___policy_FATPIPE,A_surfxml_link_sharing___policy_FULLDUPLEX } AT_surfxml_link_sharing___policy;
-typedef enum { AU_surfxml_process_on___failure, A_surfxml_process_on___failure_DIE,A_surfxml_process_on___failure_RESTART } AT_surfxml_process_on___failure;
+typedef int AT_surfxml_host___link_id;
+#define AU_surfxml_host___link_id NULL
+typedef int AT_surfxml_cluster_power;
+#define AU_surfxml_cluster_power NULL
+typedef int AT_surfxml_mount_storageId;
+#define AU_surfxml_mount_storageId NULL
 typedef int AT_surfxml_host_power;
 #define AU_surfxml_host_power NULL
-typedef int AT_surfxml_cluster_availability___file;
-#define AU_surfxml_cluster_availability___file NULL
+typedef int AT_surfxml_model___prop_id;
+#define AU_surfxml_model___prop_id NULL
+typedef int AT_surfxml_AS_id;
+#define AU_surfxml_AS_id NULL
+typedef int AT_surfxml_mstorage_typeId;
+#define AU_surfxml_mstorage_typeId NULL
+typedef enum { AU_surfxml_route_symmetrical, A_surfxml_route_symmetrical_YES,A_surfxml_route_symmetrical_NO } AT_surfxml_route_symmetrical;
+typedef enum { AU_surfxml_random_generator, A_surfxml_random_generator_DRAND48,A_surfxml_random_generator_RAND,A_surfxml_random_generator_RNGSTREAM,A_surfxml_random_generator_NONE } AT_surfxml_random_generator;
+typedef int AT_surfxml_include_file;
+#define AU_surfxml_include_file NULL
+typedef int AT_surfxml_bypassASroute_dst;
+#define AU_surfxml_bypassASroute_dst NULL
+typedef int AT_surfxml_host_id;
+#define AU_surfxml_host_id NULL
+typedef enum { AU_surfxml_trace___connect_kind, A_surfxml_trace___connect_kind_HOST___AVAIL,A_surfxml_trace___connect_kind_POWER,A_surfxml_trace___connect_kind_LINK___AVAIL,A_surfxml_trace___connect_kind_BANDWIDTH,A_surfxml_trace___connect_kind_LATENCY } AT_surfxml_trace___connect_kind;
+typedef int AT_surfxml_process_host;
+#define AU_surfxml_process_host NULL
+typedef int AT_surfxml_cabinet_id;
+#define AU_surfxml_cabinet_id NULL
+typedef int AT_surfxml_config_id;
+#define AU_surfxml_config_id NULL
+typedef int AT_surfxml_peer_lat;
+#define AU_surfxml_peer_lat NULL
+typedef int AT_surfxml_storage_content;
+#define AU_surfxml_storage_content NULL
+typedef int AT_surfxml_bypassRoute_dst;
+#define AU_surfxml_bypassRoute_dst NULL
+typedef int AT_surfxml_storage_attach;
+#define AU_surfxml_storage_attach NULL
+typedef int AT_surfxml_cluster_state___file;
+#define AU_surfxml_cluster_state___file NULL
+typedef int AT_surfxml_cluster_topo___parameters;
+#define AU_surfxml_cluster_topo___parameters NULL
+typedef int AT_surfxml_cluster_core;
+#define AU_surfxml_cluster_core NULL
+typedef int AT_surfxml_peer_state___file;
+#define AU_surfxml_peer_state___file NULL
+typedef int AT_surfxml_cabinet_prefix;
+#define AU_surfxml_cabinet_prefix NULL
 typedef int AT_surfxml_platform_version;
 #define AU_surfxml_platform_version NULL
-typedef int AT_surfxml_host_availability;
-#define AU_surfxml_host_availability NULL
-typedef int AT_surfxml_mount_storageId;
-#define AU_surfxml_mount_storageId NULL
-typedef int AT_surfxml_host_pstate;
-#define AU_surfxml_host_pstate NULL
+typedef int AT_surfxml_ASroute_src;
+#define AU_surfxml_ASroute_src NULL
+typedef int AT_surfxml_link_state___file;
+#define AU_surfxml_link_state___file NULL
+typedef enum { AU_surfxml_cluster_topology, A_surfxml_cluster_topology_FLAT,A_surfxml_cluster_topology_TORUS,A_surfxml_cluster_topology_FAT___TREE } AT_surfxml_cluster_topology;
+typedef enum { AU_surfxml_host_state, A_surfxml_host_state_ON,A_surfxml_host_state_OFF } AT_surfxml_host_state;
+typedef int AT_surfxml_trace_file;
+#define AU_surfxml_trace_file NULL
+typedef int AT_surfxml_random_mean;
+#define AU_surfxml_random_mean NULL
+typedef int AT_surfxml_peer_power;
+#define AU_surfxml_peer_power NULL
+typedef int AT_surfxml_cabinet_lat;
+#define AU_surfxml_cabinet_lat NULL
+typedef int AT_surfxml_trace_id;
+#define AU_surfxml_trace_id NULL
+typedef int AT_surfxml_cluster_bb___bw;
+#define AU_surfxml_cluster_bb___bw NULL
+typedef int AT_surfxml_host_coordinates;
+#define AU_surfxml_host_coordinates NULL
+typedef int AT_surfxml_cabinet_power;
+#define AU_surfxml_cabinet_power NULL
+typedef int AT_surfxml_storage_content___type;
+#define AU_surfxml_storage_content___type NULL
+typedef int AT_surfxml_cluster_loopback___bw;
+#define AU_surfxml_cluster_loopback___bw NULL
+typedef int AT_surfxml_link_latency___file;
+#define AU_surfxml_link_latency___file NULL
+typedef int AT_surfxml_process_start___time;
+#define AU_surfxml_process_start___time NULL
+typedef int AT_surfxml_prop_id;
+#define AU_surfxml_prop_id NULL
+typedef enum { AU_surfxml_cluster_sharing___policy, A_surfxml_cluster_sharing___policy_SHARED,A_surfxml_cluster_sharing___policy_FULLDUPLEX,A_surfxml_cluster_sharing___policy_FATPIPE } AT_surfxml_cluster_sharing___policy;
+typedef int AT_surfxml_random_max;
+#define AU_surfxml_random_max NULL
+typedef int AT_surfxml_router_id;
+#define AU_surfxml_router_id NULL
+typedef int AT_surfxml_backbone_latency;
+#define AU_surfxml_backbone_latency NULL
+typedef int AT_surfxml_cluster_prefix;
+#define AU_surfxml_cluster_prefix NULL
 typedef int AT_surfxml_cluster_bw;
 #define AU_surfxml_cluster_bw NULL
-typedef int AT_surfxml_argument_value;
-#define AU_surfxml_argument_value NULL
-typedef enum { AU_surfxml_route_symmetrical, A_surfxml_route_symmetrical_YES,A_surfxml_route_symmetrical_NO } AT_surfxml_route_symmetrical;
-typedef int AT_surfxml_route_src;
-#define AU_surfxml_route_src NULL
-typedef int AT_surfxml_peer_availability___file;
-#define AU_surfxml_peer_availability___file NULL
-typedef enum { AU_surfxml_ASroute_symmetrical, A_surfxml_ASroute_symmetrical_YES,A_surfxml_ASroute_symmetrical_NO } AT_surfxml_ASroute_symmetrical;
-typedef enum { AU_surfxml_cluster_sharing___policy, A_surfxml_cluster_sharing___policy_SHARED,A_surfxml_cluster_sharing___policy_FULLDUPLEX,A_surfxml_cluster_sharing___policy_FATPIPE } AT_surfxml_cluster_sharing___policy;
-typedef int AT_surfxml_gpu_name;
-#define AU_surfxml_gpu_name NULL
-typedef int AT_surfxml_storage___type_model;
-#define AU_surfxml_storage___type_model NULL
+typedef int AT_surfxml_link_latency;
+#define AU_surfxml_link_latency NULL
+typedef int AT_surfxml_cabinet_suffix;
+#define AU_surfxml_cabinet_suffix NULL
+typedef int AT_surfxml_host___link_down;
+#define AU_surfxml_host___link_down NULL
+typedef int AT_surfxml_cluster_loopback___lat;
+#define AU_surfxml_cluster_loopback___lat NULL
+typedef int AT_surfxml_host_state___file;
+#define AU_surfxml_host_state___file NULL
+typedef int AT_surfxml_model___prop_value;
+#define AU_surfxml_model___prop_value NULL
+typedef int AT_surfxml_random_std___deviation;
+#define AU_surfxml_random_std___deviation NULL
+typedef int AT_surfxml_process_function;
+#define AU_surfxml_process_function NULL
+typedef int AT_surfxml_storage___type_size;
+#define AU_surfxml_storage___type_size NULL
+typedef int AT_surfxml_host_availability___file;
+#define AU_surfxml_host_availability___file NULL
+typedef int AT_surfxml_backbone_id;
+#define AU_surfxml_backbone_id NULL
+typedef int AT_surfxml_trace_periodicity;
+#define AU_surfxml_trace_periodicity NULL
+typedef int AT_surfxml_cluster_bb___lat;
+#define AU_surfxml_cluster_bb___lat NULL
+typedef int AT_surfxml_storage___type_content___type;
+#define AU_surfxml_storage___type_content___type NULL
 
 /* FleXML-provided data. */
 XBT_PUBLIC_DATA(int) surfxml_pcdata_ix;
 XBT_PUBLIC_DATA(char *) surfxml_bufferstack;
 #define surfxml_pcdata (surfxml_bufferstack + surfxml_pcdata_ix)
-XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___lat) AX_surfxml_cluster_bb___lat;
-#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___lat_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_max) AX_surfxml_random_max;
-#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max)
-XBT_PUBLIC_DATA(short int) surfxml_random_max_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_availability___file) AX_surfxml_host_availability___file;
-#define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file)
-XBT_PUBLIC_DATA(short int) surfxml_host_availability___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_ASroute_src) AX_surfxml_ASroute_src;
-#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src)
-XBT_PUBLIC_DATA(short int) surfxml_ASroute_src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_id) AX_surfxml_cabinet_id;
-#define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_prefix) AX_surfxml_cabinet_prefix;
-#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_prefix_isset;
-XBT_PUBLIC_DATA(AT_surfxml_process_function) AX_surfxml_process_function;
-#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function)
-XBT_PUBLIC_DATA(short int) surfxml_process_function_isset;
-XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___dst) AX_surfxml_ASroute_gw___dst;
-#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst)
-XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_content___type) AX_surfxml_storage___type_content___type;
-#define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_content___type_isset;
-XBT_PUBLIC_DATA(AT_surfxml_include_file) AX_surfxml_include_file;
-#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file)
-XBT_PUBLIC_DATA(short int) surfxml_include_file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth___file) AX_surfxml_link_bandwidth___file;
-#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file)
-XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_process_kill___time) AX_surfxml_process_kill___time;
-#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time)
-XBT_PUBLIC_DATA(short int) surfxml_process_kill___time_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth) AX_surfxml_link_bandwidth;
-#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth)
-XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth_isset;
-XBT_PUBLIC_DATA(AT_surfxml_trace_periodicity) AX_surfxml_trace_periodicity;
-#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity)
-XBT_PUBLIC_DATA(short int) surfxml_trace_periodicity_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage_typeId) AX_surfxml_storage_typeId;
-#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId)
-XBT_PUBLIC_DATA(short int) surfxml_storage_typeId_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_suffix) AX_surfxml_cabinet_suffix;
-#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_suffix_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_latency___file) AX_surfxml_link_latency___file;
-#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file)
-XBT_PUBLIC_DATA(short int) surfxml_link_latency___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_id) AX_surfxml_link_id;
-#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id)
-XBT_PUBLIC_DATA(short int) surfxml_link_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_trace_id) AX_surfxml_trace_id;
-#define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id)
-XBT_PUBLIC_DATA(short int) surfxml_trace_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___sharing___policy) AX_surfxml_cluster_bb___sharing___policy;
-#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy
-XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___sharing___policy_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_radical) AX_surfxml_cabinet_radical;
-#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_radical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage_id) AX_surfxml_storage_id;
+#define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
+XBT_PUBLIC_DATA(short int) surfxml_storage_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_sharing___policy) AX_surfxml_link_sharing___policy;
+#define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy
+XBT_PUBLIC_DATA(short int) surfxml_link_sharing___policy_isset;
+XBT_PUBLIC_DATA(AT_surfxml_trace___connect_element) AX_surfxml_trace___connect_element;
+#define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element)
+XBT_PUBLIC_DATA(short int) surfxml_trace___connect_element_isset;
+XBT_PUBLIC_DATA(AT_surfxml_ASroute_dst) AX_surfxml_ASroute_dst;
+#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst)
+XBT_PUBLIC_DATA(short int) surfxml_ASroute_dst_isset;
 XBT_PUBLIC_DATA(AT_surfxml_cluster_lat) AX_surfxml_cluster_lat;
 #define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat)
 XBT_PUBLIC_DATA(short int) surfxml_cluster_lat_isset;
-XBT_PUBLIC_DATA(AT_surfxml_process_host) AX_surfxml_process_host;
-#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host)
-XBT_PUBLIC_DATA(short int) surfxml_process_host_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_core) AX_surfxml_cluster_core;
-#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_core_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_id) AX_surfxml_peer_id;
-#define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id)
-XBT_PUBLIC_DATA(short int) surfxml_peer_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_content) AX_surfxml_storage___type_content;
-#define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_content_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link___ctn_direction) AX_surfxml_link___ctn_direction;
-#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction
-XBT_PUBLIC_DATA(short int) surfxml_link___ctn_direction_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_generator) AX_surfxml_random_generator;
-#define A_surfxml_random_generator AX_surfxml_random_generator
-XBT_PUBLIC_DATA(short int) surfxml_random_generator_isset;
-XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_dst) AX_surfxml_bypassRoute_dst;
-#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst)
-XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___lat) AX_surfxml_cluster_loopback___lat;
-#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___lat_isset;
-XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_src) AX_surfxml_bypassRoute_src;
-#define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src)
-XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_limiter___link) AX_surfxml_cluster_limiter___link;
-#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_limiter___link_isset;
-XBT_PUBLIC_DATA(AT_surfxml_mstorage_typeId) AX_surfxml_mstorage_typeId;
-#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId)
-XBT_PUBLIC_DATA(short int) surfxml_mstorage_typeId_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_min) AX_surfxml_random_min;
+#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min)
+XBT_PUBLIC_DATA(short int) surfxml_random_min_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_id) AX_surfxml_storage___type_id;
+#define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host___link_up) AX_surfxml_host___link_up;
+#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up)
+XBT_PUBLIC_DATA(short int) surfxml_host___link_up_isset;
 XBT_PUBLIC_DATA(AT_surfxml_random_seed) AX_surfxml_random_seed;
 #define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed)
 XBT_PUBLIC_DATA(short int) surfxml_random_seed_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_mean) AX_surfxml_random_mean;
-#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean)
-XBT_PUBLIC_DATA(short int) surfxml_random_mean_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link___ctn_id) AX_surfxml_link___ctn_id;
-#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id)
-XBT_PUBLIC_DATA(short int) surfxml_link___ctn_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_model___prop_value) AX_surfxml_model___prop_value;
-#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value)
-XBT_PUBLIC_DATA(short int) surfxml_model___prop_value_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_suffix) AX_surfxml_cluster_suffix;
+#define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_suffix_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link___ctn_direction) AX_surfxml_link___ctn_direction;
+#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction
+XBT_PUBLIC_DATA(short int) surfxml_link___ctn_direction_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_content) AX_surfxml_storage___type_content;
+#define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_content_isset;
 XBT_PUBLIC_DATA(AT_surfxml_peer_bw___out) AX_surfxml_peer_bw___out;
 #define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out)
 XBT_PUBLIC_DATA(short int) surfxml_peer_bw___out_isset;
-XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_src) AX_surfxml_bypassASroute_src;
-#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src)
-XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_backbone_bandwidth) AX_surfxml_backbone_bandwidth;
-#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth)
-XBT_PUBLIC_DATA(short int) surfxml_backbone_bandwidth_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host___link_up) AX_surfxml_host___link_up;
-#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up)
-XBT_PUBLIC_DATA(short int) surfxml_host___link_up_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_topology) AX_surfxml_cluster_topology;
-#define A_surfxml_cluster_topology AX_surfxml_cluster_topology
-XBT_PUBLIC_DATA(short int) surfxml_cluster_topology_isset;
 XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___src) AX_surfxml_ASroute_gw___src;
 #define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src)
 XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___dst) AX_surfxml_bypassASroute_gw___dst;
+#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst)
+XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___dst_isset;
+XBT_PUBLIC_DATA(AT_surfxml_process_kill___time) AX_surfxml_process_kill___time;
+#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time)
+XBT_PUBLIC_DATA(short int) surfxml_process_kill___time_isset;
+XBT_PUBLIC_DATA(AT_surfxml_route_src) AX_surfxml_route_src;
+#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src)
+XBT_PUBLIC_DATA(short int) surfxml_route_src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_argument_value) AX_surfxml_argument_value;
+#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value)
+XBT_PUBLIC_DATA(short int) surfxml_argument_value_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_availability___file) AX_surfxml_peer_availability___file;
+#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file)
+XBT_PUBLIC_DATA(short int) surfxml_peer_availability___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_radical) AX_surfxml_cabinet_radical;
+#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_radical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_trace___connect_trace) AX_surfxml_trace___connect_trace;
+#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace)
+XBT_PUBLIC_DATA(short int) surfxml_trace___connect_trace_isset;
+XBT_PUBLIC_DATA(AT_surfxml_mount_name) AX_surfxml_mount_name;
+#define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name)
+XBT_PUBLIC_DATA(short int) surfxml_mount_name_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_core) AX_surfxml_host_core;
+#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core)
+XBT_PUBLIC_DATA(short int) surfxml_host_core_isset;
+XBT_PUBLIC_DATA(AT_surfxml_route_dst) AX_surfxml_route_dst;
+#define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst)
+XBT_PUBLIC_DATA(short int) surfxml_route_dst_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_limiter___link) AX_surfxml_cluster_limiter___link;
+#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_limiter___link_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_pstate) AX_surfxml_host_pstate;
+#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate)
+XBT_PUBLIC_DATA(short int) surfxml_host_pstate_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_availability___file) AX_surfxml_cluster_availability___file;
+#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_availability___file_isset;
 XBT_PUBLIC_DATA(AT_surfxml_random_id) AX_surfxml_random_id;
 #define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id)
 XBT_PUBLIC_DATA(short int) surfxml_random_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_power) AX_surfxml_peer_power;
-#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power)
-XBT_PUBLIC_DATA(short int) surfxml_peer_power_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_radical) AX_surfxml_random_radical;
+#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical)
+XBT_PUBLIC_DATA(short int) surfxml_random_radical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_router_coordinates) AX_surfxml_router_coordinates;
+#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates)
+XBT_PUBLIC_DATA(short int) surfxml_router_coordinates_isset;
+XBT_PUBLIC_DATA(AT_surfxml_ASroute_symmetrical) AX_surfxml_ASroute_symmetrical;
+#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical
+XBT_PUBLIC_DATA(short int) surfxml_ASroute_symmetrical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_gpu_name) AX_surfxml_gpu_name;
+#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
+XBT_PUBLIC_DATA(short int) surfxml_gpu_name_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state;
+#define A_surfxml_link_state AX_surfxml_link_state
+XBT_PUBLIC_DATA(short int) surfxml_link_state_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_src) AX_surfxml_bypassRoute_src;
+#define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src)
+XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_src_isset;
 XBT_PUBLIC_DATA(AT_surfxml_AS_routing) AX_surfxml_AS_routing;
 #define A_surfxml_AS_routing AX_surfxml_AS_routing
 XBT_PUBLIC_DATA(short int) surfxml_AS_routing_isset;
-XBT_PUBLIC_DATA(AT_surfxml_process_start___time) AX_surfxml_process_start___time;
-#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time)
-XBT_PUBLIC_DATA(short int) surfxml_process_start___time_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_topo___parameters) AX_surfxml_cluster_topo___parameters;
-#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_topo___parameters_isset;
-XBT_PUBLIC_DATA(AT_surfxml_route_dst) AX_surfxml_route_dst;
-#define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst)
-XBT_PUBLIC_DATA(short int) surfxml_route_dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_coordinates) AX_surfxml_host_coordinates;
-#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates)
-XBT_PUBLIC_DATA(short int) surfxml_host_coordinates_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host___link_down) AX_surfxml_host___link_down;
-#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down)
-XBT_PUBLIC_DATA(short int) surfxml_host___link_down_isset;
 XBT_PUBLIC_DATA(AT_surfxml_cluster_radical) AX_surfxml_cluster_radical;
 #define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical)
 XBT_PUBLIC_DATA(short int) surfxml_cluster_radical_isset;
-XBT_PUBLIC_DATA(AT_surfxml_config_id) AX_surfxml_config_id;
-#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id)
-XBT_PUBLIC_DATA(short int) surfxml_config_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_power) AX_surfxml_cabinet_power;
-#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_power_isset;
-XBT_PUBLIC_DATA(AT_surfxml_model___prop_id) AX_surfxml_model___prop_id;
-#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id)
-XBT_PUBLIC_DATA(short int) surfxml_model___prop_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_coordinates) AX_surfxml_peer_coordinates;
-#define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates)
-XBT_PUBLIC_DATA(short int) surfxml_peer_coordinates_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_id) AX_surfxml_link_id;
+#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id)
+XBT_PUBLIC_DATA(short int) surfxml_link_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_process_on___failure) AX_surfxml_process_on___failure;
+#define A_surfxml_process_on___failure AX_surfxml_process_on___failure
+XBT_PUBLIC_DATA(short int) surfxml_process_on___failure_isset;
+XBT_PUBLIC_DATA(AT_surfxml_backbone_bandwidth) AX_surfxml_backbone_bandwidth;
+#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth)
+XBT_PUBLIC_DATA(short int) surfxml_backbone_bandwidth_isset;
 XBT_PUBLIC_DATA(AT_surfxml_mstorage_name) AX_surfxml_mstorage_name;
 #define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name)
 XBT_PUBLIC_DATA(short int) surfxml_mstorage_name_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host___link_id) AX_surfxml_host___link_id;
-#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id)
-XBT_PUBLIC_DATA(short int) surfxml_host___link_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___bw) AX_surfxml_cluster_loopback___bw;
-#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___bw_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_suffix) AX_surfxml_cluster_suffix;
-#define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_suffix_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_bw) AX_surfxml_cabinet_bw;
+#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_bw_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___src) AX_surfxml_bypassASroute_gw___src;
+#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src)
+XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_id) AX_surfxml_cluster_id;
+#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_availability) AX_surfxml_host_availability;
+#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
+XBT_PUBLIC_DATA(short int) surfxml_host_availability_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_id) AX_surfxml_peer_id;
+#define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id)
+XBT_PUBLIC_DATA(short int) surfxml_peer_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth___file) AX_surfxml_link_bandwidth___file;
+#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file)
+XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_coordinates) AX_surfxml_peer_coordinates;
+#define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates)
+XBT_PUBLIC_DATA(short int) surfxml_peer_coordinates_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_src) AX_surfxml_bypassASroute_src;
+#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src)
+XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___sharing___policy) AX_surfxml_cluster_bb___sharing___policy;
+#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy
+XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___sharing___policy_isset;
+XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___dst) AX_surfxml_ASroute_gw___dst;
+#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst)
+XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___dst_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_bw___in) AX_surfxml_peer_bw___in;
+#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in)
+XBT_PUBLIC_DATA(short int) surfxml_peer_bw___in_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage_typeId) AX_surfxml_storage_typeId;
+#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId)
+XBT_PUBLIC_DATA(short int) surfxml_storage_typeId_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_model) AX_surfxml_storage___type_model;
+#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_model_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth) AX_surfxml_link_bandwidth;
+#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth)
+XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth_isset;
 XBT_PUBLIC_DATA(AT_surfxml_cluster_router___id) AX_surfxml_cluster_router___id;
 #define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id)
 XBT_PUBLIC_DATA(short int) surfxml_cluster_router___id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_prop_id) AX_surfxml_prop_id;
-#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id)
-XBT_PUBLIC_DATA(short int) surfxml_prop_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_backbone_id) AX_surfxml_backbone_id;
-#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id)
-XBT_PUBLIC_DATA(short int) surfxml_backbone_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_state___file) AX_surfxml_link_state___file;
-#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file)
-XBT_PUBLIC_DATA(short int) surfxml_link_state___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_lat) AX_surfxml_cabinet_lat;
-#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_lat_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_id) AX_surfxml_storage___type_id;
-#define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage_content___type) AX_surfxml_storage_content___type;
-#define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type)
-XBT_PUBLIC_DATA(short int) surfxml_storage_content___type_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_radical) AX_surfxml_random_radical;
-#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical)
-XBT_PUBLIC_DATA(short int) surfxml_random_radical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link___ctn_id) AX_surfxml_link___ctn_id;
+#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id)
+XBT_PUBLIC_DATA(short int) surfxml_link___ctn_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_prop_value) AX_surfxml_prop_value;
+#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value)
+XBT_PUBLIC_DATA(short int) surfxml_prop_value_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host___link_id) AX_surfxml_host___link_id;
+#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id)
+XBT_PUBLIC_DATA(short int) surfxml_host___link_id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_cluster_power) AX_surfxml_cluster_power;
 #define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power)
 XBT_PUBLIC_DATA(short int) surfxml_cluster_power_isset;
-XBT_PUBLIC_DATA(AT_surfxml_trace___connect_element) AX_surfxml_trace___connect_element;
-#define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element)
-XBT_PUBLIC_DATA(short int) surfxml_trace___connect_element_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_latency) AX_surfxml_link_latency;
-#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency)
-XBT_PUBLIC_DATA(short int) surfxml_link_latency_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state;
-#define A_surfxml_host_state AX_surfxml_host_state
-XBT_PUBLIC_DATA(short int) surfxml_host_state_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_core) AX_surfxml_host_core;
-#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core)
-XBT_PUBLIC_DATA(short int) surfxml_host_core_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_size) AX_surfxml_storage___type_size;
-#define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_size_isset;
-XBT_PUBLIC_DATA(AT_surfxml_mount_name) AX_surfxml_mount_name;
-#define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name)
-XBT_PUBLIC_DATA(short int) surfxml_mount_name_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_id) AX_surfxml_cluster_id;
-#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_state___file) AX_surfxml_peer_state___file;
-#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file)
-XBT_PUBLIC_DATA(short int) surfxml_peer_state___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_state___file) AX_surfxml_host_state___file;
-#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file)
-XBT_PUBLIC_DATA(short int) surfxml_host_state___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_mount_storageId) AX_surfxml_mount_storageId;
+#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId)
+XBT_PUBLIC_DATA(short int) surfxml_mount_storageId_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_power) AX_surfxml_host_power;
+#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power)
+XBT_PUBLIC_DATA(short int) surfxml_host_power_isset;
+XBT_PUBLIC_DATA(AT_surfxml_model___prop_id) AX_surfxml_model___prop_id;
+#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id)
+XBT_PUBLIC_DATA(short int) surfxml_model___prop_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_AS_id) AX_surfxml_AS_id;
+#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id)
+XBT_PUBLIC_DATA(short int) surfxml_AS_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_mstorage_typeId) AX_surfxml_mstorage_typeId;
+#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId)
+XBT_PUBLIC_DATA(short int) surfxml_mstorage_typeId_isset;
+XBT_PUBLIC_DATA(AT_surfxml_route_symmetrical) AX_surfxml_route_symmetrical;
+#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical
+XBT_PUBLIC_DATA(short int) surfxml_route_symmetrical_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_generator) AX_surfxml_random_generator;
+#define A_surfxml_random_generator AX_surfxml_random_generator
+XBT_PUBLIC_DATA(short int) surfxml_random_generator_isset;
+XBT_PUBLIC_DATA(AT_surfxml_include_file) AX_surfxml_include_file;
+#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file)
+XBT_PUBLIC_DATA(short int) surfxml_include_file_isset;
 XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_dst) AX_surfxml_bypassASroute_dst;
 #define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst)
 XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state;
-#define A_surfxml_link_state AX_surfxml_link_state
-XBT_PUBLIC_DATA(short int) surfxml_link_state_isset;
-XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___dst) AX_surfxml_bypassASroute_gw___dst;
-#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst)
-XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___dst_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_std___deviation) AX_surfxml_random_std___deviation;
-#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation)
-XBT_PUBLIC_DATA(short int) surfxml_random_std___deviation_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___bw) AX_surfxml_cluster_bb___bw;
-#define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___bw_isset;
-XBT_PUBLIC_DATA(AT_surfxml_trace___connect_trace) AX_surfxml_trace___connect_trace;
-#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace)
-XBT_PUBLIC_DATA(short int) surfxml_trace___connect_trace_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_id) AX_surfxml_host_id;
+#define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id)
+XBT_PUBLIC_DATA(short int) surfxml_host_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_trace___connect_kind) AX_surfxml_trace___connect_kind;
+#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind
+XBT_PUBLIC_DATA(short int) surfxml_trace___connect_kind_isset;
+XBT_PUBLIC_DATA(AT_surfxml_process_host) AX_surfxml_process_host;
+#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host)
+XBT_PUBLIC_DATA(short int) surfxml_process_host_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_id) AX_surfxml_cabinet_id;
+#define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_config_id) AX_surfxml_config_id;
+#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id)
+XBT_PUBLIC_DATA(short int) surfxml_config_id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_peer_lat) AX_surfxml_peer_lat;
 #define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat)
 XBT_PUBLIC_DATA(short int) surfxml_peer_lat_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cabinet_bw) AX_surfxml_cabinet_bw;
-#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw)
-XBT_PUBLIC_DATA(short int) surfxml_cabinet_bw_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_prefix) AX_surfxml_cluster_prefix;
-#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_prefix_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage_content) AX_surfxml_storage_content;
+#define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
+XBT_PUBLIC_DATA(short int) surfxml_storage_content_isset;
+XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_dst) AX_surfxml_bypassRoute_dst;
+#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst)
+XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_dst_isset;
 XBT_PUBLIC_DATA(AT_surfxml_storage_attach) AX_surfxml_storage_attach;
 #define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach)
 XBT_PUBLIC_DATA(short int) surfxml_storage_attach_isset;
-XBT_PUBLIC_DATA(AT_surfxml_random_min) AX_surfxml_random_min;
-#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min)
-XBT_PUBLIC_DATA(short int) surfxml_random_min_isset;
-XBT_PUBLIC_DATA(AT_surfxml_trace___connect_kind) AX_surfxml_trace___connect_kind;
-#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind
-XBT_PUBLIC_DATA(short int) surfxml_trace___connect_kind_isset;
-XBT_PUBLIC_DATA(AT_surfxml_router_coordinates) AX_surfxml_router_coordinates;
-#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates)
-XBT_PUBLIC_DATA(short int) surfxml_router_coordinates_isset;
-XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___src) AX_surfxml_bypassASroute_gw___src;
-#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src)
-XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_backbone_latency) AX_surfxml_backbone_latency;
-#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency)
-XBT_PUBLIC_DATA(short int) surfxml_backbone_latency_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_id) AX_surfxml_host_id;
-#define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id)
-XBT_PUBLIC_DATA(short int) surfxml_host_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_AS_id) AX_surfxml_AS_id;
-#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id)
-XBT_PUBLIC_DATA(short int) surfxml_AS_id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_cluster_state___file) AX_surfxml_cluster_state___file;
 #define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file)
 XBT_PUBLIC_DATA(short int) surfxml_cluster_state___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_bw___in) AX_surfxml_peer_bw___in;
-#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in)
-XBT_PUBLIC_DATA(short int) surfxml_peer_bw___in_isset;
-XBT_PUBLIC_DATA(AT_surfxml_ASroute_dst) AX_surfxml_ASroute_dst;
-#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst)
-XBT_PUBLIC_DATA(short int) surfxml_ASroute_dst_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_topo___parameters) AX_surfxml_cluster_topo___parameters;
+#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_topo___parameters_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_core) AX_surfxml_cluster_core;
+#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_core_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_state___file) AX_surfxml_peer_state___file;
+#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file)
+XBT_PUBLIC_DATA(short int) surfxml_peer_state___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_prefix) AX_surfxml_cabinet_prefix;
+#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_prefix_isset;
+XBT_PUBLIC_DATA(AT_surfxml_platform_version) AX_surfxml_platform_version;
+#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
+XBT_PUBLIC_DATA(short int) surfxml_platform_version_isset;
+XBT_PUBLIC_DATA(AT_surfxml_ASroute_src) AX_surfxml_ASroute_src;
+#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src)
+XBT_PUBLIC_DATA(short int) surfxml_ASroute_src_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_state___file) AX_surfxml_link_state___file;
+#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file)
+XBT_PUBLIC_DATA(short int) surfxml_link_state___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_topology) AX_surfxml_cluster_topology;
+#define A_surfxml_cluster_topology AX_surfxml_cluster_topology
+XBT_PUBLIC_DATA(short int) surfxml_cluster_topology_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state;
+#define A_surfxml_host_state AX_surfxml_host_state
+XBT_PUBLIC_DATA(short int) surfxml_host_state_isset;
 XBT_PUBLIC_DATA(AT_surfxml_trace_file) AX_surfxml_trace_file;
 #define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file)
 XBT_PUBLIC_DATA(short int) surfxml_trace_file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_mean) AX_surfxml_random_mean;
+#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean)
+XBT_PUBLIC_DATA(short int) surfxml_random_mean_isset;
+XBT_PUBLIC_DATA(AT_surfxml_peer_power) AX_surfxml_peer_power;
+#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power)
+XBT_PUBLIC_DATA(short int) surfxml_peer_power_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_lat) AX_surfxml_cabinet_lat;
+#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_lat_isset;
+XBT_PUBLIC_DATA(AT_surfxml_trace_id) AX_surfxml_trace_id;
+#define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id)
+XBT_PUBLIC_DATA(short int) surfxml_trace_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___bw) AX_surfxml_cluster_bb___bw;
+#define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___bw_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_coordinates) AX_surfxml_host_coordinates;
+#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates)
+XBT_PUBLIC_DATA(short int) surfxml_host_coordinates_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_power) AX_surfxml_cabinet_power;
+#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_power_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage_content___type) AX_surfxml_storage_content___type;
+#define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type)
+XBT_PUBLIC_DATA(short int) surfxml_storage_content___type_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___bw) AX_surfxml_cluster_loopback___bw;
+#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___bw_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_latency___file) AX_surfxml_link_latency___file;
+#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file)
+XBT_PUBLIC_DATA(short int) surfxml_link_latency___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_process_start___time) AX_surfxml_process_start___time;
+#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time)
+XBT_PUBLIC_DATA(short int) surfxml_process_start___time_isset;
+XBT_PUBLIC_DATA(AT_surfxml_prop_id) AX_surfxml_prop_id;
+#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id)
+XBT_PUBLIC_DATA(short int) surfxml_prop_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_sharing___policy) AX_surfxml_cluster_sharing___policy;
+#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy
+XBT_PUBLIC_DATA(short int) surfxml_cluster_sharing___policy_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_max) AX_surfxml_random_max;
+#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max)
+XBT_PUBLIC_DATA(short int) surfxml_random_max_isset;
 XBT_PUBLIC_DATA(AT_surfxml_router_id) AX_surfxml_router_id;
 #define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id)
 XBT_PUBLIC_DATA(short int) surfxml_router_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_prop_value) AX_surfxml_prop_value;
-#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value)
-XBT_PUBLIC_DATA(short int) surfxml_prop_value_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage_id) AX_surfxml_storage_id;
-#define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
-XBT_PUBLIC_DATA(short int) surfxml_storage_id_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage_content) AX_surfxml_storage_content;
-#define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
-XBT_PUBLIC_DATA(short int) surfxml_storage_content_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_sharing___policy) AX_surfxml_link_sharing___policy;
-#define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy
-XBT_PUBLIC_DATA(short int) surfxml_link_sharing___policy_isset;
-XBT_PUBLIC_DATA(AT_surfxml_process_on___failure) AX_surfxml_process_on___failure;
-#define A_surfxml_process_on___failure AX_surfxml_process_on___failure
-XBT_PUBLIC_DATA(short int) surfxml_process_on___failure_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_power) AX_surfxml_host_power;
-#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power)
-XBT_PUBLIC_DATA(short int) surfxml_host_power_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_availability___file) AX_surfxml_cluster_availability___file;
-#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file)
-XBT_PUBLIC_DATA(short int) surfxml_cluster_availability___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_platform_version) AX_surfxml_platform_version;
-#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
-XBT_PUBLIC_DATA(short int) surfxml_platform_version_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_availability) AX_surfxml_host_availability;
-#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
-XBT_PUBLIC_DATA(short int) surfxml_host_availability_isset;
-XBT_PUBLIC_DATA(AT_surfxml_mount_storageId) AX_surfxml_mount_storageId;
-#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId)
-XBT_PUBLIC_DATA(short int) surfxml_mount_storageId_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_pstate) AX_surfxml_host_pstate;
-#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate)
-XBT_PUBLIC_DATA(short int) surfxml_host_pstate_isset;
+XBT_PUBLIC_DATA(AT_surfxml_backbone_latency) AX_surfxml_backbone_latency;
+#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency)
+XBT_PUBLIC_DATA(short int) surfxml_backbone_latency_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_prefix) AX_surfxml_cluster_prefix;
+#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_prefix_isset;
 XBT_PUBLIC_DATA(AT_surfxml_cluster_bw) AX_surfxml_cluster_bw;
 #define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw)
 XBT_PUBLIC_DATA(short int) surfxml_cluster_bw_isset;
-XBT_PUBLIC_DATA(AT_surfxml_argument_value) AX_surfxml_argument_value;
-#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value)
-XBT_PUBLIC_DATA(short int) surfxml_argument_value_isset;
-XBT_PUBLIC_DATA(AT_surfxml_route_symmetrical) AX_surfxml_route_symmetrical;
-#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical
-XBT_PUBLIC_DATA(short int) surfxml_route_symmetrical_isset;
-XBT_PUBLIC_DATA(AT_surfxml_route_src) AX_surfxml_route_src;
-#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src)
-XBT_PUBLIC_DATA(short int) surfxml_route_src_isset;
-XBT_PUBLIC_DATA(AT_surfxml_peer_availability___file) AX_surfxml_peer_availability___file;
-#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file)
-XBT_PUBLIC_DATA(short int) surfxml_peer_availability___file_isset;
-XBT_PUBLIC_DATA(AT_surfxml_ASroute_symmetrical) AX_surfxml_ASroute_symmetrical;
-#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical
-XBT_PUBLIC_DATA(short int) surfxml_ASroute_symmetrical_isset;
-XBT_PUBLIC_DATA(AT_surfxml_cluster_sharing___policy) AX_surfxml_cluster_sharing___policy;
-#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy
-XBT_PUBLIC_DATA(short int) surfxml_cluster_sharing___policy_isset;
-XBT_PUBLIC_DATA(AT_surfxml_gpu_name) AX_surfxml_gpu_name;
-#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
-XBT_PUBLIC_DATA(short int) surfxml_gpu_name_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_model) AX_surfxml_storage___type_model;
-#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_model_isset;
+XBT_PUBLIC_DATA(AT_surfxml_link_latency) AX_surfxml_link_latency;
+#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency)
+XBT_PUBLIC_DATA(short int) surfxml_link_latency_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cabinet_suffix) AX_surfxml_cabinet_suffix;
+#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix)
+XBT_PUBLIC_DATA(short int) surfxml_cabinet_suffix_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host___link_down) AX_surfxml_host___link_down;
+#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down)
+XBT_PUBLIC_DATA(short int) surfxml_host___link_down_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___lat) AX_surfxml_cluster_loopback___lat;
+#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___lat_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_state___file) AX_surfxml_host_state___file;
+#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file)
+XBT_PUBLIC_DATA(short int) surfxml_host_state___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_model___prop_value) AX_surfxml_model___prop_value;
+#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value)
+XBT_PUBLIC_DATA(short int) surfxml_model___prop_value_isset;
+XBT_PUBLIC_DATA(AT_surfxml_random_std___deviation) AX_surfxml_random_std___deviation;
+#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation)
+XBT_PUBLIC_DATA(short int) surfxml_random_std___deviation_isset;
+XBT_PUBLIC_DATA(AT_surfxml_process_function) AX_surfxml_process_function;
+#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function)
+XBT_PUBLIC_DATA(short int) surfxml_process_function_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_size) AX_surfxml_storage___type_size;
+#define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_size_isset;
+XBT_PUBLIC_DATA(AT_surfxml_host_availability___file) AX_surfxml_host_availability___file;
+#define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file)
+XBT_PUBLIC_DATA(short int) surfxml_host_availability___file_isset;
+XBT_PUBLIC_DATA(AT_surfxml_backbone_id) AX_surfxml_backbone_id;
+#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id)
+XBT_PUBLIC_DATA(short int) surfxml_backbone_id_isset;
+XBT_PUBLIC_DATA(AT_surfxml_trace_periodicity) AX_surfxml_trace_periodicity;
+#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity)
+XBT_PUBLIC_DATA(short int) surfxml_trace_periodicity_isset;
+XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___lat) AX_surfxml_cluster_bb___lat;
+#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat)
+XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___lat_isset;
+XBT_PUBLIC_DATA(AT_surfxml_storage___type_content___type) AX_surfxml_storage___type_content___type;
+#define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
+XBT_PUBLIC_DATA(short int) surfxml_storage___type_content___type_isset;
 
 /* XML application utilities. */
 XBT_PUBLIC(int) surfxml_element_context(int);
index f109024..e2d82d5 100644 (file)
@@ -166,8 +166,10 @@ typedef enum {
   xbt_cfgelm_boolean,  /**< int */
   xbt_cfgelm_peer,     /**< both a char* (representing the peername) and an integer (representing the port) */
 
+  //! @cond
   xbt_cfgelm_any,               /* not shown to users to prevent errors */
   xbt_cfgelm_type_count
+  //! @endcond
 } e_xbt_cfgelm_type_t;
 
 /** Boolean possible values **/
index 671ec3b..5f89b84 100644 (file)
@@ -56,70 +56,70 @@ XBT_PUBLIC(void) STag_graphxml_edge(void);
 XBT_PUBLIC(void) ETag_graphxml_edge(void);
 
 /* XML application data. */
+typedef int AT_graphxml_node_position___y;
+#define AU_graphxml_node_position___y NULL
+typedef int AT_graphxml_node_position___x;
+#define AU_graphxml_node_position___x NULL
 typedef int AT_graphxml_edge_source;
 #define AU_graphxml_edge_source NULL
-typedef int AT_graphxml_node_name;
-#define AU_graphxml_node_name NULL
+typedef enum { AU_graphxml_graph_isDirected, A_graphxml_graph_isDirected_true,A_graphxml_graph_isDirected_false } AT_graphxml_graph_isDirected;
 typedef int AT_graphxml_node_data;
 #define AU_graphxml_node_data NULL
-typedef int AT_graphxml_node_position___y;
-#define AU_graphxml_node_position___y NULL
-typedef enum { AU_graphxml_graph_isDirected, A_graphxml_graph_isDirected_true,A_graphxml_graph_isDirected_false } AT_graphxml_graph_isDirected;
-typedef int AT_graphxml_edge_data;
-#define AU_graphxml_edge_data NULL
 typedef int AT_graphxml_edge_name;
 #define AU_graphxml_edge_name NULL
+typedef int AT_graphxml_edge_data;
+#define AU_graphxml_edge_data NULL
 typedef int AT_graphxml_edge_length;
 #define AU_graphxml_edge_length NULL
+typedef int AT_graphxml_node_name;
+#define AU_graphxml_node_name NULL
 typedef int AT_graphxml_edge_label;
 #define AU_graphxml_edge_label NULL
-typedef int AT_graphxml_node_position___x;
-#define AU_graphxml_node_position___x NULL
-typedef int AT_graphxml_node_label;
-#define AU_graphxml_node_label NULL
 typedef int AT_graphxml_edge_target;
 #define AU_graphxml_edge_target NULL
+typedef int AT_graphxml_node_label;
+#define AU_graphxml_node_label NULL
 
 /* FleXML-provided data. */
 XBT_PUBLIC_DATA(int) graphxml_pcdata_ix;
 XBT_PUBLIC_DATA(char *) graphxml_bufferstack;
 #define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix)
-XBT_PUBLIC_DATA(AT_graphxml_edge_source) AX_graphxml_edge_source;
-#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
-XBT_PUBLIC_DATA(short int) graphxml_edge_source_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_name) AX_graphxml_node_name;
-#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
-XBT_PUBLIC_DATA(short int) graphxml_node_name_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_data) AX_graphxml_node_data;
-#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
-XBT_PUBLIC_DATA(short int) graphxml_node_data_isset;
 XBT_PUBLIC_DATA(AT_graphxml_node_position___y) AX_graphxml_node_position___y;
 #define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y)
 XBT_PUBLIC_DATA(short int) graphxml_node_position___y_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_position___x) AX_graphxml_node_position___x;
+#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
+XBT_PUBLIC_DATA(short int) graphxml_node_position___x_isset;
+XBT_PUBLIC_DATA(AT_graphxml_edge_source) AX_graphxml_edge_source;
+#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
+XBT_PUBLIC_DATA(short int) graphxml_edge_source_isset;
 XBT_PUBLIC_DATA(AT_graphxml_graph_isDirected) AX_graphxml_graph_isDirected;
 #define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
 XBT_PUBLIC_DATA(short int) graphxml_graph_isDirected_isset;
-XBT_PUBLIC_DATA(AT_graphxml_edge_data) AX_graphxml_edge_data;
-#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
-XBT_PUBLIC_DATA(short int) graphxml_edge_data_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_data) AX_graphxml_node_data;
+#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
+XBT_PUBLIC_DATA(short int) graphxml_node_data_isset;
 XBT_PUBLIC_DATA(AT_graphxml_edge_name) AX_graphxml_edge_name;
 #define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name)
 XBT_PUBLIC_DATA(short int) graphxml_edge_name_isset;
+XBT_PUBLIC_DATA(AT_graphxml_edge_data) AX_graphxml_edge_data;
+#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
+XBT_PUBLIC_DATA(short int) graphxml_edge_data_isset;
 XBT_PUBLIC_DATA(AT_graphxml_edge_length) AX_graphxml_edge_length;
 #define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length)
 XBT_PUBLIC_DATA(short int) graphxml_edge_length_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_name) AX_graphxml_node_name;
+#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
+XBT_PUBLIC_DATA(short int) graphxml_node_name_isset;
 XBT_PUBLIC_DATA(AT_graphxml_edge_label) AX_graphxml_edge_label;
 #define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label)
 XBT_PUBLIC_DATA(short int) graphxml_edge_label_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_position___x) AX_graphxml_node_position___x;
-#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
-XBT_PUBLIC_DATA(short int) graphxml_node_position___x_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_label) AX_graphxml_node_label;
-#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
-XBT_PUBLIC_DATA(short int) graphxml_node_label_isset;
 XBT_PUBLIC_DATA(AT_graphxml_edge_target) AX_graphxml_edge_target;
 #define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target)
 XBT_PUBLIC_DATA(short int) graphxml_edge_target_isset;
+XBT_PUBLIC_DATA(AT_graphxml_node_label) AX_graphxml_node_label;
+#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
+XBT_PUBLIC_DATA(short int) graphxml_node_label_isset;
 
 /* XML application utilities. */
 XBT_PUBLIC(int) graphxml_element_context(int);
index 6589249..073bc8d 100644 (file)
@@ -43,7 +43,9 @@ SG_BEGIN_DECL()
  * The different existing priorities.
 */
 typedef enum {
-  xbt_log_priority_none = 0,    /* used internally (don't poke with) */
+  //! @cond
+  xbt_log_priority_none = 0,           /** used internally (don't poke with)*/
+  //! @endcond
   xbt_log_priority_trace = 1,          /**< enter and return of some functions */
   xbt_log_priority_debug = 2,          /**< crufty output  */
   xbt_log_priority_verbose = 3,        /**< verbose output for the user wanting more */
@@ -54,7 +56,9 @@ typedef enum {
 
   xbt_log_priority_infinite = 8,       /**< value for XBT_LOG_STATIC_THRESHOLD to not log */
 
-  xbt_log_priority_uninitialized = -1   /* used internally (don't poke with) */
+  //! @cond
+  xbt_log_priority_uninitialized = -1  /* used internally (don't poke with) */
+  //! @endcond
 } e_xbt_log_priority_t;
 
 
index 33b10eb..fae839c 100644 (file)
@@ -142,7 +142,7 @@ void *xbt_realloc(void *p, size_t s)
 
 /** @brief like free
     @hideinitializer */
-#define xbt_free free           /*nothing specific to do here. A poor valgrind replacement? */
+#define xbt_free(p) free(p) /*nothing specific to do here. A poor valgrind replacement? */
 
 /** @brief like free, but you can be sure that it is a function  */
 XBT_PUBLIC(void) xbt_free_f(void *p);
index d0a4292..36aac64 100644 (file)
@@ -10,6 +10,7 @@
 #define _XBT_OS_TIMER_H
 
 #include <xbt/misc.h>           /* XBT_PUBLIC */
+#include <stddef.h>             /* size_t */
 
 SG_BEGIN_DECL()
 
index bfc4115..ecb2108 100644 (file)
@@ -19,6 +19,7 @@
 #include "jmsg_as.h"
 
 #include "jmsg_host.h"
+#include "jmsg_storage.h"
 #include "jmsg_task.h"
 #include "jxbt_utilities.h"
 
@@ -34,6 +35,7 @@
 /* end of eclipse-mandated pimple */
 
 int JAVA_HOST_LEVEL;
+int JAVA_STORAGE_LEVEL;
 
 static int create_jprocess(int argc, char *argv[]);
 
@@ -85,6 +87,10 @@ static void __JAVA_host_priv_free(void *host)
 {
 }
 
+static void __JAVA_storage_priv_free(void *storage)
+{
+}
+
 JNIEXPORT void JNICALL
 Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, jobjectArray jargs)
 {
@@ -130,6 +136,7 @@ Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, jobjectArray jargs)
   MSG_init(&argc, argv);
 
   JAVA_HOST_LEVEL = xbt_lib_add_level(host_lib, (void_f_pvoid_t) __JAVA_host_priv_free);
+  JAVA_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, (void_f_pvoid_t) __JAVA_storage_priv_free);
 
   for (index = 0; index < argc; index++)
     free(argv[index]);
@@ -149,8 +156,9 @@ JNIEXPORT void JNICALL
 {
   msg_error_t rv;
   int index;
-  xbt_dynar_t hosts;
-  jobject jhost;
+  xbt_dynar_t hosts, storages;
+  jobject jhost, jstorage;
+
 
   /* Run everything */
   XBT_DEBUG("Ready to run MSG_MAIN");
@@ -169,6 +177,18 @@ JNIEXPORT void JNICALL
 
   }
   xbt_dynar_free(&hosts);
+
+  /* Cleanup java storages */
+  storages = MSG_storages_as_dynar();
+  if(!xbt_dynar_is_empty(storages)){
+    for (index = 0; index < xbt_dynar_length(storages) - 1; index++) {
+      jstorage = (jobject) xbt_lib_get_level(xbt_dynar_get_as(storages,index,msg_storage_t), JAVA_STORAGE_LEVEL);
+      if (jstorage)
+        jstorage_unref(env, jstorage);
+    }
+  }
+  xbt_dynar_free(&storages);
+
 }
 
 JNIEXPORT void JNICALL
@@ -268,7 +288,7 @@ static int create_jprocess(int argc, char *argv[]) {
   jclass class_Process = (*env)->FindClass(env, argv[0]);
   xbt_str_subst(argv[0],'/','.',0);
   //Retrieve the methodID for the constructor
-  xbt_assert((class_Process != NULL), "Class not found (%s).", argv[0]);
+  xbt_assert((class_Process != NULL), "Class not found (%s). The deployment file must use the fully qualified class name, including the package. The case is important.", argv[0]);
   jmethodID constructor_Process = (*env)->GetMethodID(env, class_Process, "<init>", "(Lorg/simgrid/msg/Host;Ljava/lang/String;[Ljava/lang/String;)V");
   xbt_assert((constructor_Process != NULL), "Constructor not found for class %s. Is there a (Host, String ,String[]) constructor in your class ?", argv[0]);
 
index c6c8625..da2b16f 100644 (file)
@@ -14,6 +14,9 @@
 extern int JAVA_HOST_LEVEL;
 extern xbt_lib_t host_lib;
 
+extern int JAVA_STORAGE_LEVEL;
+extern xbt_lib_t storage_lib;
+
 JavaVM *get_java_VM(void);
 JNIEnv *get_current_thread_env(void);
 /**
index a7d54a3..9cf9977 100644 (file)
@@ -11,6 +11,8 @@
 #include "jmsg.h"
 #include "jmsg_host.h"
 #include "jxbt_utilities.h"
+#include "jmsg_storage.h"
+
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
 
@@ -245,7 +247,7 @@ Java_org_simgrid_msg_Host_setProperty(JNIEnv *env, jobject jhost, jobject jname,
   const char *value_java = (*env)->GetStringUTFChars(env, jvalue, 0);
   char *value = strdup(value_java);
 
-  MSG_host_set_property_value(host,name,value,xbt_free);
+  MSG_host_set_property_value(host, name, value, xbt_free_f);
 
   (*env)->ReleaseStringUTFChars(env, jvalue, value);
   (*env)->ReleaseStringUTFChars(env, jname, name);
@@ -263,6 +265,82 @@ Java_org_simgrid_msg_Host_isAvail(JNIEnv * env, jobject jhost) {
   return (jboolean) MSG_host_is_avail(host);
 }
 
+JNIEXPORT jobjectArray JNICALL
+Java_org_simgrid_msg_Host_getMountedStorage(JNIEnv * env, jobject jhost){
+
+  msg_host_t host = jhost_get_native(env, jhost);
+  jobject jstorage;
+  jstring jname;
+
+  if (!host) {
+    jxbt_throw_notbound(env, "host", jhost);
+    return 0;
+  }
+
+  int index = 0;
+       jobjectArray jtable;
+       xbt_dict_t dict =  MSG_host_get_mounted_storage_list(host);
+       int count = xbt_dict_length(dict);
+       jclass cls = (*env)->FindClass(env, "org/simgrid/msg/Storage");
+
+       jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+
+       if (!jtable) {
+        jxbt_throw_jni(env, "Storages table allocation failed");
+        return NULL;
+       }
+
+       xbt_dict_cursor_t cursor=NULL;
+       const char *mount_name, *storage_name;
+
+       xbt_dict_foreach(dict,cursor,mount_name,storage_name) {
+               jname = (*env)->NewStringUTF(env, storage_name);
+         jstorage = Java_org_simgrid_msg_Storage_getByName(env,cls,jname);
+         (*env)->SetObjectArrayElement(env, jtable, index, jstorage);
+    index++;
+       }
+       xbt_dict_free(&dict);
+       return jtable;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_org_simgrid_msg_Host_getAttachedStorage(JNIEnv * env, jobject jhost){
+  msg_host_t host = jhost_get_native(env, jhost);
+
+  if (!host) {
+    jxbt_throw_notbound(env, "host", jhost);
+    return 0;
+  }
+  jobjectArray jtable;
+
+  xbt_dynar_t dyn = MSG_host_get_attached_storage_list(host);
+  int count = xbt_dynar_length(dyn);
+  jclass cls = jxbt_get_class(env, "java/lang/String");
+  jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+  int index;
+  char *storage_name;
+  jstring jstorage_name;
+  for (index = 0; index < count; index++) {
+       storage_name = xbt_dynar_get_as(dyn,index,char*);
+       jstorage_name = (*env)->NewStringUTF(env,storage_name);
+       (*env)->SetObjectArrayElement(env, jtable, index, jstorage_name);
+  }
+
+  return jtable;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_org_simgrid_msg_Host_getStorageContent(JNIEnv * env, jobject jhost){
+  msg_host_t host = jhost_get_native(env, jhost);
+
+  if (!host) {
+    jxbt_throw_notbound(env, "host", jhost);
+    return 0;
+  }
+  return (jobjectArray)MSG_host_get_storage_content(host);
+}
+
+
 JNIEXPORT jobjectArray JNICALL
 Java_org_simgrid_msg_Host_all(JNIEnv * env, jclass cls_arg)
 {
index 429f8f3..9033531 100644 (file)
@@ -189,6 +189,27 @@ Java_org_simgrid_msg_Host_setProperty(JNIEnv *env, jobject jhost, jobject jname,
 JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_Host_isAvail
     (JNIEnv *, jobject);
 
+
+/*
+ * Class               org_simgrid_msg_Host
+ * Method              getMountedStorage
+ * Signature: ()[Lorg/simgrid/msg/Storage;
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getMountedStorage(JNIEnv * env, jobject jhost);
+
+/*
+ * Class               org_simgrid_msg_Host
+ * Method              getAttachedStorageList
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getAttachedStorage(JNIEnv * env, jobject jhost);
+
+/*
+ * Class               org_simgrid_msg_Host
+ * Method              getStorageContent
+ */
+JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getStorageContent(JNIEnv * env, jobject jhost);
+
+
 /**
  * Class org_simgrid_msg_Host
  * Method all
diff --git a/src/bindings/java/jmsg_storage.c b/src/bindings/java/jmsg_storage.c
new file mode 100644 (file)
index 0000000..150ae14
--- /dev/null
@@ -0,0 +1,244 @@
+/* Functions related to the java storage API.                            */
+
+/* Copyright (c) 2012-2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include "xbt/str.h"
+#include "msg/msg.h"
+#include "jmsg.h"
+#include "jmsg_storage.h"
+#include "jxbt_utilities.h"
+
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
+
+static jmethodID jstorage_method_Storage_constructor;
+static jfieldID jstorage_field_Storage_bind;
+static jfieldID jstorage_field_Storage_name;
+
+jobject jstorage_new_instance(JNIEnv * env) {
+  jclass cls = jxbt_get_class(env, "org/simgrid/msg/Storage");
+  return (*env)->NewObject(env, cls, jstorage_method_Storage_constructor);
+}
+
+msg_storage_t jstorage_get_native(JNIEnv * env, jobject jstorage) {
+  return (msg_storage_t) (long) (*env)->GetLongField(env, jstorage, jstorage_field_Storage_bind);
+}
+
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Storage_nativeInit(JNIEnv *env, jclass cls) {
+  jclass class_Storage = (*env)->FindClass(env, "org/simgrid/msg/Storage");
+  jstorage_method_Storage_constructor = (*env)->GetMethodID(env, class_Storage, "<init>", "()V");
+  jstorage_field_Storage_bind = jxbt_get_jfield(env,class_Storage, "bind", "J");
+  jstorage_field_Storage_name = jxbt_get_jfield(env, class_Storage, "name", "Ljava/lang/String;");
+  if (!class_Storage || !jstorage_field_Storage_name || !jstorage_method_Storage_constructor || !jstorage_field_Storage_bind) {
+    jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug."));
+  }
+}
+
+void jstorage_bind(jobject jstorage, msg_storage_t storage, JNIEnv * env) {
+  (*env)->SetLongField(env, jstorage, jstorage_field_Storage_bind, (jlong) (long) (storage));
+}
+
+jobject jstorage_ref(JNIEnv * env, jobject jstorage) {
+  return (*env)->NewGlobalRef(env, jstorage);
+}
+
+void jstorage_unref(JNIEnv * env, jobject jstorage) {
+  (*env)->DeleteGlobalRef(env, jstorage);
+}
+
+const char *jstorage_get_name(jobject jstorage, JNIEnv * env) {
+  msg_storage_t storage = jstorage_get_native(env, jstorage);
+  return MSG_storage_get_name(storage);
+}
+
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Storage_getByName(JNIEnv * env, jclass cls,
+                                         jstring jname) {
+  msg_storage_t storage;
+  jobject jstorage;
+
+  /* get the C string from the java string */
+  if (jname == NULL) {
+       jxbt_throw_null(env,bprintf("No host can have a null name"));
+       return NULL;
+  }
+  const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+  storage = MSG_storage_get_by_name(name);
+
+  if (!storage) {                  /* invalid name */
+    jxbt_throw_storage_not_found(env, name);
+    (*env)->ReleaseStringUTFChars(env, jname, name);
+    return NULL;
+  }
+  (*env)->ReleaseStringUTFChars(env, jname, name);
+
+  if (!xbt_lib_get_level(storage, JAVA_STORAGE_LEVEL)) {       /* native host not associated yet with java host */
+
+    /* Instantiate a new java storage */
+    jstorage = jstorage_new_instance(env);
+
+    if (!jstorage) {
+      jxbt_throw_jni(env, "java storage instantiation failed");
+      return NULL;
+    }
+
+    /* get a global reference to the newly created storage */
+    jstorage = jstorage_ref(env, jstorage);
+
+    if (!jstorage) {
+      jxbt_throw_jni(env, "new global ref allocation failed");
+      return NULL;
+    }
+    /* Sets the java storage name */
+    (*env)->SetObjectField(env, jstorage, jstorage_field_Storage_name, jname);
+    /* bind the java storage and the native storage */
+    jstorage_bind(jstorage, storage, env);
+
+    /* the native storage data field is set with the global reference to the
+     * java storage returned by this function
+     */
+    xbt_lib_set(storage_lib, storage->key, JAVA_STORAGE_LEVEL, (void *) jstorage);
+  }
+
+  /* return the global reference to the java storage instance */
+  return (jobject) xbt_lib_get_level(storage, JAVA_STORAGE_LEVEL);
+}
+
+
+JNIEXPORT jlong JNICALL
+Java_org_simgrid_msg_Storage_getSize(JNIEnv * env,jobject jstorage) {
+  msg_storage_t storage = jstorage_get_native(env, jstorage);
+
+  if (!storage) {
+    jxbt_throw_notbound(env, "storage", jstorage);
+    return -1;
+  }
+
+  return (jlong) MSG_storage_get_size(storage);
+}
+
+JNIEXPORT jlong JNICALL
+Java_org_simgrid_msg_Storage_getFreeSize(JNIEnv * env,jobject jstorage) {
+  msg_storage_t storage = jstorage_get_native(env, jstorage);
+
+  if (!storage) {
+    jxbt_throw_notbound(env, "storage", jstorage);
+    return -1;
+  }
+
+  return (jlong) MSG_storage_get_free_size(storage);
+}
+
+JNIEXPORT jlong JNICALL
+Java_org_simgrid_msg_Storage_getUsedSize(JNIEnv * env,jobject jstorage) {
+  msg_storage_t storage = jstorage_get_native(env, jstorage);
+
+  if (!storage) {
+    jxbt_throw_notbound(env, "storage", jstorage);
+    return -1;
+  }
+
+  return (jlong) MSG_storage_get_used_size(storage);
+}
+
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Storage_getProperty(JNIEnv *env, jobject jstorage, jobject jname) {
+  msg_storage_t storage = jstorage_get_native(env, jstorage);
+
+  if (!storage) {
+    jxbt_throw_notbound(env, "storage", jstorage);
+    return NULL;
+  }
+  const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+
+  const char *property = MSG_storage_get_property_value(storage, name);
+  if (!property) {
+    return NULL;
+  }
+  jobject jproperty = (*env)->NewStringUTF(env, property);
+
+  (*env)->ReleaseStringUTFChars(env, jname, name);
+
+  return jproperty;
+}
+
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Storage_setProperty(JNIEnv *env, jobject jstorage, jobject jname, jobject jvalue) {
+       msg_storage_t storage = jstorage_get_native(env, jstorage);
+
+  if (!storage) {
+    jxbt_throw_notbound(env, "storage", jstorage);
+    return;
+  }
+  const char *name = (*env)->GetStringUTFChars(env, jname, 0);
+  const char *value_java = (*env)->GetStringUTFChars(env, jvalue, 0);
+  char *value = strdup(value_java);
+
+  MSG_storage_set_property_value(storage, name, value, xbt_free_f);
+
+  (*env)->ReleaseStringUTFChars(env, jvalue, value);
+  (*env)->ReleaseStringUTFChars(env, jname, name);
+
+}
+
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Storage_getHost(JNIEnv * env,jobject jstorage) {
+  msg_storage_t storage = jstorage_get_native(env, jstorage);
+
+  if (!storage) {
+    jxbt_throw_notbound(env, "storage", jstorage);
+    return NULL;
+  }
+  const char *host_name = MSG_storage_get_host(storage);
+  if (!host_name) {
+    return NULL;
+  }
+  jobject jhost_name = (*env)->NewStringUTF(env, host_name);
+
+  return jhost_name;
+}
+
+JNIEXPORT jobjectArray JNICALL
+Java_org_simgrid_msg_Storage_all(JNIEnv * env, jclass cls_arg)
+{
+  int index;
+  jobjectArray jtable;
+  jobject jstorage;
+  jstring jname;
+  msg_storage_t storage;
+
+  xbt_dynar_t table =  MSG_storages_as_dynar();
+  int count = xbt_dynar_length(table);
+
+  jclass cls = jxbt_get_class(env, "org/simgrid/msg/Storage");
+
+  if (!cls) {
+    return NULL;
+  }
+
+  jtable = (*env)->NewObjectArray(env, (jsize) count, cls, NULL);
+
+  if (!jtable) {
+    jxbt_throw_jni(env, "Storages table allocation failed");
+    return NULL;
+  }
+
+  for (index = 0; index < count; index++) {
+    storage = xbt_dynar_get_as(table,index,msg_storage_t);
+    jstorage = (jobject) (xbt_lib_get_level(storage, JAVA_STORAGE_LEVEL));
+
+    if (!jstorage) {
+      jname = (*env)->NewStringUTF(env, MSG_storage_get_name(storage));
+      jstorage = Java_org_simgrid_msg_Storage_getByName(env, cls_arg, jname);
+    }
+
+    (*env)->SetObjectArrayElement(env, jtable, index, jstorage);
+  }
+  xbt_dynar_free(&table);
+  return jtable;
+}
+
diff --git a/src/bindings/java/jmsg_storage.h b/src/bindings/java/jmsg_storage.h
new file mode 100644 (file)
index 0000000..eeda61e
--- /dev/null
@@ -0,0 +1,157 @@
+/* Functions related to the java storage API.                            */
+
+/* Copyright (c) 2012-2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#ifndef MSG_JSTORAGE_H
+#define MSG_JSTORAGE_H
+#include <jni.h>
+#include "msg/msg.h"
+
+/**
+ * This function returns a new java storage instance.
+ *
+ * @param env                  The environment of the current thread
+ *
+ * @return                             A new java storage object.
+ *
+ * @exception                  If the class Storage is not found the function throws
+ *                                             the ClassNotFoundException. If the constructor of
+ *                                             this class is not found the function throws the exception
+ *                                             NotSuchMethodException.
+ */
+jobject jstorage_new_instance(JNIEnv * env);
+
+/**
+ * This function associated a native storage to a java storage instance.
+ *
+ * @param jstorage                     The java storage instance.
+ * @param storage                      The native storage to bind.
+ * @param env                  The environment of the current thread
+ *
+ * @exception                  If the class Storage is not found the function throws
+ *                                             the ClassNotFoundException. If the field bind of
+ *                                             this class is not found the function throws the exception
+ *                                             NotSuchFieldException.
+ */
+void jstorage_bind(jobject jstorage, msg_storage_t storage, JNIEnv * env);
+
+
+/**
+ * This function returns a native storage from a java storage instance.
+ *
+ * @param jstorage                     The java storage object from which get the native storage.
+ * @param env                  The environment of the current thread
+ *
+ * @return                             The function returns the native storage associated to the
+ *                                             java storage object.
+ *
+ * @exception                  If the class Storage is not found the function throws
+ *                                             the ClassNotFoundException. If the field bind of
+ *                                             this class is not found the function throws the exception
+ *                                             NotSuchFieldException.
+ */
+msg_storage_t jstorage_get_native(JNIEnv * env, jobject jstorage);
+
+
+/**
+ * Class                       org_simgrid_msg_Storage
+ * Method                      nativeInit
+ * Signature   ()V
+ */
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Storage_nativeInit(JNIEnv*, jclass);
+
+
+/**
+ * This function returns a global reference to the  java storage instance
+ * specified by the parameter jstorage.
+ *
+ * @param jstorage                     The original java storage instance.
+ * @param env                  The environment of the current thread
+ *
+ * @return                             The global reference to the original java storage
+ *                                             instance.
+ */
+jobject jstorage_ref(JNIEnv * env, jobject jstorage);
+/**
+ * This function delete a global reference to a java storage instance.
+ *
+ * @param                              The global reference to delete.
+ * @param env                  The environment of the current thread
+ */
+void jstorage_unref(JNIEnv * env, jobject jstorage);
+
+/**
+ * This function returns the name of a MSG storage.
+ *
+ * @param jstorage                     A java storage object.
+ * @param env                  The environment of the current thread
+ *
+ * @return                             The name of the storage.
+ */
+const char *jstorage_get_name(jobject jstorage, JNIEnv * env);
+
+/*
+ * Class               org_simgrid_msg_Storage
+ * Method              getByName
+ * Signature   (Ljava/lang/String;)Lsimgrid/msg/Storage;
+ */
+JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getByName(JNIEnv *, jclass, jstring);
+
+/*
+ * Class               org_simgrid_msg_Storage
+ * Method              getSize
+ * Signature   ()D
+ */
+JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getSize(JNIEnv *, jobject);
+
+/*
+ * Class               org_simgrid_msg_Storage
+ * Method              getFreeSize
+ * Signature   ()D
+ */
+JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getFreeSize(JNIEnv *, jobject);
+
+/*
+ * Class               org_simgrid_msg_Storage
+ * Method              getUsedSize
+ * Signature   ()D
+ */
+JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getUsedSize(JNIEnv *, jobject);
+
+/*
+ * Class        org_simgrid_msg_Storage
+ * Method       getProperty
+ * Signature    (Ljava/lang/String;)Ljava/lang/String;
+ */
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Storage_getProperty(JNIEnv *env, jobject jstorage, jobject jname);
+/*
+ * Class        org_simgrid_msg_Storage
+ * Method       setProperty
+ * Signature    (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ */
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Storage_setProperty(JNIEnv *env, jobject jstorage, jobject jname, jobject jvalue);
+
+/*
+ * Class        org_simgrid_msg_Storage
+ * Method       getHost
+ * Signature    (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ */
+JNIEXPORT jobject JNICALL
+Java_org_simgrid_msg_Storage_getHost(JNIEnv * env,jobject jstorage);
+
+/**
+ * Class org_simgrid_msg_Storage
+ * Method all
+ */
+JNIEXPORT jobjectArray JNICALL
+Java_org_simgrid_msg_Storage_all(JNIEnv *, jclass);
+
+
+#endif                          /*!MSG_JSTORAGE_H */
index 9d6e309..afd9190 100644 (file)
@@ -254,6 +254,14 @@ void jxbt_throw_host_not_found(JNIEnv * env, const char *invalid_name)
                      bprintf("No such host: %s", invalid_name));
 }
 
+void jxbt_throw_storage_not_found(JNIEnv * env, const char *invalid_name)
+{
+  jxbt_throw_by_name(env,
+                     "org/simgrid/msg/StorageNotFoundException",
+                     bprintf("No such storage: %s", invalid_name));
+}
+
+
 void jxbt_throw_process_not_found(JNIEnv * env, const char *invalid_name)
 {
   jxbt_throw_by_name(env,
index 401fe85..015a4f7 100644 (file)
@@ -93,5 +93,6 @@ void jxbt_throw_host_failure(JNIEnv * env, char *details);
 void jxbt_throw_time_out_failure(JNIEnv * env, char *details);
 /**Thrown when a task is canceled */
 void jxbt_throw_task_cancelled(JNIEnv * env, char *details);
-
+/** Thrown when looking for a storage from name does not lead to anything */
+void jxbt_throw_storage_not_found(JNIEnv * env, const char *invalid_name);
 #endif                          /* ! JXBT_UTILITY_H */
index db3ff43..ed65770 100644 (file)
@@ -7,7 +7,6 @@
 package org.simgrid.msg;
 
 public class File {
-       protected String storage;
        /**
         * Represents the bind between the java comm and the
         * native C comm. You must never access it, since it is 
@@ -19,19 +18,17 @@ public class File {
         * @param storage is the name where you can find the file descriptor 
         * @param path is the file location on the storage 
         */
-       public File(String storage, String path) {
-               this.storage = storage;
-               open(storage, path);
+       public File(String path) {
+               open(path);
        }
        protected void finalize() {
 
        }
        /**
-        * Opens the file whose name is the string pointed to by path. 
-        * @param storage is the name where you can find the file descriptor 
+        * Opens the file whose name is the string pointed to by path.  
         * @param path is the file location on the storage
         */
-       protected native void open(String storage, String path);
+       protected native void open(String path);
        /**
         * Read elements of a file. 
         * @param size of each element
index a1d5736..839c84c 100644 (file)
@@ -8,6 +8,8 @@
 
 package org.simgrid.msg;
 
+import org.simgrid.msg.Storage;
+
 /**
  * A host object represents a location (any possible place) where a process may run. 
  * Thus it is represented as a physical resource with computing capabilities, some 
@@ -201,6 +203,17 @@ public class Host {
      * @return True if the host is available.
      */
        public native boolean isAvail();
+
+       /** This methods returns the list of mount point names on an host
+     * @return An array containing all mounted storages on the host
+     */
+       public native Storage[] getMountedStorage();
+
+       /** This methods returns the list of storages attached to an host
+     * @return An array containing all storages (name) attached to the host
+     */
+       public native String[] getAttachedStorage();
+       
        
        /**
         * Class initializer, to initialize various JNI stuff
diff --git a/src/bindings/java/org/simgrid/msg/Storage.java b/src/bindings/java/org/simgrid/msg/Storage.java
new file mode 100644 (file)
index 0000000..9f5a45a
--- /dev/null
@@ -0,0 +1,123 @@
+/* Bindings to the MSG storage */
+
+/* Copyright (c) 2006-2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+package org.simgrid.msg;
+
+public class Storage {
+
+       /**
+        * This attribute represents a bind between a java storage object and
+        * a native storage. Even if this attribute is public you must never
+        * access to it.
+        */ 
+       private long bind;
+       
+       /**
+        * Storage name
+        */
+       protected String name;
+
+       /**
+        * User data.
+        */ 
+       private Object data;
+    /**
+     *
+     */
+    protected Storage() {
+               this.bind = 0;
+               this.data = null;
+       };
+       
+       public String toString (){
+               return this.name; 
+               
+       }
+       
+       /**
+        * This static method gets a storage instance associated with a native
+        * storage of your platform. This is the best way to get a java storage object.
+        *
+        * @param name          The name of the storage to get.
+        *
+        * @return              The storage object with the given name.
+     * @exception              StorageNotFoundException if the name of the storage is not valid.
+        *                                      NativeException if the native version of this method failed.
+        */ 
+       public native static Storage getByName(String name) 
+       throws HostNotFoundException, NullPointerException;
+
+       /**
+        * This method returns the name of a storage.
+        * @return                      The name of the storage.
+        *
+        */ 
+       public String getName() {
+               return name;
+       }
+       
+       /**
+        * This method returns the size (in bytes) of a storage element.
+        *
+        * @return      The size (in bytes) of the storage element.
+        *
+        */ 
+       public native long getSize();
+
+       /**
+        * This method returns the free size (in bytes) of a storage element.
+        *
+        * @return      The free size (in bytes) of the storage element.
+        *
+        */ 
+       public native long getFreeSize();
+       
+       /**
+        * This method returns the used size (in bytes) of a storage element.
+        *
+        * @return      The used size (in bytes) of the storage element.
+        *
+        */ 
+       public native long getUsedSize();
+       
+       /**
+        * Returns the value of a given storage property. 
+        */
+       public native String getProperty(String name);
+       
+       /**
+        * Change the value of a given storage property. 
+        */
+       public native void setProperty(String name, String value);
+       
+       
+       /** 
+        *
+        * Returns the host name the storage is attached to
+        *
+        * @return      the host name the storage is attached to
+        */
+       public native String getHost();
+       
+       /**
+        * This static method returns all of the storages of the installed platform.
+        *
+        * @return                      An array containing all the storages installed.
+        *
+        */ 
+       public native static Storage[] all();
+       
+       /**
+        * Class initializer, to initialize various JNI stuff
+        */
+       public static native void nativeInit();
+       static {
+               nativeInit();
+       }               
+       
+}
\ No newline at end of file
diff --git a/src/bindings/java/org/simgrid/msg/StorageNotFoundException.java b/src/bindings/java/org/simgrid/msg/StorageNotFoundException.java
new file mode 100644 (file)
index 0000000..5f8e6d5
--- /dev/null
@@ -0,0 +1,29 @@
+/* This exception is raised when looking for a non-existing storage. */
+
+/* Copyright (c) 2006-2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+package org.simgrid.msg;
+
+/**
+ * This exception is raised when looking for a non-existing storage.
+ */
+public class StorageNotFoundException extends MsgException {
+       private static final long serialVersionUID = 1L;
+
+       /** Constructs an <code>StorageNotFoundException</code> without a detail message. */ 
+       public StorageNotFoundException() {
+               super();
+       }
+       /**
+        * Constructs an <code>StorageNotFoundException</code> with a detail message. 
+        *
+        * @param   s   the detail message.
+        */
+       public StorageNotFoundException(String s) {
+               super(s);
+       }
+}
index 911a8d3..6680aae 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 5a9493c..515ad2d 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 094dd49..a8ebd36 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 61a2d54..e172525 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 50f0fd6..fc99edf 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index b5572a8..28c239b 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 775c379..52daca4 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 7e9e372..428914b 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 3e6e7f8..f0da148 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index c1b758d..76d3ae8 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index a787a8b..9fdffda 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
@@ -72,7 +72,6 @@ public class NetworkLink extends Resource {
   
   /**
     * @param value The new bandwidth
-    * @param date When to change the bandwidth
     */
   public void updateBandwidth(double value) {
     SurfJNI.NetworkLink_updateBandwidth__SWIG_1(swigCPtr, this, value);
@@ -98,7 +97,6 @@ public class NetworkLink extends Resource {
   
   /**
     * @param value The new latency
-    * @param date When to change the latency
     */
   public void updateLatency(double value) {
     SurfJNI.NetworkLink_updateLatency__SWIG_1(swigCPtr, this, value);
index c3d5f5c..957a707 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 4091eb5..77e8bf9 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 8303734..728d4f4 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 36b117a..a112d4b 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index b4ef317..4165404 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 53cc07e..697afea 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
@@ -13,6 +13,7 @@ import org.simgrid.NativeLib;
 public class SurfJNI {
 
   static {
+    NativeLib.nativeInit("simgrid");
     NativeLib.nativeInit("surf-java");
     Runtime.getRuntime().addShutdownHook(
       new Thread() {
index 1c7555f..9402242 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index d3f1f7e..08eee1d 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index dbbc370..71450b4 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
index 1c61df5..3890a89 100644 (file)
@@ -16,6 +16,7 @@ import org.simgrid.NativeLib;
 %}
 %pragma(java) jniclasscode=%{
   static {
+    NativeLib.nativeInit("simgrid");
     NativeLib.nativeInit("surf-java");
     Runtime.getRuntime().addShutdownHook(
       new Thread() {
@@ -166,15 +167,15 @@ JAVA_ARRAYSOFCLASSES(NetworkLink);
   long l = xbt_dynar_length($1);
   $result = jenv->NewDoubleArray(l);
   double *lout = (double *)xbt_dynar_to_array($1);
-  jenv->SetDoubleArrayRegion($result, 0, l, (const jdouble*)lout);
-  free(lout);
+  jenv->SetDoubleArrayRegion($result, 0, l, (jdouble*)lout);
+  free(:);
 }
 %typemap(javadirectorin) DoubleDynar "$jniinput"
 %typemap(directorin,descriptor="[D") DoubleDynar %{
   long l = xbt_dynar_length($1);
   $input = jenv->NewDoubleArray(l);
   double *lout = (double *)xbt_dynar_to_array($1);
-  jenv->SetDoubleArrayRegion($input, 0, l, (const jdouble*)lout);
+  jenv->SetDoubleArrayRegion($input, 0, l, (jdouble*)lout);
   free(lout);
 %}
 %typemap(javain) DoubleDynar "$javainput"
index 32b8675..26157af 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * This file is not intended to be easily readable and contains a number of
  * coding conventions designed to improve portability and efficiency. Do not make
@@ -1569,7 +1569,7 @@ Cpu *SwigDirector_CpuModel::createCpu(char const *name, DoubleDynar power_peak,
     long l = xbt_dynar_length(power_peak);
     jpower_peak = jenv->NewDoubleArray(l);
     double *lout = (double *)xbt_dynar_to_array(power_peak);
-    jenv->SetDoubleArrayRegion(jpower_peak, 0, l, (const jdouble*)lout);
+    jenv->SetDoubleArrayRegion(jpower_peak, 0, l, (jdouble*)lout);
     free(lout);
     
     jpstate = (jint) pstate;
index 065713a..54faa7d 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.11
+ * Version 2.0.12
  *
  * This file is not intended to be easily readable and contains a number of
  * coding conventions designed to improve portability and efficiency. Do not make
index ba925ee..7f58d7c 100644 (file)
@@ -342,7 +342,7 @@ XBT_PUBLIC(void) lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var,
  * @brief Update the weight of a variable
  * 
  * @param sys A system
- * @param var A variable
+ * @param var A variable
  * @param weight The new weight of the variable
  */
 XBT_PUBLIC(void) lmm_update_variable_weight(lmm_system_t sys,
index 8c10321..fc02148 100644 (file)
@@ -708,7 +708,9 @@ XBT_PUBLIC(int) surf_workstation_file_move(surf_resource_t workstation, surf_fil
  *  - SEEK_END: end of the file
  * @return MSG_OK if successful, otherwise MSG_TASK_CANCELED
  */
-XBT_PUBLIC(int) surf_workstation_file_seek(surf_resource_t workstation, surf_file_t fd, sg_size_t offset, int origin);
+XBT_PUBLIC(int) surf_workstation_file_seek(surf_resource_t workstation,
+                                           surf_file_t fd, sg_offset_t offset,
+                                           int origin);
 
 /**
  * @brief [brief description]
index ffc5da4..091799b 100644 (file)
@@ -133,11 +133,11 @@ int TRACE_start()
     XBT_DEBUG("Tracing is on");
 
     /* other trace initialization */
-    created_categories = xbt_dict_new_homogeneous(xbt_free);
-    declared_marks = xbt_dict_new_homogeneous(xbt_free);
-    user_host_variables = xbt_dict_new_homogeneous(xbt_free);
-    user_vm_variables = xbt_dict_new_homogeneous (xbt_free);
-    user_link_variables = xbt_dict_new_homogeneous(xbt_free);
+    created_categories = xbt_dict_new_homogeneous(xbt_free_f);
+    declared_marks = xbt_dict_new_homogeneous(xbt_free_f);
+    user_host_variables = xbt_dict_new_homogeneous(xbt_free_f);
+    user_vm_variables = xbt_dict_new_homogeneous(xbt_free_f);
+    user_link_variables = xbt_dict_new_homogeneous(xbt_free_f);
 
     if (TRACE_start_functions != NULL) {
       void (*func) ();
index a8e97d3..a2ff8b3 100644 (file)
@@ -398,7 +398,7 @@ int TRACE_platform_graph_export_graphviz (const char *filename)
   xbt_graph_t g = instr_routing_platform_graph();
   if (g == NULL) return 0;
   instr_routing_platform_graph_export_graphviz (g, filename);
-  xbt_graph_free_graph (g, xbt_free, xbt_free, NULL);
+  xbt_graph_free_graph(g, xbt_free_f, xbt_free_f, NULL);
   return 1;
 }
 
index 0dc0d0a..3a7ce52 100644 (file)
@@ -27,8 +27,8 @@ long long int instr_new_paje_id (void)
 void PJ_container_alloc (void)
 {
   allContainers = xbt_dict_new_homogeneous(NULL);
-  trivaNodeTypes = xbt_dict_new_homogeneous(xbt_free);
-  trivaEdgeTypes = xbt_dict_new_homogeneous(xbt_free);
+  trivaNodeTypes = xbt_dict_new_homogeneous(xbt_free_f);
+  trivaEdgeTypes = xbt_dict_new_homogeneous(xbt_free_f);
 }
 
 void PJ_container_release (void)
index dd531af..2b56b6d 100644 (file)
@@ -17,6 +17,7 @@
 SG_BEGIN_DECL()
 
 /* Need to define function drand48 for Windows */
+/* FIXME: use _drand48() defined in src/surf/random_mgr.c instead */
 #ifdef _WIN32
 #  define drand48() (rand()/(RAND_MAX + 1.0))
 #endif
index 370058c..9a3fe8a 100644 (file)
@@ -93,7 +93,7 @@ void jed_simgrid_add_resources(jed_simgrid_container_t parent,
   parent->is_lowest = 1;
   xbt_dynar_free(&parent->container_children);
   parent->container_children = NULL;
-  parent->name2id = xbt_dict_new_homogeneous(xbt_free);
+  parent->name2id = xbt_dict_new_homogeneous(xbt_free_f);
   parent->last_id = 0;
   parent->resource_list = xbt_dynar_new(sizeof(char *), NULL);
 
index 524056e..1ae1229 100644 (file)
@@ -899,6 +899,8 @@ void MC_dump_stack_liveness(xbt_fifo_t stack)
 
 void MC_print_statistics(mc_stats_t stats)
 {
+  xbt_mheap_t previous_heap = mmalloc_get_current_heap();
+
   if (stats->expanded_pairs == 0) {
     XBT_INFO("Expanded states = %lu", stats->expanded_states);
     XBT_INFO("Visited states = %lu", stats->visited_states);
@@ -920,7 +922,7 @@ void MC_print_statistics(mc_stats_t stats)
       XBT_INFO("Send-deterministic : %s",
                !initial_global_state->send_deterministic ? "No" : "Yes");
   }
-  MC_SET_STD_HEAP;
+  mmalloc_set_current_heap(previous_heap);
 }
 
 void MC_assert(int prop)
index 198539f..447b68b 100644 (file)
@@ -429,7 +429,7 @@ msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *alias,
   msg_global->sent_msg++;
 
   /* Send it by calling SIMIX network layer */
-  smx_action_t act = simcall_comm_isend(mailbox, t_simdata->message_size,
+  smx_action_t act = simcall_comm_isend(SIMIX_process_self(), mailbox, t_simdata->message_size,
                                         t_simdata->rate, task, sizeof(void *),
                                         match_fun, cleanup, NULL, match_data,detached);
   t_simdata->comm = act; /* FIXME: is the field t_simdata->comm still useful? */
index d4a0d4e..a35e598 100644 (file)
@@ -140,7 +140,7 @@ sg_size_t MSG_file_read(msg_file_t fd, sg_size_t size)
 sg_size_t MSG_file_write(msg_file_t fd, sg_size_t size)
 {
   msg_file_priv_t file_priv = MSG_file_priv(fd);
-  sg_size_t write_size;
+  sg_size_t write_size, offset;
 
   /* Find the host where the file is physically located (remote or local)*/
   msg_storage_t storage_src =(msg_storage_t) xbt_lib_get_elm_or_null(storage_lib, file_priv->storageId);
@@ -172,7 +172,9 @@ sg_size_t MSG_file_write(msg_file_t fd, sg_size_t size)
     }
   }
   /* Write file on local or remote host */
+  offset = simcall_file_tell(file_priv->simdata->smx_file);
   write_size = simcall_file_write(file_priv->simdata->smx_file, size, attached_host);
+  file_priv->size = offset+write_size;
 
   return write_size;
 }
@@ -187,29 +189,20 @@ sg_size_t MSG_file_write(msg_file_t fd, sg_size_t size)
  */
 msg_file_t MSG_file_open(const char* fullpath, void* data)
 {
-  char name[2048];
+  char *name;
   msg_file_priv_t priv = xbt_new(s_msg_file_priv_t, 1);
   priv->data = data;
   priv->fullpath = xbt_strdup(fullpath);
   priv->simdata = xbt_new0(s_simdata_file_t,1);
   priv->simdata->smx_file = simcall_file_open(fullpath, MSG_host_self());
-  sprintf(name, "%s:%s",MSG_host_get_name(MSG_host_self()),fullpath);
+  name = bprintf("%s:%i:%s",MSG_host_get_name(MSG_host_self()),MSG_process_self_PID(),fullpath);
   xbt_lib_set(file_lib, name, MSG_FILE_LEVEL, priv);
   msg_file_t fd = (msg_file_t) xbt_lib_get_elm_or_null(file_lib, name);
   __MSG_file_get_info(fd);
-
+  xbt_free(name);
   return fd;
 }
 
-/**
- * \brief Frees private data of a file (internal call only)
- */
-void __MSG_file_priv_free(msg_file_priv_t priv)
-{
-  xbt_free(&priv->simdata->smx_file);
-  free(priv);
-}
-
 /** \ingroup msg_file_management
  * \brief Close the file
  *
@@ -218,11 +211,15 @@ void __MSG_file_priv_free(msg_file_priv_t priv)
  */
 int MSG_file_close(msg_file_t fd)
 {
-  char name[2048];
+  char *name;
   msg_file_priv_t priv = MSG_file_priv(fd);
+  if (priv->data)
+    xbt_free(priv->data);
+
   int res = simcall_file_close(priv->simdata->smx_file, MSG_host_self());
-  sprintf(name, "%s:%s",MSG_host_get_name(MSG_host_self()),priv->fullpath);
+  name = bprintf("%s:%i:%s",MSG_host_get_name(MSG_host_self()),MSG_process_self_PID(),priv->fullpath);
   xbt_lib_unset(file_lib, name, MSG_FILE_LEVEL, 1);
+  xbt_free(name);
   return res;
 }
 
@@ -234,8 +231,14 @@ int MSG_file_close(msg_file_t fd)
  */
 msg_error_t MSG_file_unlink(msg_file_t fd)
 {
-  msg_file_priv_t priv = MSG_file_priv(fd);
-  int res = simcall_file_unlink(priv->simdata->smx_file);
+  msg_file_priv_t file_priv = MSG_file_priv(fd);
+  /* Find the host where the file is physically located (remote or local)*/
+  msg_storage_t storage_src =
+      (msg_storage_t) xbt_lib_get_elm_or_null(storage_lib,
+                                              file_priv->storageId);
+  msg_storage_priv_t storage_priv_src = MSG_storage_priv(storage_src);
+  msg_host_t attached_host = MSG_get_host_by_name(storage_priv_src->hostname);
+  int res = simcall_file_unlink(file_priv->simdata->smx_file, attached_host);
   return res;
 }
 
@@ -266,7 +269,7 @@ sg_size_t MSG_file_get_size(msg_file_t fd){
  * MSG_TASK_CANCELED (=8).
  *
  */
-msg_error_t MSG_file_seek(msg_file_t fd, sg_size_t offset, int origin)
+msg_error_t MSG_file_seek(msg_file_t fd, sg_offset_t offset, int origin)
 {
   msg_file_priv_t priv = MSG_file_priv(fd);
   return simcall_file_seek(priv->simdata->smx_file, offset, origin);
@@ -321,6 +324,7 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
   msg_storage_t storage_src =(msg_storage_t) xbt_lib_get_elm_or_null(storage_lib, file_priv->storageId);
   msg_storage_priv_t storage_priv_src = MSG_storage_priv(storage_src);
   msg_host_t attached_host = MSG_get_host_by_name(storage_priv_src->hostname);
+  MSG_file_seek(file, 0, SEEK_SET);
   read_size = simcall_file_read(file_priv->simdata->smx_file, file_priv->size, attached_host);
 
   /* Find the real host destination where the file will be physically stored */
@@ -343,6 +347,8 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
     }
     free(file_mount_name);
   }
+  xbt_dict_free(&storage_list);
+
   if(longest_prefix_length>0){
     /* Mount point found, retrieve the host the storage is attached to */
     msg_storage_priv_t storage_dest_priv = MSG_storage_priv(storage_dest);
@@ -486,6 +492,19 @@ void MSG_storage_set_property_value(msg_storage_t storage, const char *name, cha
   xbt_dict_set(MSG_storage_get_properties(storage), name, value,free_ctn);
 }
 
+/** \ingroup m_storage_management
+ * \brief Returns the value of a given storage property
+ *
+ * \param storage a storage
+ * \param name a property name
+ * \return value of a property (or NULL if property not set)
+ */
+const char *MSG_storage_get_property_value(msg_storage_t storage, const char *name)
+{
+  return xbt_dict_get_or_null(MSG_storage_get_properties(storage), name);
+}
+
+
 /** \ingroup msg_storage_management
  * \brief Finds a msg_storage_t using its name.
  * \param name the name of a storage
@@ -554,6 +573,12 @@ xbt_dict_t MSG_storage_get_content(msg_storage_t storage)
   return SIMIX_storage_get_content(storage);
 }
 
+/** \ingroup msg_storage_management
+ *
+ * \brief Returns the size of a #msg_storage_t.
+ * \param storage a storage
+ * \return The size of the storage
+ */
 sg_size_t MSG_storage_get_size(msg_storage_t storage)
 {
   return SIMIX_storage_get_size(storage);
index f2d79e5..fce4953 100644 (file)
@@ -207,7 +207,7 @@ MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task,
   /* Try to send it by calling SIMIX network layer */
   TRY {
     smx_action_t comm = NULL; /* MC needs the comm to be set to NULL during the simix call  */
-    comm = simcall_comm_isend(mailbox, t_simdata->message_size,
+    comm = simcall_comm_isend(SIMIX_process_self(), mailbox,t_simdata->message_size,
                                   t_simdata->rate, task, sizeof(void *),
                                   NULL, NULL, NULL, task, 0);
 #ifdef HAVE_TRACING
index 7972de2..ba12a24 100644 (file)
@@ -103,7 +103,7 @@ static inline int __MSG_vm_is_state(msg_vm_t vm, e_surf_vm_state_t state)
   return simcall_vm_get_state(vm) == state;
 }
 
-/** @brief Returns whether the given VM has just reated, not running.
+/** @brief Returns whether the given VM has just created, not running.
  *  @ingroup msg_VMs
  */
 int MSG_vm_is_created(msg_vm_t vm)
@@ -180,7 +180,7 @@ msg_vm_t MSG_vm_create(msg_host_t ind_pm, const char *name,
    * bandwidth */
   double host_speed = MSG_get_host_speed(ind_pm);
   double update_speed = ((double)dp_intensity/100) * mig_netspeed;
-       
+
   msg_vm_t vm = MSG_vm_create_core(ind_pm, name);
   s_ws_params_t params;
   memset(&params, 0, sizeof(params));
@@ -294,7 +294,7 @@ void MSG_vm_shutdown(msg_vm_t vm)
 
 
 /* We have two mailboxes. mbox is used to transfer migration data between
- * source and destiantion PMs. mbox_ctl is used to detect the completion of a
+ * source and destination PMs. mbox_ctl is used to detect the completion of a
  * migration. The names of these mailboxes must not conflict with others. */
 static inline char *get_mig_mbox_src_dst(const char *vm_name, const char *src_pm_name, const char *dst_pm_name)
 {
@@ -456,7 +456,7 @@ static double get_computed(char *key, msg_vm_t vm, dirty_page_t dp, double remai
   double computed = dp->prev_remaining - remaining;
   double duration = clock - dp->prev_clock;
 
-  XBT_DEBUG("%s@%s: computated %f ops (remaining %f -> %f) in %f secs (%f -> %f)",
+  XBT_DEBUG("%s@%s: computed %f ops (remaining %f -> %f) in %f secs (%f -> %f)",
       key, sg_host_name(vm), computed, dp->prev_remaining, remaining, duration, dp->prev_clock, clock);
 
   return computed;
@@ -472,7 +472,7 @@ static double lookup_computed_flop_counts(msg_vm_t vm, int stage_for_fancy_debug
   dirty_page_t dp = NULL;
   xbt_dict_foreach(priv->dp_objs, cursor, key, dp) {
     double remaining = MSG_task_get_remaining_computation(dp->task);
-   
+
         double clock = MSG_get_clock();
 
     // total += calc_updated_pages(key, vm, dp, remaining, clock);
@@ -531,7 +531,7 @@ void MSG_host_del_task(msg_host_t host, msg_task_t task)
   xbt_assert(dp->task == task);
 
   /* If we are in the middle of dirty page tracking, we record how much
-   * computaion has been done until now, and keep the information for the
+   * computation has been done until now, and keep the information for the
    * lookup_() function that will called soon. */
   if (priv->dp_enabled) {
     double remaining = MSG_task_get_remaining_computation(task);
@@ -560,7 +560,7 @@ static int deferred_exec_fun(int argc, char *argv[])
   double prio = atof(prio_str);
 
   msg_task_t task = MSG_task_create("__task_deferred", computaion, 0, NULL);
-  // XBT_INFO("exec deferred %f", computaion);
+  // XBT_INFO("exec deferred %f", computation);
 
   /* dpt is the results of the VM activity */
   MSG_task_set_priority(task, prio);
@@ -971,7 +971,7 @@ static int migration_tx_fun(int argc, char *argv[])
     double clock_post_send = MSG_get_clock();
     double bandwidth = ramsize / (clock_post_send - clock_prev_send);
     threshold = get_threshold_value(bandwidth, max_downtime);
-    XBT_INFO("actual banwdidth %f (MB/s), threshold %f", bandwidth / 1024 / 1024, threshold);
+    XBT_INFO("actual bandwidth %f (MB/s), threshold %f", bandwidth / 1024 / 1024, threshold);
   }
 
 
@@ -1027,7 +1027,7 @@ static int migration_tx_fun(int argc, char *argv[])
 
     double bandwidth = updated_size / (clock_post_send - clock_prev_send);
     threshold = get_threshold_value(bandwidth, max_downtime);
-    XBT_INFO("actual banwdidth %f, threshold %f", bandwidth / 1024 / 1024, threshold);
+    XBT_INFO("actual bandwidth %f, threshold %f", bandwidth / 1024 / 1024, threshold);
 
 
 
@@ -1153,8 +1153,8 @@ void MSG_vm_migrate(msg_vm_t vm, msg_host_t new_pm)
 /** @brief Immediately suspend the execution of all processes within the given VM.
  *  @ingroup msg_VMs
  *
- * This function stops the exection of the VM. All the processes on this VM
- * will pause. The state of the VM is perserved. We can later resume it again.
+ * This function stops the execution of the VM. All the processes on this VM
+ * will pause. The state of the VM is preserved. We can later resume it again.
  *
  * No suspension cost occurs.
  */
@@ -1188,8 +1188,8 @@ void MSG_vm_resume(msg_vm_t vm)
 /** @brief Immediately save the execution of all processes within the given VM.
  *  @ingroup msg_VMs
  *
- * This function stops the exection of the VM. All the processes on this VM
- * will pause. The state of the VM is perserved. We can later resume it again.
+ * This function stops the execution of the VM. All the processes on this VM
+ * will pause. The state of the VM is preserved. We can later resume it again.
  *
  * FIXME: No suspension cost occurs. If you want to simulate this too, you want to
  * use a \ref MSG_file_write() before or after, depending on the exact semantic
@@ -1250,7 +1250,7 @@ msg_host_t MSG_vm_get_pm(msg_vm_t vm)
  *
  * There are some solutions for this problem. One option is to update the bound
  * of the dummy CPU action automatically. It should be the sum of all tasks on
- * the VM. But, this solution might be costy, because we have to scan all tasks
+ * the VM. But, this solution might be costly, because we have to scan all tasks
  * on the VM in share_resource() or we have to trap both the start and end of
  * task execution.
  *
index 43e90c9..bdf87cc 100644 (file)
@@ -27,7 +27,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
+#define YY_FLEX_SUBMINOR_VERSION 39
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -160,7 +160,15 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -199,6 +207,13 @@ extern FILE *dax_in, *dax_out;
                     if ( dax_text[yyl] == '\n' )\
                         --dax_lineno;\
             }while(0)
+    #define YY_LINENO_REWIND_TO(dst) \
+            do {\
+                const char *p;\
+                for ( p = yy_cp-1; p >= (dst); --p)\
+                    if ( *p == '\n' )\
+                        --dax_lineno;\
+            }while(0)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -1329,81 +1344,81 @@ const char dax__flexml_version[] = "1.9.6";
 int dax__pcdata_ix;
 extern char *dax__bufferstack;
 #define dax__pcdata (dax__bufferstack + dax__pcdata_ix)
-AT_dax__uses_type AX_dax__uses_type;
-#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type)
-short int dax__uses_type_isset;
+AT_dax__uses_file AX_dax__uses_file;
+#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file)
+short int dax__uses_file_isset;
 AT_dax__adag_count AX_dax__adag_count;
 #define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count)
 short int dax__adag_count_isset;
-AT_dax__adag_xmlns_c_xsi AX_dax__adag_xmlns_c_xsi;
-#define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi)
-short int dax__adag_xmlns_c_xsi_isset;
-AT_dax__adag_xmlns AX_dax__adag_xmlns;
-#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns)
-short int dax__adag_xmlns_isset;
-AT_dax__parent_ref AX_dax__parent_ref;
-#define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref)
-short int dax__parent_ref_isset;
-AT_dax__job_namespace AX_dax__job_namespace;
-#define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace)
-short int dax__job_namespace_isset;
-AT_dax__adag_xsi_c_schemaLocation AX_dax__adag_xsi_c_schemaLocation;
-#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation)
-short int dax__adag_xsi_c_schemaLocation_isset;
+AT_dax__uses_register AX_dax__uses_register;
+#define A_dax__uses_register AX_dax__uses_register
+short int dax__uses_register_isset;
+AT_dax__uses_size AX_dax__uses_size;
+#define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size)
+short int dax__uses_size_isset;
+AT_dax__uses_link AX_dax__uses_link;
+#define A_dax__uses_link AX_dax__uses_link
+short int dax__uses_link_isset;
+AT_dax__adag_fileCount AX_dax__adag_fileCount;
+#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount)
+short int dax__adag_fileCount_isset;
 AT_dax__adag_childCount AX_dax__adag_childCount;
 #define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount)
 short int dax__adag_childCount_isset;
-AT_dax__uses_transfer AX_dax__uses_transfer;
-#define A_dax__uses_transfer AX_dax__uses_transfer
-short int dax__uses_transfer_isset;
-AT_dax__uses_file AX_dax__uses_file;
-#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file)
-short int dax__uses_file_isset;
-AT_dax__adag_name AX_dax__adag_name;
-#define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name)
-short int dax__adag_name_isset;
-AT_dax__uses_optional AX_dax__uses_optional;
-#define A_dax__uses_optional AX_dax__uses_optional
-short int dax__uses_optional_isset;
-AT_dax__child_ref AX_dax__child_ref;
-#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref)
-short int dax__child_ref_isset;
 AT_dax__job_level AX_dax__job_level;
 #define A_dax__job_level (dax__bufferstack + AX_dax__job_level)
 short int dax__job_level_isset;
-AT_dax__job_id AX_dax__job_id;
-#define A_dax__job_id (dax__bufferstack + AX_dax__job_id)
-short int dax__job_id_isset;
-AT_dax__uses_size AX_dax__uses_size;
-#define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size)
-short int dax__uses_size_isset;
+AT_dax__child_ref AX_dax__child_ref;
+#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref)
+short int dax__child_ref_isset;
+AT_dax__job_version AX_dax__job_version;
+#define A_dax__job_version (dax__bufferstack + AX_dax__job_version)
+short int dax__job_version_isset;
+AT_dax__job_namespace AX_dax__job_namespace;
+#define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace)
+short int dax__job_namespace_isset;
+AT_dax__parent_ref AX_dax__parent_ref;
+#define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref)
+short int dax__parent_ref_isset;
+AT_dax__adag_xmlns AX_dax__adag_xmlns;
+#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns)
+short int dax__adag_xmlns_isset;
+AT_dax__uses_optional AX_dax__uses_optional;
+#define A_dax__uses_optional AX_dax__uses_optional
+short int dax__uses_optional_isset;
 AT_dax__job_runtime AX_dax__job_runtime;
 #define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime)
 short int dax__job_runtime_isset;
-AT_dax__job_name AX_dax__job_name;
-#define A_dax__job_name (dax__bufferstack + AX_dax__job_name)
-short int dax__job_name_isset;
-AT_dax__uses_link AX_dax__uses_link;
-#define A_dax__uses_link AX_dax__uses_link
-short int dax__uses_link_isset;
+AT_dax__adag_name AX_dax__adag_name;
+#define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name)
+short int dax__adag_name_isset;
 AT_dax__adag_version AX_dax__adag_version;
 #define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version)
 short int dax__adag_version_isset;
-AT_dax__uses_register AX_dax__uses_register;
-#define A_dax__uses_register AX_dax__uses_register
-short int dax__uses_register_isset;
+AT_dax__adag_xsi_c_schemaLocation AX_dax__adag_xsi_c_schemaLocation;
+#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation)
+short int dax__adag_xsi_c_schemaLocation_isset;
+AT_dax__uses_transfer AX_dax__uses_transfer;
+#define A_dax__uses_transfer AX_dax__uses_transfer
+short int dax__uses_transfer_isset;
 AT_dax__adag_index AX_dax__adag_index;
 #define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index)
 short int dax__adag_index_isset;
-AT_dax__job_version AX_dax__job_version;
-#define A_dax__job_version (dax__bufferstack + AX_dax__job_version)
-short int dax__job_version_isset;
-AT_dax__adag_fileCount AX_dax__adag_fileCount;
-#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount)
-short int dax__adag_fileCount_isset;
+AT_dax__uses_type AX_dax__uses_type;
+#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type)
+short int dax__uses_type_isset;
+AT_dax__job_id AX_dax__job_id;
+#define A_dax__job_id (dax__bufferstack + AX_dax__job_id)
+short int dax__job_id_isset;
+AT_dax__adag_xmlns_c_xsi AX_dax__adag_xmlns_c_xsi;
+#define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi)
+short int dax__adag_xmlns_c_xsi_isset;
 AT_dax__adag_jobCount AX_dax__adag_jobCount;
 #define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount)
 short int dax__adag_jobCount_isset;
+AT_dax__job_name AX_dax__job_name;
+#define A_dax__job_name (dax__bufferstack + AX_dax__job_name)
+short int dax__job_name_isset;
 
 /* XML state. */
 #ifdef FLEX_DEBUG
@@ -1677,7 +1692,12 @@ static int input (void );
     
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1778,6 +1798,34 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! dax_in )
+                       dax_in = stdin;
+
+               if ( ! dax_out )
+                       dax_out = stdout;
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       dax_ensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               dax__create_buffer(dax_in,YY_BUF_SIZE );
+               }
+
+               dax__load_buffer_state( );
+               }
+
+       {
+
  /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */
  SET(PROLOG);
  reset_dax__parse_err_msg();
@@ -1840,32 +1888,6 @@ YY_DECL
 
  /* COMMENTS and PIs: handled uniformly for efficiency. */
 
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
-
-#ifdef YY_USER_INIT
-               YY_USER_INIT;
-#endif
-
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
-
-               if ( ! dax_in )
-                       dax_in = stdin;
-
-               if ( ! dax_out )
-                       dax_out = stdout;
-
-               if ( ! YY_CURRENT_BUFFER ) {
-                       dax_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               dax__create_buffer(dax_in,YY_BUF_SIZE );
-               }
-
-               dax__load_buffer_state( );
-               }
-
        while ( 1 )             /* loops until end-of-file is reached */
                {
                yy_cp = (yy_c_buf_p);
@@ -1882,7 +1904,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -2190,9 +2212,9 @@ case 44:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</adag>' expected.",dax_text[0]);
        YY_BREAK
+case YY_STATE_EOF(E_dax__adag):
 case YY_STATE_EOF(S_dax__adag_1):
 case YY_STATE_EOF(S_dax__adag):
-case YY_STATE_EOF(E_dax__adag):
 case YY_STATE_EOF(S_dax__adag_3):
 case YY_STATE_EOF(S_dax__adag_5):
 FAIL("Premature EOF: `</adag>' expected.");
@@ -2300,7 +2322,7 @@ YY_RULE_SETUP
   if (!AX_dax__job_runtime) FAIL("Required attribute `runtime' not set for `job' element.");
   LEAVE; STag_dax__job(); dax__pcdata_ix = 0; ETag_dax__job(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__adag_2: case S_dax__adag_3: case S_dax__adag: SET(S_dax__adag_3); break;
+   case S_dax__adag_3: case S_dax__adag: case S_dax__adag_2: SET(S_dax__adag_3); break;
   }
  }
        YY_BREAK
@@ -2324,7 +2346,7 @@ YY_RULE_SETUP
   ETag_dax__job();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__adag_2: case S_dax__adag_3: case S_dax__adag: SET(S_dax__adag_3); break;
+   case S_dax__adag_3: case S_dax__adag: case S_dax__adag_2: SET(S_dax__adag_3); break;
   }
  }
        YY_BREAK
@@ -2338,8 +2360,8 @@ YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</job>' expected.",dax_text[0]);
        YY_BREAK
 case YY_STATE_EOF(S_dax__job):
-case YY_STATE_EOF(E_dax__job):
 case YY_STATE_EOF(S_dax__job_2):
+case YY_STATE_EOF(E_dax__job):
 FAIL("Premature EOF: `</job>' expected.");
        YY_BREAK
 
@@ -2473,7 +2495,7 @@ YY_RULE_SETUP
   if (!AX_dax__uses_size) FAIL("Required attribute `size' not set for `uses' element.");
   LEAVE; STag_dax__uses(); dax__pcdata_ix = 0; ETag_dax__uses(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__job: case S_dax__job_2: case S_dax__job_1: SET(S_dax__job_2); break;
+   case S_dax__job_1: case S_dax__job: case S_dax__job_2: SET(S_dax__job_2); break;
   }
  }
        YY_BREAK
@@ -2497,7 +2519,7 @@ YY_RULE_SETUP
   ETag_dax__uses();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__job: case S_dax__job_2: case S_dax__job_1: SET(S_dax__job_2); break;
+   case S_dax__job_1: case S_dax__job: case S_dax__job_2: SET(S_dax__job_2); break;
   }
  }
        YY_BREAK
@@ -2552,7 +2574,7 @@ YY_RULE_SETUP
   if (!AX_dax__child_ref) FAIL("Required attribute `ref' not set for `child' element.");
   LEAVE; STag_dax__child(); dax__pcdata_ix = 0; ETag_dax__child(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__adag_5: case S_dax__adag_4: case S_dax__adag_3: case S_dax__adag: case S_dax__adag_1: SET(S_dax__adag_5); break;
+   case S_dax__adag_3: case S_dax__adag_5: case S_dax__adag_1: case S_dax__adag: case S_dax__adag_4: SET(S_dax__adag_5); break;
   }
  }
        YY_BREAK
@@ -2576,7 +2598,7 @@ YY_RULE_SETUP
   ETag_dax__child();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__adag_5: case S_dax__adag_4: case S_dax__adag_3: case S_dax__adag: case S_dax__adag_1: SET(S_dax__adag_5); break;
+   case S_dax__adag_3: case S_dax__adag_5: case S_dax__adag_1: case S_dax__adag: case S_dax__adag_4: SET(S_dax__adag_5); break;
   }
  }
        YY_BREAK
@@ -2633,7 +2655,7 @@ YY_RULE_SETUP
   if (!AX_dax__parent_ref) FAIL("Required attribute `ref' not set for `parent' element.");
   LEAVE; STag_dax__parent(); dax__pcdata_ix = 0; ETag_dax__parent(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__child_1: case S_dax__child_2: case S_dax__child: SET(S_dax__child_2); break;
+   case S_dax__child: case S_dax__child_2: case S_dax__child_1: SET(S_dax__child_2); break;
   }
  }
        YY_BREAK
@@ -2657,7 +2679,7 @@ YY_RULE_SETUP
   ETag_dax__parent();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_dax__child_1: case S_dax__child_2: case S_dax__child: SET(S_dax__child_2); break;
+   case S_dax__child: case S_dax__child_2: case S_dax__child_1: SET(S_dax__child_2); break;
   }
  }
        YY_BREAK
@@ -2927,6 +2949,7 @@ case YY_STATE_EOF(IMPOSSIBLE):
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
+       } /* end of user's declarations */
 } /* end of dax_lex */
 
 /* yy_get_next_buffer - try to read in a new buffer
index e570088..3649459 100644 (file)
@@ -62,50 +62,50 @@ XBT_PUBLIC(void) ETag_dax__parent(void);
 /* XML application data. */
 typedef int AT_dax__job_id;
 #define AU_dax__job_id NULL
-typedef int AT_dax__adag_index;
-#define AU_dax__adag_index NULL
-typedef enum { AU_dax__uses_transfer, A_dax__uses_transfer_false,A_dax__uses_transfer_true } AT_dax__uses_transfer;
-typedef int AT_dax__adag_fileCount;
-#define AU_dax__adag_fileCount NULL
-typedef int AT_dax__adag_jobCount;
-#define AU_dax__adag_jobCount NULL
-typedef int AT_dax__job_level;
-#define AU_dax__job_level NULL
-typedef int AT_dax__adag_name;
-#define AU_dax__adag_name NULL
-typedef enum { AU_dax__uses_register, A_dax__uses_register_false,A_dax__uses_register_true } AT_dax__uses_register;
-typedef int AT_dax__adag_count;
-#define AU_dax__adag_count NULL
-typedef int AT_dax__parent_ref;
-#define AU_dax__parent_ref NULL
 typedef int AT_dax__job_version;
 #define AU_dax__job_version NULL
-typedef int AT_dax__adag_xmlns;
-#define AU_dax__adag_xmlns NULL
+typedef int AT_dax__uses_type;
+#define AU_dax__uses_type NULL
 typedef int AT_dax__adag_childCount;
 #define AU_dax__adag_childCount NULL
-typedef int AT_dax__adag_xsi_c_schemaLocation;
-#define AU_dax__adag_xsi_c_schemaLocation NULL
+typedef enum { AU_dax__uses_optional, A_dax__uses_optional_false,A_dax__uses_optional_true } AT_dax__uses_optional;
+typedef enum { AU_dax__uses_link, A_dax__uses_link_input,A_dax__uses_link_output } AT_dax__uses_link;
+typedef int AT_dax__adag_xmlns_c_xsi;
+#define AU_dax__adag_xmlns_c_xsi NULL
 typedef int AT_dax__job_runtime;
 #define AU_dax__job_runtime NULL
 typedef int AT_dax__uses_file;
 #define AU_dax__uses_file NULL
-typedef enum { AU_dax__uses_link, A_dax__uses_link_input,A_dax__uses_link_output } AT_dax__uses_link;
-typedef int AT_dax__adag_xmlns_c_xsi;
-#define AU_dax__adag_xmlns_c_xsi NULL
-typedef int AT_dax__job_name;
-#define AU_dax__job_name NULL
-typedef int AT_dax__child_ref;
-#define AU_dax__child_ref NULL
+typedef int AT_dax__adag_jobCount;
+#define AU_dax__adag_jobCount NULL
+typedef enum { AU_dax__uses_register, A_dax__uses_register_false,A_dax__uses_register_true } AT_dax__uses_register;
+typedef int AT_dax__adag_name;
+#define AU_dax__adag_name NULL
+typedef int AT_dax__job_level;
+#define AU_dax__job_level NULL
 typedef int AT_dax__job_namespace;
 #define AU_dax__job_namespace NULL
+typedef int AT_dax__adag_fileCount;
+#define AU_dax__adag_fileCount NULL
+typedef enum { AU_dax__uses_transfer, A_dax__uses_transfer_false,A_dax__uses_transfer_true } AT_dax__uses_transfer;
+typedef int AT_dax__adag_count;
+#define AU_dax__adag_count NULL
+typedef int AT_dax__child_ref;
+#define AU_dax__child_ref NULL
 typedef int AT_dax__adag_version;
 #define AU_dax__adag_version NULL
-typedef enum { AU_dax__uses_optional, A_dax__uses_optional_false,A_dax__uses_optional_true } AT_dax__uses_optional;
-typedef int AT_dax__uses_type;
-#define AU_dax__uses_type NULL
+typedef int AT_dax__job_name;
+#define AU_dax__job_name NULL
+typedef int AT_dax__adag_xmlns;
+#define AU_dax__adag_xmlns NULL
+typedef int AT_dax__adag_xsi_c_schemaLocation;
+#define AU_dax__adag_xsi_c_schemaLocation NULL
+typedef int AT_dax__parent_ref;
+#define AU_dax__parent_ref NULL
 typedef int AT_dax__uses_size;
 #define AU_dax__uses_size NULL
+typedef int AT_dax__adag_index;
+#define AU_dax__adag_index NULL
 
 /* FleXML-provided data. */
 XBT_PUBLIC_DATA(int) dax__pcdata_ix;
@@ -114,78 +114,78 @@ XBT_PUBLIC_DATA(char *) dax__bufferstack;
 XBT_PUBLIC_DATA(AT_dax__job_id) AX_dax__job_id;
 #define A_dax__job_id (dax__bufferstack + AX_dax__job_id)
 XBT_PUBLIC_DATA(short int) dax__job_id_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_index) AX_dax__adag_index;
-#define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index)
-XBT_PUBLIC_DATA(short int) dax__adag_index_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_transfer) AX_dax__uses_transfer;
-#define A_dax__uses_transfer AX_dax__uses_transfer
-XBT_PUBLIC_DATA(short int) dax__uses_transfer_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_fileCount) AX_dax__adag_fileCount;
-#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount)
-XBT_PUBLIC_DATA(short int) dax__adag_fileCount_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_jobCount) AX_dax__adag_jobCount;
-#define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount)
-XBT_PUBLIC_DATA(short int) dax__adag_jobCount_isset;
-XBT_PUBLIC_DATA(AT_dax__job_level) AX_dax__job_level;
-#define A_dax__job_level (dax__bufferstack + AX_dax__job_level)
-XBT_PUBLIC_DATA(short int) dax__job_level_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_name) AX_dax__adag_name;
-#define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name)
-XBT_PUBLIC_DATA(short int) dax__adag_name_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_register) AX_dax__uses_register;
-#define A_dax__uses_register AX_dax__uses_register
-XBT_PUBLIC_DATA(short int) dax__uses_register_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_count) AX_dax__adag_count;
-#define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count)
-XBT_PUBLIC_DATA(short int) dax__adag_count_isset;
-XBT_PUBLIC_DATA(AT_dax__parent_ref) AX_dax__parent_ref;
-#define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref)
-XBT_PUBLIC_DATA(short int) dax__parent_ref_isset;
 XBT_PUBLIC_DATA(AT_dax__job_version) AX_dax__job_version;
 #define A_dax__job_version (dax__bufferstack + AX_dax__job_version)
 XBT_PUBLIC_DATA(short int) dax__job_version_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_xmlns) AX_dax__adag_xmlns;
-#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns)
-XBT_PUBLIC_DATA(short int) dax__adag_xmlns_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_type) AX_dax__uses_type;
+#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type)
+XBT_PUBLIC_DATA(short int) dax__uses_type_isset;
 XBT_PUBLIC_DATA(AT_dax__adag_childCount) AX_dax__adag_childCount;
 #define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount)
 XBT_PUBLIC_DATA(short int) dax__adag_childCount_isset;
-XBT_PUBLIC_DATA(AT_dax__adag_xsi_c_schemaLocation) AX_dax__adag_xsi_c_schemaLocation;
-#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation)
-XBT_PUBLIC_DATA(short int) dax__adag_xsi_c_schemaLocation_isset;
-XBT_PUBLIC_DATA(AT_dax__job_runtime) AX_dax__job_runtime;
-#define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime)
-XBT_PUBLIC_DATA(short int) dax__job_runtime_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_file) AX_dax__uses_file;
-#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file)
-XBT_PUBLIC_DATA(short int) dax__uses_file_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_optional) AX_dax__uses_optional;
+#define A_dax__uses_optional AX_dax__uses_optional
+XBT_PUBLIC_DATA(short int) dax__uses_optional_isset;
 XBT_PUBLIC_DATA(AT_dax__uses_link) AX_dax__uses_link;
 #define A_dax__uses_link AX_dax__uses_link
 XBT_PUBLIC_DATA(short int) dax__uses_link_isset;
 XBT_PUBLIC_DATA(AT_dax__adag_xmlns_c_xsi) AX_dax__adag_xmlns_c_xsi;
 #define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi)
 XBT_PUBLIC_DATA(short int) dax__adag_xmlns_c_xsi_isset;
-XBT_PUBLIC_DATA(AT_dax__job_name) AX_dax__job_name;
-#define A_dax__job_name (dax__bufferstack + AX_dax__job_name)
-XBT_PUBLIC_DATA(short int) dax__job_name_isset;
-XBT_PUBLIC_DATA(AT_dax__child_ref) AX_dax__child_ref;
-#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref)
-XBT_PUBLIC_DATA(short int) dax__child_ref_isset;
+XBT_PUBLIC_DATA(AT_dax__job_runtime) AX_dax__job_runtime;
+#define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime)
+XBT_PUBLIC_DATA(short int) dax__job_runtime_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_file) AX_dax__uses_file;
+#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file)
+XBT_PUBLIC_DATA(short int) dax__uses_file_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_jobCount) AX_dax__adag_jobCount;
+#define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount)
+XBT_PUBLIC_DATA(short int) dax__adag_jobCount_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_register) AX_dax__uses_register;
+#define A_dax__uses_register AX_dax__uses_register
+XBT_PUBLIC_DATA(short int) dax__uses_register_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_name) AX_dax__adag_name;
+#define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name)
+XBT_PUBLIC_DATA(short int) dax__adag_name_isset;
+XBT_PUBLIC_DATA(AT_dax__job_level) AX_dax__job_level;
+#define A_dax__job_level (dax__bufferstack + AX_dax__job_level)
+XBT_PUBLIC_DATA(short int) dax__job_level_isset;
 XBT_PUBLIC_DATA(AT_dax__job_namespace) AX_dax__job_namespace;
 #define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace)
 XBT_PUBLIC_DATA(short int) dax__job_namespace_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_fileCount) AX_dax__adag_fileCount;
+#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount)
+XBT_PUBLIC_DATA(short int) dax__adag_fileCount_isset;
+XBT_PUBLIC_DATA(AT_dax__uses_transfer) AX_dax__uses_transfer;
+#define A_dax__uses_transfer AX_dax__uses_transfer
+XBT_PUBLIC_DATA(short int) dax__uses_transfer_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_count) AX_dax__adag_count;
+#define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count)
+XBT_PUBLIC_DATA(short int) dax__adag_count_isset;
+XBT_PUBLIC_DATA(AT_dax__child_ref) AX_dax__child_ref;
+#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref)
+XBT_PUBLIC_DATA(short int) dax__child_ref_isset;
 XBT_PUBLIC_DATA(AT_dax__adag_version) AX_dax__adag_version;
 #define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version)
 XBT_PUBLIC_DATA(short int) dax__adag_version_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_optional) AX_dax__uses_optional;
-#define A_dax__uses_optional AX_dax__uses_optional
-XBT_PUBLIC_DATA(short int) dax__uses_optional_isset;
-XBT_PUBLIC_DATA(AT_dax__uses_type) AX_dax__uses_type;
-#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type)
-XBT_PUBLIC_DATA(short int) dax__uses_type_isset;
+XBT_PUBLIC_DATA(AT_dax__job_name) AX_dax__job_name;
+#define A_dax__job_name (dax__bufferstack + AX_dax__job_name)
+XBT_PUBLIC_DATA(short int) dax__job_name_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_xmlns) AX_dax__adag_xmlns;
+#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns)
+XBT_PUBLIC_DATA(short int) dax__adag_xmlns_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_xsi_c_schemaLocation) AX_dax__adag_xsi_c_schemaLocation;
+#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation)
+XBT_PUBLIC_DATA(short int) dax__adag_xsi_c_schemaLocation_isset;
+XBT_PUBLIC_DATA(AT_dax__parent_ref) AX_dax__parent_ref;
+#define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref)
+XBT_PUBLIC_DATA(short int) dax__parent_ref_isset;
 XBT_PUBLIC_DATA(AT_dax__uses_size) AX_dax__uses_size;
 #define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size)
 XBT_PUBLIC_DATA(short int) dax__uses_size_isset;
+XBT_PUBLIC_DATA(AT_dax__adag_index) AX_dax__adag_index;
+#define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index)
+XBT_PUBLIC_DATA(short int) dax__adag_index_isset;
 
 /* XML application utilities. */
 XBT_PUBLIC(int) dax__element_context(int);
index 7d1998e..38a52ec 100644 (file)
@@ -76,8 +76,8 @@ rdv_get_head True (void*, smx_action_t) (rdv, void*, smx_rdv_t)
 rdv_set_receiver True (void) (rdv, void*, smx_rdv_t) (receiver, void*, smx_process_t)
 rdv_get_receiver True (void*, smx_process_t) (rdv, void*, smx_rdv_t)
 comm_iprobe True (void*, smx_action_t) (rdv, void*, smx_rdv_t) (src, int) (tag, int) (match_fun, FPtr, simix_match_func_t) (data, void*)
-comm_send False (void) (rdv, void*, smx_rdv_t) (task_size, double) (rate, double) (src_buff, void*) (src_buff_size, size_t) (match_fun, FPtr, simix_match_func_t) (copy_data_fun, FPtr, simix_copy_data_func_t) (data, void*) (timeout, double)
-comm_isend True (void*, smx_action_t) (rdv, void*, smx_rdv_t) (task_size, double) (rate, double) (src_buff, void*) (src_buff_size, size_t) (match_fun, FPtr, simix_match_func_t) (clean_fun, FPtr, simix_clean_func_t) (copy_data_fun, FPtr, simix_copy_data_func_t) (data, void*) (detached, int)
+comm_send False (void) (src, void*, smx_process_t) (rdv, void*, smx_rdv_t)  (task_size, double) (rate, double) (src_buff, void*) (src_buff_size, size_t) (match_fun, FPtr, simix_match_func_t) (copy_data_fun, FPtr, simix_copy_data_func_t) (data, void*) (timeout, double)
+comm_isend True (void*, smx_action_t) (src, void*, smx_process_t) (rdv, void*, smx_rdv_t) (task_size, double) (rate, double) (src_buff, void*) (src_buff_size, size_t) (match_fun, FPtr, simix_match_func_t) (clean_fun, FPtr, simix_clean_func_t) (copy_data_fun, FPtr, simix_copy_data_func_t) (data, void*) (detached, int)
 comm_recv False (void) (rdv, void*, smx_rdv_t) (dst_buff, void*) (dst_buff_size, void*, size_t*) (match_fun, FPtr, simix_match_func_t) (copy_data_fun, FPtr, simix_copy_data_func_t) (data, void*) (timeout, double) (rate, double)
 comm_irecv True (void*, smx_action_t) (rdv, void*, smx_rdv_t) (dst_buff, void*) (dst_buff_size, void*, size_t*) (match_fun, FPtr, simix_match_func_t) (copy_data_fun, FPtr, simix_copy_data_func_t) (data, void*) (rate, double)
 comm_cancel True (void) (comm, void*, smx_action_t)
@@ -113,10 +113,10 @@ file_read False (sg_size_t) (fd, void*, smx_file_t) (size, sg_size_t) (host, voi
 file_write False (sg_size_t) (fd, void*, smx_file_t) (size, sg_size_t) (host, void*, smx_host_t)
 file_open False (void*, smx_file_t) (fullpath, const char*) (host, void*, smx_host_t)
 file_close False (int) (fd, void*, smx_file_t) (host, void*, smx_host_t)
-file_unlink True (int) (fd, void*, smx_file_t)
+file_unlink True (int) (fd, void*, smx_file_t) (host, void*, smx_host_t)
 file_get_size True (sg_size_t) (fd, void*, smx_file_t)
 file_tell True (sg_size_t) (fd, void*, smx_file_t)
-file_seek True (int) (fd, void*, smx_file_t) (offset, sg_size_t) (origin, int)
+file_seek True (int) (fd, void*, smx_file_t) (offset, sg_offset_t) (origin, int)
 file_get_info True (void*, xbt_dynar_t) (fd, void*, smx_file_t)
 file_move True (int) (fd, void*, smx_file_t) (fullpath, const char*)
 storage_get_free_size True (sg_size_t) (storage, void*, smx_storage_t)
index 27d6504..570815e 100755 (executable)
@@ -24,6 +24,7 @@ types = [('TCHAR', 'char', 'c')
         ,('TCPTR', 'const void*', 'cp')
         ,('TSIZE', 'size_t', 'sz')
         ,('TSGSIZE', 'sg_size_t', 'sgsz')
+        ,('TSGOFF', 'sg_offset_t', 'sgoff')
         ,('TVOID', 'void', '')
         ,('TDSPEC', 'void*', 'dp')
         ,('TFSPEC', 'FPtr', 'fp')]
index bc7a3e2..6e33cec 100644 (file)
@@ -690,119 +690,131 @@ static inline void* simcall_comm_iprobe__get__data(smx_simcall_t simcall){
 static inline void simcall_comm_iprobe__set__data(smx_simcall_t simcall, void* arg){
     simcall->args[4].dp = arg;
 }
+static inline smx_process_t simcall_comm_send__get__src(smx_simcall_t simcall){
+  return (smx_process_t) simcall->args[0].dp;
+}
+static inline void simcall_comm_send__set__src(smx_simcall_t simcall, void* arg){
+    simcall->args[0].dp = arg;
+}
 static inline smx_rdv_t simcall_comm_send__get__rdv(smx_simcall_t simcall){
-  return (smx_rdv_t) simcall->args[0].dp;
+  return (smx_rdv_t) simcall->args[1].dp;
 }
 static inline void simcall_comm_send__set__rdv(smx_simcall_t simcall, void* arg){
-    simcall->args[0].dp = arg;
+    simcall->args[1].dp = arg;
 }
 static inline double simcall_comm_send__get__task_size(smx_simcall_t simcall){
-  return  simcall->args[1].d;
+  return  simcall->args[2].d;
 }
 static inline void simcall_comm_send__set__task_size(smx_simcall_t simcall, double arg){
-    simcall->args[1].d = arg;
+    simcall->args[2].d = arg;
 }
 static inline double simcall_comm_send__get__rate(smx_simcall_t simcall){
-  return  simcall->args[2].d;
+  return  simcall->args[3].d;
 }
 static inline void simcall_comm_send__set__rate(smx_simcall_t simcall, double arg){
-    simcall->args[2].d = arg;
+    simcall->args[3].d = arg;
 }
 static inline void* simcall_comm_send__get__src_buff(smx_simcall_t simcall){
-  return  simcall->args[3].dp;
+  return  simcall->args[4].dp;
 }
 static inline void simcall_comm_send__set__src_buff(smx_simcall_t simcall, void* arg){
-    simcall->args[3].dp = arg;
+    simcall->args[4].dp = arg;
 }
 static inline size_t simcall_comm_send__get__src_buff_size(smx_simcall_t simcall){
-  return  simcall->args[4].sz;
+  return  simcall->args[5].sz;
 }
 static inline void simcall_comm_send__set__src_buff_size(smx_simcall_t simcall, size_t arg){
-    simcall->args[4].sz = arg;
+    simcall->args[5].sz = arg;
 }
 static inline simix_match_func_t simcall_comm_send__get__match_fun(smx_simcall_t simcall){
-  return (simix_match_func_t) simcall->args[5].fp;
+  return (simix_match_func_t) simcall->args[6].fp;
 }
 static inline void simcall_comm_send__set__match_fun(smx_simcall_t simcall, FPtr arg){
-    simcall->args[5].fp = arg;
+    simcall->args[6].fp = arg;
 }
 static inline simix_copy_data_func_t simcall_comm_send__get__copy_data_fun(smx_simcall_t simcall){
-  return (simix_copy_data_func_t) simcall->args[6].fp;
+  return (simix_copy_data_func_t) simcall->args[7].fp;
 }
 static inline void simcall_comm_send__set__copy_data_fun(smx_simcall_t simcall, FPtr arg){
-    simcall->args[6].fp = arg;
+    simcall->args[7].fp = arg;
 }
 static inline void* simcall_comm_send__get__data(smx_simcall_t simcall){
-  return  simcall->args[7].dp;
+  return  simcall->args[8].dp;
 }
 static inline void simcall_comm_send__set__data(smx_simcall_t simcall, void* arg){
-    simcall->args[7].dp = arg;
+    simcall->args[8].dp = arg;
 }
 static inline double simcall_comm_send__get__timeout(smx_simcall_t simcall){
-  return  simcall->args[8].d;
+  return  simcall->args[9].d;
 }
 static inline void simcall_comm_send__set__timeout(smx_simcall_t simcall, double arg){
-    simcall->args[8].d = arg;
+    simcall->args[9].d = arg;
+}
+static inline smx_process_t simcall_comm_isend__get__src(smx_simcall_t simcall){
+  return (smx_process_t) simcall->args[0].dp;
+}
+static inline void simcall_comm_isend__set__src(smx_simcall_t simcall, void* arg){
+    simcall->args[0].dp = arg;
 }
 static inline smx_rdv_t simcall_comm_isend__get__rdv(smx_simcall_t simcall){
-  return (smx_rdv_t) simcall->args[0].dp;
+  return (smx_rdv_t) simcall->args[1].dp;
 }
 static inline void simcall_comm_isend__set__rdv(smx_simcall_t simcall, void* arg){
-    simcall->args[0].dp = arg;
+    simcall->args[1].dp = arg;
 }
 static inline double simcall_comm_isend__get__task_size(smx_simcall_t simcall){
-  return  simcall->args[1].d;
+  return  simcall->args[2].d;
 }
 static inline void simcall_comm_isend__set__task_size(smx_simcall_t simcall, double arg){
-    simcall->args[1].d = arg;
+    simcall->args[2].d = arg;
 }
 static inline double simcall_comm_isend__get__rate(smx_simcall_t simcall){
-  return  simcall->args[2].d;
+  return  simcall->args[3].d;
 }
 static inline void simcall_comm_isend__set__rate(smx_simcall_t simcall, double arg){
-    simcall->args[2].d = arg;
+    simcall->args[3].d = arg;
 }
 static inline void* simcall_comm_isend__get__src_buff(smx_simcall_t simcall){
-  return  simcall->args[3].dp;
+  return  simcall->args[4].dp;
 }
 static inline void simcall_comm_isend__set__src_buff(smx_simcall_t simcall, void* arg){
-    simcall->args[3].dp = arg;
+    simcall->args[4].dp = arg;
 }
 static inline size_t simcall_comm_isend__get__src_buff_size(smx_simcall_t simcall){
-  return  simcall->args[4].sz;
+  return  simcall->args[5].sz;
 }
 static inline void simcall_comm_isend__set__src_buff_size(smx_simcall_t simcall, size_t arg){
-    simcall->args[4].sz = arg;
+    simcall->args[5].sz = arg;
 }
 static inline simix_match_func_t simcall_comm_isend__get__match_fun(smx_simcall_t simcall){
-  return (simix_match_func_t) simcall->args[5].fp;
+  return (simix_match_func_t) simcall->args[6].fp;
 }
 static inline void simcall_comm_isend__set__match_fun(smx_simcall_t simcall, FPtr arg){
-    simcall->args[5].fp = arg;
+    simcall->args[6].fp = arg;
 }
 static inline simix_clean_func_t simcall_comm_isend__get__clean_fun(smx_simcall_t simcall){
-  return (simix_clean_func_t) simcall->args[6].fp;
+  return (simix_clean_func_t) simcall->args[7].fp;
 }
 static inline void simcall_comm_isend__set__clean_fun(smx_simcall_t simcall, FPtr arg){
-    simcall->args[6].fp = arg;
+    simcall->args[7].fp = arg;
 }
 static inline simix_copy_data_func_t simcall_comm_isend__get__copy_data_fun(smx_simcall_t simcall){
-  return (simix_copy_data_func_t) simcall->args[7].fp;
+  return (simix_copy_data_func_t) simcall->args[8].fp;
 }
 static inline void simcall_comm_isend__set__copy_data_fun(smx_simcall_t simcall, FPtr arg){
-    simcall->args[7].fp = arg;
+    simcall->args[8].fp = arg;
 }
 static inline void* simcall_comm_isend__get__data(smx_simcall_t simcall){
-  return  simcall->args[8].dp;
+  return  simcall->args[9].dp;
 }
 static inline void simcall_comm_isend__set__data(smx_simcall_t simcall, void* arg){
-    simcall->args[8].dp = arg;
+    simcall->args[9].dp = arg;
 }
 static inline int simcall_comm_isend__get__detached(smx_simcall_t simcall){
-  return  simcall->args[9].i;
+  return  simcall->args[10].i;
 }
 static inline void simcall_comm_isend__set__detached(smx_simcall_t simcall, int arg){
-    simcall->args[9].i = arg;
+    simcall->args[10].i = arg;
 }
 static inline smx_rdv_t simcall_comm_recv__get__rdv(smx_simcall_t simcall){
   return (smx_rdv_t) simcall->args[0].dp;
@@ -1154,6 +1166,12 @@ static inline smx_file_t simcall_file_unlink__get__fd(smx_simcall_t simcall){
 static inline void simcall_file_unlink__set__fd(smx_simcall_t simcall, void* arg){
     simcall->args[0].dp = arg;
 }
+static inline smx_host_t simcall_file_unlink__get__host(smx_simcall_t simcall){
+  return (smx_host_t) simcall->args[1].dp;
+}
+static inline void simcall_file_unlink__set__host(smx_simcall_t simcall, void* arg){
+    simcall->args[1].dp = arg;
+}
 static inline smx_file_t simcall_file_get_size__get__fd(smx_simcall_t simcall){
   return (smx_file_t) simcall->args[0].dp;
 }
@@ -1172,11 +1190,11 @@ static inline smx_file_t simcall_file_seek__get__fd(smx_simcall_t simcall){
 static inline void simcall_file_seek__set__fd(smx_simcall_t simcall, void* arg){
     simcall->args[0].dp = arg;
 }
-static inline sg_size_t simcall_file_seek__get__offset(smx_simcall_t simcall){
-  return  simcall->args[1].sgsz;
+static inline sg_offset_t simcall_file_seek__get__offset(smx_simcall_t simcall){
+  return  simcall->args[1].sgoff;
 }
-static inline void simcall_file_seek__set__offset(smx_simcall_t simcall, sg_size_t arg){
-    simcall->args[1].sgsz = arg;
+static inline void simcall_file_seek__set__offset(smx_simcall_t simcall, sg_offset_t arg){
+    simcall->args[1].sgoff = arg;
 }
 static inline int simcall_file_seek__get__origin(smx_simcall_t simcall){
   return  simcall->args[2].i;
index 7f4189a..e84f731 100644 (file)
     }    
     return self->simcall.result.dp;
   }
-  inline static void simcall_BODY_comm_send(smx_rdv_t rdv, double task_size, double rate, void* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout) {
+  inline static void simcall_BODY_comm_send(smx_process_t src, smx_rdv_t rdv, double task_size, double rate, void* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout) {
     smx_process_t self = SIMIX_process_self();
     self->simcall.call = SIMCALL_COMM_SEND;
     memset(&self->simcall.result, 0, sizeof(self->simcall.result));
     memset(self->simcall.args, 0, sizeof(self->simcall.args));
-    self->simcall.args[0].dp = (void*) rdv;
-    self->simcall.args[1].d = (double) task_size;
-    self->simcall.args[2].d = (double) rate;
-    self->simcall.args[3].dp = (void*) src_buff;
-    self->simcall.args[4].sz = (size_t) src_buff_size;
-    self->simcall.args[5].fp = (FPtr) match_fun;
-    self->simcall.args[6].fp = (FPtr) copy_data_fun;
-    self->simcall.args[7].dp = (void*) data;
-    self->simcall.args[8].d = (double) timeout;
+    self->simcall.args[0].dp = (void*) src;
+    self->simcall.args[1].dp = (void*) rdv;
+    self->simcall.args[2].d = (double) task_size;
+    self->simcall.args[3].d = (double) rate;
+    self->simcall.args[4].dp = (void*) src_buff;
+    self->simcall.args[5].sz = (size_t) src_buff_size;
+    self->simcall.args[6].fp = (FPtr) match_fun;
+    self->simcall.args[7].fp = (FPtr) copy_data_fun;
+    self->simcall.args[8].dp = (void*) data;
+    self->simcall.args[9].d = (double) timeout;
     if (self != simix_global->maestro_process) {
       XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name,
                 SIMIX_simcall_name(self->simcall.call), (int)self->simcall.call);
     }    
     
   }
-  inline static smx_action_t simcall_BODY_comm_isend(smx_rdv_t rdv, double task_size, double rate, void* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_clean_func_t clean_fun, simix_copy_data_func_t copy_data_fun, void* data, int detached) {
+  inline static smx_action_t simcall_BODY_comm_isend(smx_process_t src, smx_rdv_t rdv, double task_size, double rate, void* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_clean_func_t clean_fun, simix_copy_data_func_t copy_data_fun, void* data, int detached) {
     smx_process_t self = SIMIX_process_self();
     self->simcall.call = SIMCALL_COMM_ISEND;
     memset(&self->simcall.result, 0, sizeof(self->simcall.result));
     memset(self->simcall.args, 0, sizeof(self->simcall.args));
-    self->simcall.args[0].dp = (void*) rdv;
-    self->simcall.args[1].d = (double) task_size;
-    self->simcall.args[2].d = (double) rate;
-    self->simcall.args[3].dp = (void*) src_buff;
-    self->simcall.args[4].sz = (size_t) src_buff_size;
-    self->simcall.args[5].fp = (FPtr) match_fun;
-    self->simcall.args[6].fp = (FPtr) clean_fun;
-    self->simcall.args[7].fp = (FPtr) copy_data_fun;
-    self->simcall.args[8].dp = (void*) data;
-    self->simcall.args[9].i = (int) detached;
+    self->simcall.args[0].dp = (void*) src;
+    self->simcall.args[1].dp = (void*) rdv;
+    self->simcall.args[2].d = (double) task_size;
+    self->simcall.args[3].d = (double) rate;
+    self->simcall.args[4].dp = (void*) src_buff;
+    self->simcall.args[5].sz = (size_t) src_buff_size;
+    self->simcall.args[6].fp = (FPtr) match_fun;
+    self->simcall.args[7].fp = (FPtr) clean_fun;
+    self->simcall.args[8].fp = (FPtr) copy_data_fun;
+    self->simcall.args[9].dp = (void*) data;
+    self->simcall.args[10].i = (int) detached;
     if (self != simix_global->maestro_process) {
       XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name,
                 SIMIX_simcall_name(self->simcall.call), (int)self->simcall.call);
     }    
     return self->simcall.result.i;
   }
-  inline static int simcall_BODY_file_unlink(smx_file_t fd) {
+  inline static int simcall_BODY_file_unlink(smx_file_t fd, smx_host_t host) {
     smx_process_t self = SIMIX_process_self();
     self->simcall.call = SIMCALL_FILE_UNLINK;
     memset(&self->simcall.result, 0, sizeof(self->simcall.result));
     memset(self->simcall.args, 0, sizeof(self->simcall.args));
     self->simcall.args[0].dp = (void*) fd;
+    self->simcall.args[1].dp = (void*) host;
     if (self != simix_global->maestro_process) {
       XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name,
                 SIMIX_simcall_name(self->simcall.call), (int)self->simcall.call);
     }    
     return self->simcall.result.sgsz;
   }
-  inline static int simcall_BODY_file_seek(smx_file_t fd, sg_size_t offset, int origin) {
+  inline static int simcall_BODY_file_seek(smx_file_t fd, sg_offset_t offset, int origin) {
     smx_process_t self = SIMIX_process_self();
     self->simcall.call = SIMCALL_FILE_SEEK;
     memset(&self->simcall.result, 0, sizeof(self->simcall.result));
     memset(self->simcall.args, 0, sizeof(self->simcall.args));
     self->simcall.args[0].dp = (void*) fd;
-    self->simcall.args[1].sgsz = (sg_size_t) offset;
+    self->simcall.args[1].sgoff = (sg_offset_t) offset;
     self->simcall.args[2].i = (int) origin;
     if (self != simix_global->maestro_process) {
       XBT_DEBUG("Yield process '%s' on simcall %s (%d)", self->name,
index 9966f2e..7d413fa 100644 (file)
@@ -352,11 +352,11 @@ case SIMCALL_COMM_IPROBE:
       break;  
 
 case SIMCALL_COMM_SEND:
-       SIMIX_pre_comm_send(simcall , (smx_rdv_t) simcall->args[0].dp,  simcall->args[1].d,  simcall->args[2].d,  simcall->args[3].dp,  simcall->args[4].sz, (simix_match_func_t) simcall->args[5].fp, (simix_copy_data_func_t) simcall->args[6].fp,  simcall->args[7].dp,  simcall->args[8].d);
+       SIMIX_pre_comm_send(simcall , (smx_process_t) simcall->args[0].dp, (smx_rdv_t) simcall->args[1].dp,  simcall->args[2].d,  simcall->args[3].d,  simcall->args[4].dp,  simcall->args[5].sz, (simix_match_func_t) simcall->args[6].fp, (simix_copy_data_func_t) simcall->args[7].fp,  simcall->args[8].dp,  simcall->args[9].d);
        break;  
 
 case SIMCALL_COMM_ISEND:
-      simcall->result.dp = SIMIX_pre_comm_isend(simcall , (smx_rdv_t) simcall->args[0].dp,  simcall->args[1].d,  simcall->args[2].d,  simcall->args[3].dp,  simcall->args[4].sz, (simix_match_func_t) simcall->args[5].fp, (simix_clean_func_t) simcall->args[6].fp, (simix_copy_data_func_t) simcall->args[7].fp,  simcall->args[8].dp,  simcall->args[9].i);
+      simcall->result.dp = SIMIX_pre_comm_isend(simcall , (smx_process_t) simcall->args[0].dp, (smx_rdv_t) simcall->args[1].dp,  simcall->args[2].d,  simcall->args[3].d,  simcall->args[4].dp,  simcall->args[5].sz, (simix_match_func_t) simcall->args[6].fp, (simix_clean_func_t) simcall->args[7].fp, (simix_copy_data_func_t) simcall->args[8].fp,  simcall->args[9].dp,  simcall->args[10].i);
       SIMIX_simcall_answer(simcall);
       break;  
 
@@ -522,7 +522,7 @@ case SIMCALL_FILE_CLOSE:
        break;  
 
 case SIMCALL_FILE_UNLINK:
-      simcall->result.i = SIMIX_pre_file_unlink(simcall , (smx_file_t) simcall->args[0].dp);
+      simcall->result.i = SIMIX_pre_file_unlink(simcall , (smx_file_t) simcall->args[0].dp, (smx_host_t) simcall->args[1].dp);
       SIMIX_simcall_answer(simcall);
       break;  
 
@@ -537,7 +537,7 @@ case SIMCALL_FILE_TELL:
       break;  
 
 case SIMCALL_FILE_SEEK:
-      simcall->result.i = SIMIX_pre_file_seek(simcall , (smx_file_t) simcall->args[0].dp,  simcall->args[1].sgsz,  simcall->args[2].i);
+      simcall->result.i = SIMIX_pre_file_seek(simcall , (smx_file_t) simcall->args[0].dp,  simcall->args[1].sgoff,  simcall->args[2].i);
       SIMIX_simcall_answer(simcall);
       break;  
 
index eb21291..3ff404a 100644 (file)
 #include "mc/mc.h"
 #include "simgrid/sg_config.h"
 
+#ifdef HAVE_MC
+#include "mc/mc_private.h"
+#endif
+
+#ifdef HAVE_SMPI
+#include "smpi/private.h"
+#endif
+
 XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix,
                                 "Logging specific to SIMIX (kernel)");
@@ -31,11 +39,11 @@ int _sg_do_verbose_exit = 1;
 static void _XBT_CALL inthandler(int ignored)
 {
   if ( _sg_do_verbose_exit ) {
-     XBT_INFO("CTRL-C pressed. Displaying status and bailing out");
+     XBT_INFO("CTRL-C pressed. The current status will be displayed before exit (disable that behavior with option 'verbose-exit').");
      SIMIX_display_process_status();
   }
   else {
-     XBT_INFO("CTRL-C pressed. bailing out without displaying because verbose-exit is disabled");
+     XBT_INFO("CTRL-C pressed, exiting. Hiding the current process status since 'verbose-exit' is set to false.");
   }
   exit(1);
 }
@@ -58,7 +66,23 @@ static void _XBT_CALL segvhandler(int signum, siginfo_t *siginfo, void *context)
               "siginfo = {si_signo = %d, si_errno = %d, si_code = %d, si_addr = %p}\n",
               siginfo->si_signo, siginfo->si_errno, siginfo->si_code, siginfo->si_addr);
     }
+  } else  if (siginfo->si_signo == SIGSEGV) {
+    fprintf(stderr, "Segmentation fault.\n");
+#ifdef HAVE_SMPI
+    if (smpi_enabled() && !smpi_privatize_global_variables) {
+      fprintf(stderr,
+        "Try to enable SMPI variable privatization with --cfg:smpi/privatize_global_variable:yes.\n");
+    }
+#endif
   }
+#ifdef HAVE_MC
+  if (MC_is_active()) {
+    if (mc_stack) {
+      MC_dump_stack_safety(mc_stack);
+    }
+    MC_print_statistics(mc_stats);
+  }
+#endif
   raise(signum);
 }
 
index cd48e0a..97b1fc4 100644 (file)
@@ -187,14 +187,13 @@ smx_action_t SIMIX_file_close(smx_process_t process, smx_file_t fd, smx_host_t h
 
 
 //SIMIX FILE UNLINK
-int SIMIX_pre_file_unlink(smx_simcall_t simcall, smx_file_t fd)
+int SIMIX_pre_file_unlink(smx_simcall_t simcall, smx_file_t fd, smx_host_t host)
 {
-  return SIMIX_file_unlink(simcall->issuer, fd);
+  return SIMIX_file_unlink(simcall->issuer, fd, host);
 }
 
-int SIMIX_file_unlink(smx_process_t process, smx_file_t fd)
+int SIMIX_file_unlink(smx_process_t process, smx_file_t fd, smx_host_t host)
 {
-  smx_host_t host = process->smx_host;
   /* check if the host is active */
   if (surf_resource_get_state(surf_workstation_resource_priv(host)) != SURF_RESOURCE_ON) {
     THROWF(host_error, 0, "Host %s failed, you cannot call this function",
@@ -240,12 +239,12 @@ xbt_dynar_t SIMIX_file_get_info(smx_process_t process, smx_file_t fd)
   return  surf_workstation_get_info(host, fd->surf_file);
 }
 
-int SIMIX_pre_file_seek(smx_simcall_t simcall, smx_file_t fd, sg_size_t offset, int origin)
+int SIMIX_pre_file_seek(smx_simcall_t simcall, smx_file_t fd, sg_offset_t offset, int origin)
 {
   return SIMIX_file_seek(simcall->issuer, fd, offset, origin);
 }
 
-int SIMIX_file_seek(smx_process_t process, smx_file_t fd, sg_size_t offset, int origin)
+int SIMIX_file_seek(smx_process_t process, smx_file_t fd, sg_offset_t offset, int origin)
 {
   smx_host_t host = process->smx_host;
   return  surf_workstation_file_seek(host, fd->surf_file, offset, origin);
@@ -326,10 +325,6 @@ void SIMIX_post_io(smx_action_t action)
 {
   xbt_fifo_item_t i;
   smx_simcall_t simcall;
-//  char* key;
-//  xbt_dict_cursor_t cursor = NULL;
-//  s_file_stat_t *dst = NULL;
-//  s_file_stat_t *src = NULL;
 
   xbt_fifo_foreach(action->simcalls,i,simcall,smx_simcall_t) {
     switch (simcall->call) {
index 8ddde55..9750c40 100644 (file)
@@ -26,21 +26,21 @@ void SIMIX_pre_file_read(smx_simcall_t simcall, smx_file_t fd, sg_size_t size, s
 void SIMIX_pre_file_write(smx_simcall_t simcall,smx_file_t fd, sg_size_t size, smx_host_t host);
 void SIMIX_pre_file_open(smx_simcall_t simcall, const char* fullpath, smx_host_t host);
 void SIMIX_pre_file_close(smx_simcall_t simcall, smx_file_t fd, smx_host_t host);
-int SIMIX_pre_file_unlink(smx_simcall_t simcall, smx_file_t fd);
+int SIMIX_pre_file_unlink(smx_simcall_t simcall, smx_file_t fd, smx_host_t host);
 sg_size_t SIMIX_pre_file_get_size(smx_simcall_t simcall, smx_file_t fd);
 sg_size_t SIMIX_pre_file_tell(smx_simcall_t simcall, smx_file_t fd);
 xbt_dynar_t SIMIX_pre_file_get_info(smx_simcall_t simcall, smx_file_t fd);
-int SIMIX_pre_file_seek(smx_simcall_t simcall, smx_file_t fd, sg_size_t offset, int origin);
+int SIMIX_pre_file_seek(smx_simcall_t simcall, smx_file_t fd, sg_offset_t offset, int origin);
 int SIMIX_pre_file_move(smx_simcall_t simcall, smx_file_t fd, const char* fullpath);
 smx_action_t SIMIX_file_read(smx_process_t process, smx_file_t fd, sg_size_t size, smx_host_t host);
 smx_action_t SIMIX_file_write(smx_process_t process, smx_file_t fd, sg_size_t size, smx_host_t host);
 smx_action_t SIMIX_file_open(smx_process_t process, const char* fullpath, smx_host_t host);
 smx_action_t SIMIX_file_close(smx_process_t process, smx_file_t fd, smx_host_t host);
-int SIMIX_file_unlink(smx_process_t process, smx_file_t fd);
+int SIMIX_file_unlink(smx_process_t process, smx_file_t fd, smx_host_t host);
 sg_size_t SIMIX_file_get_size(smx_process_t process, smx_file_t fd);
 sg_size_t SIMIX_file_tell(smx_process_t process, smx_file_t fd);
 xbt_dynar_t SIMIX_file_get_info(smx_process_t process, smx_file_t fd);
-int SIMIX_file_seek(smx_process_t process, smx_file_t fd, sg_size_t offset, int origin);
+int SIMIX_file_seek(smx_process_t process, smx_file_t fd, sg_offset_t offset, int origin);
 int SIMIX_file_move(smx_process_t process, smx_file_t fd, const char* fullpath);
 
 sg_size_t SIMIX_pre_storage_get_free_size(smx_simcall_t simcall,smx_storage_t storage);
index f613a51..0420faf 100644 (file)
@@ -8,6 +8,8 @@
 #include "xbt/log.h"
 #include "mc/mc.h"
 #include "xbt/dict.h"
+#include "smpi/private.h"
+
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_network, simix,
                                 "Logging specific to SIMIX (network)");
@@ -351,26 +353,26 @@ void SIMIX_comm_destroy_internal_actions(smx_action_t action)
   }
 }
 
-void SIMIX_pre_comm_send(smx_simcall_t simcall, smx_rdv_t rdv,
+void SIMIX_pre_comm_send(smx_simcall_t simcall, smx_process_t src, smx_rdv_t rdv,
                                   double task_size, double rate,
                                   void *src_buff, size_t src_buff_size,
                                   int (*match_fun)(void *, void *,smx_action_t),
                                   void (*copy_data_fun)(smx_action_t, void*, size_t),
                                  void *data, double timeout){
-  smx_action_t comm = SIMIX_comm_isend(simcall->issuer, rdv, task_size, rate,
+  smx_action_t comm = SIMIX_comm_isend(src, rdv, task_size, rate,
                                       src_buff, src_buff_size, match_fun, NULL, copy_data_fun,
                                       data, 0);
   SIMCALL_SET_MC_VALUE(simcall, 0);
   SIMIX_pre_comm_wait(simcall, comm, timeout);
 }
-smx_action_t SIMIX_pre_comm_isend(smx_simcall_t simcall, smx_rdv_t rdv,
+smx_action_t SIMIX_pre_comm_isend(smx_simcall_t simcall, smx_process_t src, smx_rdv_t rdv,
                                   double task_size, double rate,
                                   void *src_buff, size_t src_buff_size,
                                   int (*match_fun)(void *, void *,smx_action_t),
                                   void (*clean_fun)(void *), 
                                   void (*copy_data_fun)(smx_action_t, void*, size_t),
                                  void *data, int detached){
-  return SIMIX_comm_isend(simcall->issuer, rdv, task_size, rate, src_buff,
+  return SIMIX_comm_isend(src, rdv, task_size, rate, src_buff,
                          src_buff_size, match_fun, clean_fun, copy_data_fun, data, detached);
 
 }
index d0c6967..195119b 100644 (file)
@@ -77,13 +77,13 @@ smx_action_t SIMIX_pre_rdv_get_head(smx_simcall_t simcall, smx_rdv_t rdv);
 smx_process_t SIMIX_pre_rdv_get_receiver(smx_simcall_t simcall, smx_rdv_t rdv);
 void SIMIX_pre_rdv_set_receiver(smx_simcall_t simcall, smx_rdv_t rdv,
                            smx_process_t process);
-void SIMIX_pre_comm_send(smx_simcall_t simcall, smx_rdv_t rdv,
+void SIMIX_pre_comm_send(smx_simcall_t simcall, smx_process_t src, smx_rdv_t rdv,
                                   double task_size, double rate,
                                   void *src_buff, size_t src_buff_size,
                                   int (*match_fun)(void *, void *,smx_action_t),
                                   void (*copy_data_fun)(smx_action_t, void*, size_t),
                                  void *data, double timeout);
-smx_action_t SIMIX_pre_comm_isend(smx_simcall_t simcall, smx_rdv_t rdv,
+smx_action_t SIMIX_pre_comm_isend(smx_simcall_t simcall, smx_process_t src, smx_rdv_t rdv,
                                   double task_size, double rate,
                                   void *src_buff, size_t src_buff_size,
                                   int (*match_fun)(void *, void *,smx_action_t),
index ee9131a..dcd3402 100644 (file)
@@ -48,6 +48,7 @@ union u_smx_scalar {
   double          d;
   size_t          sz;
   sg_size_t       sgsz;
+  sg_offset_t     sgoff;
   void*           dp;
   FPtr            fp;
   const void*     cp;
@@ -62,7 +63,7 @@ typedef struct s_smx_simcall {
 #ifdef HAVE_MC
   int mc_value;
 #endif
-  union u_smx_scalar args[10];
+  union u_smx_scalar args[11];
   union u_smx_scalar result;
   //FIXME: union u_smx_scalar retval;
   union {
index 700e2e3..c65710d 100644 (file)
@@ -933,7 +933,7 @@ smx_process_t simcall_rdv_get_receiver(smx_rdv_t rdv)
 /**
  * \ingroup simix_comm_management
  */
-void simcall_comm_send(smx_rdv_t rdv, double task_size, double rate,
+void simcall_comm_send(smx_process_t src, smx_rdv_t rdv, double task_size, double rate,
                          void *src_buff, size_t src_buff_size,
                          int (*match_fun)(void *, void *, smx_action_t),
                          void (*copy_data_fun)(smx_action_t, void*, size_t), void *data,
@@ -949,13 +949,13 @@ void simcall_comm_send(smx_rdv_t rdv, double task_size, double rate,
   if (MC_is_active()) {
     /* the model-checker wants two separate simcalls */
     smx_action_t comm = NULL; /* MC needs the comm to be set to NULL during the simcall */
-    comm = simcall_comm_isend(rdv, task_size, rate,
+    comm = simcall_comm_isend(src, rdv, task_size, rate,
         src_buff, src_buff_size, match_fun, NULL, copy_data_fun, data, 0);
     simcall_comm_wait(comm, timeout);
     comm = NULL;
   }
   else {
-    simcall_BODY_comm_send(rdv, task_size, rate, src_buff, src_buff_size,
+    simcall_BODY_comm_send(src, rdv, task_size, rate, src_buff, src_buff_size,
                          match_fun, copy_data_fun, data, timeout);
   }
 }
@@ -963,7 +963,7 @@ void simcall_comm_send(smx_rdv_t rdv, double task_size, double rate,
 /**
  * \ingroup simix_comm_management
  */
-smx_action_t simcall_comm_isend(smx_rdv_t rdv, double task_size, double rate,
+smx_action_t simcall_comm_isend(smx_process_t src, smx_rdv_t rdv, double task_size, double rate,
                               void *src_buff, size_t src_buff_size,
                               int (*match_fun)(void *, void *, smx_action_t),
                               void (*clean_fun)(void *),
@@ -977,7 +977,7 @@ smx_action_t simcall_comm_isend(smx_rdv_t rdv, double task_size, double rate,
 
   xbt_assert(rdv, "No rendez-vous point defined for isend");
 
-  return simcall_BODY_comm_isend(rdv, task_size, rate, src_buff,
+  return simcall_BODY_comm_isend(src, rdv, task_size, rate, src_buff,
                                  src_buff_size, match_fun,
                                  clean_fun, copy_data_fun, data, detached);
 }
@@ -1354,7 +1354,7 @@ smx_file_t simcall_file_open(const char* fullpath, smx_host_t host)
  * \ingroup simix_file_management
  *
  */
-int simcall_file_close(smx_file_t fd,  smx_host_t host)
+int simcall_file_close(smx_file_t fd, smx_host_t host)
 {
   return simcall_BODY_file_close(fd, host);
 }
@@ -1363,9 +1363,9 @@ int simcall_file_close(smx_file_t fd,  smx_host_t host)
  * \ingroup simix_file_management
  *
  */
-int simcall_file_unlink(smx_file_t fd)
+int simcall_file_unlink(smx_file_t fd, smx_host_t host)
 {
-  return simcall_BODY_file_unlink(fd);
+  return simcall_BODY_file_unlink(fd, host);
 }
 
 /**
@@ -1397,7 +1397,7 @@ xbt_dynar_t simcall_file_get_info(smx_file_t fd)
  * \ingroup simix_file_management
  *
  */
-int simcall_file_seek(smx_file_t fd, sg_size_t offset, int origin){
+int simcall_file_seek(smx_file_t fd, sg_offset_t offset, int origin){
   return simcall_BODY_file_seek(fd, offset, origin);
 }
 
index 091e92a..1de4dc7 100644 (file)
@@ -121,7 +121,7 @@ int SIMIX_pre_vm_get_state(smx_simcall_t simcall, smx_host_t ind_vm)
 
 
 /**
- * \brief Function to migrate a SIMIX VM host. 
+ * \brief Function to migrate a SIMIX VM host.
  *
  * \param host the vm host to migrate (a smx_host_t)
  */
@@ -199,7 +199,7 @@ void SIMIX_pre_vm_set_affinity(smx_simcall_t simcall, smx_host_t ind_vm, smx_hos
 
 
 /**
- * \brief Function to suspend a SIMIX VM host. This function stops the exection of the
+ * \brief Function to suspend a SIMIX VM host. This function stops the execution of the
  * VM. All the processes on this VM will pause. The state of the VM is
  * preserved on memory. We can later resume it again.
  *
@@ -241,7 +241,7 @@ void SIMIX_pre_vm_suspend(smx_simcall_t simcall, smx_host_t ind_vm)
 
 /**
  * \brief Function to resume a SIMIX VM host. This function restart the execution of the
- * VM. All the processes on this VM will run again. 
+ * VM. All the processes on this VM will run again.
  *
  * \param host the vm host to resume (a smx_host_t)
  */
@@ -305,7 +305,7 @@ void SIMIX_pre_vm_save(smx_simcall_t simcall, smx_host_t ind_vm)
 
 /**
  * \brief Function to restore a SIMIX VM host. This function restart the execution of the
- * VM. All the processes on this VM will run again. 
+ * VM. All the processes on this VM will run again.
  *
  * \param host the vm host to restore (a smx_host_t)
  */
index cd5a306..d067768 100644 (file)
@@ -177,7 +177,7 @@ const char *TRACE_internal_smpi_get_category (void)
 void TRACE_smpi_alloc()
 {
   keys = xbt_dict_new_homogeneous(xbt_dynar_free_voidp);
-  process_category = xbt_dict_new_homogeneous(xbt_free);
+  process_category = xbt_dict_new_homogeneous(xbt_free_f);
 }
 
 void TRACE_smpi_release(void)
index d8b00f0..fe8c16a 100644 (file)
@@ -14,7 +14,6 @@
 #include "simgrid/simix.h"
 #include "smpi/smpi_interface.h"
 #include "smpi/smpi.h"
-#include "smpi/smpif.h"
 #include "smpi/smpi_cocci.h"
 #include "instr/instr_private.h"
 
@@ -30,6 +29,8 @@ typedef struct s_smpi_process_data *smpi_process_data_t;
 #define SSEND          0x40
 #define PREPARED       0x80
 #define FINISHED       0x100
+#define RMA            0x200
+#define ACCUMULATE     0x400
 
 
 enum smpi_process_state{
@@ -42,8 +43,8 @@ enum smpi_process_state{
 // for each such structure these function should be implemented (vector
 // index hvector hindex struct)
 typedef struct s_smpi_subtype{
-  void (*serialize)(const void * input, void *output, size_t count, void* subtype);
-  void (*unserialize)(const void * input, void *output, size_t count, void* subtype);
+  void (*serialize)(const void * input, void *output, int count, void* subtype);
+  void (*unserialize)(const void * input, void *output, int count, void* subtype, MPI_Op op);
   void (*subtype_free)(MPI_Datatype* type);
 } s_smpi_subtype_t;
 
@@ -102,31 +103,48 @@ typedef struct s_smpi_mpi_request {
   int detached;
   MPI_Request detached_sender;
   int refcount;
+  MPI_Op op;
 #ifdef HAVE_TRACING
   int send;
   int recv;
 #endif
 } s_smpi_mpi_request_t;
 
+
 void smpi_process_destroy(void);
 void smpi_process_finalize(void);
 int smpi_process_finalized(void);
 int smpi_process_initialized(void);
 void smpi_process_mark_as_initialized(void);
 
+struct s_smpi_mpi_cart_topology;
+typedef struct s_smpi_mpi_cart_topology *MPIR_Cart_Topology;
+
+struct s_smpi_mpi_graph_topology;
+typedef struct s_smpi_mpi_graph_topology *MPIR_Graph_Topology;
+
+struct s_smpi_dist_graph_topology;
+typedef struct s_smpi_dist_graph_topology *MPIR_Dist_Graph_Topology;
+
+// MPI_Topology defined in smpi.h, as it is public
+
 void smpi_topo_destroy(MPI_Topology topo);
-MPI_Topology smpi_topo_create(int ndims);
+MPI_Topology smpi_topo_create(MPIR_Topo_type kind);
+void smpi_cart_topo_destroy(MPIR_Cart_Topology cart);
+MPI_Topology smpi_cart_topo_create(int ndims);
 int smpi_mpi_cart_create(MPI_Comm comm_old, int ndims, int dims[],
-                         int periodic[], int reorder, MPI_Comm *comm_cart);
-int smpi_mpi_cart_shift(MPI_Comm comm, int direction, int disp,
-                        int *rank_source, int *rank_dest);
-int smpi_mpi_cart_rank(MPI_Comm comm, int* coords, int* rank);
-int smpi_mpi_cart_get(MPI_Comm comm, int maxdims, int* dims, int* periods, int* coords);
+                         int periods[], int reorder, MPI_Comm *comm_cart);
+int smpi_mpi_cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm);
 int smpi_mpi_cart_coords(MPI_Comm comm, int rank, int maxdims,
                          int coords[]);
+int smpi_mpi_cart_get(MPI_Comm comm, int maxdims, int* dims, int* periods,
+                      int* coords);
+int smpi_mpi_cart_rank(MPI_Comm comm, int* coords, int* rank);
+int smpi_mpi_cart_shift(MPI_Comm comm, int direction, int disp,
+                        int *rank_source, int *rank_dest);
 int smpi_mpi_cartdim_get(MPI_Comm comm, int *ndims);
 int smpi_mpi_dims_create(int nnodes, int ndims, int dims[]);
-int smpi_mpi_cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm);
+
 
 smpi_process_data_t smpi_process_data(void);
 smpi_process_data_t smpi_process_remote_data(int index);
@@ -152,12 +170,16 @@ void smpi_comm_copy_buffer_callback(smx_action_t comm,
 
 void print_request(const char *message, MPI_Request request);
 
+int smpi_enabled(void);
 void smpi_global_init(void);
 void smpi_global_destroy(void);
 
+int is_datatype_valid(MPI_Datatype datatype);
+
 size_t smpi_datatype_size(MPI_Datatype datatype);
 MPI_Aint smpi_datatype_lb(MPI_Datatype datatype);
 MPI_Aint smpi_datatype_ub(MPI_Datatype datatype);
+MPI_Datatype smpi_datatype_dup(MPI_Datatype datatype);
 int smpi_datatype_extent(MPI_Datatype datatype, MPI_Aint * lb,
                          MPI_Aint * extent);
 MPI_Aint smpi_datatype_get_extent(MPI_Datatype datatype);
@@ -237,6 +259,10 @@ MPI_Request smpi_irecv_init(void *buf, int count, MPI_Datatype datatype,
                             int src, int tag, MPI_Comm comm);
 MPI_Request smpi_mpi_irecv(void *buf, int count, MPI_Datatype datatype,
                            int src, int tag, MPI_Comm comm);
+MPI_Request smpi_rma_send_init(void *buf, int count, MPI_Datatype datatype,
+                            int src, int dst, int tag, MPI_Comm comm, MPI_Op op);
+MPI_Request smpi_rma_recv_init(void *buf, int count, MPI_Datatype datatype,
+                            int src, int dst, int tag, MPI_Comm comm, MPI_Op op);
 void smpi_mpi_recv(void *buf, int count, MPI_Datatype datatype, int src,
                    int tag, MPI_Comm comm, MPI_Status * status);
 void smpi_mpi_send(void *buf, int count, MPI_Datatype datatype, int dst,
@@ -300,6 +326,19 @@ void smpi_mpi_scan(void *sendbuf, void *recvbuf, int count,
 void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count,
                    MPI_Datatype datatype, MPI_Op op, MPI_Comm comm);
 
+int smpi_mpi_win_free( MPI_Win* win);
+
+MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm);
+
+int smpi_mpi_win_fence( int assert,  MPI_Win win);
+
+int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win);
+int smpi_mpi_put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win);
+int smpi_mpi_accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win);
+
 void nary_tree_bcast(void *buf, int count, MPI_Datatype datatype, int root,
                      MPI_Comm comm, int arity);
 void nary_tree_barrier(MPI_Comm comm, int arity);
index cc9e409..dbdf8d4 100644 (file)
@@ -197,11 +197,11 @@ static MPI_Request build_request(void *buf, int count,
 
   s_smpi_subtype_t *subtype = datatype->substruct;
 
-  if(datatype->has_subtype == 1){
+  if(((flags & RECV) && (flags & ACCUMULATE)) || (datatype->has_subtype == 1)){
     // This part handles the problem of non-contiguous memory
     old_buf = buf;
     buf = count==0 ? NULL : xbt_malloc(count*smpi_datatype_size(datatype));
-    if (flags & SEND) {
+    if ((datatype->has_subtype == 1) && (flags & SEND)) {
       subtype->serialize(old_buf, buf, count, datatype->substruct);
     }
   }
@@ -230,7 +230,7 @@ static MPI_Request build_request(void *buf, int count,
     request->refcount = 1;
   else
     request->refcount = 0;
-
+  request->op = MPI_REPLACE;
 #ifdef HAVE_TRACING
   request->send = 0;
   request->recv = 0;
@@ -326,7 +326,7 @@ void smpi_mpi_start(MPI_Request request)
   if (request->flags & RECV) {
     print_request("New recv", request);
     //FIXME: if receive is posted with a large size, but send is smaller, mailboxes may not match !
-    if (request->size < sg_cfg_get_int("smpi/async_small_thres"))
+    if (request->flags & RMA || request->size < sg_cfg_get_int("smpi/async_small_thres"))
       mailbox = smpi_process_mailbox_small();
     else
       mailbox = smpi_process_mailbox();
@@ -335,7 +335,8 @@ void smpi_mpi_start(MPI_Request request)
     smpi_datatype_use(request->old_type);
     smpi_comm_use(request->comm);
     request->action = simcall_comm_irecv(mailbox, request->buf,
-                                         &request->real_size, &match_recv, &smpi_comm_copy_buffer_callback,
+                                         &request->real_size, &match_recv,
+                                         &smpi_comm_copy_buffer_callback,
                                          request, -1.0);
 
     //integrate pseudo-timing for buffering of small messages, do not bother to execute the simcall if 0
@@ -351,7 +352,7 @@ void smpi_mpi_start(MPI_Request request)
     int receiver = request->dst;//smpi_group_index(smpi_comm_group(request->comm), request->dst);
 
     #ifdef HAVE_TRACING
-      int rank = smpi_process_index();
+      int rank = request->src;
       if (TRACE_smpi_view_internals()) {
         TRACE_smpi_send(rank, rank, receiver,request->size);
       }
@@ -361,7 +362,7 @@ void smpi_mpi_start(MPI_Request request)
 /*      return;*/
 /*    }*/
     print_request("New send", request);
-    if (request->size < sg_cfg_get_int("smpi/async_small_thres")) { // eager mode
+    if (request->flags & RMA || request->size < sg_cfg_get_int("smpi/async_small_thres")) { // eager mode
       mailbox = smpi_process_remote_mailbox_small(receiver);
     }else{
       XBT_DEBUG("Send request %p is not in the permanent receive mailbox (buf: %p)",request,request->buf);
@@ -380,7 +381,7 @@ void smpi_mpi_start(MPI_Request request)
              && ((char*)request->buf >= start_data_exe)
              && ((char*)request->buf < start_data_exe + size_data_exe )){
             XBT_DEBUG("Privatization : We are sending from a zone inside global memory. Switch data segment ");
-                   switch_data_segment(smpi_process_index());
+                   switch_data_segment(request->src);
          }
           buf = xbt_malloc(request->size);
           memcpy(buf,oldbuf,request->size);
@@ -405,12 +406,11 @@ void smpi_mpi_start(MPI_Request request)
         simcall_process_sleep(sleeptime);
         XBT_DEBUG("sending size of %zu : sleep %f ", request->size, smpi_os(request->size));
     }
-
     request->action =
-      simcall_comm_isend(mailbox, request->size, -1.0,
+      simcall_comm_isend(SIMIX_process_from_PID(request->src+1), mailbox, request->size, -1.0,
                          buf, request->real_size,
                          &match_send,
-                         &xbt_free, // how to free the userdata if a detached send fails
+                         &xbt_free_f, // how to free the userdata if a detached send fails
                          &smpi_comm_copy_buffer_callback,
                          request,
                          // detach if msg size < eager/rdv switch limit
@@ -455,6 +455,38 @@ void smpi_mpi_request_free(MPI_Request * request)
   }
 }
 
+
+MPI_Request smpi_rma_send_init(void *buf, int count, MPI_Datatype datatype,
+                            int src, int dst, int tag, MPI_Comm comm, MPI_Op op)
+{
+  MPI_Request request = NULL; /* MC needs the comm to be set to NULL during the call */
+  if(op==MPI_OP_NULL){
+    request = build_request(buf==MPI_BOTTOM ? (void*)0 : buf , count, datatype, src, dst, tag,
+                            comm, RMA | NON_PERSISTENT | ISEND | SEND | PREPARED);
+  }else{
+    request = build_request(buf==MPI_BOTTOM ? (void*)0 : buf, count, datatype,  src, dst, tag,
+                            comm, RMA | NON_PERSISTENT | ISEND | SEND | PREPARED | ACCUMULATE);
+    request->op = op;
+  }
+  return request;
+}
+
+MPI_Request smpi_rma_recv_init(void *buf, int count, MPI_Datatype datatype,
+                            int src, int dst, int tag, MPI_Comm comm, MPI_Op op)
+{
+  MPI_Request request = NULL; /* MC needs the comm to be set to NULL during the call */
+  if(op==MPI_OP_NULL){
+    request = build_request(buf==MPI_BOTTOM ? (void*)0 : buf, count, datatype,  src, dst, tag,
+                            comm, RMA | NON_PERSISTENT | RECV | PREPARED);
+  }else{
+    request = build_request(buf==MPI_BOTTOM ? (void*)0 : buf, count, datatype,  src, dst, tag,
+                            comm, RMA | NON_PERSISTENT | RECV | PREPARED | ACCUMULATE);
+    request->op = op;
+  }
+  return request;
+}
+
+
 MPI_Request smpi_isend_init(void *buf, int count, MPI_Datatype datatype,
                             int dst, int tag, MPI_Comm comm)
 {
@@ -484,8 +516,6 @@ MPI_Request smpi_mpi_issend(void *buf, int count, MPI_Datatype datatype,
   return request;
 }
 
-
-
 MPI_Request smpi_irecv_init(void *buf, int count, MPI_Datatype datatype,
                             int src, int tag, MPI_Comm comm)
 {
@@ -593,7 +623,7 @@ static void finish_wait(MPI_Request * request, MPI_Status * status)
     print_request("Finishing", req);
     MPI_Datatype datatype = req->old_type;
 
-    if(datatype->has_subtype == 1){
+    if((req->flags & ACCUMULATE) || (datatype->has_subtype == 1)){
       if (!_xbt_replay_is_active()){
         if( smpi_privatize_global_variables
             && ((char*)req->old_buf >= start_data_exe)
@@ -603,13 +633,19 @@ static void finish_wait(MPI_Request * request, MPI_Status * status)
             switch_data_segment(smpi_process_index());
         }
       }
-      // This part handles the problem of non-contignous memory
-      // the unserialization at the reception
-      s_smpi_subtype_t *subtype = datatype->substruct;
       if(req->flags & RECV) {
-        subtype->unserialize(req->buf, req->old_buf, req->real_size/smpi_datatype_size(datatype) , datatype->substruct);
+
+        if(datatype->has_subtype == 1){
+          // This part handles the problem of non-contignous memory
+          // the unserialization at the reception
+          s_smpi_subtype_t *subtype = datatype->substruct;
+            subtype->unserialize(req->buf, req->old_buf, req->real_size/smpi_datatype_size(datatype) , datatype->substruct, req->op);
+          if(req->detached == 0) free(req->buf);
+        }else{//apply op on contiguous buffer for accumulate
+            int n =req->real_size/smpi_datatype_size(datatype);
+            smpi_op_apply(req->op, req->buf, req->old_buf, &n, &datatype);
+        }
       }
-      if(req->detached == 0) free(req->buf);
     }
     smpi_comm_unuse(req->comm);
     smpi_datatype_unuse(datatype);
index 8b37cab..e33d659 100644 (file)
@@ -69,7 +69,6 @@ xbt_dict_t allocs = NULL;          /* Allocated on first use */
 xbt_dict_t allocs_metadata = NULL; /* Allocated on first use */
 xbt_dict_t samples = NULL;         /* Allocated on first use */
 xbt_dict_t calls = NULL;           /* Allocated on first use */
-__thread int smpi_current_rank = 0;      /* Updated after each MPI call */
 
 double smpi_cpu_threshold;
 double smpi_running_power;
@@ -118,7 +117,7 @@ static void* shm_map(int fd, size_t size, shared_data_t* data) {
     xbt_die("Could not map fd %d: %s", fd, strerror(errno));
   }
   if(!allocs_metadata) {
-    allocs_metadata = xbt_dict_new_homogeneous(xbt_free);
+    allocs_metadata = xbt_dict_new_homogeneous(xbt_free_f);
   }
   snprintf(loc, PTR_STRLEN, "%p", mem);
   meta = xbt_new(shared_metadata_t, 1);
@@ -192,7 +191,6 @@ void smpi_bench_begin(void)
 {
   switch_data_segment(smpi_process_index());
   xbt_os_threadtimer_start(smpi_process_timer());
-  smpi_current_rank = smpi_process_index();
 }
 
 void smpi_bench_end(void)
index 55daf3b..33177ac 100644 (file)
@@ -49,7 +49,7 @@ void SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_
   process_count+=num_processes;
 
   if(!smpi_instances){
-      smpi_instances=xbt_dict_new_homogeneous(xbt_free);
+    smpi_instances = xbt_dict_new_homogeneous(xbt_free_f);
   }
 
   xbt_dict_set(smpi_instances, name, (void*)instance, NULL);
index a8ab0ae..608bba4 100644 (file)
@@ -7,6 +7,7 @@
 #include "xbt/log.h"
 #include "simgrid/simix.h"
 #include "smpi/smpi.h"
+#include "internal_config.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_dvfs, smpi,
                                 "Logging specific to SMPI (experimental DVFS support)");
@@ -60,9 +61,22 @@ double smpi_get_host_consumed_energy(void)
   return simcall_host_get_consumed_energy(SIMIX_host_self());
 }
 
-#include "smpi/smpif.h"
 
-#ifdef SMPI_F2C
+#ifdef SMPI_FORTRAN
+
+#if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)
+typedef int integer;
+typedef unsigned int uinteger;
+#else
+typedef long int integer;
+typedef unsigned long int uinteger;
+#endif
+typedef char *address;
+typedef short int shortint;
+typedef float real;
+typedef double doublereal;
+typedef struct { real r, i; } complex;
+typedef struct { doublereal r, i; } doublecomplex;
 
 XBT_PUBLIC(doublereal) smpi_get_host_power_peak_at_(integer *pstate_index);
 doublereal smpi_get_host_power_peak_at_(integer *pstate_index)
index 95c40d7..b83160f 100644 (file)
@@ -10,9 +10,6 @@
 #include "private.h"
 #include "xbt.h"
 
-extern int xargc;
-extern char** xargv;
-
 static xbt_dict_t comm_lookup = NULL;
 static xbt_dict_t group_lookup = NULL;
 static xbt_dict_t request_lookup = NULL;
@@ -20,27 +17,33 @@ static xbt_dict_t datatype_lookup = NULL;
 static xbt_dict_t op_lookup = NULL;
 static int running_processes = 0;
 
+#if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__)
+typedef int integer;
+typedef unsigned int uinteger;
+#else
+typedef long int integer;
+typedef unsigned long int uinteger;
+#endif
+
 /* Bindings for MPI special values */
-union u_smpi_common {
+
   struct s_smpi_common {
     integer _MPI_IN_PLACE;
     integer _MPI_BOTTOM;
     integer _MPI_STATUS_IGNORE;
     integer _MPI_STATUSES_IGNORE;
-  } *f77;                       /* with f2c, remains NULL with gfortran */
-  struct s_smpi_common f90;     /* with gfortran */
-} smpi_ = { NULL };
+  } smpi_;
+
+
 
 /* Convert between Fortran and C */
-#define F2C_ADDR(addr, val)                                             \
-  (((void *)(addr) == (void *)(smpi_.f77                                \
-                               ? &smpi_.f77[smpi_current_rank]._ ## val \
-                               : &smpi_.f90._ ## val))                  \
+#define FORT_ADDR(addr, val)                                         \
+  (((void *)(addr) == (void*) &(smpi_._ ## val))                  \
    ? (val) : (void *)(addr))
-#define F2C_BOTTOM(addr)          F2C_ADDR(addr, MPI_BOTTOM)
-#define F2C_IN_PLACE(addr)        F2C_ADDR(addr, MPI_IN_PLACE)
-#define F2C_STATUS_IGNORE(addr)   F2C_ADDR(addr, MPI_STATUS_IGNORE)
-#define F2C_STATUSES_IGNORE(addr) F2C_ADDR(addr, MPI_STATUSES_IGNORE)
+#define FORT_BOTTOM(addr)          FORT_ADDR(addr, MPI_BOTTOM)
+#define FORT_IN_PLACE(addr)        FORT_ADDR(addr, MPI_IN_PLACE)
+#define FORT_STATUS_IGNORE(addr)   FORT_ADDR(addr, MPI_STATUS_IGNORE)
+#define FORT_STATUSES_IGNORE(addr) FORT_ADDR(addr, MPI_STATUSES_IGNORE)
 
 #define KEY_SIZE (sizeof(int) * 2 + 1)
 
@@ -217,7 +220,6 @@ void mpi_init_(int* ierr) {
      new_op(MPI_BOR);
      new_op(MPI_BXOR);
    }
-   /* smpif2c is responsible for generating a call with the final arguments */
    *ierr = MPI_Init(NULL, NULL);
    running_processes++;
 }
@@ -329,7 +331,7 @@ void mpi_send_init_(void *buf, int* count, int* datatype, int* dst, int* tag,
 void mpi_isend_(void *buf, int* count, int* datatype, int* dst,
                  int* tag, int* comm, int* request, int* ierr) {
   MPI_Request req;
-  buf = (char *) F2C_BOTTOM(buf);
+  buf = (char *) FORT_BOTTOM(buf);
   *ierr = MPI_Isend(buf, *count, get_datatype(*datatype), *dst, *tag,
                     get_comm(*comm), &req);
   if(*ierr == MPI_SUCCESS) {
@@ -340,7 +342,7 @@ void mpi_isend_(void *buf, int* count, int* datatype, int* dst,
 void mpi_irsend_(void *buf, int* count, int* datatype, int* dst,
                  int* tag, int* comm, int* request, int* ierr) {
   MPI_Request req;
-  buf = (char *) F2C_BOTTOM(buf);
+  buf = (char *) FORT_BOTTOM(buf);
   *ierr = MPI_Irsend(buf, *count, get_datatype(*datatype), *dst, *tag,
                     get_comm(*comm), &req);
   if(*ierr == MPI_SUCCESS) {
@@ -366,7 +368,7 @@ void mpi_sendrecv_(void* sendbuf, int* sendcount, int* sendtype, int* dst,
                 int* comm, MPI_Status* status, int* ierr) {
    *ierr = MPI_Sendrecv(sendbuf, *sendcount, get_datatype(*sendtype), *dst,
        *sendtag, recvbuf, *recvcount,get_datatype(*recvtype), *src, *recvtag,
-       get_comm(*comm), F2C_STATUS_IGNORE(status));
+       get_comm(*comm), FORT_STATUS_IGNORE(status));
 }
 
 void mpi_recv_init_(void *buf, int* count, int* datatype, int* src, int* tag,
@@ -383,7 +385,7 @@ void mpi_recv_init_(void *buf, int* count, int* datatype, int* src, int* tag,
 void mpi_irecv_(void *buf, int* count, int* datatype, int* src, int* tag,
                  int* comm, int* request, int* ierr) {
   MPI_Request req;
-  buf = (char *) F2C_BOTTOM(buf);
+  buf = (char *) FORT_BOTTOM(buf);
   *ierr = MPI_Irecv(buf, *count, get_datatype(*datatype), *src, *tag,
                     get_comm(*comm), &req);
   if(*ierr == MPI_SUCCESS) {
@@ -418,7 +420,7 @@ void mpi_startall_(int* count, int* requests, int* ierr) {
 void mpi_wait_(int* request, MPI_Status* status, int* ierr) {
    MPI_Request req = find_request(*request);
    
-   *ierr = MPI_Wait(&req, F2C_STATUS_IGNORE(status));
+   *ierr = MPI_Wait(&req, FORT_STATUS_IGNORE(status));
    if(req==MPI_REQUEST_NULL){
      free_request(*request);
      *request=MPI_FORTRAN_REQUEST_NULL;
@@ -449,7 +451,7 @@ void mpi_waitall_(int* count, int* requests, MPI_Status* status, int* ierr) {
   for(i = 0; i < *count; i++) {
     reqs[i] = find_request(requests[i]);
   }
-  *ierr = MPI_Waitall(*count, reqs, F2C_STATUSES_IGNORE(status));
+  *ierr = MPI_Waitall(*count, reqs, FORT_STATUSES_IGNORE(status));
   for(i = 0; i < *count; i++) {
       if(reqs[i]==MPI_REQUEST_NULL){
           free_request(requests[i]);
@@ -470,23 +472,23 @@ void mpi_bcast_(void *buf, int* count, int* datatype, int* root, int* comm, int*
 
 void mpi_reduce_(void* sendbuf, void* recvbuf, int* count,
                   int* datatype, int* op, int* root, int* comm, int* ierr) {
-  sendbuf = (char *) F2C_IN_PLACE(sendbuf);
-  sendbuf = (char *) F2C_BOTTOM(sendbuf);
-  recvbuf = (char *) F2C_BOTTOM(recvbuf);
+  sendbuf = (char *) FORT_IN_PLACE(sendbuf);
+  sendbuf = (char *) FORT_BOTTOM(sendbuf);
+  recvbuf = (char *) FORT_BOTTOM(recvbuf);
   *ierr = MPI_Reduce(sendbuf, recvbuf, *count,
                      get_datatype(*datatype), get_op(*op), *root, get_comm(*comm));
 }
 
 void mpi_allreduce_(void* sendbuf, void* recvbuf, int* count, int* datatype,
                      int* op, int* comm, int* ierr) {
-  sendbuf = (char *) F2C_IN_PLACE(sendbuf);
+  sendbuf = (char *) FORT_IN_PLACE(sendbuf);
   *ierr = MPI_Allreduce(sendbuf, recvbuf, *count, get_datatype(*datatype),
                         get_op(*op), get_comm(*comm));
 }
 
 void mpi_reduce_scatter_(void* sendbuf, void* recvbuf, int* recvcounts, int* datatype,
                      int* op, int* comm, int* ierr) {
-  sendbuf = (char *) F2C_IN_PLACE(sendbuf);
+  sendbuf = (char *) FORT_IN_PLACE(sendbuf);
   *ierr = MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, get_datatype(*datatype),
                         get_op(*op), get_comm(*comm));
 }
@@ -494,7 +496,7 @@ void mpi_reduce_scatter_(void* sendbuf, void* recvbuf, int* recvcounts, int* dat
 void mpi_scatter_(void* sendbuf, int* sendcount, int* sendtype,
                    void* recvbuf, int* recvcount, int* recvtype, 
                    int* root, int* comm, int* ierr) {
-  recvbuf = (char *) F2C_IN_PLACE(recvbuf);
+  recvbuf = (char *) FORT_IN_PLACE(recvbuf);
   *ierr = MPI_Scatter(sendbuf, *sendcount, get_datatype(*sendtype),
                       recvbuf, *recvcount, get_datatype(*recvtype), *root, get_comm(*comm));
 }
@@ -503,7 +505,7 @@ void mpi_scatter_(void* sendbuf, int* sendcount, int* sendtype,
 void mpi_scatterv_(void* sendbuf, int* sendcounts, int* displs, int* sendtype,
                    void* recvbuf, int* recvcount, int* recvtype,
                    int* root, int* comm, int* ierr) {
-  recvbuf = (char *) F2C_IN_PLACE(recvbuf);
+  recvbuf = (char *) FORT_IN_PLACE(recvbuf);
   *ierr = MPI_Scatterv(sendbuf, sendcounts, displs, get_datatype(*sendtype),
                       recvbuf, *recvcount, get_datatype(*recvtype), *root, get_comm(*comm));
 }
@@ -511,9 +513,9 @@ void mpi_scatterv_(void* sendbuf, int* sendcounts, int* displs, int* sendtype,
 void mpi_gather_(void* sendbuf, int* sendcount, int* sendtype,
                   void* recvbuf, int* recvcount, int* recvtype,
                   int* root, int* comm, int* ierr) {
-  sendbuf = (char *) F2C_IN_PLACE(sendbuf);
-  sendbuf = (char *) F2C_BOTTOM(sendbuf);
-  recvbuf = (char *) F2C_BOTTOM(recvbuf);
+  sendbuf = (char *) FORT_IN_PLACE(sendbuf);
+  sendbuf = (char *) FORT_BOTTOM(sendbuf);
+  recvbuf = (char *) FORT_BOTTOM(recvbuf);
   *ierr = MPI_Gather(sendbuf, *sendcount, get_datatype(*sendtype),
                      recvbuf, *recvcount, get_datatype(*recvtype), *root, get_comm(*comm));
 }
@@ -521,9 +523,9 @@ void mpi_gather_(void* sendbuf, int* sendcount, int* sendtype,
 void mpi_gatherv_(void* sendbuf, int* sendcount, int* sendtype,
                   void* recvbuf, int* recvcounts, int* displs, int* recvtype,
                   int* root, int* comm, int* ierr) {
-  sendbuf = (char *) F2C_IN_PLACE(sendbuf);
-  sendbuf = (char *) F2C_BOTTOM(sendbuf);
-  recvbuf = (char *) F2C_BOTTOM(recvbuf);
+  sendbuf = (char *) FORT_IN_PLACE(sendbuf);
+  sendbuf = (char *) FORT_BOTTOM(sendbuf);
+  recvbuf = (char *) FORT_BOTTOM(recvbuf);
   *ierr = MPI_Gatherv(sendbuf, *sendcount, get_datatype(*sendtype),
                      recvbuf, recvcounts, displs, get_datatype(*recvtype), *root, get_comm(*comm));
 }
@@ -531,7 +533,7 @@ void mpi_gatherv_(void* sendbuf, int* sendcount, int* sendtype,
 void mpi_allgather_(void* sendbuf, int* sendcount, int* sendtype,
                      void* recvbuf, int* recvcount, int* recvtype,
                      int* comm, int* ierr) {
-  sendbuf = (char *) F2C_IN_PLACE(sendbuf);
+  sendbuf = (char *) FORT_IN_PLACE(sendbuf);
   *ierr = MPI_Allgather(sendbuf, *sendcount, get_datatype(*sendtype),
                         recvbuf, *recvcount, get_datatype(*recvtype), get_comm(*comm));
 }
@@ -539,7 +541,7 @@ void mpi_allgather_(void* sendbuf, int* sendcount, int* sendtype,
 void mpi_allgatherv_(void* sendbuf, int* sendcount, int* sendtype,
                      void* recvbuf, int* recvcounts,int* displs, int* recvtype,
                      int* comm, int* ierr) {
-  sendbuf = (char *) F2C_IN_PLACE(sendbuf);
+  sendbuf = (char *) FORT_IN_PLACE(sendbuf);
   *ierr = MPI_Allgatherv(sendbuf, *sendcount, get_datatype(*sendtype),
                         recvbuf, recvcounts, displs, get_datatype(*recvtype), get_comm(*comm));
 }
@@ -564,7 +566,7 @@ void mpi_alltoallv_(void* sendbuf, int* sendcounts, int* senddisps, int* sendtyp
 
 void mpi_test_ (int * request, int *flag, MPI_Status * status, int* ierr){
   MPI_Request req = find_request(*request);
-  *ierr= MPI_Test(&req, flag, F2C_STATUS_IGNORE(status));
+  *ierr= MPI_Test(&req, flag, FORT_STATUS_IGNORE(status));
   if(req==MPI_REQUEST_NULL){
       free_request(*request);
       *request=MPI_FORTRAN_REQUEST_NULL;
@@ -579,7 +581,7 @@ void mpi_testall_ (int* count, int * requests,  int *flag, MPI_Status * statuses
   for(i = 0; i < *count; i++) {
     reqs[i] = find_request(requests[i]);
   }
-  *ierr= MPI_Testall(*count, reqs, flag, F2C_STATUSES_IGNORE(statuses));
+  *ierr= MPI_Testall(*count, reqs, flag, FORT_STATUSES_IGNORE(statuses));
   for(i = 0; i < *count; i++) {
     if(reqs[i]==MPI_REQUEST_NULL){
         free_request(requests[i]);
@@ -594,7 +596,7 @@ void mpi_get_processor_name_(char *name, int *resultlen, int* ierr){
 }
 
 void mpi_get_count_(MPI_Status * status, int* datatype, int *count, int* ierr){
-  *ierr = MPI_Get_count(F2C_STATUS_IGNORE(status), get_datatype(*datatype), count);
+  *ierr = MPI_Get_count(FORT_STATUS_IGNORE(status), get_datatype(*datatype), count);
 }
 
 void mpi_attr_get_(int* comm, int* keyval, void* attr_value, int* flag, int* ierr ){
@@ -749,7 +751,7 @@ void mpi_init_thread_ (int* required, int *provided, int* ierr){
     new_op(MPI_BOR);
     new_op(MPI_BXOR);
   }
-  /* smpif2c is responsible for generating a call with the final arguments */
+
  *ierr = MPI_Init_thread(NULL, NULL,*required, provided);
 }
 
@@ -979,7 +981,7 @@ void mpi_sendrecv_replace_ (void *buf, int* count, int* datatype, int* dst, int*
 {
 
  *ierr = MPI_Sendrecv_replace(buf, *count, get_datatype(*datatype), *dst, *sendtag, *src,
- *recvtag, get_comm(*comm), F2C_STATUS_IGNORE(status));
+ *recvtag, get_comm(*comm), FORT_STATUS_IGNORE(status));
 }
 
 void mpi_testany_ (int* count, int* requests, int *index, int *flag, MPI_Status* status, int* ierr)
@@ -991,7 +993,7 @@ void mpi_testany_ (int* count, int* requests, int *index, int *flag, MPI_Status*
   for(i = 0; i < *count; i++) {
     reqs[i] = find_request(requests[i]);
   }
-  *ierr = MPI_Testany(*count, reqs, index, flag, F2C_STATUS_IGNORE(status));
+  *ierr = MPI_Testany(*count, reqs, index, flag, FORT_STATUS_IGNORE(status));
   if(*index!=MPI_UNDEFINED)
   if(reqs[*index]==MPI_REQUEST_NULL){
     free_request(requests[*index]);
@@ -1026,7 +1028,7 @@ void mpi_reduce_local_ (void *inbuf, void *inoutbuf, int* count, int* datatype,
 
 void mpi_reduce_scatter_block_ (void *sendbuf, void *recvbuf, int* recvcount, int* datatype, int* op, int* comm, int* ierr)
 {
-  sendbuf = (char *) F2C_IN_PLACE(sendbuf);
+  sendbuf = (char *) FORT_IN_PLACE(sendbuf);
  *ierr = MPI_Reduce_scatter_block(sendbuf, recvbuf, *recvcount, get_datatype(*datatype), get_op(*op), get_comm(*comm));
 }
 
@@ -1167,7 +1169,7 @@ void mpi_testsome_ (int* incount, int*  requests, int* outcount, int* indices, M
     reqs[i] = find_request(requests[i]);
     indices[i]=0;
   }
-  *ierr = MPI_Testsome(*incount, reqs, outcount, indices, F2C_STATUSES_IGNORE(statuses));
+  *ierr = MPI_Testsome(*incount, reqs, outcount, indices, FORT_STATUSES_IGNORE(statuses));
   for(i=0;i<*incount;i++){
     if(indices[i]){
       if(reqs[indices[i]]==MPI_REQUEST_NULL){
@@ -1324,7 +1326,7 @@ void mpi_issend_ (void* buf, int* count, int* datatype, int *dest, int* tag, int
 }
 
 void mpi_probe_ (int* source, int* tag, int* comm, MPI_Status*  status, int* ierr) {
- *ierr = MPI_Probe(*source, *tag, get_comm(*comm), F2C_STATUS_IGNORE(status));
+ *ierr = MPI_Probe(*source, *tag, get_comm(*comm), FORT_STATUS_IGNORE(status));
 }
 
 void mpi_attr_delete_ (int* comm, int* keyval, int* ierr) {
index 3cb7b93..ffc4381 100644 (file)
@@ -79,9 +79,6 @@ void smpi_process_init(int *argc, char ***argv)
     int rank = atoi((*argv)[2]);
     index =  SIMIX_process_get_PID(proc) -1;
 
-#ifdef SMPI_F2C
-    smpi_current_rank = index;
-#endif
     if(!index_to_process_data){
         index_to_process_data=(int*)xbt_malloc(SIMIX_process_count()*sizeof(int));
     }
@@ -176,33 +173,6 @@ void smpi_process_mark_as_initialized(void)
 }
 
 
-#ifdef SMPI_F2C
-int smpi_process_argc(void)
-{
-  smpi_process_data_t data = smpi_process_data();
-  return data->argc ? *(data->argc) - 1 : 0;
-}
-
-int smpi_process_getarg(integer * index, char *dst, ftnlen len)
-{
-  smpi_process_data_t data = smpi_process_data();
-  char *arg;
-  ftnlen i;
-
-  if (!data->argc || !data->argv || *index < 1 || *index >= *(data->argc)) {
-    return -1;
-  }
-  arg = (*data->argv)[*index];
-  for (i = 0; i < len && arg[i] != '\0'; i++) {
-    dst[i] = arg[i];
-  }
-  for (; i < len; i++) {
-    dst[i] = ' ';
-  }
-  return 0;
-}
-#endif
-
 int smpi_global_size(void)
 {
   char *value = getenv("SMPI_GLOBAL_SIZE");
@@ -388,6 +358,10 @@ static void smpi_check_options(){
    }
 }
 
+int smpi_enabled(void) {
+  return process_data != NULL;
+}
+
 void smpi_global_init(void)
 {
   int i;
@@ -468,12 +442,6 @@ void smpi_global_destroy(void)
   smpi_free_static();
 }
 
-/* Fortran specific stuff */
-/* With smpicc, the following weak symbols are used */
-/* With smpiff, the following weak symbols are replaced by those in libf2c */
-int __attribute__ ((weak)) xargc;
-char ** __attribute__ ((weak)) xargv;
-
 #ifndef WIN32
 void __attribute__ ((weak)) user_main_()
 {
@@ -493,10 +461,6 @@ int __attribute__ ((weak)) main(int argc, char **argv)
   return smpi_main(smpi_simulated_main_, argc, argv);
 }
 
-int __attribute__ ((weak)) MAIN__()
-{
-  return smpi_main(smpi_simulated_main_, xargc, xargv);
-};
 #endif
 
 static void smpi_init_logs(){
@@ -521,6 +485,7 @@ static void smpi_init_logs(){
   XBT_LOG_CONNECT(smpi_mpi_dt);
   XBT_LOG_CONNECT(smpi_pmpi);
   XBT_LOG_CONNECT(smpi_replay);
+  XBT_LOG_CONNECT(smpi_rma);
 
 }
 
index 99c5274..e7899fa 100644 (file)
@@ -512,6 +512,13 @@ int MPI_Alltoallv(void *sendbuf, int *sendcounts, int *senddisps,
                         comm);
 }
 
+int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr){
+  return PMPI_Alloc_mem(size, info, baseptr);
+}
+
+int MPI_Free_mem(void *baseptr){
+  return PMPI_Free_mem(baseptr);
+}
 
 int MPI_Get_processor_name(char *name, int *resultlen)
 {
@@ -612,13 +619,17 @@ int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) {
 }
 
 int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) {
-  return PMPI_Errhandler_set(comm, errhandler);
+  return PMPI_Comm_set_errhandler(comm, errhandler);
 }
 
 int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler* errhandler) {
   return PMPI_Errhandler_set(comm, errhandler);
 }
 
+int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) {
+  return PMPI_Win_set_errhandler(win, errhandler);
+}
+
 int MPI_Type_contiguous(int count, MPI_Datatype old_type, MPI_Datatype* newtype) {
   return PMPI_Type_contiguous(count, old_type, newtype);
 }
@@ -837,6 +848,18 @@ int MPI_Get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
       target_disp, target_count,target_datatype, win);
 }
 
+int MPI_Put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+    MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win){
+  return PMPI_Put( origin_addr,origin_count, origin_datatype,target_rank,
+      target_disp, target_count,target_datatype, win);
+}
+
+int MPI_Accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+    MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win){
+  return PMPI_Accumulate( origin_addr,origin_count, origin_datatype,target_rank,
+      target_disp, target_count,target_datatype,op, win);
+}
+
 int MPI_Type_get_envelope( MPI_Datatype datatype, int *num_integers,
                           int *num_addresses, int *num_datatypes, int *combiner){
   return PMPI_Type_get_envelope(  datatype, num_integers,
index ee348b8..bfd4b03 100644 (file)
@@ -123,14 +123,18 @@ CREATE_MPI_DATATYPE_NULL(MPI_PACKED);
 // Internal use only
 CREATE_MPI_DATATYPE(MPI_PTR, void*);
 
+/** Check if the datatype is usable for communications
+ */
+int is_datatype_valid(MPI_Datatype datatype) {
+    return datatype != MPI_DATATYPE_NULL
+        && (datatype->flags & DT_FLAG_COMMITED);
+}
 
 size_t smpi_datatype_size(MPI_Datatype datatype)
 {
   return datatype->size;
 }
 
-
-
 MPI_Aint smpi_datatype_lb(MPI_Datatype datatype)
 {
   return datatype->lb;
@@ -141,6 +145,15 @@ MPI_Aint smpi_datatype_ub(MPI_Datatype datatype)
   return datatype->ub;
 }
 
+MPI_Datatype smpi_datatype_dup(MPI_Datatype datatype)
+{
+  MPI_Datatype new_t= xbt_new(s_smpi_mpi_datatype_t,1);
+  memcpy(new_t, datatype, sizeof(s_smpi_mpi_datatype_t));
+  if (datatype->has_subtype)
+    memcpy(new_t->substruct, datatype->substruct, sizeof(s_smpi_subtype_t));
+  return new_t;
+}
+
 int smpi_datatype_extent(MPI_Datatype datatype, MPI_Aint * lb,
                          MPI_Aint * extent)
 {
@@ -157,7 +170,9 @@ int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
                        void *recvbuf, int recvcount, MPI_Datatype recvtype)
 {
   int count;
-
+  if(smpi_privatize_global_variables){
+    switch_data_segment(smpi_process_index());
+  }
   /* First check if we really have something to do */
   if (recvcount > 0 && recvbuf != sendbuf) {
     /* FIXME: treat packed cases */
@@ -171,7 +186,7 @@ int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
     else if (sendtype->has_subtype == 0)
     {
       s_smpi_subtype_t *subtype =  recvtype->substruct;
-      subtype->unserialize( sendbuf, recvbuf,1, subtype);
+      subtype->unserialize( sendbuf, recvbuf,1, subtype, MPI_REPLACE);
     }
     else if (recvtype->has_subtype == 0)
     {
@@ -185,7 +200,7 @@ int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 
       subtype->serialize( sendbuf, buf_tmp,count/smpi_datatype_size(sendtype), subtype);
       subtype =  recvtype->substruct;
-      subtype->unserialize( buf_tmp, recvbuf,count/smpi_datatype_size(recvtype), subtype);
+      subtype->unserialize( buf_tmp, recvbuf,count/smpi_datatype_size(recvtype), subtype, MPI_REPLACE);
 
       free(buf_tmp);
     }
@@ -205,7 +220,7 @@ int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
  */
 void serialize_vector( const void *noncontiguous_vector,
                        void *contiguous_vector,
-                       size_t count,
+                       int count,
                        void *type)
 {
   s_smpi_mpi_vector_t* type_c = (s_smpi_mpi_vector_t*)type;
@@ -242,8 +257,9 @@ void serialize_vector( const void *noncontiguous_vector,
  */
 void unserialize_vector( const void *contiguous_vector,
                          void *noncontiguous_vector,
-                         size_t count,
-                         void *type)
+                         int count,
+                         void *type,
+                         MPI_Op op)
 {
   s_smpi_mpi_vector_t* type_c = (s_smpi_mpi_vector_t*)type;
   int i;
@@ -253,13 +269,16 @@ void unserialize_vector( const void *contiguous_vector,
 
   for (i = 0; i < type_c->block_count * count; i++) {
     if (type_c->old_type->has_subtype == 0)
-      memcpy(noncontiguous_vector_char,
-             contiguous_vector_char, type_c->block_length * type_c->size_oldtype);
+      smpi_op_apply(op, contiguous_vector_char, noncontiguous_vector_char, &type_c->block_length,
+          &type_c->old_type);
+     /* memcpy(noncontiguous_vector_char,
+             contiguous_vector_char, type_c->block_length * type_c->size_oldtype);*/
     else
       ((s_smpi_subtype_t*)type_c->old_type->substruct)->unserialize( contiguous_vector_char,
                                                                      noncontiguous_vector_char,
                                                                      type_c->block_length,
-                                                                     type_c->old_type->substruct);
+                                                                     type_c->old_type->substruct,
+                                                                     op);
     contiguous_vector_char += type_c->block_length*type_c->size_oldtype;
     if((i+1)%type_c->block_count ==0)
     noncontiguous_vector_char += type_c->block_length*smpi_datatype_get_extent(type_c->old_type);
@@ -286,6 +305,7 @@ s_smpi_mpi_vector_t* smpi_datatype_vector_create( int block_stride,
   new_t->block_stride = block_stride;
   new_t->block_length = block_length;
   new_t->block_count = block_count;
+  smpi_datatype_use(old_type);
   new_t->old_type = old_type;
   new_t->size_oldtype = size_oldtype;
   return new_t;
@@ -324,7 +344,7 @@ void smpi_datatype_free(MPI_Datatype* type){
     xbt_free((*type)->substruct);
   }
   xbt_free(*type);
-
+  *type = MPI_DATATYPE_NULL;
 }
 
 void smpi_datatype_use(MPI_Datatype type){
@@ -340,7 +360,7 @@ void smpi_datatype_use(MPI_Datatype type){
 void smpi_datatype_unuse(MPI_Datatype type){
   if(type && type->in_use-- == 0 && (type->flags & DT_FLAG_DESTROYED))
     smpi_datatype_free(&type);
-  
+
 #ifdef HAVE_MC
   if(MC_is_active())
     MC_ignore(&(type->in_use), sizeof(type->in_use));
@@ -366,7 +386,7 @@ Contiguous Implementation
  */
 void serialize_contiguous( const void *noncontiguous_hvector,
                        void *contiguous_hvector,
-                       size_t count,
+                       int count,
                        void *type)
 {
   s_smpi_mpi_contiguous_t* type_c = (s_smpi_mpi_contiguous_t*)type;
@@ -386,18 +406,22 @@ void serialize_contiguous( const void *noncontiguous_hvector,
  */
 void unserialize_contiguous( const void *contiguous_vector,
                          void *noncontiguous_vector,
-                         size_t count,
-                         void *type)
+                         int count,
+                         void *type,
+                         MPI_Op op)
 {
   s_smpi_mpi_contiguous_t* type_c = (s_smpi_mpi_contiguous_t*)type;
   char* contiguous_vector_char = (char*)contiguous_vector;
   char* noncontiguous_vector_char = (char*)noncontiguous_vector+type_c->lb;
-
-  memcpy(noncontiguous_vector_char,
-           contiguous_vector_char, count*  type_c->block_count * type_c->size_oldtype);
+  int n= count* type_c->block_count;
+  smpi_op_apply(op, contiguous_vector_char, noncontiguous_vector_char, &n,
+            &type_c->old_type);
+       /*memcpy(noncontiguous_vector_char,
+           contiguous_vector_char, count*  type_c->block_count * type_c->size_oldtype);*/
 }
 
 void free_contiguous(MPI_Datatype* d){
+  smpi_datatype_unuse(((s_smpi_mpi_indexed_t *)(*d)->substruct)->old_type);
 }
 
 /*
@@ -418,6 +442,7 @@ s_smpi_mpi_contiguous_t* smpi_datatype_contiguous_create( MPI_Aint lb,
   new_t->block_count = block_count;
   new_t->old_type = old_type;
   new_t->size_oldtype = size_oldtype;
+  smpi_datatype_use(old_type);
   return new_t;
 }
 
@@ -485,6 +510,7 @@ int smpi_datatype_vector(int count, int blocklen, int stride, MPI_Datatype old_t
 }
 
 void free_vector(MPI_Datatype* d){
+  smpi_datatype_unuse(((s_smpi_mpi_indexed_t *)(*d)->substruct)->old_type);
 }
 
 /*
@@ -503,7 +529,7 @@ Hvector Implementation - Vector with stride in bytes
  */
 void serialize_hvector( const void *noncontiguous_hvector,
                        void *contiguous_hvector,
-                       size_t count,
+                       int count,
                        void *type)
 {
   s_smpi_mpi_hvector_t* type_c = (s_smpi_mpi_hvector_t*)type;
@@ -539,8 +565,9 @@ void serialize_hvector( const void *noncontiguous_hvector,
  */
 void unserialize_hvector( const void *contiguous_vector,
                          void *noncontiguous_vector,
-                         size_t count,
-                         void *type)
+                         int count,
+                         void *type,
+                         MPI_Op op)
 {
   s_smpi_mpi_hvector_t* type_c = (s_smpi_mpi_hvector_t*)type;
   int i;
@@ -550,13 +577,16 @@ void unserialize_hvector( const void *contiguous_vector,
 
   for (i = 0; i < type_c->block_count * count; i++) {
     if (type_c->old_type->has_subtype == 0)
-      memcpy(noncontiguous_vector_char,
-           contiguous_vector_char, type_c->block_length * type_c->size_oldtype);
+      smpi_op_apply(op, contiguous_vector_char, noncontiguous_vector_char, &type_c->block_length,
+                  &type_c->old_type);
+             /*memcpy(noncontiguous_vector_char,
+           contiguous_vector_char, type_c->block_length * type_c->size_oldtype);*/
     else
       ((s_smpi_subtype_t*)type_c->old_type->substruct)->unserialize( contiguous_vector_char,
                                                                      noncontiguous_vector_char,
                                                                      type_c->block_length,
-                                                                     type_c->old_type->substruct);
+                                                                     type_c->old_type->substruct,
+                                                                     op);
     contiguous_vector_char += type_c->block_length*type_c->size_oldtype;
     if((i+1)%type_c->block_count ==0)
     noncontiguous_vector_char += type_c->block_length*type_c->size_oldtype;
@@ -585,11 +615,13 @@ s_smpi_mpi_hvector_t* smpi_datatype_hvector_create( MPI_Aint block_stride,
   new_t->block_count = block_count;
   new_t->old_type = old_type;
   new_t->size_oldtype = size_oldtype;
+  smpi_datatype_use(old_type);
   return new_t;
 }
 
 //do nothing for vector types
 void free_hvector(MPI_Datatype* d){
+  smpi_datatype_unuse(((s_smpi_mpi_indexed_t *)(*d)->substruct)->old_type);
 }
 
 int smpi_datatype_hvector(int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype* new_type)
@@ -643,7 +675,7 @@ Indexed Implementation
  */
 void serialize_indexed( const void *noncontiguous_indexed,
                        void *contiguous_indexed,
-                       size_t count,
+                       int count,
                        void *type)
 {
   s_smpi_mpi_indexed_t* type_c = (s_smpi_mpi_indexed_t*)type;
@@ -680,8 +712,9 @@ void serialize_indexed( const void *noncontiguous_indexed,
  */
 void unserialize_indexed( const void *contiguous_indexed,
                          void *noncontiguous_indexed,
-                         size_t count,
-                         void *type)
+                         int count,
+                         void *type,
+                         MPI_Op op)
 {
 
   s_smpi_mpi_indexed_t* type_c = (s_smpi_mpi_indexed_t*)type;
@@ -691,13 +724,16 @@ void unserialize_indexed( const void *contiguous_indexed,
   for(j=0; j<count;j++){
     for (i = 0; i < type_c->block_count; i++) {
       if (type_c->old_type->has_subtype == 0)
-        memcpy(noncontiguous_indexed_char ,
-             contiguous_indexed_char, type_c->block_lengths[i] * type_c->size_oldtype);
+        smpi_op_apply(op, contiguous_indexed_char, noncontiguous_indexed_char, &type_c->block_lengths[i],
+                    &type_c->old_type);
+               /*memcpy(noncontiguous_indexed_char ,
+             contiguous_indexed_char, type_c->block_lengths[i] * type_c->size_oldtype);*/
       else
         ((s_smpi_subtype_t*)type_c->old_type->substruct)->unserialize( contiguous_indexed_char,
                                                                        noncontiguous_indexed_char,
                                                                        type_c->block_lengths[i],
-                                                                       type_c->old_type->substruct);
+                                                                       type_c->old_type->substruct,
+                                                                       op);
 
       contiguous_indexed_char += type_c->block_lengths[i]*type_c->size_oldtype;
       if (i<type_c->block_count-1)
@@ -711,6 +747,7 @@ void unserialize_indexed( const void *contiguous_indexed,
 void free_indexed(MPI_Datatype* type){
   xbt_free(((s_smpi_mpi_indexed_t *)(*type)->substruct)->block_lengths);
   xbt_free(((s_smpi_mpi_indexed_t *)(*type)->substruct)->block_indices);
+  smpi_datatype_unuse(((s_smpi_mpi_indexed_t *)(*type)->substruct)->old_type);
 }
 
 /*
@@ -736,6 +773,7 @@ s_smpi_mpi_indexed_t* smpi_datatype_indexed_create( int* block_lengths,
     new_t->block_indices[i]=block_indices[i];
   }
   new_t->block_count = block_count;
+  smpi_datatype_use(old_type);
   new_t->old_type = old_type;
   new_t->size_oldtype = size_oldtype;
   return new_t;
@@ -806,7 +844,7 @@ Hindexed Implementation - Indexed with indices in bytes
  */
 void serialize_hindexed( const void *noncontiguous_hindexed,
                        void *contiguous_hindexed,
-                       size_t count,
+                       int count,
                        void *type)
 {
   s_smpi_mpi_hindexed_t* type_c = (s_smpi_mpi_hindexed_t*)type;
@@ -842,8 +880,9 @@ void serialize_hindexed( const void *noncontiguous_hindexed,
  */
 void unserialize_hindexed( const void *contiguous_hindexed,
                          void *noncontiguous_hindexed,
-                         size_t count,
-                         void *type)
+                         int count,
+                         void *type,
+                         MPI_Op op)
 {
   s_smpi_mpi_hindexed_t* type_c = (s_smpi_mpi_hindexed_t*)type;
   int i,j;
@@ -853,13 +892,16 @@ void unserialize_hindexed( const void *contiguous_hindexed,
   for(j=0; j<count;j++){
     for (i = 0; i < type_c->block_count; i++) {
       if (type_c->old_type->has_subtype == 0)
-        memcpy(noncontiguous_hindexed_char,
-               contiguous_hindexed_char, type_c->block_lengths[i] * type_c->size_oldtype);
+        smpi_op_apply(op, contiguous_hindexed_char, noncontiguous_hindexed_char, &type_c->block_lengths[i],
+                            &type_c->old_type);
+                       /*memcpy(noncontiguous_hindexed_char,
+               contiguous_hindexed_char, type_c->block_lengths[i] * type_c->size_oldtype);*/
       else
         ((s_smpi_subtype_t*)type_c->old_type->substruct)->unserialize( contiguous_hindexed_char,
                                                                        noncontiguous_hindexed_char,
                                                                        type_c->block_lengths[i],
-                                                                       type_c->old_type->substruct);
+                                                                       type_c->old_type->substruct,
+                                                                       op);
 
       contiguous_hindexed_char += type_c->block_lengths[i]*type_c->size_oldtype;
       if (i<type_c->block_count-1)noncontiguous_hindexed_char = (char*)noncontiguous_hindexed + type_c->block_indices[i+1];
@@ -872,6 +914,7 @@ void unserialize_hindexed( const void *contiguous_hindexed,
 void free_hindexed(MPI_Datatype* type){
   xbt_free(((s_smpi_mpi_hindexed_t *)(*type)->substruct)->block_lengths);
   xbt_free(((s_smpi_mpi_hindexed_t *)(*type)->substruct)->block_indices);
+  smpi_datatype_unuse(((s_smpi_mpi_indexed_t *)(*type)->substruct)->old_type);
 }
 
 /*
@@ -967,7 +1010,7 @@ struct Implementation - Indexed with indices in bytes
  */
 void serialize_struct( const void *noncontiguous_struct,
                        void *contiguous_struct,
-                       size_t count,
+                       int count,
                        void *type)
 {
   s_smpi_mpi_struct_t* type_c = (s_smpi_mpi_struct_t*)type;
@@ -1004,8 +1047,9 @@ void serialize_struct( const void *noncontiguous_struct,
  */
 void unserialize_struct( const void *contiguous_struct,
                          void *noncontiguous_struct,
-                         size_t count,
-                         void *type)
+                         int count,
+                         void *type,
+                         MPI_Op op)
 {
   s_smpi_mpi_struct_t* type_c = (s_smpi_mpi_struct_t*)type;
   int i,j;
@@ -1015,13 +1059,16 @@ void unserialize_struct( const void *contiguous_struct,
   for(j=0; j<count;j++){
     for (i = 0; i < type_c->block_count; i++) {
       if (type_c->old_types[i]->has_subtype == 0)
-        memcpy(noncontiguous_struct_char,
-             contiguous_struct_char, type_c->block_lengths[i] * smpi_datatype_size(type_c->old_types[i]));
+        smpi_op_apply(op, contiguous_struct_char, noncontiguous_struct_char, &type_c->block_lengths[i],
+           & type_c->old_types[i]);
+                       /*memcpy(noncontiguous_struct_char,
+             contiguous_struct_char, type_c->block_lengths[i] * smpi_datatype_size(type_c->old_types[i]));*/
       else
         ((s_smpi_subtype_t*)type_c->old_types[i]->substruct)->unserialize( contiguous_struct_char,
                                                                            noncontiguous_struct_char,
                                                                            type_c->block_lengths[i],
-                                                                           type_c->old_types[i]->substruct);
+                                                                           type_c->old_types[i]->substruct,
+                                                                           op);
 
       contiguous_struct_char += type_c->block_lengths[i]*smpi_datatype_size(type_c->old_types[i]);
       if (i<type_c->block_count-1)noncontiguous_struct_char =  (char*)noncontiguous_struct + type_c->block_indices[i+1];
@@ -1035,6 +1082,9 @@ void unserialize_struct( const void *contiguous_struct,
 void free_struct(MPI_Datatype* type){
   xbt_free(((s_smpi_mpi_struct_t *)(*type)->substruct)->block_lengths);
   xbt_free(((s_smpi_mpi_struct_t *)(*type)->substruct)->block_indices);
+  int i=0;
+  for (i = 0; i < ((s_smpi_mpi_struct_t *)(*type)->substruct)->block_count; i++)
+    smpi_datatype_unuse(((s_smpi_mpi_struct_t *)(*type)->substruct)->old_types[i]);
   xbt_free(((s_smpi_mpi_struct_t *)(*type)->substruct)->old_types);
 }
 
@@ -1060,6 +1110,7 @@ s_smpi_mpi_struct_t* smpi_datatype_struct_create( int* block_lengths,
     new_t->block_lengths[i]=block_lengths[i];
     new_t->block_indices[i]=block_indices[i];
     new_t->old_types[i]=old_types[i];
+    smpi_datatype_use(new_t->old_types[i]);
   }
   //new_t->block_lengths = block_lengths;
   //new_t->block_indices = block_indices;
@@ -1144,7 +1195,6 @@ typedef struct s_smpi_mpi_op {
 #define BXOR_OP(a, b) (b) ^= (a)
 #define MAXLOC_OP(a, b)  (b) = (a.value) < (b.value) ? (b) : (a)
 #define MINLOC_OP(a, b)  (b) = (a.value) < (b.value) ? (a) : (b)
-//TODO : MINLOC & MAXLOC
 
 #define APPLY_FUNC(a, b, length, type, func) \
 {                                          \
@@ -1449,6 +1499,11 @@ static void maxloc_func(void *a, void *b, int *length,
   }
 }
 
+static void replace_func(void *a, void *b, int *length,
+                        MPI_Datatype * datatype)
+{
+  memcpy(b, a, *length * smpi_datatype_size(*datatype));
+}
 
 #define CREATE_MPI_OP(name, func)                             \
   static s_smpi_mpi_op_t mpi_##name = { &(func) /* func */, TRUE }; \
@@ -1466,6 +1521,8 @@ CREATE_MPI_OP(MPI_BOR, bor_func);
 CREATE_MPI_OP(MPI_BXOR, bxor_func);
 CREATE_MPI_OP(MPI_MAXLOC, maxloc_func);
 CREATE_MPI_OP(MPI_MINLOC, minloc_func);
+CREATE_MPI_OP(MPI_REPLACE, replace_func);
+
 
 MPI_Op smpi_op_new(MPI_User_function * function, int commute)
 {
index 6e81df3..c88b436 100644 (file)
@@ -45,16 +45,16 @@ typedef struct s_smpi_mpi_contiguous{
   MPI_Datatype old_type;
   MPI_Aint lb;
   size_t size_oldtype;
-  size_t block_count;
+  int block_count;
 } s_smpi_mpi_contiguous_t;
 
 typedef struct s_smpi_mpi_vector{
   s_smpi_subtype_t base;
   MPI_Datatype old_type;
   size_t size_oldtype;
-  size_t block_stride;
-  size_t block_length;
-  size_t block_count;
+  int block_stride;
+  int block_length;
+  int block_count;
 } s_smpi_mpi_vector_t;
 
 typedef struct s_smpi_mpi_hvector{
@@ -62,8 +62,8 @@ typedef struct s_smpi_mpi_hvector{
   MPI_Datatype old_type;
   size_t size_oldtype;
   MPI_Aint block_stride;
-  size_t block_length;
-  size_t block_count;
+  int block_length;
+  int block_count;
 } s_smpi_mpi_hvector_t;
 
 typedef struct s_smpi_mpi_indexed{
@@ -72,7 +72,7 @@ typedef struct s_smpi_mpi_indexed{
   size_t size_oldtype;
   int* block_lengths;
   int* block_indices;
-  size_t block_count;
+  int block_count;
 } s_smpi_mpi_indexed_t;
 
 typedef struct s_smpi_mpi_hindexed{
@@ -81,7 +81,7 @@ typedef struct s_smpi_mpi_hindexed{
   size_t size_oldtype;
   int* block_lengths;
   MPI_Aint* block_indices;
-  size_t block_count;
+  int block_count;
 } s_smpi_mpi_hindexed_t;
 
 typedef struct s_smpi_mpi_struct{
@@ -90,7 +90,7 @@ typedef struct s_smpi_mpi_struct{
   size_t size_oldtype;
   int* block_lengths;
   MPI_Aint* block_indices;
-  size_t block_count;
+  int block_count;
   MPI_Datatype* old_types;
 } s_smpi_mpi_struct_t;
 
@@ -100,12 +100,13 @@ typedef struct s_smpi_mpi_struct{
 */
 void unserialize_contiguous( const void *contiguous_vector,
                          void *noncontiguous_vector,
-                         size_t count,
-                         void *type);
+                         int count,
+                         void *type,
+                         MPI_Op op);
 
 void serialize_contiguous( const void *noncontiguous_vector,
                        void *contiguous_vector,
-                       size_t count,
+                       int count,
                        void *type);
 
 void free_contiguous(MPI_Datatype* type);
@@ -117,12 +118,13 @@ s_smpi_mpi_contiguous_t* smpi_datatype_contiguous_create( MPI_Aint lb,
                                                   
 void unserialize_vector( const void *contiguous_vector,
                          void *noncontiguous_vector,
-                         size_t count,
-                         void *type);
+                         int count,
+                         void *type,
+                         MPI_Op op);
 
 void serialize_vector( const void *noncontiguous_vector,
                        void *contiguous_vector,
-                       size_t count,
+                       int count,
                        void *type);
 
 void free_vector(MPI_Datatype* type);
@@ -135,12 +137,13 @@ s_smpi_mpi_vector_t* smpi_datatype_vector_create( int block_stride,
 
 void unserialize_hvector( const void *contiguous_vector,
                          void *noncontiguous_vector,
-                         size_t count,
-                         void *type);
+                         int count,
+                         void *type,
+                         MPI_Op op);
 
 void serialize_hvector( const void *noncontiguous_vector,
                        void *contiguous_vector,
-                       size_t count,
+                       int count,
                        void *type);
 
 void free_hvector(MPI_Datatype* type);
@@ -154,12 +157,13 @@ s_smpi_mpi_hvector_t* smpi_datatype_hvector_create( MPI_Aint block_stride,
 
 void unserialize_indexed( const void *contiguous_indexed,
                          void *noncontiguous_indexed,
-                         size_t count,
-                         void *type);
+                         int count,
+                         void *type,
+                         MPI_Op op);
 
 void serialize_indexed( const void *noncontiguous_vector,
                        void *contiguous_vector,
-                       size_t count,
+                       int count,
                        void *type);
 
 void free_indexed(MPI_Datatype* type);
@@ -172,12 +176,13 @@ s_smpi_mpi_indexed_t* smpi_datatype_indexed_create(int* block_lengths,
 
 void unserialize_hindexed( const void *contiguous_indexed,
                          void *noncontiguous_indexed,
-                         size_t count,
-                         void *type);
+                         int count,
+                         void *type,
+                         MPI_Op op);
 
 void serialize_hindexed( const void *noncontiguous_vector,
                        void *contiguous_vector,
-                       size_t count,
+                       int count,
                        void *type);
 
 void free_hindexed(MPI_Datatype* type);
@@ -190,12 +195,13 @@ s_smpi_mpi_hindexed_t* smpi_datatype_hindexed_create(int* block_lengths,
 
 void unserialize_struct( const void *contiguous_indexed,
                          void *noncontiguous_indexed,
-                         size_t count,
-                         void *type);
+                         int count,
+                         void *type,
+                         MPI_Op op);
 
 void serialize_struct( const void *noncontiguous_vector,
                        void *contiguous_vector,
-                       size_t count,
+                       int count,
                        void *type);
 
 void free_struct(MPI_Datatype* type);
index 573575b..c2aa98c 100644 (file)
@@ -1,3 +1,4 @@
+
 /* Copyright (c) 2007-2014. The SimGrid Team.
  * All rights reserved.                                                     */
 
@@ -164,8 +165,9 @@ int PMPI_Get_address(void *location, MPI_Aint * address)
 int PMPI_Type_free(MPI_Datatype * datatype)
 {
   int retval = 0;
-
-  if (!datatype) {
+  /* Free a predefined datatype is an error according to the standard, and
+     should be checked for */
+  if (*datatype == MPI_DATATYPE_NULL) {
     retval = MPI_ERR_ARG;
   } else {
     smpi_datatype_free(datatype);
@@ -253,6 +255,18 @@ int PMPI_Type_ub(MPI_Datatype datatype, MPI_Aint * disp)
   return retval;
 }
 
+int PMPI_Type_dup(MPI_Datatype datatype, MPI_Datatype *newtype){
+  int retval = 0;
+
+  if (datatype == MPI_DATATYPE_NULL) {
+    retval = MPI_ERR_TYPE;
+  } else {
+    *newtype = smpi_datatype_dup(datatype);
+    retval = MPI_SUCCESS;
+  }
+  return retval;
+}
+
 int PMPI_Op_create(MPI_User_function * function, int commute, MPI_Op * op)
 {
   int retval = 0;
@@ -858,14 +872,16 @@ int PMPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dst,
 
   smpi_bench_end();
   if (request == NULL) {
-    retval = MPI_ERR_ARG;
+      retval = MPI_ERR_ARG;
   } else if (comm == MPI_COMM_NULL) {
-    retval = MPI_ERR_COMM;
+      retval = MPI_ERR_COMM;
+  } else if (!is_datatype_valid(datatype)) {
+      retval = MPI_ERR_TYPE;
   } else if (dst == MPI_PROC_NULL) {
-    retval = MPI_SUCCESS;
+      retval = MPI_SUCCESS;
   } else {
-    *request = smpi_mpi_send_init(buf, count, datatype, dst, tag, comm);
-    retval = MPI_SUCCESS;
+      *request = smpi_mpi_send_init(buf, count, datatype, dst, tag, comm);
+      retval = MPI_SUCCESS;
   }
   smpi_bench_begin();
   if (retval != MPI_SUCCESS && request)
@@ -883,6 +899,8 @@ int PMPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int src,
     retval = MPI_ERR_ARG;
   } else if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
+  } else if (!is_datatype_valid(datatype)) {
+      retval = MPI_ERR_TYPE;
   } else if (src == MPI_PROC_NULL) {
     retval = MPI_SUCCESS;
   } else {
@@ -905,6 +923,8 @@ int PMPI_Ssend_init(void* buf, int count, MPI_Datatype datatype,
     retval = MPI_ERR_ARG;
   } else if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
+  } else if (!is_datatype_valid(datatype)) {
+      retval = MPI_ERR_TYPE;
   } else if (dst == MPI_PROC_NULL) {
     retval = MPI_SUCCESS;
   } else {
@@ -989,8 +1009,8 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src,
     retval = MPI_ERR_COUNT;
   } else if (buf==NULL && count > 0) {
     retval = MPI_ERR_COUNT;
-  } else if (datatype == MPI_DATATYPE_NULL){
-    retval = MPI_ERR_TYPE;
+  } else if (!is_datatype_valid(datatype)) {
+      retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -1043,8 +1063,8 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst,
     retval = MPI_ERR_COUNT;
   } else if (buf==NULL && count > 0) {
     retval = MPI_ERR_COUNT;
-  } else if (datatype == MPI_DATATYPE_NULL){
-    retval = MPI_ERR_TYPE;
+  } else if (!is_datatype_valid(datatype)) {
+      retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -1097,8 +1117,8 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype,
     retval = MPI_ERR_COUNT;
   } else if (buf==NULL && count > 0) {
     retval = MPI_ERR_COUNT;
-  } else if (datatype == MPI_DATATYPE_NULL){
-    retval = MPI_ERR_TYPE;
+  } else if (!is_datatype_valid(datatype)) {
+      retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -1149,8 +1169,8 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag,
     retval = MPI_ERR_COUNT;
   } else if (buf==NULL && count > 0) {
     retval = MPI_ERR_COUNT;
-  } else if (datatype == MPI_DATATYPE_NULL){
-    retval = MPI_ERR_TYPE;
+  } else if (!is_datatype_valid(datatype)) {
+      retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -1200,8 +1220,8 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag,
     retval = MPI_ERR_COUNT;
   } else if (buf==NULL && count > 0) {
     retval = MPI_ERR_COUNT;
-  } else if (datatype == MPI_DATATYPE_NULL){
-    retval = MPI_ERR_TYPE;
+  } else if (!is_datatype_valid(datatype)) {
+      retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -1248,7 +1268,7 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP
      retval = MPI_ERR_COUNT;
    } else if (buf==NULL && count > 0) {
      retval = MPI_ERR_COUNT;
-   } else if (datatype == MPI_DATATYPE_NULL){
+   } else if (!is_datatype_valid(datatype)){
      retval = MPI_ERR_TYPE;
    } else if(tag<0 && tag !=  MPI_ANY_TAG){
      retval = MPI_ERR_TAG;
@@ -1289,8 +1309,8 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (sendtype == MPI_DATATYPE_NULL
-             || recvtype == MPI_DATATYPE_NULL) {
+  } else if (!is_datatype_valid(sendtype)
+             || !is_datatype_valid(recvtype)) {
     retval = MPI_ERR_TYPE;
   } else if (src == MPI_PROC_NULL || dst == MPI_PROC_NULL) {
       smpi_empty_status(status);
@@ -1347,7 +1367,7 @@ int PMPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
   //TODO: suboptimal implementation
   void *recvbuf;
   int retval = 0;
-  if (datatype == MPI_DATATYPE_NULL) {
+  if (!is_datatype_valid(datatype)) {
       retval = MPI_ERR_TYPE;
   } else if (count < 0) {
       retval = MPI_ERR_COUNT;
@@ -2038,7 +2058,7 @@ int PMPI_Reduce(void *sendbuf, void *recvbuf, int count,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (datatype == MPI_DATATYPE_NULL || op == MPI_OP_NULL) {
+  } else if (!is_datatype_valid(datatype) || op == MPI_OP_NULL) {
     retval = MPI_ERR_ARG;
   } else {
 #ifdef HAVE_TRACING
@@ -2069,7 +2089,7 @@ int PMPI_Reduce_local(void *inbuf, void *inoutbuf, int count,
   int retval = 0;
 
     smpi_bench_end();
-    if (datatype == MPI_DATATYPE_NULL || op == MPI_OP_NULL) {
+    if (!is_datatype_valid(datatype) || op == MPI_OP_NULL) {
       retval = MPI_ERR_ARG;
     } else {
       smpi_op_apply(op, inbuf, inoutbuf, &count, &datatype);
@@ -2088,7 +2108,7 @@ int PMPI_Allreduce(void *sendbuf, void *recvbuf, int count,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (datatype == MPI_DATATYPE_NULL) {
+  } else if (!is_datatype_valid(datatype)) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2133,7 +2153,7 @@ int PMPI_Scan(void *sendbuf, void *recvbuf, int count,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (datatype == MPI_DATATYPE_NULL) {
+  } else if (!is_datatype_valid(datatype)) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2166,7 +2186,7 @@ int PMPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (datatype == MPI_DATATYPE_NULL) {
+  } else if (!is_datatype_valid(datatype)) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2199,7 +2219,7 @@ int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (datatype == MPI_DATATYPE_NULL) {
+  } else if (!is_datatype_valid(datatype)) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2246,7 +2266,7 @@ int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (datatype == MPI_DATATYPE_NULL) {
+  } else if (!is_datatype_valid(datatype)) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2396,7 +2416,7 @@ int PMPI_Get_count(MPI_Status * status, MPI_Datatype datatype, int *count)
 
   if (status == NULL || count == NULL) {
     retval = MPI_ERR_ARG;
-  } else if (datatype == MPI_DATATYPE_NULL) {
+  } else if (!is_datatype_valid(datatype)) {
     retval = MPI_ERR_TYPE;
   } else {
     size = smpi_datatype_size(datatype);
@@ -2579,20 +2599,16 @@ int PMPI_Initialized(int* flag) {
 
 int PMPI_Cart_create(MPI_Comm comm_old, int ndims, int* dims, int* periodic, int reorder, MPI_Comm* comm_cart) {
   int retval = 0;
-  smpi_bench_end();
   if (comm_old == MPI_COMM_NULL){
-    return  MPI_ERR_COMM;
-  }
-  else if (ndims < 0 ||
+    retval =  MPI_ERR_COMM;
+  } else if (ndims < 0 ||
            (ndims > 0 && (dims == NULL || 
                           periodic == NULL)) ||
            comm_cart == NULL) {
-    return MPI_ERR_ARG;
+    retval = MPI_ERR_ARG;
+  } else{
+    retval = smpi_mpi_cart_create(comm_old, ndims, dims, periodic, reorder, comm_cart);
   }
-  retval = smpi_mpi_cart_create(comm_old, ndims, dims, periodic, reorder, comm_cart);
-
-  smpi_bench_begin();
-
   return retval;
 }
 
@@ -2673,6 +2689,166 @@ int PMPI_Cart_sub(MPI_Comm comm, int* remain_dims, MPI_Comm* comm_new) {
   return smpi_mpi_cart_sub(comm, remain_dims, comm_new);
 }
 
+int PMPI_Type_create_resized(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype){
+    if(oldtype == MPI_DATATYPE_NULL) {
+        return MPI_ERR_TYPE;
+    }
+    int blocks[3] = { 1, 1, 1 };
+    MPI_Aint disps[3] = { lb, 0, lb+extent };
+    MPI_Datatype types[3] = { MPI_LB, oldtype, MPI_UB };
+        
+    s_smpi_mpi_struct_t* subtype = smpi_datatype_struct_create( blocks,
+                                                                disps,
+                                                                3,
+                                                                types
+                                                                );
+    smpi_datatype_create(newtype,oldtype->size, lb, lb + extent, 1 , subtype, DT_FLAG_VECTOR);
+
+    (*newtype)->flags &= ~DT_FLAG_COMMITED;
+    return MPI_SUCCESS;
+}
+
+
+
+int PMPI_Win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win){
+  int retval = 0;
+  smpi_bench_end();
+  if (comm == MPI_COMM_NULL) {
+    retval= MPI_ERR_COMM;
+  }else if ((base == NULL && size != 0)
+            || disp_unit <= 0 || size < 0 ){
+    retval= MPI_ERR_OTHER;
+  }else{
+    *win = smpi_mpi_win_create( base, size, disp_unit, info, comm);
+    retval = MPI_SUCCESS;
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
+int PMPI_Win_free( MPI_Win* win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == NULL || *win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  }else{
+    retval=smpi_mpi_win_free(win);
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
+
+int PMPI_Win_fence( int assert,  MPI_Win win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  } else {
+    retval = smpi_mpi_win_fence(assert, win);
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
+int PMPI_Get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  } else if (target_rank == MPI_PROC_NULL) {
+    retval = MPI_SUCCESS;
+  } else if (target_rank <0){
+    retval = MPI_ERR_RANK;
+  } else if (target_disp <0){
+      retval = MPI_ERR_ARG;
+  } else if (origin_count < 0 || target_count < 0) {
+    retval = MPI_ERR_COUNT;
+  } else if (origin_addr==NULL && origin_count > 0){
+    retval = MPI_ERR_COUNT;
+  } else if ((!is_datatype_valid(origin_datatype)) ||
+            (!is_datatype_valid(target_datatype))) {
+    retval = MPI_ERR_TYPE;
+  } else {
+    retval = smpi_mpi_get( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win);
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
+int PMPI_Put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  } else if (target_rank == MPI_PROC_NULL) {
+    retval = MPI_SUCCESS;
+  } else if (target_rank <0){
+    retval = MPI_ERR_RANK;
+  } else if (target_disp <0){
+    retval = MPI_ERR_ARG;
+  } else if (origin_count < 0 || target_count < 0) {
+    retval = MPI_ERR_COUNT;
+  } else if (origin_addr==NULL && origin_count > 0){
+    retval = MPI_ERR_COUNT;
+  } else if ((!is_datatype_valid(origin_datatype)) ||
+            (!is_datatype_valid(target_datatype))) {
+    retval = MPI_ERR_TYPE;
+  } else {
+    retval = smpi_mpi_put( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win);
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
+
+int PMPI_Accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win){
+  int retval = 0;
+  smpi_bench_end();
+  if (win == MPI_WIN_NULL) {
+    retval = MPI_ERR_WIN;
+  } else if (target_rank == MPI_PROC_NULL) {
+    retval = MPI_SUCCESS;
+  } else if (target_rank <0){
+    retval = MPI_ERR_RANK;
+  } else if (target_disp <0){
+    retval = MPI_ERR_ARG;
+  } else if (origin_count < 0 || target_count < 0) {
+    retval = MPI_ERR_COUNT;
+  } else if (origin_addr==NULL && origin_count > 0){
+    retval = MPI_ERR_COUNT;
+  } else if ((!is_datatype_valid(origin_datatype)) ||
+            (!is_datatype_valid(target_datatype))) {
+    retval = MPI_ERR_TYPE;
+  } else if (op == MPI_OP_NULL) {
+    retval = MPI_ERR_OP;
+  } else {
+    retval = smpi_mpi_accumulate( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, op, win);
+  }
+  smpi_bench_begin();
+  return retval;
+}
+
+
+int PMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr){
+  void *ptr = xbt_malloc(size);
+  if(!ptr)
+    return MPI_ERR_NO_MEM;
+  else {
+    *(void **)baseptr = ptr;
+    return MPI_SUCCESS;
+  }
+}
+
+int PMPI_Free_mem(void *baseptr){
+  xbt_free(baseptr);
+  return MPI_SUCCESS;
+}
+
+
 
 /* The following calls are not yet implemented and will fail at runtime. */
 /* Once implemented, please move them above this notice. */
@@ -2682,11 +2858,6 @@ int PMPI_Cart_sub(MPI_Comm comm, int* remain_dims, MPI_Comm* comm_new) {
     return MPI_SUCCESS;                                                 \
   }
 
-
-int PMPI_Type_dup(MPI_Datatype datatype, MPI_Datatype *newtype){
-  NOT_YET_IMPLEMENTED
-}
-
 int PMPI_Type_set_name(MPI_Datatype  datatype, char * name)
 {
   NOT_YET_IMPLEMENTED
@@ -2759,6 +2930,10 @@ int PMPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) {
   NOT_YET_IMPLEMENTED
 }
 
+int PMPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) {
+  NOT_YET_IMPLEMENTED
+}
+
 int PMPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler* errhandler) {
   NOT_YET_IMPLEMENTED
 }
@@ -2920,18 +3095,6 @@ int PMPI_Get_elements(MPI_Status* status, MPI_Datatype datatype, int* elements)
   NOT_YET_IMPLEMENTED
 }
 
-int PMPI_Win_fence( int assert,  MPI_Win win){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Win_free( MPI_Win* win){
-  NOT_YET_IMPLEMENTED
-}
-
-int PMPI_Win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win){
-  NOT_YET_IMPLEMENTED
-}
-
 int PMPI_Info_create( MPI_Info *info){
   NOT_YET_IMPLEMENTED
 }
@@ -2944,11 +3107,6 @@ int PMPI_Info_free( MPI_Info *info){
   NOT_YET_IMPLEMENTED
 }
 
-int PMPI_Get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
-              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win){
-  NOT_YET_IMPLEMENTED
-}
-
 int PMPI_Type_get_envelope( MPI_Datatype datatype, int *num_integers,
                             int *num_addresses, int *num_datatypes, int *combiner){
   NOT_YET_IMPLEMENTED
@@ -2966,10 +3124,6 @@ int PMPI_Type_create_darray(int size, int rank, int ndims, int* array_of_gsizes,
   NOT_YET_IMPLEMENTED
 }
 
-int PMPI_Type_create_resized(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype){
-  NOT_YET_IMPLEMENTED
-}
-
 int PMPI_Type_create_subarray(int ndims,int *array_of_sizes, int *array_of_subsizes, int *array_of_starts, int order, MPI_Datatype oldtype, MPI_Datatype *newtype){
   NOT_YET_IMPLEMENTED
 }
diff --git a/src/smpi/smpi_rma.c b/src/smpi/smpi_rma.c
new file mode 100644 (file)
index 0000000..6c77070
--- /dev/null
@@ -0,0 +1,222 @@
+
+/* Copyright (c) 2007-2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include "private.h"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_rma, smpi, "Logging specific to SMPI (RMA operations)");
+
+#define RMA_TAG -1234
+
+xbt_bar_t creation_bar = NULL;
+
+typedef struct s_smpi_mpi_win{
+  void* base;
+  MPI_Aint size;
+  int disp_unit;
+  MPI_Comm comm;
+  //MPI_Info info
+  int assert;
+  xbt_dynar_t requests;
+  xbt_bar_t bar;
+  MPI_Win* connected_wins;
+} s_smpi_mpi_win_t;
+
+
+MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm){
+
+  MPI_Win win;
+  
+  int comm_size = smpi_comm_size(comm);
+  int rank=smpi_comm_rank(comm);
+  XBT_DEBUG("Creating window");
+
+  win = xbt_new(s_smpi_mpi_win_t, 1);
+  win->base = base;
+  win->size = size;
+  win->disp_unit = disp_unit;
+  win->assert = 0;
+  //win->info = info;
+  win->comm = comm;
+  win->requests = xbt_dynar_new(sizeof(MPI_Request), NULL);
+  win->connected_wins = xbt_malloc0(comm_size*sizeof(MPI_Win));
+  win->connected_wins[rank] = win;
+  
+  if(rank==0){
+    win->bar=xbt_barrier_init(comm_size);
+  }
+  
+  mpi_coll_allgather_fun(&(win->connected_wins[rank]),
+                     sizeof(MPI_Win),
+                     MPI_BYTE,
+                     win->connected_wins,
+                     sizeof(MPI_Win),
+                     MPI_BYTE,
+                     comm);
+                     
+  mpi_coll_bcast_fun( &(win->bar),
+                     sizeof(xbt_bar_t),
+                     MPI_BYTE,
+                     0,
+                     comm);
+                     
+  mpi_coll_barrier_fun(comm);
+  
+  return win;
+}
+
+int smpi_mpi_win_free( MPI_Win* win){
+
+  //As per the standard, perform a barrier to ensure every async comm is finished
+  xbt_barrier_wait((*win)->bar);
+  xbt_dynar_free(&(*win)->requests);
+  xbt_free((*win)->connected_wins);
+  xbt_free(*win);
+  win = MPI_WIN_NULL;
+  return MPI_SUCCESS;
+}
+
+
+int smpi_mpi_win_fence( int assert,  MPI_Win win){
+
+  XBT_DEBUG("Entering fence");
+
+  if(assert != MPI_MODE_NOPRECEDE){
+    xbt_barrier_wait(win->bar);
+
+    xbt_dynar_t reqs = win->requests;
+    int size = xbt_dynar_length(reqs);
+    unsigned int cpt=0;
+    MPI_Request req;
+    // start all requests that have been prepared by another process
+    xbt_dynar_foreach(reqs, cpt, req){
+      if (req->flags & PREPARED) smpi_mpi_start(req);
+    }
+
+    MPI_Request* treqs = xbt_dynar_to_array(reqs);
+    smpi_mpi_waitall(size,treqs,MPI_STATUSES_IGNORE);
+    xbt_free(treqs);
+    win->requests=xbt_dynar_new(sizeof(MPI_Request), NULL);
+
+  }
+  win->assert = assert;
+  
+  xbt_barrier_wait(win->bar);
+  XBT_DEBUG("Leaving fence ");
+
+  return MPI_SUCCESS;
+}
+
+int smpi_mpi_put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)
+{
+  //get receiver pointer
+  MPI_Win recv_win = win->connected_wins[target_rank];
+
+  void* recv_addr = (void*) ( ((char*)recv_win->base) + target_disp * recv_win->disp_unit);
+  smpi_datatype_use(origin_datatype);
+  smpi_datatype_use(target_datatype);
+  XBT_DEBUG("Entering MPI_Put to %d", target_rank);
+
+  if(target_rank != smpi_comm_rank(win->comm)){
+    //prepare send_request
+    MPI_Request sreq = smpi_rma_send_init(origin_addr, origin_count, origin_datatype,
+        smpi_process_index(), smpi_group_index(smpi_comm_group(win->comm),target_rank), RMA_TAG+1, win->comm, MPI_OP_NULL);
+
+    //prepare receiver request
+    MPI_Request rreq = smpi_rma_recv_init(recv_addr, target_count, target_datatype,
+        smpi_process_index(), smpi_group_index(smpi_comm_group(win->comm),target_rank), RMA_TAG+1, recv_win->comm, MPI_OP_NULL);
+
+    //push request to receiver's win
+    xbt_dynar_push_as(recv_win->requests, MPI_Request, rreq);
+
+    //start send
+    smpi_mpi_start(sreq);
+
+    //push request to sender's win
+    xbt_dynar_push_as(win->requests, MPI_Request, sreq);
+  }else{
+    smpi_datatype_copy(origin_addr, origin_count, origin_datatype,
+                       recv_addr, target_count, target_datatype);
+  }
+
+  return MPI_SUCCESS;
+}
+
+int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)
+{
+  //get sender pointer
+  MPI_Win send_win = win->connected_wins[target_rank];
+
+  void* send_addr = (void*)( ((char*)send_win->base) + target_disp * send_win->disp_unit);
+  smpi_datatype_use(origin_datatype);
+  smpi_datatype_use(target_datatype);
+  XBT_DEBUG("Entering MPI_Get from %d", target_rank);
+
+  if(target_rank != smpi_comm_rank(win->comm)){
+    //prepare send_request
+    MPI_Request sreq = smpi_rma_send_init(send_addr, target_count, target_datatype,
+        smpi_group_index(smpi_comm_group(win->comm),target_rank), smpi_process_index(), RMA_TAG+2, send_win->comm, MPI_OP_NULL);
+
+    //prepare receiver request
+    MPI_Request rreq = smpi_rma_recv_init(origin_addr, origin_count, origin_datatype,
+        smpi_group_index(smpi_comm_group(win->comm),target_rank), smpi_process_index(), RMA_TAG+2, win->comm, MPI_OP_NULL);
+        
+    //start the send, with another process than us as sender. 
+    smpi_mpi_start(sreq);
+    
+    //push request to receiver's win
+    xbt_dynar_push_as(send_win->requests, MPI_Request, sreq);
+
+    //start recv
+    smpi_mpi_start(rreq);
+
+    //push request to sender's win
+    xbt_dynar_push_as(win->requests, MPI_Request, rreq);
+  }else{
+    smpi_datatype_copy(send_addr, target_count, target_datatype,
+                       origin_addr, origin_count, origin_datatype);
+  }
+
+  return MPI_SUCCESS;
+}
+
+
+int smpi_mpi_accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+              MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
+{
+  //FIXME: local version 
+  //get receiver pointer
+  MPI_Win recv_win = win->connected_wins[target_rank];
+
+  void* recv_addr = (void*)( ((char*)recv_win->base) + target_disp * recv_win->disp_unit);
+  XBT_DEBUG("Entering MPI_Accumulate to %d", target_rank);
+
+  smpi_datatype_use(origin_datatype);
+  smpi_datatype_use(target_datatype);
+
+
+    //prepare send_request
+    MPI_Request sreq = smpi_rma_send_init(origin_addr, origin_count, origin_datatype,
+        smpi_process_index(), smpi_group_index(smpi_comm_group(win->comm),target_rank), RMA_TAG+3, win->comm, op);
+
+    //prepare receiver request
+    MPI_Request rreq = smpi_rma_recv_init(recv_addr, target_count, target_datatype,
+        smpi_process_index(), smpi_group_index(smpi_comm_group(win->comm),target_rank), RMA_TAG+3, recv_win->comm, op);
+    //push request to receiver's win
+    xbt_dynar_push_as(recv_win->requests, MPI_Request, rreq);
+    //start send
+    smpi_mpi_start(sreq);
+    
+    //push request to sender's win
+    xbt_dynar_push_as(win->requests, MPI_Request, sreq);
+  
+
+
+  return MPI_SUCCESS;
+}
+
index fdc5f77..8fbf322 100644 (file)
+/* Copyright (c) 2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+
 #include "xbt/sysdep.h"
 #include "smpi/smpi.h"
 #include "private.h"
 
 #include <math.h>
 
-typedef struct s_smpi_mpi_topology {
-  int nnodes;
-  int ndims;
-  int *dims;
-  int *periodic;
-  int *position;
+typedef struct s_smpi_mpi_cart_topology {
+    int nnodes;
+    int ndims;
+    int *dims;
+    int *periodic;
+    int *position;
+} s_smpi_mpi_cart_topology_t;
+
+typedef struct s_smpi_mpi_graph_topology {
+    int nnodes;
+    int nedges;
+    int *index;
+    int *edges;
+} s_smpi_mpi_graph_topology_t;
+
+typedef struct s_smpi_dist_graph_topology {
+    int indegree;
+    int *in;
+    int *in_weights;
+    int outdegree;
+    int *out;
+    int *out_weights;
+    int is_weighted;
+} s_smpi_mpi_dist_graph_topology_t;
+
+typedef struct s_smpi_mpi_topology { 
+    MPIR_Topo_type kind;
+    union topo { 
+        MPIR_Graph_Topology graph;
+        MPIR_Cart_Topology  cart;
+        MPIR_Dist_Graph_Topology dist_graph;
+    } topo;
 } s_smpi_mpi_topology_t;
 
-
-
 void smpi_topo_destroy(MPI_Topology topo) {
-  if (topo) {
-    if(topo->dims) {
-      free(topo->dims);
+    if(topo == NULL) {
+        return;
     }
-    if(topo->periodic) {
-      free(topo->periodic);
+    switch (topo->kind) {
+    case MPI_GRAPH:
+        // Not implemented
+        // smpi_graph_topo_destroy(topo->topo.graph);
+        break;
+    case MPI_CART:
+        smpi_cart_topo_destroy(topo->topo.cart);
+        break;
+    case MPI_DIST_GRAPH:
+        // Not implemented
+        // smpi_dist_graph_topo_destroy(topo->topo.dist_graph);
+        break;
+    default:
+        return;
+        break;
     }
-    if(topo->position) {
-      free(topo->position);
+}
+
+MPI_Topology smpi_topo_create(MPIR_Topo_type kind) {
+    MPI_Topology newTopo = xbt_malloc(sizeof(*newTopo));
+    newTopo->kind = kind;
+    // Allocate and initialize the right topo should be done by the caller
+    return newTopo;
+}
+
+/*******************************************************************************
+ * Cartesian topologies
+ ******************************************************************************/
+void smpi_cart_topo_destroy(MPIR_Cart_Topology cart) {
+    if (cart) {
+        if(cart->dims) {
+            free(cart->dims);
+        }
+        if(cart->periodic) {
+            free(cart->periodic);
+        }
+        if(cart->position) {
+            free(cart->position);
+        }
+        free(cart);
     }
-    free(topo);
-  }
 }
 
-MPI_Topology smpi_topo_create(int ndims) {
-  MPI_Topology topo = xbt_malloc(sizeof(*topo));
-  topo->nnodes = 0;
-  topo->ndims = ndims;
-  topo->dims = xbt_malloc(ndims * sizeof(*topo->dims));
-  topo->periodic = xbt_malloc(ndims * sizeof(*topo->periodic));
-  topo->position = xbt_malloc(ndims * sizeof(*topo->position));
-  return topo;
+MPI_Topology smpi_cart_topo_create(int ndims) {
+    MPI_Topology newTopo = smpi_topo_create(MPI_CART);
+    MPIR_Cart_Topology newCart = xbt_malloc(sizeof(*newCart));
+    newCart->nnodes = 0;
+    newCart->ndims = ndims;
+    newCart->dims = xbt_malloc(ndims * sizeof(*newCart->dims));
+    newCart->periodic = xbt_malloc(ndims * sizeof(*newCart->periodic));
+    newCart->position = xbt_malloc(ndims * sizeof(*newCart->position));
+    newTopo->topo.cart = newCart;
+    return newTopo;
 }
 
 /* reorder is ignored, don't know what would be the consequences of a dumb
  * reordering but neither do I see the point of reordering*/
 int smpi_mpi_cart_create(MPI_Comm comm_old, int ndims, int dims[],
-                     int periods[], int reorder, MPI_Comm *comm_cart) {
-  int retval = MPI_SUCCESS;
-  int i;
-  MPI_Topology topo;
-  MPI_Group newGroup, oldGroup;
-  int rank, nranks,  newSize;
-
-
-
-  rank = smpi_comm_rank(comm_old);
-
+                         int periods[], int reorder, MPI_Comm *comm_cart) {
+    int retval = MPI_SUCCESS;
+    int i;
+    MPI_Topology newCart;
+    MPI_Group newGroup, oldGroup;
+    int rank, nranks, newSize;
+  
+    rank = smpi_comm_rank(comm_old);
  
-  newSize = 1;
-  if(ndims != 0) {
-    topo = smpi_topo_create(ndims);
-    for (i = 0 ; i < ndims ; i++) {
-      newSize *= dims[i];
-    }
-    if(rank >= newSize) {
-      *comm_cart = MPI_COMM_NULL;
-      return retval;
-    }
-    oldGroup = smpi_comm_group(comm_old);
-    newGroup = smpi_group_new(newSize);
-    for (i = 0 ; i < newSize ; i++) {
-      smpi_group_set_mapping(newGroup, smpi_group_index(oldGroup, i), i);
-    }
+    newSize = 1;
+    if(ndims != 0) {
+        for (i = 0 ; i < ndims ; i++) {
+            newSize *= dims[i];
+        }
+        if(rank >= newSize) {
+            *comm_cart = MPI_COMM_NULL;
+            return retval;
+        }
+        newCart = smpi_cart_topo_create(ndims);
+        oldGroup = smpi_comm_group(comm_old);
+        newGroup = smpi_group_new(newSize);
+        for (i = 0 ; i < newSize ; i++) {
+            smpi_group_set_mapping(newGroup, smpi_group_index(oldGroup, i), i);
+        }
     
-    topo->nnodes = newSize;
+        newCart->topo.cart->nnodes = newSize;
 
-    memcpy(topo->dims, dims, ndims * sizeof(*topo->dims));
-    memcpy(topo->periodic, periods, ndims * sizeof(*topo->periodic));
-    
-    //  code duplication... See smpi_mpi_cart_coords
-    nranks = newSize;
-    for (i=0; i<ndims; i++)
-      {
-        topo->dims[i]     = dims[i];
-        topo->periodic[i] = periods[i];
-        nranks = nranks / dims[i];
-        /* FIXME: nranks could be zero (?) */
-        topo->position[i] = rank / nranks;
-        rank = rank % nranks;
-      }
+        /* memcpy(newCart->topo.cart->dims, dims, */
+        /*        ndims * sizeof(*newCart->topo.cart->dims)); */
+        /* memcpy(newCart->topo.cart->periodic, periods, */
+        /*        ndims * sizeof(*newCart->topo.cart->periodic)); */
     
-    *comm_cart = smpi_comm_new(newGroup, topo);      
-  }
-  else {
-    if (rank == 0) {
-      topo = smpi_topo_create(ndims);
-      *comm_cart = smpi_comm_new(smpi_comm_group(MPI_COMM_SELF), topo);
+        //  FIXME : code duplication... See smpi_mpi_cart_coords
+        nranks = newSize;
+        for (i=0; i<ndims; i++)
+        {
+            newCart->topo.cart->dims[i] = dims[i];
+            newCart->topo.cart->periodic[i] = periods[i];
+            nranks = nranks / dims[i];
+            /* FIXME: nranks could be zero (?) */
+            newCart->topo.cart->position[i] = rank / nranks;
+            rank = rank % nranks;
+        }
+
+        *comm_cart = smpi_comm_new(newGroup, newCart);
     }
     else {
-      *comm_cart = MPI_COMM_NULL;
+        if (rank == 0) {
+            newCart = smpi_cart_topo_create(ndims);
+            *comm_cart = smpi_comm_new(smpi_comm_group(MPI_COMM_SELF), newCart);
+        }
+        else {
+            *comm_cart = MPI_COMM_NULL;
+        }
     }
-  }
-  return retval;
+    return retval;
 }
 
 int smpi_mpi_cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm) {
-  MPI_Topology oldTopo = smpi_comm_topo(comm);
-  int oldNDims = oldTopo->ndims;
-  int i, j = 0, newNDims, *newDims = NULL, *newPeriodic = NULL;
+    MPI_Topology oldTopo = smpi_comm_topo(comm);
+    int oldNDims = oldTopo->topo.cart->ndims;
+    int i, j = 0, newNDims, *newDims = NULL, *newPeriodic = NULL;
   
-  if (remain_dims == NULL && oldNDims != 0) {
-    return MPI_ERR_ARG;
-  }
-  newNDims = 0;
-  for (i = 0 ; i < oldNDims ; i++) {
-    if (remain_dims[i]) newNDims++;
-  }
+    if (remain_dims == NULL && oldNDims != 0) {
+        return MPI_ERR_ARG;
+    }
+    newNDims = 0;
+    for (i = 0 ; i < oldNDims ; i++) {
+        if (remain_dims[i]) newNDims++;
+    }
   
-  if (newNDims > 0) {
-    newDims = malloc(newNDims * sizeof(*newDims));
-    newPeriodic = malloc(newNDims * sizeof(*newPeriodic));
-
-    // that should not segfault
-    for (i = 0 ; j < newNDims ; i++) {
-      if(remain_dims[i]) {
-        newDims[j] = oldTopo->dims[i];
-        newPeriodic[j] = oldTopo->periodic[i];
-        j++;
-      }
-    }
-  }
-  return smpi_mpi_cart_create(comm, newNDims, newDims, newPeriodic, 0, newcomm);
+    if (newNDims > 0) {
+        newDims = xbt_malloc(newNDims * sizeof(*newDims));
+        newPeriodic = xbt_malloc(newNDims * sizeof(*newPeriodic));
+
+        // that should not segfault
+        for (i = 0 ; j < newNDims ; i++) {
+            if(remain_dims[i]) {
+                newDims[j] = oldTopo->topo.cart->dims[i];
+                newPeriodic[j] = oldTopo->topo.cart->periodic[i];
+                j++;
+            }
+        }
+    }
+    return smpi_mpi_cart_create(comm, newNDims, newDims, newPeriodic, 0, newcomm);
 }
 
 
@@ -136,122 +199,126 @@ int smpi_mpi_cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm)
 
 int smpi_mpi_cart_coords(MPI_Comm comm, int rank, int maxdims,
                          int coords[]) {
-  int nnodes;
-  int i;
-  MPI_Topology topo = smpi_comm_topo(comm);
+    int nnodes;
+    int i;
+    MPI_Topology topo = smpi_comm_topo(comm);
   
-  nnodes = topo->nnodes;
-  for ( i=0; i < topo->ndims; i++ ) {
-    nnodes    = nnodes / topo->dims[i];
-    coords[i] = rank / nnodes;
-    rank      = rank % nnodes;
-  }
-  return MPI_SUCCESS;
+    nnodes = topo->topo.cart->nnodes;
+    for ( i=0; i < topo->topo.cart->ndims; i++ ) {
+        nnodes    = nnodes / topo->topo.cart->dims[i];
+        coords[i] = rank / nnodes;
+        rank      = rank % nnodes;
+    }
+    return MPI_SUCCESS;
 }
 
 int smpi_mpi_cart_get(MPI_Comm comm, int maxdims, int* dims, int* periods, int* coords) {
-  MPI_Topology topo = smpi_comm_topo(comm);
-  int i;
-  for(i = 0 ; i < maxdims ; i++) {
-    dims[i] = topo->dims[i];
-    periods[i] = topo->periodic[i];
-    coords[i] = topo->position[i];
-  }
-  return MPI_SUCCESS;
+    MPI_Topology topo = smpi_comm_topo(comm);
+    int i;
+    for(i = 0 ; i < maxdims ; i++) {
+        dims[i] = topo->topo.cart->dims[i];
+        periods[i] = topo->topo.cart->periodic[i];
+        coords[i] = topo->topo.cart->position[i];
+    }
+    return MPI_SUCCESS;
 }
 
 int smpi_mpi_cart_rank(MPI_Comm comm, int* coords, int* rank) {
-  MPI_Topology topo = smpi_comm_topo(comm);
-  int ndims = topo->ndims;
-  int multiplier, coord,i;
-  *rank = 0;
-  multiplier = 1;
-
-
-
-  for ( i=ndims-1; i >=0; i-- ) {
-    coord = coords[i];
-
-    /* Should we check first for args correction, then process,
-     * or check while we work (as it is currently done) ? */
-      if (coord >= topo->dims[i]) {
-        if ( topo->periodic[i] ) {
-        coord = coord % topo->dims[i];
-        }
-        else {
-          // Should I do that ?
-          *rank = -1; 
-          return MPI_ERR_ARG;
-        }
-      }
-      else if (coord <  0) {
-        if(topo->periodic[i]) {
-          coord = coord % topo->dims[i];
-          if (coord) coord = topo->dims[i] + coord;
+    MPI_Topology topo = smpi_comm_topo(comm);
+    int ndims = topo->topo.cart->ndims;
+    int multiplier, coord,i;
+    *rank = 0;
+    multiplier = 1;
+
+    for ( i=ndims-1; i >=0; i-- ) {
+        coord = coords[i];
+
+        /* The user can give us whatever coordinates he wants. If one of them is
+         * out of range, either this dimension is periodic, and then we
+         * consider the equivalent coordinate inside the bounds, or it is not
+         * and then it is an error
+         */
+        if (coord >= topo->topo.cart->dims[i]) {
+            if ( topo->topo.cart->periodic[i] ) {
+                coord = coord % topo->topo.cart->dims[i];
+            }
+            else {
+                // Should I do that ?
+                *rank = -1; 
+                return MPI_ERR_ARG;
+            }
         }
-        else {
-          *rank = -1;
-          return MPI_ERR_ARG;
+        else if (coord <  0) {
+            if(topo->topo.cart->periodic[i]) {
+                coord = coord % topo->topo.cart->dims[i];
+                if (coord) coord = topo->topo.cart->dims[i] + coord;
+            }
+            else {
+                *rank = -1;
+                return MPI_ERR_ARG;
+            }
         }
-      }
     
-      *rank += multiplier * coord;
-      multiplier *= topo->dims[i];
-  }
-  return MPI_SUCCESS;
+        *rank += multiplier * coord;
+        multiplier *= topo->topo.cart->dims[i];
+    }
+    return MPI_SUCCESS;
 }
 
 int smpi_mpi_cart_shift(MPI_Comm comm, int direction, int disp,
                         int *rank_source, int *rank_dest) {
-  MPI_Topology topo = smpi_comm_topo(comm);
-  int position[topo->ndims];
+    MPI_Topology topo = smpi_comm_topo(comm);
+    int position[topo->topo.cart->ndims];
 
 
-  if(topo->ndims == 0) {
-    return MPI_ERR_ARG;
-  }
-  if (topo->ndims < direction) {
-    return MPI_ERR_DIMS;
-  }
+    if(topo->topo.cart->ndims == 0) {
+        return MPI_ERR_ARG;
+    }
+    if (topo->topo.cart->ndims < direction) {
+        return MPI_ERR_DIMS;
+    }
 
-  smpi_mpi_cart_coords(comm, smpi_comm_rank(comm), topo->ndims, position);
-  position[direction] += disp;
+    smpi_mpi_cart_coords(comm, smpi_comm_rank(comm), topo->topo.cart->ndims,
+                         position);
+    position[direction] += disp;
 
-  if(position[direction] < 0 || position[direction] >= topo->dims[direction]) {
-    if(topo->periodic[direction]) {
-      position[direction] %= topo->dims[direction];
-      smpi_mpi_cart_rank(comm, position, rank_dest);
+    if(position[direction] < 0 ||
+       position[direction] >= topo->topo.cart->dims[direction]) {
+        if(topo->topo.cart->periodic[direction]) {
+            position[direction] %= topo->topo.cart->dims[direction];
+            smpi_mpi_cart_rank(comm, position, rank_dest);
+        }
+        else {
+            *rank_dest = MPI_PROC_NULL;
+        }
     }
     else {
-      *rank_dest = MPI_PROC_NULL;
+        smpi_mpi_cart_rank(comm, position, rank_dest);
     }
-  }
-  else {
-    smpi_mpi_cart_rank(comm, position, rank_dest);
-  }
 
-  position[direction] =  topo->position[direction] - disp;
-  if(position[direction] < 0 || position[direction] >= topo->dims[direction]) {
-    if(topo->periodic[direction]) {
-      position[direction] %= topo->dims[direction];
-      smpi_mpi_cart_rank(comm, position, rank_source);
+    position[direction] =  topo->topo.cart->position[direction] - disp;
+    if(position[direction] < 0 ||
+       position[direction] >= topo->topo.cart->dims[direction]) {
+        if(topo->topo.cart->periodic[direction]) {
+            position[direction] %= topo->topo.cart->dims[direction];
+            smpi_mpi_cart_rank(comm, position, rank_source);
+        }
+        else {
+            *rank_source = MPI_PROC_NULL;
+        }
     }
     else {
-      *rank_source = MPI_PROC_NULL;
+        smpi_mpi_cart_rank(comm, position, rank_source);
     }
-  }
-  else {
-    smpi_mpi_cart_rank(comm, position, rank_source);
-  }
 
-  return MPI_SUCCESS;
+    return MPI_SUCCESS;
 }
 
 int smpi_mpi_cartdim_get(MPI_Comm comm, int *ndims) {
-  MPI_Topology topo = smpi_comm_topo(comm);
+    MPI_Topology topo = smpi_comm_topo(comm);
 
-  *ndims = topo->ndims;
-  return MPI_SUCCESS;
+    *ndims = topo->topo.cart->ndims;
+    return MPI_SUCCESS;
 }
 
 
@@ -306,7 +373,7 @@ int smpi_mpi_dims_create(int nnodes, int ndims, int dims[])
         if (*p == 0) {
             ++freedims;
         } else if ((*p < 0) || ((nnodes % *p) != 0)) {
-          return  MPI_ERR_DIMS;
+            return  MPI_ERR_DIMS;
                  
         } else {
             freeprocs /= *p;
@@ -314,16 +381,16 @@ int smpi_mpi_dims_create(int nnodes, int ndims, int dims[])
     }
 
     if (freedims == 0) {
-       if (freeprocs == 1) {
-          return MPI_SUCCESS;
-       }
-       return MPI_ERR_DIMS;
+        if (freeprocs == 1) {
+            return MPI_SUCCESS;
+        }
+        return MPI_ERR_DIMS;
     }
 
     if (freeprocs == 1) {
         for (i = 0; i < ndims; ++i, ++dims) {
             if (*dims == 0) {
-               *dims = 1;
+                *dims = 1;
             }
         }
         return MPI_SUCCESS;
@@ -331,19 +398,19 @@ int smpi_mpi_dims_create(int nnodes, int ndims, int dims[])
 
     /* Factor the number of free processes */
     if (MPI_SUCCESS != (err = getfactors(freeprocs, &nfactors, &factors))) {
-      return  err;
+        return  err;
     }
 
     /* Assign free processes to free dimensions */
     if (MPI_SUCCESS != (err = assignnodes(freedims, nfactors, factors, &procs))) {
-      return err;
+        return err;
     }
 
     /* Return assignment results */
     p = procs;
     for (i = 0; i < ndims; ++i, ++dims) {
         if (*dims == 0) {
-           *dims = *p++;
+            *dims = *p++;
         }
     }
 
@@ -379,19 +446,19 @@ assignnodes(int ndim, int nfactor, int *pfacts, int **pdims)
     int *pmin;
           
     if (0 >= ndim) {
-       return MPI_ERR_DIMS;
+        return MPI_ERR_DIMS;
     }
 
     /* Allocate and initialize the bins */
     bins = (int *) malloc((unsigned) ndim * sizeof(int));
     if (NULL == bins) {
-       return MPI_ERR_NO_MEM;
+        return MPI_ERR_NO_MEM;
     }
     *pdims = bins;
 
     for (i = 0, p = bins; i < ndim; ++i, ++p) {
         *p = 1;
-     }
+    }
     
     /* Loop assigning factors from the highest to the lowest */
     for (j = nfactor - 1; j >= 0; --j) {
@@ -404,20 +471,20 @@ assignnodes(int ndim, int nfactor, int *pfacts, int **pdims)
             }
         }
         *pmin *= f;
-     }
+    }
     
-     /* Sort dimensions in decreasing order (O(n^2) for now) */
-     for (i = 0, pmin = bins; i < ndim - 1; ++i, ++pmin) {
-         for (j = i + 1, p = pmin + 1; j < ndim; ++j, ++p) {
-             if (*p > *pmin) {
+    /* Sort dimensions in decreasing order (O(n^2) for now) */
+    for (i = 0, pmin = bins; i < ndim - 1; ++i, ++pmin) {
+        for (j = i + 1, p = pmin + 1; j < ndim; ++j, ++p) {
+            if (*p > *pmin) {
                 n = *p;
                 *p = *pmin;
                 *pmin = n;
-             }
-         }
-     }
+            }
+        }
+    }
 
-     return MPI_SUCCESS;
+    return MPI_SUCCESS;
 }
 
 /*
index d18e0f1..6902a25 100755 (executable)
@@ -6,6 +6,8 @@
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
+SIMGRID_VERSION="@SIMGRID_VERSION_STRING@"
+
 CC=@CMAKE_C_COMPILER@
 
 INCLUDEARGS="@includeflag@"
@@ -40,10 +42,17 @@ while [ $# -gt 0 ]; do
             fi
             list_add CMDARGS "${SRCFILE}"
             ;;
+        '-version' | '--version')
+            printf '%b\n' "$SIMGRID_VERSION"
+            exit 0
+            ;;
+        '-compiler-version' | '--compiler-version')
+            ${CC} --version
+            ;;
         *)
             list_add CMDARGS "${ARG}"
-      ;;
-  esac
+            ;;
+    esac
 done
 
 list_set CMDLINE "${CC}"
index 1f2cb32..b23a274 100755 (executable)
@@ -6,20 +6,22 @@
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
-CC=@CMAKE_CXX_COMPILER@
+SIMGRID_VERSION="@SIMGRID_VERSION_STRING@"
+
+CXX=@CMAKE_CXX_COMPILER@
 
 INCLUDEARGS="@includeflag@"
 CMAKE_LINKARGS="-L@libdir@"
 
 @SMPITOOLS_SH@
 
-list_set CFLAGS
+list_set CXXFLAGS
 list_set LINKARGS
 if [ "@WIN32@" != "1" ]; then
-    list_add CFLAGS "-Dmain=smpi_simulated_main_"
+    list_add CXXFLAGS "-Dmain=smpi_simulated_main_"
     list_add LINKARGS "-lsimgrid"
 else
-    list_add CFLAGS "-include" "@includedir@/smpi/smpi_main.h"
+    list_add CXXFLAGS "-include" "@includedir@/smpi/smpi_main.h"
     list_add LINKARGS "@libdir@\libsimgrid.dll"
 fi
 
@@ -40,14 +42,21 @@ while [ $# -gt 0 ]; do
             fi
             list_add CMDARGS "${SRCFILE}"
             ;;
+        '-version' | '--version')
+            printf '%b\n' "$SIMGRID_VERSION"
+            exit 0
+            ;;
+        '-compiler-version' | '--compiler-version')
+            ${CXX} --version
+            ;;
         *)
             list_add CMDARGS "${ARG}"
       ;;
   esac
 done
 
-list_set CMDLINE "${CC}"
-list_add_not_empty CMDLINE "${CFLAGS}"
+list_set CMDLINE "${CXX}"
+list_add_not_empty CMDLINE "${CXXFLAGS}"
 list_add_not_empty CMDLINE ${INCLUDEARGS}
 list_add_not_empty CMDLINE ${CMAKE_LINKARGS}
 list_add_not_empty CMDLINE "${CMDARGS}"
diff --git a/src/smpi/smpif2c.in b/src/smpi/smpif2c.in
deleted file mode 100755 (executable)
index e79c31f..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#! /usr/bin/env perl
-
-# Copyright (c) 2010-2014. The SimGrid Team.
-# All rights reserved.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the license (GNU LGPL) which comes with this package.
-
-use warnings;
-use strict;
-use File::Temp;
-use File::Copy;
-
-my $include="@includeflag@@f2cflags@";
-
-foreach my $fortran (@ARGV) {
-   my $output = $fortran;
-   $output =~ s/.f$/.c/;
-
-   #print "F2C INPUT : ".$fortran."\n";
-   #print "F2C OUTPUT: ".$output."\n";
-
-   my$outputdir = $output;
-   $outputdir=~s/[^\/]*\.c$//g;
-   #print "F2C DIR   : ".$outputdir."\n";
-
-   my $tmp = new File::Temp;
-   $tmp->autoflush(1);
-   #print "f2c -d$outputdir $include -w -a $fortran\n";
-   `f2c -d$outputdir $include -w -a $fortran`;
-   die "F2C failed\n" if $?;
-   open F2C,"<$output" or die "Unable to open file $output";
-   my $started = 0;
-   print $tmp "#ifndef INTEGER_STAR_8\n";
-   print $tmp "#define INTEGER_STAR_8\n";
-   print $tmp "#endif\n";
-   print $tmp "#include <stdlib.h>\n";
-   print $tmp "#include <smpif.h>\n";
-   while(<F2C>) {
-      chomp;
-      if(/\/\* Common Block Declarations \*\//) {
-         $started = 1;
-      }
-      if($started) {
-         if(/^} (.*?);/) {
-            $_ = "}* __attribute__((weak)) $1 = NULL;\n";
-         } elsif(/^#define\s*(\S*)\s*\(?([^.]*)(\..*?)?\)?$/) {
-            $_ = "#define $1 $2\[smpi_current_rank\]";
-            if(defined $3) {
-               $_ .= $3;
-            }
-            $_ .= "\n";
-            $_ .= "\nvoid __attribute__((weak,constructor)) __preinit_$1(void) {\n  if(!$2) $2 = malloc(smpi_global_size() * sizeof(*$2));\n}\n";
-            $_ .= "\nvoid __attribute__((weak,destructor)) __postfini_$1(void) {\n  free($2);\n  $2 = NULL;\n}\n";
-         }
-      }
-      if(/\/\* Table of constant values \*\// || /MAIN__/) {
-         $started = 0;
-      }
-      $_ =~ s/(mpi_[\w]*_)_/$1/g;
-      if(/\/* Main program alias \*\/\s*int\s+.*\s*\(\s*\)\s*{(.*)}/) {
-         $_ = "int smpi_simulated_main_(int argc, char** argv) { smpi_process_init(&argc, &argv); $1 }\n";
-      }
-      print $tmp "$_\n";
-   }
-   close F2C;
-   copy($tmp->filename,$output) or die "Copy failed: $!\n";
-}
index 9e30ca3..1a33ba1 100644 (file)
@@ -6,6 +6,8 @@
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
+SIMGRID_VERSION="@SIMGRID_VERSION_STRING@"
+
 F90=@GFORTRAN_EXE@
 
 INCLUDEARGS="@includeflag@"
@@ -39,10 +41,17 @@ while [ $# -gt 0 ]; do
             TMPFILE=$(mymktemp "${ARG}" ".f90")
             list_add TMPFILES "${TMPFILE}"
       #replace "program main_name by subroutine user\_main (and the end clause as well)"
-            sed 's/[[:space:]]*program[[:space:]]*\([a-zA-Z0-9\-\_]*\)/subroutine user\_main /gI;s/[[:space:]]*use[[:space:]]*mpi/\include \"mpif\.h\" /gI' "${ARG}" > "${TMPFILE}"
+            sed 's/[[:space:]]*program[[:space:]]*\([a-zA-Z0-9\-\_]*\)/ subroutine user\_main /gI;s/[[:space:]]*use[[:space:]]*mpi/\include \"mpif\.h\" /gI' "${ARG}" > "${TMPFILE}"
             SRCFILE="${TMPFILE}"
             list_add CMDLINE "${SRCFILE}"
             ;;
+        '-version' | '--version')
+            printf '%b\n' "$SIMGRID_VERSION"
+            exit 0
+            ;;
+        '-compiler-version' | '--compiler-version')
+            ${F90} --version
+            ;;
         *)
             list_add CMDLINE "${ARG}"
             ;;
index 13955eb..1c6308d 100644 (file)
@@ -1,70 +1,78 @@
 #! /bin/sh
 
-# Copyright (c) 2010-2014. The SimGrid Team.
+# Copyright (c) 2012-2014. The SimGrid Team.
 # All rights reserved.
 
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
-prefix="@exec_prefix@"
-smpicc="$prefix/bin/smpicc"
-smpif2c="$prefix/bin/smpif2c"
+SIMGRID_VERSION="@SIMGRID_VERSION_STRING@"
+
+F77=@GFORTRAN_EXE@
+
+INCLUDEARGS="@includeflag@"
+CMAKE_LINKARGS="-L@libdir@"
 
 @SMPITOOLS_SH@
 
-list_set ARGS "-DMAIN__=user_main" "-Diargc_=smpi_process_argc" "-Dgetarg_=smpi_process_getarg"
-list_set LINKARGS "-L@F2C_LIBRARY_PATH@" "-lf2c" "-lm"
-list_set SRCFILES
+list_set FFLAGS "-ff2c" "-fno-second-underscore"
+list_set LINKARGS "-lsimgrid" "-lm" "-lgfortran"
+list_set TMPFILES
+main_name=main
+
+cleanup () {
+    eval $(list_get TMPFILES)
+    rm -f "$@"
+}
+trap 'cleanup' EXIT
 
+
+NEEDS_OUTPUT=1
+
+list_set CMDLINE "${F77}"
+list_add_not_empty CMDLINE "${FFLAGS}"
 while [ $# -gt 0 ]; do
     ARG="$1"
     shift
     case "${ARG}" in
-        *.f)
-            SRCFILE="$(readlink -f ${ARG} 2>/dev/null)"
-            if [ -z "$SRCFILE" ] ; then
-                SRCFILE="$ARG"
-            fi
-            list_add SRCFILES "${SRCFILE}"
+        -c)
+            CMAKE_LINKARGS=""
+            LINKARGS=""
+            list_add CMDLINE "-c"
+            ;;
+        *.f|*.F)
+            TMPFILE=$(mymktemp "${ARG}" ".f")
+            list_add TMPFILES "${TMPFILE}"
+      #replace "program main_name by subroutine user\_main (and the end clause as well)"
+            sed 's/[[:space:]]\{6\}[[:space:]]*\(end \)\{0,1\}program[[:space:]]*\([a-zA-Z0-9\-\_]*\)/      \1subroutine user_main /gI;s/[[:space:]]*use[[:space:]]*mpi/\include \"mpif\.h\" /gI' "${ARG}" > "${TMPFILE}"
+            ORIGFILE="${ARG}"
+            SRCFILE="${TMPFILE}"
+            list_add CMDLINE "${SRCFILE}"
             ;;
+        '-version' | '--version')
+            printf '%b\n' "$SIMGRID_VERSION"
+            exit 0
+            ;;
+        '-compiler-version' | '--compiler-version')
+            ${F77} --version
+            ;;
+        -o)
+            NEEDS_OUTPUT=0
+            list_add CMDLINE "-o"   
+            ;;        
         *)
-            if [ "${ARG}" = "-c" ]; then
-                LINKARGS=""
-            fi
-            list_add ARGS "${ARG}"
+            list_add CMDLINE "${ARG}"
             ;;
     esac
 done
-list_add_not_empty ARGS "${LINKARGS}"
-
-build () {
-    local SRCFILE
-    SRCFILE="$1"
-    TMPFILE=$(mymktemp "${SRCFILE}" ".f")
-    CFILE="${TMPFILE%.f}.c"
-
-    eval $(list_get ARGS)
 
-    cp "${SRCFILE}" "${TMPFILE}" \
-        && "$smpif2c" "${TMPFILE}" \
-        && "$smpicc" "$@" "${CFILE}" \
-        && rm -f "${CFILE}" \
-        && rm -f "${TMPFILE}" \
-        || exit $?
+if [ $NEEDS_OUTPUT -ne 0 ]; then
+   list_add CMDLINE "-o${ORIGFILE%.f}.o"     
+fi
 
-    # When the file is compiled with "-c" and no output file is specified with
-    # "-o", rename the output.  FIXME: do it properly.
-    if [ -f "${CFILE%.c}.o" ]; then
-        mv "${CFILE%.c}.o" "${SRCFILE%.f}.o"
-    fi
-}
+list_add_not_empty CMDLINE ${INCLUDEARGS}
+list_add_not_empty CMDLINE ${CMAKE_LINKARGS}
+list_add_not_empty CMDLINE "${LINKARGS}"
 
-if [ -n "${SRCFILES}" ]; then
-    eval $(list_get SRCFILES)
-    for SRCFILE in "$@"; do
-        build "$SRCFILE"
-    done
-else
-    eval $(list_get ARGS)
-    "$smpicc" "$@"
-fi
+eval $(list_get CMDLINE)
+"$@"
index a27daaa..e151fb3 100755 (executable)
@@ -8,6 +8,8 @@
 
 @CMAKE_SMPI_COMMAND@
 
+SIMGRID_VERSION="@SIMGRID_VERSION_STRING@"
+
 DEFAULT_LOOPBACK_BANDWIDTH="498000000"
 DEFAULT_LOOPBACK_LATENCY="0.000004"
 DEFAULT_NETWORK_BANDWIDTH="$((26 * 1024 * 1024))"
@@ -25,7 +27,7 @@ SIMOPTS="--cfg=maxmin/precision:1e-3 --cfg=surf/precision:1e-9 --cfg=network/mod
 
 #usage to print the way this script should be called
 usage () {
-cat <<EOF
+    cat <<EOF
 Usage: $0 [OPTIONS] -platform <xmldesc> -hostfile <hostfile> program [program-options]
 Options:
   -keep-temps                # don't remove the generated files after execution
@@ -61,122 +63,127 @@ WRAPPER=""
 HOSTFILE=""
 
 while true; do
-  case "$1" in
-   "-np" | "-n")
-      NUMPROCS="$2"
-      shift 2
-    ;;
-   "-bandwidth")
-      NETWORK_BANDWIDTH="$2"
-      shift 2
-    ;;
-   "-latency")
-      NETWORK_LATENCY="$2"
-      shift 2
-    ;;
-   "-platform")
-       PLATFORM="$2"
-      if [ ! -f "${PLATFORM}" ]; then
-               echo "[$0] ** error: the file '${PLATFORM}' does not exist. Aborting."
+    case "$1" in
+        "-np" | "-n")
+            NUMPROCS="$2"
+            shift 2
+            ;;
+        "-bandwidth")
+            NETWORK_BANDWIDTH="$2"
+            shift 2
+            ;;
+        "-latency")
+            NETWORK_LATENCY="$2"
+            shift 2
+            ;;
+        "-platform")
+           PLATFORM="$2"
+            if [ ! -f "${PLATFORM}" ]; then
+               echo "[`basename $0`] ** error: the file '${PLATFORM}' does not exist. Aborting."
                exit 1
-      fi
-       shift 2
-    ;;
-   "-hostfile")
-       HOSTFILE="$2"
-      if [ ! -f "${HOSTFILE}" ]; then
-               echo "[$0] ** error: the file '${HOSTFILE}' does not exist. Aborting."
+            fi
+           shift 2
+            ;;
+        "-hostfile")
+           HOSTFILE="$2"
+            if [ ! -f "${HOSTFILE}" ]; then
+               echo "[`basename $0`] ** error: the file '${HOSTFILE}' does not exist. Aborting."
                exit 1
-      fi
-       shift 2
-    ;;
-
-   "-machinefile")
-       HOSTFILE="$2"
-      if [ ! -f "${HOSTFILE}" ]; then
-               echo "[$0] ** error: the file '${HOSTFILE}' does not exist. Aborting."
+            fi
+           shift 2
+            ;;
+
+        "-machinefile")
+           HOSTFILE="$2"
+            if [ ! -f "${HOSTFILE}" ]; then
+               echo "[`basename $0`] ** error: the file '${HOSTFILE}' does not exist. Aborting."
                exit 1
-      fi
-       shift 2
-    ;;
-
-   "-ext")
-      EXTOPT="$2"
-      shift 2
-   ;;
-
-   "-map")
-       MAPOPT="true"
-      shift 1
-   ;;
-
-   "-trace")
-      TRACE_ACTIVE="true"
-      shift 1
-   ;;
-
-   "-trace-ti")
-      TRACE_ACTIVE="true"
-      TRACE_TI_ACTIVE="true"
-      shift 1
-   ;;
-
-   "-trace-comment")
-      TRACE_COMMENT="$2"
-      shift 2
-   ;;
-
-   "-trace-comment-file")
-      TRACE_COMMENT_FILE="$2"
-      shift 2
-   ;;
-
-   "-trace-file")
-      TRACE_FILENAME="$2"
-      shift 2
-   ;;
-
-   "-trace-grouped")
-      TRACE_GROUPED="true"
-      shift 1
-   ;;
-
-   "-trace-resource")
-      TRACE_RESOURCE="true"
-      shift 1
-   ;;
-
-   "-trace-viva")
-       TRACE_VIVA="true"
-         shift 1
-   ;;
-
-   "-keep-temps")
-       KEEP="true"
-      shift 1
-   ;;
-
-   "-wrapper")
-      WRAPPER="$2"
-      shift 2
-      ;;
-
-   "-help" | "--help" | "-h")
-      usage
-      exit
-   ;;
-
-   "--cfg="*|"--log="*)
-     for OPT in ${1#*=}
-     do
-       SIMOPTS="$SIMOPTS ${1%%=*}=$OPT"
-     done
-     shift 1
-   ;;
-    *)
-      break
-    ;;
-  esac
+            fi
+           shift 2
+            ;;
+
+        "-ext")
+            EXTOPT="$2"
+            shift 2
+            ;;
+
+        "-map")
+           MAPOPT="true"
+            shift 1
+            ;;
+
+        "-trace")
+            TRACE_ACTIVE="true"
+            shift 1
+            ;;
+
+        "-trace-ti")
+            TRACE_ACTIVE="true"
+            TRACE_TI_ACTIVE="true"
+            shift 1
+            ;;
+
+        "-trace-comment")
+            TRACE_COMMENT="$2"
+            shift 2
+            ;;
+
+        "-trace-comment-file")
+            TRACE_COMMENT_FILE="$2"
+            shift 2
+            ;;
+
+        "-trace-file")
+            TRACE_FILENAME="$2"
+            shift 2
+            ;;
+
+        "-trace-grouped")
+            TRACE_GROUPED="true"
+            shift 1
+            ;;
+
+        "-trace-resource")
+            TRACE_RESOURCE="true"
+            shift 1
+            ;;
+
+        "-trace-viva")
+           TRACE_VIVA="true"
+           shift 1
+            ;;
+
+        "-keep-temps")
+           KEEP="true"
+            shift 1
+            ;;
+
+        "-wrapper")
+            WRAPPER="$2"
+            shift 2
+            ;;
+
+        "-help" | "--help" | "-h")
+            usage
+            exit 0
+            ;;
+
+        "-version" | "--version" | "-v")
+            printf '%b\n' "$SIMGRID_VERSION"
+            exit 0
+            ;;
+
+        "--cfg="*|"--log="*)
+            for OPT in ${1#*=}
+            do
+                SIMOPTS="$SIMOPTS ${1%%=*}=$OPT"
+            done
+            shift 1
+            ;;
+        *)
+            break
+            ;;
+    esac
 done
 
 if [ -n "$WRAPPER" ]; then
@@ -188,19 +195,19 @@ shift
 
 # steel --cfg and --logs options
 while [ $# -gt 0 ]; do
-  case "$1" in
-   "--cfg="*|"--log="*)
-     for OPT in ${1#*=}
-     do
-       SIMOPTS="$SIMOPTS ${1%%=*}=$OPT"
-     done
-     shift 1
-   ;;
-    *)
-      PROC_ARGS="${PROC_ARGS:+$PROC_ARGS }$1"
-      shift      
-    ;;
-  esac
+    case "$1" in
+        "--cfg="*|"--log="*)
+            for OPT in ${1#*=}
+            do
+                SIMOPTS="$SIMOPTS ${1%%=*}=$OPT"
+            done
+            shift 1
+            ;;
+        *)
+            PROC_ARGS="${PROC_ARGS:+$PROC_ARGS }$1"
+            shift      
+            ;;
+    esac
 done
 
 
@@ -237,6 +244,10 @@ fi
 
 # Don't use wc -l to compute it to avoid issues with trailing \n at EOF
 hostfile_procs=`grep -c "[a-zA-Z0-9]" $HOSTFILE`
+if [ ${hostfile_procs} = 0 ] ; then
+   echo "[`basename $0`] ** error: the hostfile '${HOSTFILE}' is empty. Aborting." >&2
+   exit 1
+fi
 
 if [ -z "${NUMPROCS}" ] ; then
     # Use the amount of processes in the hostfile as default value for the -np parameter
@@ -250,44 +261,44 @@ fi
 
 ##-------------------------------- DEFAULT or SPECIFIED PLATFORM --------------------------------------
 if [ -z "${PLATFORM}" ]; then
-       PLATFORMTMP="$(mktemp tmpXXXXXX)"
+    PLATFORMTMP="$(mktemp tmpXXXXXX)"
 
-       cat > ${PLATFORMTMP} <<PLATFORMHEAD
+    cat > ${PLATFORMTMP} <<PLATFORMHEAD
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 <platform version="3">
 <AS id="AS0" routing="Full">
 PLATFORMHEAD
 
-i=${NUMPROCS}
-while [ $i -gt 0 ]; do
-  echo "  <host id=\"host$i\" power=\"${POWER}\"/>" >> ${PLATFORMTMP}
-  echo "  <link id=\"loop$i\" bandwidth=\"${LOOPBACK_BANDWIDTH}\" latency=\"${LOOPBACK_LATENCY}\"/>" >> ${PLATFORMTMP}
-  echo "  <link id=\"link$i\" bandwidth=\"${NETWORK_BANDWIDTH}\" latency=\"${NETWORK_LATENCY}\"/>" >> ${PLATFORMTMP}
-  i=$((i - 1))
-done
+    i=${NUMPROCS}
+    while [ $i -gt 0 ]; do
+        echo "  <host id=\"host$i\" power=\"${POWER}\"/>" >> ${PLATFORMTMP}
+        echo "  <link id=\"loop$i\" bandwidth=\"${LOOPBACK_BANDWIDTH}\" latency=\"${LOOPBACK_LATENCY}\"/>" >> ${PLATFORMTMP}
+        echo "  <link id=\"link$i\" bandwidth=\"${NETWORK_BANDWIDTH}\" latency=\"${NETWORK_LATENCY}\"/>" >> ${PLATFORMTMP}
+        i=$((i - 1))
+    done
 
-i=${NUMPROCS}
-while [ $i -gt 0 ]; do
-  j=${NUMPROCS}
-  while [ $j -gt 0 ]; do
-    if [ $i -eq $j ]; then
-      echo "  <route src=\"host$i\" dst=\"host$j\"><link_ctn id=\"loop$i\"/></route>" >> ${PLATFORMTMP}
-    else
-      echo "  <route src=\"host$i\" dst=\"host$j\"><link_ctn id=\"link$i\"/><link_ctn id=\"link$j\"/></route>" >> ${PLATFORMTMP}
-    fi
-    j=$((j - 1))
-  done
-  i=$((i - 1))
-done
+    i=${NUMPROCS}
+    while [ $i -gt 0 ]; do
+        j=${NUMPROCS}
+        while [ $j -gt 0 ]; do
+            if [ $i -eq $j ]; then
+                echo "  <route src=\"host$i\" dst=\"host$j\"><link_ctn id=\"loop$i\"/></route>" >> ${PLATFORMTMP}
+            else
+                echo "  <route src=\"host$i\" dst=\"host$j\"><link_ctn id=\"link$i\"/><link_ctn id=\"link$j\"/></route>" >> ${PLATFORMTMP}
+            fi
+            j=$((j - 1))
+        done
+        i=$((i - 1))
+    done
 
-cat >> ${PLATFORMTMP} <<PLATFORMFOOT
+    cat >> ${PLATFORMTMP} <<PLATFORMFOOT
 </AS>
 </platform>
 PLATFORMFOOT
 
 else
-       PLATFORMTMP=${PLATFORM}
+    PLATFORMTMP=${PLATFORM}
 fi
 ##-------------------------------- end DEFAULT or SPECIFIED PLATFORM --------------------------------------
 
@@ -304,19 +315,19 @@ APPLICATIONHEAD
 
 ##---- cache hostnames of hostfile---------------
 if [ -n "${HOSTFILE}" ] && [ -f ${HOSTFILE} ]; then
-  hostnames=$(cat ${HOSTFILE} | tr '\n\r' '  ')
-  NUMHOSTS=$(cat ${HOSTFILE} | wc -l)
+    hostnames=$(cat ${HOSTFILE} | tr '\n\r' '  ')
+    NUMHOSTS=$(cat ${HOSTFILE} | wc -l)
 fi
 
 if [ "${EXTOPT}" = "smpi_replay" ]; then
-  APP_TRACES=$PROC_ARGS
-  if [ -n "${APP_TRACES}" ] && [ -f "${APP_TRACES}" ]; then
-     hosttraces=$(cat ${APP_TRACES} | tr '\n\r' '  ' )
-     NUMTRACES=$(cat ${APP_TRACES} | wc -l)
-  else
-     printf "File not found: %s\n", "${APP_TRACES:-\${APP_TRACES\}}" >&2
-     exit 1
-  fi
+    APP_TRACES=$PROC_ARGS
+    if [ -n "${APP_TRACES}" ] && [ -f "${APP_TRACES}" ]; then
+        hosttraces=$(cat ${APP_TRACES} | tr '\n\r' '  ' )
+        NUMTRACES=$(cat ${APP_TRACES} | wc -l)
+    else
+        printf "File not found: %s\n", "${APP_TRACES:-\${APP_TRACES\}}" >&2
+        exit 1
+    fi
 fi
 
 ##----------------------------------------------------------
@@ -329,47 +340,47 @@ fi
 HAVE_SEQ="`which seq 2>/dev/null`"
 
 if [ -n "${HAVE_SEQ}" ]; then
-       SEQ=`${HAVE_SEQ} 0 $((${NUMPROCS}-1))`
+    SEQ=`${HAVE_SEQ} 0 $((${NUMPROCS}-1))`
 else
-      cnt=0
-       while (( $cnt < ${NUMPROCS} )) ; do
-           SEQ="$SEQ $cnt"
-           cnt=$((cnt + 1));
-       done
+    cnt=0
+    while (( $cnt < ${NUMPROCS} )) ; do
+       SEQ="$SEQ $cnt"
+       cnt=$((cnt + 1));
+    done
 fi
 
 ##---- generate <process> tags------------------------------
 
 for i in ${SEQ}
 do
-  if [ -n "${HOSTFILE}" ]; then
+    if [ -n "${HOSTFILE}" ]; then
        j=$(( $i % ${NUMHOSTS} + 1 ))
-  fi
-  ##---- optional display of ranks to process mapping
-  if [ -n "${MAPOPT}" ]; then
+    fi
+    ##---- optional display of ranks to process mapping
+    if [ -n "${MAPOPT}" ]; then
        echo "[rank $i] -> $(echo $hostnames|cut -d' ' -f$j)"
-  fi
+    fi
 
-  if [ -z "$(echo $hostnames|cut -d' ' -f$j)" ]; then
+    if [ -z "$(echo $hostnames|cut -d' ' -f$j)" ]; then
        host="host"$($j)
-  else
-       host="$(echo $hostnames|cut -d' ' -f$j)"
-  fi
-  echo "  <process host=\"${host}\" function=\"$i\"> <!-- function name used only for logging -->" >> ${APPLICATIONTMP}
-  echo "    <argument value=\"1\"/> <!-- instance -->" >> ${APPLICATIONTMP}
-  echo "    <argument value=\"$i\"/> <!-- rank -->" >> ${APPLICATIONTMP}
-  if [ "${EXTOPT}" = "smpi_replay" ]; then
-    if  [ ${NUMTRACES} -gt 1 ]; then
-      echo "    <argument value=\"$(echo $hosttraces|cut -d' ' -f$j)\"/>" >> ${APPLICATIONTMP}
     else
-      echo "    <argument value=\"$(echo $hosttraces|cut -d' ' -f1)\"/>" >> ${APPLICATIONTMP}
+       host="$(echo $hostnames|cut -d' ' -f$j)"
     fi
-  else 
-    for ARG in $PROC_ARGS; do
-       echo "    <argument value=\"${ARG}\"/>" >> ${APPLICATIONTMP}
-    done
-  fi
-  echo "  </process>" >> ${APPLICATIONTMP}
+    echo "  <process host=\"${host}\" function=\"$i\"> <!-- function name used only for logging -->" >> ${APPLICATIONTMP}
+    echo "    <argument value=\"1\"/> <!-- instance -->" >> ${APPLICATIONTMP}
+    echo "    <argument value=\"$i\"/> <!-- rank -->" >> ${APPLICATIONTMP}
+    if [ "${EXTOPT}" = "smpi_replay" ]; then
+        if  [ ${NUMTRACES} -gt 1 ]; then
+            echo "    <argument value=\"$(echo $hosttraces|cut -d' ' -f$j)\"/>" >> ${APPLICATIONTMP}
+        else
+            echo "    <argument value=\"$(echo $hosttraces|cut -d' ' -f1)\"/>" >> ${APPLICATIONTMP}
+        fi
+    else 
+        for ARG in $PROC_ARGS; do
+            echo "    <argument value=\"${ARG}\"/>" >> ${APPLICATIONTMP}
+        done
+    fi
+    echo "  </process>" >> ${APPLICATIONTMP}
 done
 
 cat >> ${APPLICATIONTMP} <<APPLICATIONFOOT
@@ -379,65 +390,65 @@ APPLICATIONFOOT
 
 ##---------------------- SMPI TRACING OPTIONS ---------------------------------
 if [ -n "${TRACE_ACTIVE}" ]; then
-  #define trace filename
-  if [ -n "${TRACE_TI_ACTIVE}" ]; then
-    if [ -z "${TRACE_FILENAME}" ]; then
-      TRACE_FILENAME="smpi_simgrid.txt"
-    fi
-    TRACEOPTIONS="--cfg=tracing:yes --cfg=tracing/filename:${TRACE_FILENAME} --cfg=tracing/smpi:yes --cfg=tracing/smpi/format:TI --cfg=tracing/smpi/computing:yes"
-  else
-    if [ -z "${TRACE_FILENAME}" ]; then
-      TRACE_FILENAME="smpi_simgrid.trace"
+    #define trace filename
+    if [ -n "${TRACE_TI_ACTIVE}" ]; then
+        if [ -z "${TRACE_FILENAME}" ]; then
+            TRACE_FILENAME="smpi_simgrid.txt"
+        fi
+        TRACEOPTIONS="--cfg=tracing:yes --cfg=tracing/filename:${TRACE_FILENAME} --cfg=tracing/smpi:yes --cfg=tracing/smpi/format:TI --cfg=tracing/smpi/computing:yes"
+    else
+        if [ -z "${TRACE_FILENAME}" ]; then
+            TRACE_FILENAME="smpi_simgrid.trace"
+        fi
+        TRACEOPTIONS="--cfg=tracing:yes --cfg=tracing/filename:${TRACE_FILENAME} --cfg=tracing/smpi:yes"
     fi
-    TRACEOPTIONS="--cfg=tracing:yes --cfg=tracing/filename:${TRACE_FILENAME} --cfg=tracing/smpi:yes"
-  fi
 
-  if [ -n "${TRACE_COMMENT}" ]; then
-    TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/comment:${TRACE_COMMENT}"
-  fi
+    if [ -n "${TRACE_COMMENT}" ]; then
+        TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/comment:${TRACE_COMMENT}"
+    fi
 
-  if [ -n "${TRACE_COMMENT_FILE}" ]; then
-    TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/comment_file:${TRACE_COMMENT_FILE}"
-  fi
+    if [ -n "${TRACE_COMMENT_FILE}" ]; then
+        TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/comment_file:${TRACE_COMMENT_FILE}"
+    fi
 
-  if [ -n "${TRACE_GROUPED}" ]; then
-    TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/smpi/group:yes"
-  fi
+    if [ -n "${TRACE_GROUPED}" ]; then
+        TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/smpi/group:yes"
+    fi
 
-  if [ -n "${TRACE_RESOURCE}" ]; then
-    TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes"
-  fi
+    if [ -n "${TRACE_RESOURCE}" ]; then
+        TRACEOPTIONS="${TRACEOPTIONS} --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes"
+    fi
 
-  if [ -n "${TRACE_VIVA}" ]; then
-    TRACEOPTIONS="${TRACEOPTIONS} --cfg=viva/categorized:smpi_cat.plist --cfg=viva/uncategorized:smpi_uncat.plist"
-  fi
+    if [ -n "${TRACE_VIVA}" ]; then
+        TRACEOPTIONS="${TRACEOPTIONS} --cfg=viva/categorized:smpi_cat.plist --cfg=viva/uncategorized:smpi_uncat.plist"
+    fi
 fi
 ##---------------------- end SMPI TRACING OPTIONS ---------------------------------
 
 export SMPI_GLOBAL_SIZE=${NUMPROCS}
 if [ -n "${KEEP}" ] ; then
-  echo ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
-  if [ ${HOSTFILETMP} = 1 ] ; then
-    echo "Generated hostfile ${HOSTFILE} keeped."
-  fi
-  if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
-    echo "Generated unrolled hostfile ${UNROLLEDHOSTFILE} keeped." 
-  fi
+    echo ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
+    if [ ${HOSTFILETMP} = 1 ] ; then
+        echo "Generated hostfile ${HOSTFILE} keeped."
+    fi
+    if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
+        echo "Generated unrolled hostfile ${UNROLLEDHOSTFILE} keeped." 
+    fi
 fi
 ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
 status=$?
 
 if [ -z "${KEEP}" ] ; then
-   if [ -z "${PLATFORM}" ]; then
+    if [ -z "${PLATFORM}" ]; then
        rm ${PLATFORMTMP}
-   fi
-   if [ ${HOSTFILETMP} = 1 ] ; then
+    fi
+    if [ ${HOSTFILETMP} = 1 ] ; then
         rm ${HOSTFILE}
-   fi
-   if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
+    fi
+    if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
         rm ${UNROLLEDHOSTFILE}
-   fi
-   rm ${APPLICATIONTMP}
+    fi
+    rm ${APPLICATIONTMP}
 fi
 
 exit $status
index 0993fea..1973257 100644 (file)
@@ -30,7 +30,7 @@ public:
   void (CpuCas01Model::*updateActionsState)(double now, double delta);
 
   CpuPtr createCpu(const char *name, xbt_dynar_t power_peak, int pstate,
-                                 double power_scale,
+                   double power_scale,
                           tmgr_trace_t power_trace, int core,
                           e_surf_resource_state_t state_initial,
                           tmgr_trace_t state_trace,
@@ -69,8 +69,8 @@ public:
 private:
   tmgr_trace_event_t p_stateEvent;
   tmgr_trace_event_t p_powerEvent;
-  xbt_dynar_t p_powerPeakList;                         /*< List of supported CPU capacities */
-  int m_pstate;                                                                /*< Current pstate (index in the power_peak_list)*/
+  xbt_dynar_t p_powerPeakList;       /*< List of supported CPU capacities */
+  int m_pstate;                      /*< Current pstate (index in the power_peak_list)*/
 };
 
 /**********
@@ -80,7 +80,8 @@ class CpuCas01Action: public CpuAction {
   friend CpuActionPtr CpuCas01::execute(double size);
   friend CpuActionPtr CpuCas01::sleep(double duration);
 public:
-  CpuCas01Action(ModelPtr model, double cost, bool failed, double power, lmm_constraint_t constraint);
+  CpuCas01Action(ModelPtr model, double cost, bool failed, double power,
+                 lmm_constraint_t constraint);
 
   ~CpuCas01Action() {};
 };
index f877b1f..c4bc20c 100644 (file)
@@ -78,7 +78,15 @@ public:
   /**
    * @brief Create a Cpu
    *
-   * @param host [TODO]
+   * @param name The name of the Cpu
+   * @param power_peak The power peak of this Cpu
+   * @param pstate [TODO]
+   * @param power_scale The power scale of this Cpu
+   * @param power_trace [TODO]
+   * @param core The number of core of this Cpu
+   * @param state_initial [TODO]
+   * @param state_trace [TODO]
+   * @param cpu_properties Dictionary of properties associated to this Cpu
    */
   virtual CpuPtr createCpu(const char *name, xbt_dynar_t power_peak,
                       int pstate, double power_scale,
index 0b0a772..7dd95b1 100644 (file)
@@ -156,7 +156,7 @@ static void recursiveGraphExtraction (AS_t rc, container_t container, xbt_dict_t
     }
     xbt_dict_free (&nodes);
     xbt_dict_free (&edges);
-    xbt_graph_free_graph(graph,xbt_free, xbt_free, NULL);
+    xbt_graph_free_graph(graph, xbt_free_f, xbt_free_f, NULL);
   }
 }
 
@@ -326,7 +326,7 @@ static void instr_routing_parse_end_platform ()
 {
   xbt_dynar_free(&currentContainer);
   currentContainer = NULL;
-  xbt_dict_t filter = xbt_dict_new_homogeneous(xbt_free);
+  xbt_dict_t filter = xbt_dict_new_homogeneous(xbt_free_f);
   XBT_DEBUG ("Starting graph extraction.");
   recursiveGraphExtraction (surf_platf_get_root(routing_platf), PJ_container_get_root(), filter);
   XBT_DEBUG ("Graph extraction finished.");
index b3cd6f9..1f17a2c 100644 (file)
@@ -37,12 +37,8 @@ double NetworkConstantModel::shareResources(double /*now*/)
   for(ActionList::iterator it(actionSet->begin()), itend(actionSet->end())
         ; it != itend ; ++it) {
        action = static_cast<NetworkConstantActionPtr>(&*it);
-    if (action->m_latency > 0) {
-      if (min < 0)
-        min = action->m_latency;
-      else if (action->m_latency < min)
-        min = action->m_latency;
-    }
+        if (action->m_latency > 0 && (min < 0 || action->m_latency < min))
+            min = action->m_latency;
   }
 
   return min;
diff --git a/src/surf/network_ib.cpp b/src/surf/network_ib.cpp
new file mode 100644 (file)
index 0000000..29aeb32
--- /dev/null
@@ -0,0 +1,5 @@
+/* Copyright (c) 2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
diff --git a/src/surf/network_ib.hpp b/src/surf/network_ib.hpp
new file mode 100644 (file)
index 0000000..b7d1715
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright (c) 2014. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#ifndef SURF_NETWORK_IB_HPP_
+#define SURF_NETWORK_IB_HPP_
+
+class NetworkIBModel : public NetworkModel {
+private:
+public:
+  NetworkIBModel();
+  NetworkIBModel(const char *name);
+  ~NetworkModel();
+  virtual ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
+                                double size, double rate);
+  virtual NetworkLinkPtr createNetworkLink(const char *name,
+                                          double bw_initial,
+                                          tmgr_trace_t bw_trace,
+                                          double lat_initial,
+                                          tmgr_trace_t lat_trace,
+                                          e_surf_resource_state_t state_initial,
+                                          tmgr_trace_t state_trace,
+                                          e_surf_link_sharing_policy_t policy,
+                                          xbt_dict_t properties);
+};
+
+class NetworkIBLink : public NetworkLink {
+private:
+public:
+  NetworkIBLink(NetworkModelPtr model, const char *name, xbt_dict_t props);
+  NetworkIBLink(NetworkModelPtr model, const char *name, xbt_dict_t props,
+                lmm_constraint_t constraint,
+                tmgr_history_t history,
+                tmgr_trace_t state_trace);
+  ~NetworkIBLink();
+  virtual void updateLatency(double value, double date=surf_get_clock());
+  virtual void updateBandwidth(double value, double date=surf_get_clock());
+
+
+};
+#endif
index 4694f9d..63f1356 100644 (file)
@@ -77,6 +77,34 @@ double NetworkModel::bandwidthConstraint(double rate, double /*bound*/, double /
   return rate;
 }
 
+double NetworkModel::shareResourcesFull(double now)
+{
+  NetworkActionPtr action = NULL;
+  ActionListPtr runningActions = surf_network_model->getRunningActionSet();
+  double minRes;
+
+  minRes = shareResourcesMaxMin(runningActions, surf_network_model->p_maxminSystem, surf_network_model->f_networkSolve);
+
+  for(ActionList::iterator it(runningActions->begin()), itend(runningActions->end())
+       ; it != itend ; ++it) {
+      action = static_cast<NetworkActionPtr>(&*it);
+#ifdef HAVE_LATENCY_BOUND_TRACKING
+    if (lmm_is_variable_limited_by_latency(action->getVariable())) {
+      action->m_latencyLimited = 1;
+    } else {
+      action->m_latencyLimited = 0;
+    }
+#endif
+    if (action->m_latency > 0) {
+      minRes = (minRes < 0) ? action->m_latency : min(minRes, action->m_latency);
+    }
+  }
+
+  XBT_DEBUG("Min of share resources %f", minRes);
+
+  return minRes;
+}
+
 /************
  * Resource *
  ************/
index 46cd1a4..b532f72 100644 (file)
@@ -10,7 +10,6 @@
 #ifndef SURF_NETWORK_INTERFACE_HPP_
 #define SURF_NETWORK_INTERFACE_HPP_
 
-
 /***********
  * Classes *
  ***********/
@@ -28,31 +27,31 @@ typedef NetworkAction *NetworkActionPtr;
  *************/
 
 /** @ingroup SURF_callbacks
- * @brief Callbacks handler which emit the callbacks after NetworkLink creation
+ * @brief Callbacks handler which emits the callbacks after NetworkLink creation
  * @details Callback functions have the following signature: `void(NetworkLinkPtr)`
  */
 XBT_PUBLIC_DATA( surf_callback(void, NetworkLinkPtr)) networkLinkCreatedCallbacks;
 
 /** @ingroup SURF_callbacks
- * @brief Callbacks handler which emit the callbacks after NetworkLink destruction
+ * @brief Callbacks handler which emits the callbacks after NetworkLink destruction
  * @details Callback functions have the following signature: `void(NetworkLinkPtr)`
  */
 XBT_PUBLIC_DATA( surf_callback(void, NetworkLinkPtr)) networkLinkDestructedCallbacks;
 
 /** @ingroup SURF_callbacks
- * @brief Callbacks handler which emit the callbacks after NetworkLink State changed
+ * @brief Callbacks handler which emits the callbacks after NetworkLink State changed
  * @details Callback functions have the following signature: `void(NetworkLinkActionPtr action, e_surf_resource_state_t old, e_surf_resource_state_t current)`
  */
 XBT_PUBLIC_DATA( surf_callback(void, NetworkLinkPtr, e_surf_resource_state_t, e_surf_resource_state_t)) networkLinkStateChangedCallbacks;
 
 /** @ingroup SURF_callbacks
- * @brief Callbacks handler which emit the callbacks after NetworkAction State changed
+ * @brief Callbacks handler which emits the callbacks after NetworkAction State changed
  * @details Callback functions have the following signature: `void(NetworkActionPtr action, e_surf_action_state_t old, e_surf_action_state_t current)`
  */
 XBT_PUBLIC_DATA( surf_callback(void, NetworkActionPtr, e_surf_action_state_t, e_surf_action_state_t)) networkActionStateChangedCallbacks;
 
 /** @ingroup SURF_callbacks
- * @brief Callbacks handler which emit the callbacks after communication created
+ * @brief Callbacks handler which emits the callbacks after communication created
  * @details Callback functions have the following signature: `void(NetworkActionPtr action, RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate)`
  */
 XBT_PUBLIC_DATA( surf_callback(void, NetworkActionPtr, RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate)) networkCommunicateCallbacks;
@@ -69,7 +68,7 @@ XBT_PUBLIC(void) net_add_traces();
  *********/
 /** @ingroup SURF_network_interface
  * @brief SURF network model interface class
- * @details A model is an object which handle the interactions between its Resources and its Actions
+ * @details A model is an object which handles the interactions between its Resources and its Actions
  */
 class NetworkModel : public Model {
 public:
@@ -77,6 +76,7 @@ public:
    * @brief NetworkModel constructor
    */
   NetworkModel() : Model("network") {
+    f_networkSolve = lmm_solve;
   };
 
   /**
@@ -106,11 +106,11 @@ public:
    *
    * @param name The name of the NetworkLink
    * @param bw_initial The initial bandwidth of the NetworkLink in bytes per second
-   * @param bw_trace The trace associated to the NetworkLink bandwidth [TODO]
+   * @param bw_trace The trace associated to the NetworkLink bandwidth
    * @param lat_initial The initial latency of the NetworkLink in seconds
-   * @param lat_trace The trace associated to the NetworkLink latency [TODO]
+   * @param lat_trace The trace associated to the NetworkLink latency
    * @param state_initial The initial NetworkLink (state)[e_surf_resource_state_t]
-   * @param state_trace The trace associated to the NetworkLink (state)[e_surf_resource_state_t] [TODO]
+   * @param state_trace The trace associated to the NetworkLink (state)[e_surf_resource_state_t]
    * @param policy The sharing policy of the NetworkLink
    * @param properties Dictionary of properties associated to this Resource
    * @return The created NetworkLink
@@ -128,13 +128,15 @@ public:
   virtual void gapAppend(double /*size*/, const NetworkLinkPtr /*link*/, NetworkActionPtr /*action*/) {};
 
   /**
-   * @brief Create a communication between two [TODO]
-   * @details [TODO]
+   * @brief Create a communication between two workstations.
+   * @details It makes calls to the routing part, and execute the communication
+   * between the two end points.
    *
-   * @param src The source [TODO]
-   * @param dst The destination [TODO]
+   * @param src The source of the communication
+   * @param dst The destination of the communication
    * @param size The size of the communication in bytes
-   * @param rate The
+   * @param rate Allows to limit the transfer rate. Negative value means
+   * unlimited.
    * @return The action representing the communication
    */
   virtual ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst,
@@ -148,33 +150,40 @@ public:
   void (*f_networkSolve)(lmm_system_t);
 
   /**
-   * @brief [brief description]
-   * @details [long description]
+   * @brief Get the right multiplicative factor for the latency.
+   * @details Depending on the model, the effective latency when sending
+   * a message might be different from the theoretical latency of the link,
+   * in function of the message size. In order to account for this, this
+   * function gets this factor.
    *
-   * @param size [description]
-   * @return [description]
+   * @param size The size of the message.
+   * @return The latency factor.
    */
   virtual double latencyFactor(double size);
 
   /**
-   * @brief [brief description]
-   * @details [long description]
+   * @brief Get the right multiplicative factor for the bandwidth.
+   * @details Depending on the model, the effective bandwidth when sending
+   * a message might be different from the theoretical bandwidth of the link,
+   * in function of the message size. In order to account for this, this
+   * function gets this factor.
    *
-   * @param size [description]
-   * @return [description]
+   * @param size The size of the message.
+   * @return The bandwidth factor.
    */
   virtual double bandwidthFactor(double size);
 
   /**
-   * @brief [brief description]
-   * @details [long description]
-   *
-   * @param rate [description]
-   * @param bound [description]
-   * @param size [description]
-   * @return [description]
+   * @brief Get definitive bandwidth.
+   * @details It gives the minimum bandwidth between the one that would
+   * occur if no limitation was enforced, and the one arbitrary limited.
+   * @param rate The desired maximum bandwidth.
+   * @param bound The bandwidth with only the network taken into account.
+   * @param size The size of the message.
+   * @return The new bandwidth.
    */
   virtual double bandwidthConstraint(double rate, double bound, double size);
+  double shareResourcesFull(double now);
   bool m_haveGap;
 };
 
@@ -183,14 +192,14 @@ public:
  ************/
  /** @ingroup SURF_network_interface
   * @brief SURF network link interface class
-  * @details A NetworkLink represent the link between two [Workstations](\ref Workstation)
+  * @details A NetworkLink represents the link between two [Workstations](\ref Workstation)
   */
 class NetworkLink : public Resource {
 public:
   /**
    * @brief NetworkLink constructor
    *
-   * @param model The CpuModel associated to this NetworkLink
+   * @param model The NetworkModel associated to this NetworkLink
    * @param name The name of the NetworkLink
    * @param props Dictionary of properties associated to this NetworkLink
    */
@@ -199,7 +208,7 @@ public:
   /**
    * @brief NetworkLink constructor
    *
-   * @param model The CpuModel associated to this NetworkLink
+   * @param model The NetworkModel associated to this NetworkLink
    * @param name The name of the NetworkLink
    * @param props Dictionary of properties associated to this NetworkLink
    * @param constraint The lmm constraint associated to this Cpu if it is part of a LMM component
@@ -207,9 +216,9 @@ public:
    * @param state_trace [TODO]
    */
   NetworkLink(NetworkModelPtr model, const char *name, xbt_dict_t props,
-                     lmm_constraint_t constraint,
-                 tmgr_history_t history,
-                 tmgr_trace_t state_trace);
+              lmm_constraint_t constraint,
+              tmgr_history_t history,
+              tmgr_trace_t state_trace);
 
   /**
    * @brief NetworkLink destructor
@@ -242,7 +251,6 @@ public:
 
   /**
    * @brief Check if the NetworkLink is shared
-   * @details [long description]
    *
    * @return true if the current NetwokrLink is shared, false otherwise
    */
@@ -272,7 +280,8 @@ public:
  **********/
 /** @ingroup SURF_network_interface
  * @brief SURF network action interface class
- * @details A NetworkAction represent a communication bettween two [Workstations](\ref Workstation)
+ * @details A NetworkAction represents a communication between two
+ * [Workstations](\ref Workstation)
  */
 class NetworkAction : public Action {
 public:
@@ -292,7 +301,8 @@ public:
    * @param model The NetworkModel associated to this NetworkAction
    * @param cost The cost of this  NetworkAction in [TODO]
    * @param failed [description]
-   * @param var The lmm variable associated to this Action if it is part of a LMM component
+   * @param var The lmm variable associated to this Action if it is part of a
+   * LMM component
    */
   NetworkAction(ModelPtr model, double cost, bool failed, lmm_variable_t var)
   : Action(model, cost, failed, var) {};
index 68174da..e5967be 100644 (file)
@@ -80,7 +80,6 @@ void surf_network_model_init_SMPI(void)
   surf_network_model = new NetworkSmpiModel();
   net_define_callbacks();
   xbt_dynar_push(model_list, &surf_network_model);
-  //network_solve = lmm_solve;
 
   xbt_cfg_setdefault_double(_sg_cfg_set, "network/sender_gap", 10e-6);
   xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
index feaf4ff..dab3cd5 100644 (file)
@@ -447,7 +447,7 @@ void platf_graph_clear_links(void) {
   }
   //Delete edges from the graph
   xbt_dynar_foreach(dynar_edges_cpy, i, graph_edge) {
-    xbt_graph_free_edge(platform_graph, graph_edge, xbt_free);
+    xbt_graph_free_edge(platform_graph, graph_edge, xbt_free_f);
   }
   //remove the dynar copy
   xbt_dynar_free(&dynar_edges_cpy);
index 385fafb..3c8122d 100644 (file)
@@ -27,7 +27,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
+#define YY_FLEX_SUBMINOR_VERSION 39
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -160,7 +160,15 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -199,6 +207,13 @@ extern FILE *surf_parse_in, *surf_parse_out;
                     if ( surf_parse_text[yyl] == '\n' )\
                         --surf_parse_lineno;\
             }while(0)
+    #define YY_LINENO_REWIND_TO(dst) \
+            do {\
+                const char *p;\
+                for ( p = yy_cp-1; p >= (dst); --p)\
+                    if ( *p == '\n' )\
+                        --surf_parse_lineno;\
+            }while(0)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -4666,366 +4681,366 @@ const char surfxml_flexml_version[] = "1.9.6";
 int surfxml_pcdata_ix;
 extern char *surfxml_bufferstack;
 #define surfxml_pcdata (surfxml_bufferstack + surfxml_pcdata_ix)
-AT_surfxml_cluster_lat AX_surfxml_cluster_lat;
-#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat)
-short int surfxml_cluster_lat_isset;
-AT_surfxml_cabinet_radical AX_surfxml_cabinet_radical;
-#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical)
-short int surfxml_cabinet_radical_isset;
-AT_surfxml_bypassRoute_dst AX_surfxml_bypassRoute_dst;
-#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst)
-short int surfxml_bypassRoute_dst_isset;
-AT_surfxml_cluster_loopback___lat AX_surfxml_cluster_loopback___lat;
-#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat)
-short int surfxml_cluster_loopback___lat_isset;
-AT_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind;
-#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind
-short int surfxml_trace___connect_kind_isset;
-AT_surfxml_process_function AX_surfxml_process_function;
-#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function)
-short int surfxml_process_function_isset;
-AT_surfxml_storage_attach AX_surfxml_storage_attach;
-#define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach)
-short int surfxml_storage_attach_isset;
-AT_surfxml_host_state AX_surfxml_host_state;
-#define A_surfxml_host_state AX_surfxml_host_state
-short int surfxml_host_state_isset;
-AT_surfxml_argument_value AX_surfxml_argument_value;
-#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value)
-short int surfxml_argument_value_isset;
-AT_surfxml_cluster_router___id AX_surfxml_cluster_router___id;
-#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id)
-short int surfxml_cluster_router___id_isset;
-AT_surfxml_cluster_power AX_surfxml_cluster_power;
-#define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power)
-short int surfxml_cluster_power_isset;
-AT_surfxml_trace_file AX_surfxml_trace_file;
-#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file)
-short int surfxml_trace_file_isset;
-AT_surfxml_cluster_loopback___bw AX_surfxml_cluster_loopback___bw;
-#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw)
-short int surfxml_cluster_loopback___bw_isset;
-AT_surfxml_process_host AX_surfxml_process_host;
-#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host)
-short int surfxml_process_host_isset;
-AT_surfxml_cabinet_bw AX_surfxml_cabinet_bw;
-#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw)
-short int surfxml_cabinet_bw_isset;
-AT_surfxml_peer_coordinates AX_surfxml_peer_coordinates;
-#define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates)
-short int surfxml_peer_coordinates_isset;
+AT_surfxml_random_max AX_surfxml_random_max;
+#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max)
+short int surfxml_random_max_isset;
+AT_surfxml_cluster_id AX_surfxml_cluster_id;
+#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id)
+short int surfxml_cluster_id_isset;
+AT_surfxml_cabinet_lat AX_surfxml_cabinet_lat;
+#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat)
+short int surfxml_cabinet_lat_isset;
+AT_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical;
+#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical
+short int surfxml_ASroute_symmetrical_isset;
+AT_surfxml_link_latency___file AX_surfxml_link_latency___file;
+#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file)
+short int surfxml_link_latency___file_isset;
+AT_surfxml_cluster_bb___lat AX_surfxml_cluster_bb___lat;
+#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat)
+short int surfxml_cluster_bb___lat_isset;
 AT_surfxml_host_coordinates AX_surfxml_host_coordinates;
 #define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates)
 short int surfxml_host_coordinates_isset;
-AT_surfxml_cluster_bb___bw AX_surfxml_cluster_bb___bw;
-#define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw)
-short int surfxml_cluster_bb___bw_isset;
-AT_surfxml_peer_power AX_surfxml_peer_power;
-#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power)
-short int surfxml_peer_power_isset;
-AT_surfxml_host_availability AX_surfxml_host_availability;
-#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
-short int surfxml_host_availability_isset;
-AT_surfxml_host_state___file AX_surfxml_host_state___file;
-#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file)
-short int surfxml_host_state___file_isset;
-AT_surfxml_cluster_availability___file AX_surfxml_cluster_availability___file;
-#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file)
-short int surfxml_cluster_availability___file_isset;
-AT_surfxml_router_coordinates AX_surfxml_router_coordinates;
-#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates)
-short int surfxml_router_coordinates_isset;
-AT_surfxml_random_min AX_surfxml_random_min;
-#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min)
-short int surfxml_random_min_isset;
-AT_surfxml_ASroute_gw___dst AX_surfxml_ASroute_gw___dst;
-#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst)
-short int surfxml_ASroute_gw___dst_isset;
-AT_surfxml_random_id AX_surfxml_random_id;
-#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id)
-short int surfxml_random_id_isset;
 AT_surfxml_route_dst AX_surfxml_route_dst;
 #define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst)
 short int surfxml_route_dst_isset;
-AT_surfxml_mount_storageId AX_surfxml_mount_storageId;
-#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId)
-short int surfxml_mount_storageId_isset;
-AT_surfxml_backbone_bandwidth AX_surfxml_backbone_bandwidth;
-#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth)
-short int surfxml_backbone_bandwidth_isset;
-AT_surfxml_cluster_topology AX_surfxml_cluster_topology;
-#define A_surfxml_cluster_topology AX_surfxml_cluster_topology
-short int surfxml_cluster_topology_isset;
-AT_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy;
-#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy
-short int surfxml_cluster_bb___sharing___policy_isset;
-AT_surfxml_peer_bw___out AX_surfxml_peer_bw___out;
-#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out)
-short int surfxml_peer_bw___out_isset;
-AT_surfxml_cluster_id AX_surfxml_cluster_id;
-#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id)
-short int surfxml_cluster_id_isset;
-AT_surfxml_host_power AX_surfxml_host_power;
-#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power)
-short int surfxml_host_power_isset;
-AT_surfxml_link_bandwidth AX_surfxml_link_bandwidth;
-#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth)
-short int surfxml_link_bandwidth_isset;
+AT_surfxml_bypassASroute_gw___dst AX_surfxml_bypassASroute_gw___dst;
+#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst)
+short int surfxml_bypassASroute_gw___dst_isset;
+AT_surfxml_cluster_prefix AX_surfxml_cluster_prefix;
+#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix)
+short int surfxml_cluster_prefix_isset;
+AT_surfxml_host_core AX_surfxml_host_core;
+#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core)
+short int surfxml_host_core_isset;
+AT_surfxml_link_bandwidth___file AX_surfxml_link_bandwidth___file;
+#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file)
+short int surfxml_link_bandwidth___file_isset;
+AT_surfxml_peer_bw___in AX_surfxml_peer_bw___in;
+#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in)
+short int surfxml_peer_bw___in_isset;
+AT_surfxml_process_start___time AX_surfxml_process_start___time;
+#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time)
+short int surfxml_process_start___time_isset;
+AT_surfxml_platform_version AX_surfxml_platform_version;
+#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
+short int surfxml_platform_version_isset;
+AT_surfxml_backbone_id AX_surfxml_backbone_id;
+#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id)
+short int surfxml_backbone_id_isset;
+AT_surfxml_storage_content AX_surfxml_storage_content;
+#define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
+short int surfxml_storage_content_isset;
+AT_surfxml_host___link_id AX_surfxml_host___link_id;
+#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id)
+short int surfxml_host___link_id_isset;
+AT_surfxml_host_id AX_surfxml_host_id;
+#define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id)
+short int surfxml_host_id_isset;
+AT_surfxml_gpu_name AX_surfxml_gpu_name;
+#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
+short int surfxml_gpu_name_isset;
+AT_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy;
+#define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy
+short int surfxml_link_sharing___policy_isset;
+AT_surfxml_cluster_bw AX_surfxml_cluster_bw;
+#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw)
+short int surfxml_cluster_bw_isset;
 AT_surfxml_cabinet_prefix AX_surfxml_cabinet_prefix;
 #define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix)
 short int surfxml_cabinet_prefix_isset;
-AT_surfxml_mstorage_name AX_surfxml_mstorage_name;
-#define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name)
-short int surfxml_mstorage_name_isset;
+AT_surfxml_router_coordinates AX_surfxml_router_coordinates;
+#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates)
+short int surfxml_router_coordinates_isset;
+AT_surfxml_storage_attach AX_surfxml_storage_attach;
+#define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach)
+short int surfxml_storage_attach_isset;
+AT_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy;
+#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy
+short int surfxml_cluster_bb___sharing___policy_isset;
+AT_surfxml_cabinet_radical AX_surfxml_cabinet_radical;
+#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical)
+short int surfxml_cabinet_radical_isset;
+AT_surfxml_cabinet_suffix AX_surfxml_cabinet_suffix;
+#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix)
+short int surfxml_cabinet_suffix_isset;
+AT_surfxml_cluster_state___file AX_surfxml_cluster_state___file;
+#define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file)
+short int surfxml_cluster_state___file_isset;
+AT_surfxml_cluster_lat AX_surfxml_cluster_lat;
+#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat)
+short int surfxml_cluster_lat_isset;
+AT_surfxml_cluster_radical AX_surfxml_cluster_radical;
+#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical)
+short int surfxml_cluster_radical_isset;
+AT_surfxml_peer_power AX_surfxml_peer_power;
+#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power)
+short int surfxml_peer_power_isset;
+AT_surfxml_host_state___file AX_surfxml_host_state___file;
+#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file)
+short int surfxml_host_state___file_isset;
+AT_surfxml_peer_state___file AX_surfxml_peer_state___file;
+#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file)
+short int surfxml_peer_state___file_isset;
+AT_surfxml_cluster_loopback___lat AX_surfxml_cluster_loopback___lat;
+#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat)
+short int surfxml_cluster_loopback___lat_isset;
+AT_surfxml_random_mean AX_surfxml_random_mean;
+#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean)
+short int surfxml_random_mean_isset;
+AT_surfxml_random_std___deviation AX_surfxml_random_std___deviation;
+#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation)
+short int surfxml_random_std___deviation_isset;
+AT_surfxml_route_src AX_surfxml_route_src;
+#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src)
+short int surfxml_route_src_isset;
+AT_surfxml_bypassASroute_src AX_surfxml_bypassASroute_src;
+#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src)
+short int surfxml_bypassASroute_src_isset;
+AT_surfxml_cluster_topo___parameters AX_surfxml_cluster_topo___parameters;
+#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters)
+short int surfxml_cluster_topo___parameters_isset;
+AT_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy;
+#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy
+short int surfxml_cluster_sharing___policy_isset;
+AT_surfxml_trace_periodicity AX_surfxml_trace_periodicity;
+#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity)
+short int surfxml_trace_periodicity_isset;
+AT_surfxml_peer_lat AX_surfxml_peer_lat;
+#define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat)
+short int surfxml_peer_lat_isset;
+AT_surfxml_cluster_suffix AX_surfxml_cluster_suffix;
+#define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix)
+short int surfxml_cluster_suffix_isset;
+AT_surfxml_cluster_router___id AX_surfxml_cluster_router___id;
+#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id)
+short int surfxml_cluster_router___id_isset;
 AT_surfxml_backbone_latency AX_surfxml_backbone_latency;
 #define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency)
 short int surfxml_backbone_latency_isset;
-AT_surfxml_storage___type_content___type AX_surfxml_storage___type_content___type;
-#define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
-short int surfxml_storage___type_content___type_isset;
-AT_surfxml_backbone_id AX_surfxml_backbone_id;
-#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id)
-short int surfxml_backbone_id_isset;
-AT_surfxml_AS_routing AX_surfxml_AS_routing;
-#define A_surfxml_AS_routing AX_surfxml_AS_routing
-short int surfxml_AS_routing_isset;
+AT_surfxml_route_symmetrical AX_surfxml_route_symmetrical;
+#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical
+short int surfxml_route_symmetrical_isset;
+AT_surfxml_cabinet_bw AX_surfxml_cabinet_bw;
+#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw)
+short int surfxml_cabinet_bw_isset;
 AT_surfxml_prop_value AX_surfxml_prop_value;
 #define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value)
 short int surfxml_prop_value_isset;
-AT_surfxml_link_latency___file AX_surfxml_link_latency___file;
-#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file)
-short int surfxml_link_latency___file_isset;
-AT_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction;
-#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction
-short int surfxml_link___ctn_direction_isset;
-AT_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy;
-#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy
-short int surfxml_cluster_sharing___policy_isset;
-AT_surfxml_cabinet_power AX_surfxml_cabinet_power;
-#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power)
-short int surfxml_cabinet_power_isset;
+AT_surfxml_storage___type_id AX_surfxml_storage___type_id;
+#define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
+short int surfxml_storage___type_id_isset;
+AT_surfxml_storage___type_model AX_surfxml_storage___type_model;
+#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model)
+short int surfxml_storage___type_model_isset;
+AT_surfxml_random_radical AX_surfxml_random_radical;
+#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical)
+short int surfxml_random_radical_isset;
+AT_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction;
+#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction
+short int surfxml_link___ctn_direction_isset;
+AT_surfxml_model___prop_id AX_surfxml_model___prop_id;
+#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id)
+short int surfxml_model___prop_id_isset;
+AT_surfxml_include_file AX_surfxml_include_file;
+#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file)
+short int surfxml_include_file_isset;
+AT_surfxml_ASroute_src AX_surfxml_ASroute_src;
+#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src)
+short int surfxml_ASroute_src_isset;
+AT_surfxml_storage___type_size AX_surfxml_storage___type_size;
+#define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size)
+short int surfxml_storage___type_size_isset;
 AT_surfxml_host___link_up AX_surfxml_host___link_up;
 #define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up)
 short int surfxml_host___link_up_isset;
-AT_surfxml_route_symmetrical AX_surfxml_route_symmetrical;
-#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical
-short int surfxml_route_symmetrical_isset;
-AT_surfxml_link_latency AX_surfxml_link_latency;
-#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency)
-short int surfxml_link_latency_isset;
-AT_surfxml_storage_typeId AX_surfxml_storage_typeId;
-#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId)
-short int surfxml_storage_typeId_isset;
-AT_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical;
-#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical
-short int surfxml_ASroute_symmetrical_isset;
 AT_surfxml_cabinet_id AX_surfxml_cabinet_id;
 #define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id)
 short int surfxml_cabinet_id_isset;
-AT_surfxml_mount_name AX_surfxml_mount_name;
-#define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name)
-short int surfxml_mount_name_isset;
-AT_surfxml_process_start___time AX_surfxml_process_start___time;
-#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time)
-short int surfxml_process_start___time_isset;
-AT_surfxml_link_state___file AX_surfxml_link_state___file;
-#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file)
-short int surfxml_link_state___file_isset;
-AT_surfxml_peer_availability___file AX_surfxml_peer_availability___file;
-#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file)
-short int surfxml_peer_availability___file_isset;
+AT_surfxml_peer_bw___out AX_surfxml_peer_bw___out;
+#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out)
+short int surfxml_peer_bw___out_isset;
+AT_surfxml_host_availability___file AX_surfxml_host_availability___file;
+#define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file)
+short int surfxml_host_availability___file_isset;
+AT_surfxml_trace_file AX_surfxml_trace_file;
+#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file)
+short int surfxml_trace_file_isset;
+AT_surfxml_cluster_bb___bw AX_surfxml_cluster_bb___bw;
+#define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw)
+short int surfxml_cluster_bb___bw_isset;
+AT_surfxml_storage_id AX_surfxml_storage_id;
+#define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
+short int surfxml_storage_id_isset;
+AT_surfxml_ASroute_gw___src AX_surfxml_ASroute_gw___src;
+#define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src)
+short int surfxml_ASroute_gw___src_isset;
 AT_surfxml_storage___type_content AX_surfxml_storage___type_content;
 #define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
 short int surfxml_storage___type_content_isset;
-AT_surfxml_trace___connect_trace AX_surfxml_trace___connect_trace;
-#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace)
-short int surfxml_trace___connect_trace_isset;
-AT_surfxml_cluster_core AX_surfxml_cluster_core;
-#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core)
-short int surfxml_cluster_core_isset;
-AT_surfxml_cluster_suffix AX_surfxml_cluster_suffix;
-#define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix)
-short int surfxml_cluster_suffix_isset;
-AT_surfxml_bypassASroute_src AX_surfxml_bypassASroute_src;
-#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src)
-short int surfxml_bypassASroute_src_isset;
-AT_surfxml_host_id AX_surfxml_host_id;
-#define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id)
-short int surfxml_host_id_isset;
-AT_surfxml_storage_content AX_surfxml_storage_content;
-#define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
-short int surfxml_storage_content_isset;
-AT_surfxml_cluster_radical AX_surfxml_cluster_radical;
-#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical)
-short int surfxml_cluster_radical_isset;
-AT_surfxml_process_on___failure AX_surfxml_process_on___failure;
-#define A_surfxml_process_on___failure AX_surfxml_process_on___failure
-short int surfxml_process_on___failure_isset;
 AT_surfxml_link_id AX_surfxml_link_id;
 #define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id)
 short int surfxml_link_id_isset;
-AT_surfxml_bypassASroute_dst AX_surfxml_bypassASroute_dst;
-#define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst)
-short int surfxml_bypassASroute_dst_isset;
-AT_surfxml_model___prop_id AX_surfxml_model___prop_id;
-#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id)
-short int surfxml_model___prop_id_isset;
-AT_surfxml_random_generator AX_surfxml_random_generator;
-#define A_surfxml_random_generator AX_surfxml_random_generator
-short int surfxml_random_generator_isset;
-AT_surfxml_storage___type_size AX_surfxml_storage___type_size;
-#define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size)
-short int surfxml_storage___type_size_isset;
-AT_surfxml_cluster_state___file AX_surfxml_cluster_state___file;
-#define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file)
-short int surfxml_cluster_state___file_isset;
-AT_surfxml_link___ctn_id AX_surfxml_link___ctn_id;
-#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id)
-short int surfxml_link___ctn_id_isset;
-AT_surfxml_peer_bw___in AX_surfxml_peer_bw___in;
-#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in)
-short int surfxml_peer_bw___in_isset;
-AT_surfxml_bypassRoute_src AX_surfxml_bypassRoute_src;
-#define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src)
-short int surfxml_bypassRoute_src_isset;
-AT_surfxml_ASroute_gw___src AX_surfxml_ASroute_gw___src;
-#define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src)
-short int surfxml_ASroute_gw___src_isset;
-AT_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy;
-#define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy
-short int surfxml_link_sharing___policy_isset;
-AT_surfxml_host_pstate AX_surfxml_host_pstate;
-#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate)
-short int surfxml_host_pstate_isset;
-AT_surfxml_route_src AX_surfxml_route_src;
-#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src)
-short int surfxml_route_src_isset;
-AT_surfxml_cabinet_suffix AX_surfxml_cabinet_suffix;
-#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix)
-short int surfxml_cabinet_suffix_isset;
-AT_surfxml_cluster_limiter___link AX_surfxml_cluster_limiter___link;
-#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link)
-short int surfxml_cluster_limiter___link_isset;
-AT_surfxml_cluster_bb___lat AX_surfxml_cluster_bb___lat;
-#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat)
-short int surfxml_cluster_bb___lat_isset;
-AT_surfxml_peer_state___file AX_surfxml_peer_state___file;
-#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file)
-short int surfxml_peer_state___file_isset;
-AT_surfxml_host___link_id AX_surfxml_host___link_id;
-#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id)
-short int surfxml_host___link_id_isset;
-AT_surfxml_random_radical AX_surfxml_random_radical;
-#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical)
-short int surfxml_random_radical_isset;
-AT_surfxml_include_file AX_surfxml_include_file;
-#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file)
-short int surfxml_include_file_isset;
-AT_surfxml_link_bandwidth___file AX_surfxml_link_bandwidth___file;
-#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file)
-short int surfxml_link_bandwidth___file_isset;
+AT_surfxml_peer_availability___file AX_surfxml_peer_availability___file;
+#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file)
+short int surfxml_peer_availability___file_isset;
+AT_surfxml_cluster_core AX_surfxml_cluster_core;
+#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core)
+short int surfxml_cluster_core_isset;
+AT_surfxml_link_state___file AX_surfxml_link_state___file;
+#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file)
+short int surfxml_link_state___file_isset;
+AT_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind;
+#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind
+short int surfxml_trace___connect_kind_isset;
+AT_surfxml_peer_coordinates AX_surfxml_peer_coordinates;
+#define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates)
+short int surfxml_peer_coordinates_isset;
 AT_surfxml_prop_id AX_surfxml_prop_id;
 #define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id)
 short int surfxml_prop_id_isset;
-AT_surfxml_config_id AX_surfxml_config_id;
-#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id)
-short int surfxml_config_id_isset;
-AT_surfxml_host_core AX_surfxml_host_core;
-#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core)
-short int surfxml_host_core_isset;
-AT_surfxml_storage___type_id AX_surfxml_storage___type_id;
-#define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
-short int surfxml_storage___type_id_isset;
-AT_surfxml_random_max AX_surfxml_random_max;
-#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max)
-short int surfxml_random_max_isset;
-AT_surfxml_storage_id AX_surfxml_storage_id;
-#define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
-short int surfxml_storage_id_isset;
-AT_surfxml_random_seed AX_surfxml_random_seed;
-#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed)
-short int surfxml_random_seed_isset;
-AT_surfxml_trace_periodicity AX_surfxml_trace_periodicity;
-#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity)
-short int surfxml_trace_periodicity_isset;
+AT_surfxml_mstorage_name AX_surfxml_mstorage_name;
+#define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name)
+short int surfxml_mstorage_name_isset;
+AT_surfxml_trace___connect_element AX_surfxml_trace___connect_element;
+#define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element)
+short int surfxml_trace___connect_element_isset;
+AT_surfxml_host_power AX_surfxml_host_power;
+#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power)
+short int surfxml_host_power_isset;
+AT_surfxml_argument_value AX_surfxml_argument_value;
+#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value)
+short int surfxml_argument_value_isset;
+AT_surfxml_ASroute_gw___dst AX_surfxml_ASroute_gw___dst;
+#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst)
+short int surfxml_ASroute_gw___dst_isset;
 AT_surfxml_model___prop_value AX_surfxml_model___prop_value;
 #define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value)
 short int surfxml_model___prop_value_isset;
-AT_surfxml_random_std___deviation AX_surfxml_random_std___deviation;
-#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation)
-short int surfxml_random_std___deviation_isset;
+AT_surfxml_router_id AX_surfxml_router_id;
+#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id)
+short int surfxml_router_id_isset;
+AT_surfxml_cluster_availability___file AX_surfxml_cluster_availability___file;
+#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file)
+short int surfxml_cluster_availability___file_isset;
+AT_surfxml_cluster_loopback___bw AX_surfxml_cluster_loopback___bw;
+#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw)
+short int surfxml_cluster_loopback___bw_isset;
+AT_surfxml_host_pstate AX_surfxml_host_pstate;
+#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate)
+short int surfxml_host_pstate_isset;
+AT_surfxml_cabinet_power AX_surfxml_cabinet_power;
+#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power)
+short int surfxml_cabinet_power_isset;
+AT_surfxml_process_kill___time AX_surfxml_process_kill___time;
+#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time)
+short int surfxml_process_kill___time_isset;
+AT_surfxml_process_function AX_surfxml_process_function;
+#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function)
+short int surfxml_process_function_isset;
+AT_surfxml_storage___type_content___type AX_surfxml_storage___type_content___type;
+#define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
+short int surfxml_storage___type_content___type_isset;
+AT_surfxml_mount_storageId AX_surfxml_mount_storageId;
+#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId)
+short int surfxml_mount_storageId_isset;
+AT_surfxml_random_seed AX_surfxml_random_seed;
+#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed)
+short int surfxml_random_seed_isset;
+AT_surfxml_backbone_bandwidth AX_surfxml_backbone_bandwidth;
+#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth)
+short int surfxml_backbone_bandwidth_isset;
+AT_surfxml_bypassRoute_src AX_surfxml_bypassRoute_src;
+#define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src)
+short int surfxml_bypassRoute_src_isset;
+AT_surfxml_random_id AX_surfxml_random_id;
+#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id)
+short int surfxml_random_id_isset;
+AT_surfxml_host_availability AX_surfxml_host_availability;
+#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
+short int surfxml_host_availability_isset;
+AT_surfxml_mount_name AX_surfxml_mount_name;
+#define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name)
+short int surfxml_mount_name_isset;
+AT_surfxml_bypassASroute_dst AX_surfxml_bypassASroute_dst;
+#define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst)
+short int surfxml_bypassASroute_dst_isset;
+AT_surfxml_random_min AX_surfxml_random_min;
+#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min)
+short int surfxml_random_min_isset;
+AT_surfxml_mstorage_typeId AX_surfxml_mstorage_typeId;
+#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId)
+short int surfxml_mstorage_typeId_isset;
+AT_surfxml_host___link_down AX_surfxml_host___link_down;
+#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down)
+short int surfxml_host___link_down_isset;
+AT_surfxml_cluster_limiter___link AX_surfxml_cluster_limiter___link;
+#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link)
+short int surfxml_cluster_limiter___link_isset;
 AT_surfxml_peer_id AX_surfxml_peer_id;
 #define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id)
 short int surfxml_peer_id_isset;
-AT_surfxml_random_mean AX_surfxml_random_mean;
-#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean)
-short int surfxml_random_mean_isset;
-AT_surfxml_cluster_topo___parameters AX_surfxml_cluster_topo___parameters;
-#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters)
-short int surfxml_cluster_topo___parameters_isset;
-AT_surfxml_ASroute_dst AX_surfxml_ASroute_dst;
-#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst)
-short int surfxml_ASroute_dst_isset;
-AT_surfxml_cluster_prefix AX_surfxml_cluster_prefix;
-#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix)
-short int surfxml_cluster_prefix_isset;
-AT_surfxml_platform_version AX_surfxml_platform_version;
-#define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version)
-short int surfxml_platform_version_isset;
-AT_surfxml_link_state AX_surfxml_link_state;
-#define A_surfxml_link_state AX_surfxml_link_state
-short int surfxml_link_state_isset;
-AT_surfxml_storage___type_model AX_surfxml_storage___type_model;
-#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model)
-short int surfxml_storage___type_model_isset;
-AT_surfxml_gpu_name AX_surfxml_gpu_name;
-#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
-short int surfxml_gpu_name_isset;
+AT_surfxml_cluster_topology AX_surfxml_cluster_topology;
+#define A_surfxml_cluster_topology AX_surfxml_cluster_topology
+short int surfxml_cluster_topology_isset;
+AT_surfxml_host_state AX_surfxml_host_state;
+#define A_surfxml_host_state AX_surfxml_host_state
+short int surfxml_host_state_isset;
+AT_surfxml_trace___connect_trace AX_surfxml_trace___connect_trace;
+#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace)
+short int surfxml_trace___connect_trace_isset;
+AT_surfxml_AS_id AX_surfxml_AS_id;
+#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id)
+short int surfxml_AS_id_isset;
 AT_surfxml_bypassASroute_gw___src AX_surfxml_bypassASroute_gw___src;
 #define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src)
 short int surfxml_bypassASroute_gw___src_isset;
-AT_surfxml_router_id AX_surfxml_router_id;
-#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id)
-short int surfxml_router_id_isset;
+AT_surfxml_process_on___failure AX_surfxml_process_on___failure;
+#define A_surfxml_process_on___failure AX_surfxml_process_on___failure
+short int surfxml_process_on___failure_isset;
+AT_surfxml_link_state AX_surfxml_link_state;
+#define A_surfxml_link_state AX_surfxml_link_state
+short int surfxml_link_state_isset;
+AT_surfxml_random_generator AX_surfxml_random_generator;
+#define A_surfxml_random_generator AX_surfxml_random_generator
+short int surfxml_random_generator_isset;
+AT_surfxml_link___ctn_id AX_surfxml_link___ctn_id;
+#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id)
+short int surfxml_link___ctn_id_isset;
+AT_surfxml_storage_typeId AX_surfxml_storage_typeId;
+#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId)
+short int surfxml_storage_typeId_isset;
+AT_surfxml_cluster_power AX_surfxml_cluster_power;
+#define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power)
+short int surfxml_cluster_power_isset;
+AT_surfxml_ASroute_dst AX_surfxml_ASroute_dst;
+#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst)
+short int surfxml_ASroute_dst_isset;
+AT_surfxml_AS_routing AX_surfxml_AS_routing;
+#define A_surfxml_AS_routing AX_surfxml_AS_routing
+short int surfxml_AS_routing_isset;
 AT_surfxml_storage_content___type AX_surfxml_storage_content___type;
 #define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type)
 short int surfxml_storage_content___type_isset;
+AT_surfxml_link_latency AX_surfxml_link_latency;
+#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency)
+short int surfxml_link_latency_isset;
+AT_surfxml_config_id AX_surfxml_config_id;
+#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id)
+short int surfxml_config_id_isset;
+AT_surfxml_process_host AX_surfxml_process_host;
+#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host)
+short int surfxml_process_host_isset;
+AT_surfxml_bypassRoute_dst AX_surfxml_bypassRoute_dst;
+#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst)
+short int surfxml_bypassRoute_dst_isset;
 AT_surfxml_trace_id AX_surfxml_trace_id;
 #define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id)
 short int surfxml_trace_id_isset;
-AT_surfxml_AS_id AX_surfxml_AS_id;
-#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id)
-short int surfxml_AS_id_isset;
-AT_surfxml_mstorage_typeId AX_surfxml_mstorage_typeId;
-#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId)
-short int surfxml_mstorage_typeId_isset;
-AT_surfxml_trace___connect_element AX_surfxml_trace___connect_element;
-#define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element)
-short int surfxml_trace___connect_element_isset;
-AT_surfxml_cluster_bw AX_surfxml_cluster_bw;
-#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw)
-short int surfxml_cluster_bw_isset;
-AT_surfxml_ASroute_src AX_surfxml_ASroute_src;
-#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src)
-short int surfxml_ASroute_src_isset;
-AT_surfxml_host___link_down AX_surfxml_host___link_down;
-#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down)
-short int surfxml_host___link_down_isset;
-AT_surfxml_process_kill___time AX_surfxml_process_kill___time;
-#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time)
-short int surfxml_process_kill___time_isset;
-AT_surfxml_bypassASroute_gw___dst AX_surfxml_bypassASroute_gw___dst;
-#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst)
-short int surfxml_bypassASroute_gw___dst_isset;
-AT_surfxml_host_availability___file AX_surfxml_host_availability___file;
-#define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file)
-short int surfxml_host_availability___file_isset;
-AT_surfxml_peer_lat AX_surfxml_peer_lat;
-#define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat)
-short int surfxml_peer_lat_isset;
-AT_surfxml_cabinet_lat AX_surfxml_cabinet_lat;
-#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat)
-short int surfxml_cabinet_lat_isset;
+AT_surfxml_link_bandwidth AX_surfxml_link_bandwidth;
+#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth)
+short int surfxml_link_bandwidth_isset;
 
 /* XML state. */
 #ifdef FLEX_DEBUG
@@ -5397,7 +5412,12 @@ static int input (void );
     
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -5498,6 +5518,34 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! surf_parse_in )
+                       surf_parse_in = stdin;
+
+               if ( ! surf_parse_out )
+                       surf_parse_out = stdout;
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       surf_parse_ensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               surf_parse__create_buffer(surf_parse_in,YY_BUF_SIZE );
+               }
+
+               surf_parse__load_buffer_state( );
+               }
+
+       {
+
  /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */
  SET(PROLOG);
  reset_surfxml_parse_err_msg();
@@ -5663,32 +5711,6 @@ YY_DECL
 
  /* COMMENTS and PIs: handled uniformly for efficiency. */
 
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
-
-#ifdef YY_USER_INIT
-               YY_USER_INIT;
-#endif
-
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
-
-               if ( ! surf_parse_in )
-                       surf_parse_in = stdin;
-
-               if ( ! surf_parse_out )
-                       surf_parse_out = stdout;
-
-               if ( ! YY_CURRENT_BUFFER ) {
-                       surf_parse_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               surf_parse__create_buffer(surf_parse_in,YY_BUF_SIZE );
-               }
-
-               surf_parse__load_buffer_state( );
-               }
-
        while ( 1 )             /* loops until end-of-file is reached */
                {
                yy_cp = (yy_c_buf_p);
@@ -5705,7 +5727,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -5905,13 +5927,13 @@ case 26:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</platform>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_platform_3):
-case YY_STATE_EOF(E_surfxml_platform):
+case YY_STATE_EOF(S_surfxml_platform_4):
+case YY_STATE_EOF(S_surfxml_platform_6):
 case YY_STATE_EOF(S_surfxml_platform_8):
+case YY_STATE_EOF(E_surfxml_platform):
 case YY_STATE_EOF(S_surfxml_platform):
 case YY_STATE_EOF(S_surfxml_platform_1):
-case YY_STATE_EOF(S_surfxml_platform_6):
-case YY_STATE_EOF(S_surfxml_platform_4):
+case YY_STATE_EOF(S_surfxml_platform_3):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</platform>' expected.");
        YY_BREAK
 
@@ -5953,10 +5975,10 @@ YY_RULE_SETUP
   if (!AX_surfxml_include_file) FAIL("Required attribute `file' not set for `include' element.");
   LEAVE; STag_surfxml_include(); surfxml_pcdata_ix = 0; ETag_surfxml_include(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_5: case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_platform_5: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -5980,10 +6002,10 @@ YY_RULE_SETUP
   ETag_surfxml_include();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_5: case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_platform_5: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -6066,13 +6088,13 @@ YY_RULE_SETUP
   if (!AX_surfxml_trace_periodicity) FAIL("Required attribute `periodicity' not set for `trace' element.");
   LEAVE; STag_surfxml_trace(); surfxml_pcdata_ix = 0; ETag_surfxml_trace(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_6: case S_surfxml_AS_8: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break;
+   case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: SET(S_surfxml_platform_6); break;
    case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_16: case S_surfxml_AS: case S_surfxml_AS_12: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break;
-   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_7: case S_surfxml_AS_11: case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_10: case S_surfxml_AS_3: SET(S_surfxml_AS_11); break;
+   case S_surfxml_AS_16: case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_11: case S_surfxml_AS_4: case S_surfxml_AS_10: case S_surfxml_AS: case S_surfxml_AS_7: case S_surfxml_AS_3: SET(S_surfxml_AS_11); break;
   }
  }
        YY_BREAK
@@ -6098,13 +6120,13 @@ YY_RULE_SETUP
   surfxml_pcdata_ix = popbuffer();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_6: case S_surfxml_AS_8: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break;
+   case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: SET(S_surfxml_platform_6); break;
    case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_16: case S_surfxml_AS: case S_surfxml_AS_12: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break;
-   case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_7: case S_surfxml_AS_11: case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_10: case S_surfxml_AS_3: SET(S_surfxml_AS_11); break;
+   case S_surfxml_AS_16: case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_11: case S_surfxml_AS_4: case S_surfxml_AS_10: case S_surfxml_AS: case S_surfxml_AS_7: case S_surfxml_AS_3: SET(S_surfxml_AS_11); break;
   }
  }
        YY_BREAK
@@ -6265,7 +6287,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_random_std___deviation) FAIL("Required attribute `std_deviation' not set for `random' element.");
   LEAVE; STag_surfxml_random(); surfxml_pcdata_ix = 0; ETag_surfxml_random(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break;
+   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_2: SET(S_surfxml_platform_3); break;
   }
  }
        YY_BREAK
@@ -6289,7 +6311,7 @@ YY_RULE_SETUP
   ETag_surfxml_random();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break;
+   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_2: SET(S_surfxml_platform_3); break;
   }
  }
        YY_BREAK
@@ -6395,13 +6417,13 @@ YY_RULE_SETUP
   if (!AX_surfxml_trace___connect_element) FAIL("Required attribute `element' not set for `trace_connect' element.");
   LEAVE; STag_surfxml_trace___connect(); surfxml_pcdata_ix = 0; ETag_surfxml_trace___connect(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_4: case S_surfxml_AS_7: case S_surfxml_AS_11: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS_10: SET(S_surfxml_AS_11); break;
-   case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
    case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
    case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break;
-   case S_surfxml_AS: case S_surfxml_AS_16: case S_surfxml_AS_15: case S_surfxml_AS_12: SET(S_surfxml_AS_16); break;
+   case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_9: case S_surfxml_AS_6: case S_surfxml_AS_8: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_15: case S_surfxml_AS_12: case S_surfxml_AS_16: case S_surfxml_AS_14: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_7: case S_surfxml_AS_10: case S_surfxml_AS_4: case S_surfxml_AS_11: case S_surfxml_AS: SET(S_surfxml_AS_11); break;
   }
  }
        YY_BREAK
@@ -6425,13 +6447,13 @@ YY_RULE_SETUP
   ETag_surfxml_trace___connect();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_4: case S_surfxml_AS_7: case S_surfxml_AS_11: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS_10: SET(S_surfxml_AS_11); break;
-   case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
    case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
    case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break;
-   case S_surfxml_AS: case S_surfxml_AS_16: case S_surfxml_AS_15: case S_surfxml_AS_12: SET(S_surfxml_AS_16); break;
+   case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_9: case S_surfxml_AS_6: case S_surfxml_AS_8: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_15: case S_surfxml_AS_12: case S_surfxml_AS_16: case S_surfxml_AS_14: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_7: case S_surfxml_AS_10: case S_surfxml_AS_4: case S_surfxml_AS_11: case S_surfxml_AS: SET(S_surfxml_AS_11); break;
   }
  }
        YY_BREAK
@@ -6553,9 +6575,9 @@ YY_RULE_SETUP
   if (!AX_surfxml_AS_routing) FAIL("Required attribute `routing' not set for `AS' element.");
   LEAVE; STag_surfxml_AS(); surfxml_pcdata_ix = 0; ETag_surfxml_AS(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
-   case S_surfxml_include_2: case S_surfxml_include: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -6579,9 +6601,9 @@ YY_RULE_SETUP
   ETag_surfxml_AS();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
-   case S_surfxml_include_2: case S_surfxml_include: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -6595,17 +6617,17 @@ YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</AS>' expected.",surf_parse_text[0]);
        YY_BREAK
 case YY_STATE_EOF(S_surfxml_AS):
-case YY_STATE_EOF(S_surfxml_AS_4):
-case YY_STATE_EOF(S_surfxml_AS_3):
+case YY_STATE_EOF(S_surfxml_AS_14):
 case YY_STATE_EOF(S_surfxml_AS_9):
-case YY_STATE_EOF(S_surfxml_AS_12):
-case YY_STATE_EOF(S_surfxml_AS_1):
-case YY_STATE_EOF(E_surfxml_AS):
 case YY_STATE_EOF(S_surfxml_AS_6):
+case YY_STATE_EOF(S_surfxml_AS_16):
+case YY_STATE_EOF(S_surfxml_AS_12):
+case YY_STATE_EOF(S_surfxml_AS_3):
 case YY_STATE_EOF(S_surfxml_AS_11):
 case YY_STATE_EOF(S_surfxml_AS_7):
-case YY_STATE_EOF(S_surfxml_AS_14):
-case YY_STATE_EOF(S_surfxml_AS_16):
+case YY_STATE_EOF(S_surfxml_AS_1):
+case YY_STATE_EOF(E_surfxml_AS):
+case YY_STATE_EOF(S_surfxml_AS_4):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</AS>' expected.");
        YY_BREAK
 
@@ -6699,8 +6721,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_storage___type_size) FAIL("Required attribute `size' not set for `storage_type' element.");
   LEAVE; STag_surfxml_storage___type(); surfxml_pcdata_ix = 0; ETag_surfxml_storage___type(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -6724,8 +6746,8 @@ YY_RULE_SETUP
   ETag_surfxml_storage___type();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -6738,8 +6760,8 @@ case 153:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</storage_type>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_storage___type):
 case YY_STATE_EOF(E_surfxml_storage___type):
+case YY_STATE_EOF(S_surfxml_storage___type):
 case YY_STATE_EOF(S_surfxml_storage___type_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</storage_type>' expected.");
        YY_BREAK
@@ -6889,7 +6911,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_mstorage_name) FAIL("Required attribute `name' not set for `mstorage' element.");
   LEAVE; STag_surfxml_mstorage(); surfxml_pcdata_ix = 0; ETag_surfxml_mstorage(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_host: case S_surfxml_host_1: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
+   case S_surfxml_host_1: case S_surfxml_host: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
   }
  }
        YY_BREAK
@@ -6913,7 +6935,7 @@ YY_RULE_SETUP
   ETag_surfxml_mstorage();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_host: case S_surfxml_host_1: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
+   case S_surfxml_host_1: case S_surfxml_host: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
   }
  }
        YY_BREAK
@@ -7070,7 +7092,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_host_power) FAIL("Required attribute `power' not set for `host' element.");
   LEAVE; STag_surfxml_host(); surfxml_pcdata_ix = 0; ETag_surfxml_host(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7094,7 +7116,7 @@ YY_RULE_SETUP
   ETag_surfxml_host();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7107,9 +7129,9 @@ case 208:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</host>' expected.",surf_parse_text[0]);
        YY_BREAK
+case YY_STATE_EOF(E_surfxml_host):
 case YY_STATE_EOF(S_surfxml_host_2):
 case YY_STATE_EOF(S_surfxml_host):
-case YY_STATE_EOF(E_surfxml_host):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</host>' expected.");
        YY_BREAK
 
@@ -7203,8 +7225,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_storage_attach) FAIL("Required attribute `attach' not set for `storage' element.");
   LEAVE; STag_surfxml_storage(); surfxml_pcdata_ix = 0; ETag_surfxml_storage(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7228,8 +7250,8 @@ YY_RULE_SETUP
   ETag_surfxml_storage();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7242,9 +7264,9 @@ case 227:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</storage>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_storage):
 case YY_STATE_EOF(E_surfxml_storage):
 case YY_STATE_EOF(S_surfxml_storage_2):
+case YY_STATE_EOF(S_surfxml_storage):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</storage>' expected.");
        YY_BREAK
 
@@ -7286,7 +7308,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_gpu_name) FAIL("Required attribute `name' not set for `gpu' element.");
   LEAVE; STag_surfxml_gpu(); surfxml_pcdata_ix = 0; ETag_surfxml_gpu(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7310,7 +7332,7 @@ YY_RULE_SETUP
   ETag_surfxml_gpu();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7393,7 +7415,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_host___link_down) FAIL("Required attribute `down' not set for `host_link' element.");
   LEAVE; STag_surfxml_host___link(); surfxml_pcdata_ix = 0; ETag_surfxml_host___link(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7417,7 +7439,7 @@ YY_RULE_SETUP
   ETag_surfxml_host___link();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7738,9 +7760,9 @@ YY_RULE_SETUP
   if (!AX_surfxml_cluster_lat) FAIL("Required attribute `lat' not set for `cluster' element.");
   LEAVE; STag_surfxml_cluster(); surfxml_pcdata_ix = 0; ETag_surfxml_cluster(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -7764,9 +7786,9 @@ YY_RULE_SETUP
   ETag_surfxml_cluster();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -7779,9 +7801,9 @@ case 312:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</cluster>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(E_surfxml_cluster):
-case YY_STATE_EOF(S_surfxml_cluster_2):
 case YY_STATE_EOF(S_surfxml_cluster):
+case YY_STATE_EOF(S_surfxml_cluster_2):
+case YY_STATE_EOF(E_surfxml_cluster):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</cluster>' expected.");
        YY_BREAK
 
@@ -7907,10 +7929,10 @@ YY_RULE_SETUP
   if (!AX_surfxml_cabinet_lat) FAIL("Required attribute `lat' not set for `cabinet' element.");
   LEAVE; STag_surfxml_cabinet(); surfxml_pcdata_ix = 0; ETag_surfxml_cabinet(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
-   case S_surfxml_platform_6: case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
-   case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -7934,10 +7956,10 @@ YY_RULE_SETUP
   ETag_surfxml_cabinet();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
-   case S_surfxml_platform_6: case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
-   case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -8084,9 +8106,9 @@ YY_RULE_SETUP
   if (!AX_surfxml_peer_lat) FAIL("Required attribute `lat' not set for `peer' element.");
   LEAVE; STag_surfxml_peer(); surfxml_pcdata_ix = 0; ETag_surfxml_peer(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break;
+   case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -8110,9 +8132,9 @@ YY_RULE_SETUP
   ETag_surfxml_peer();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break;
-   case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
-   case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break;
+   case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break;
   }
  }
        YY_BREAK
@@ -8179,7 +8201,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_router_id) FAIL("Required attribute `id' not set for `router' element.");
   LEAVE; STag_surfxml_router(); surfxml_pcdata_ix = 0; ETag_surfxml_router(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -8203,7 +8225,7 @@ YY_RULE_SETUP
   ETag_surfxml_router();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: SET(S_surfxml_AS_14); break;
   }
  }
        YY_BREAK
@@ -8286,8 +8308,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_backbone_latency) FAIL("Required attribute `latency' not set for `backbone' element.");
   LEAVE; STag_surfxml_backbone(); surfxml_pcdata_ix = 0; ETag_surfxml_backbone(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
   }
  }
        YY_BREAK
@@ -8311,8 +8333,8 @@ YY_RULE_SETUP
   ETag_surfxml_backbone();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
   }
  }
        YY_BREAK
@@ -8468,8 +8490,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_link_bandwidth) FAIL("Required attribute `bandwidth' not set for `link' element.");
   LEAVE; STag_surfxml_link(); surfxml_pcdata_ix = 0; ETag_surfxml_link(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
   }
  }
        YY_BREAK
@@ -8493,8 +8515,8 @@ YY_RULE_SETUP
   ETag_surfxml_link();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break;
-   case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break;
+   case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break;
   }
  }
        YY_BREAK
@@ -8508,8 +8530,8 @@ YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</link>' expected.",surf_parse_text[0]);
        YY_BREAK
 case YY_STATE_EOF(S_surfxml_link_2):
-case YY_STATE_EOF(S_surfxml_link):
 case YY_STATE_EOF(E_surfxml_link):
+case YY_STATE_EOF(S_surfxml_link):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</link>' expected.");
        YY_BREAK
 
@@ -8581,7 +8603,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_route_dst) FAIL("Required attribute `dst' not set for `route' element.");
   LEAVE; STag_surfxml_route(); surfxml_pcdata_ix = 0; ETag_surfxml_route(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS_15: case S_surfxml_AS_1: case S_surfxml_AS_16: case S_surfxml_AS: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_15: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_12: case S_surfxml_AS_16: SET(S_surfxml_AS_16); break;
   }
  }
        YY_BREAK
@@ -8605,7 +8627,7 @@ YY_RULE_SETUP
   ETag_surfxml_route();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS_15: case S_surfxml_AS_1: case S_surfxml_AS_16: case S_surfxml_AS: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_15: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_12: case S_surfxml_AS_16: SET(S_surfxml_AS_16); break;
   }
  }
        YY_BREAK
@@ -8618,9 +8640,9 @@ case 436:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</route>' expected.",surf_parse_text[0]);
        YY_BREAK
+case YY_STATE_EOF(E_surfxml_route):
 case YY_STATE_EOF(S_surfxml_route_2):
 case YY_STATE_EOF(S_surfxml_route):
-case YY_STATE_EOF(E_surfxml_route):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</route>' expected.");
        YY_BREAK
 
@@ -8720,7 +8742,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_ASroute_gw___dst) FAIL("Required attribute `gw_dst' not set for `ASroute' element.");
   LEAVE; STag_surfxml_ASroute(); surfxml_pcdata_ix = 0; ETag_surfxml_ASroute(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_4: case S_surfxml_AS_8: case S_surfxml_AS: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_8: case S_surfxml_AS: case S_surfxml_AS_4: case S_surfxml_AS_1: case S_surfxml_AS_9: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
   }
  }
        YY_BREAK
@@ -8744,7 +8766,7 @@ YY_RULE_SETUP
   ETag_surfxml_ASroute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_4: case S_surfxml_AS_8: case S_surfxml_AS: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_6: case S_surfxml_AS_8: case S_surfxml_AS: case S_surfxml_AS_4: case S_surfxml_AS_1: case S_surfxml_AS_9: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
   }
  }
        YY_BREAK
@@ -8757,9 +8779,9 @@ case 457:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</ASroute>' expected.",surf_parse_text[0]);
        YY_BREAK
+case YY_STATE_EOF(E_surfxml_ASroute):
 case YY_STATE_EOF(S_surfxml_ASroute_2):
 case YY_STATE_EOF(S_surfxml_ASroute):
-case YY_STATE_EOF(E_surfxml_ASroute):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</ASroute>' expected.");
        YY_BREAK
 
@@ -8824,10 +8846,10 @@ YY_RULE_SETUP
   if (!AX_surfxml_link___ctn_id) FAIL("Required attribute `id' not set for `link_ctn' element.");
   LEAVE; STag_surfxml_link___ctn(); surfxml_pcdata_ix = 0; ETag_surfxml_link___ctn(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_ASroute_2: case S_surfxml_ASroute_1: case S_surfxml_ASroute: SET(S_surfxml_ASroute_2); break;
-   case S_surfxml_bypassASroute: case S_surfxml_bypassASroute_2: case S_surfxml_bypassASroute_1: SET(S_surfxml_bypassASroute_2); break;
-   case S_surfxml_route_2: case S_surfxml_route_1: case S_surfxml_route: SET(S_surfxml_route_2); break;
    case S_surfxml_bypassRoute_1: case S_surfxml_bypassRoute: case S_surfxml_bypassRoute_2: SET(S_surfxml_bypassRoute_2); break;
+   case S_surfxml_route_2: case S_surfxml_route: case S_surfxml_route_1: SET(S_surfxml_route_2); break;
+   case S_surfxml_bypassASroute_1: case S_surfxml_bypassASroute: case S_surfxml_bypassASroute_2: SET(S_surfxml_bypassASroute_2); break;
+   case S_surfxml_ASroute: case S_surfxml_ASroute_2: case S_surfxml_ASroute_1: SET(S_surfxml_ASroute_2); break;
   }
  }
        YY_BREAK
@@ -8851,10 +8873,10 @@ YY_RULE_SETUP
   ETag_surfxml_link___ctn();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_ASroute_2: case S_surfxml_ASroute_1: case S_surfxml_ASroute: SET(S_surfxml_ASroute_2); break;
-   case S_surfxml_bypassASroute: case S_surfxml_bypassASroute_2: case S_surfxml_bypassASroute_1: SET(S_surfxml_bypassASroute_2); break;
-   case S_surfxml_route_2: case S_surfxml_route_1: case S_surfxml_route: SET(S_surfxml_route_2); break;
    case S_surfxml_bypassRoute_1: case S_surfxml_bypassRoute: case S_surfxml_bypassRoute_2: SET(S_surfxml_bypassRoute_2); break;
+   case S_surfxml_route_2: case S_surfxml_route: case S_surfxml_route_1: SET(S_surfxml_route_2); break;
+   case S_surfxml_bypassASroute_1: case S_surfxml_bypassASroute: case S_surfxml_bypassASroute_2: SET(S_surfxml_bypassASroute_2); break;
+   case S_surfxml_ASroute: case S_surfxml_ASroute_2: case S_surfxml_ASroute_1: SET(S_surfxml_ASroute_2); break;
   }
  }
        YY_BREAK
@@ -8923,7 +8945,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_bypassRoute_dst) FAIL("Required attribute `dst' not set for `bypassRoute' element.");
   LEAVE; STag_surfxml_bypassRoute(); surfxml_pcdata_ix = 0; ETag_surfxml_bypassRoute(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_12: case S_surfxml_AS_15: case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_15: case S_surfxml_AS_16: case S_surfxml_AS_12: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_16); break;
   }
  }
        YY_BREAK
@@ -8947,7 +8969,7 @@ YY_RULE_SETUP
   ETag_surfxml_bypassRoute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_14: case S_surfxml_AS_12: case S_surfxml_AS_15: case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_16); break;
+   case S_surfxml_AS_3: case S_surfxml_AS_15: case S_surfxml_AS_16: case S_surfxml_AS_12: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_16); break;
   }
  }
        YY_BREAK
@@ -8960,9 +8982,9 @@ case 487:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</bypassRoute>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(E_surfxml_bypassRoute):
 case YY_STATE_EOF(S_surfxml_bypassRoute):
 case YY_STATE_EOF(S_surfxml_bypassRoute_2):
+case YY_STATE_EOF(E_surfxml_bypassRoute):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</bypassRoute>' expected.");
        YY_BREAK
 
@@ -9046,7 +9068,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_bypassASroute_gw___dst) FAIL("Required attribute `gw_dst' not set for `bypassASroute' element.");
   LEAVE; STag_surfxml_bypassASroute(); surfxml_pcdata_ix = 0; ETag_surfxml_bypassASroute(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_9: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
   }
  }
        YY_BREAK
@@ -9070,7 +9092,7 @@ YY_RULE_SETUP
   ETag_surfxml_bypassASroute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_9); break;
+   case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_9: case S_surfxml_AS_3: SET(S_surfxml_AS_9); break;
   }
  }
        YY_BREAK
@@ -9083,8 +9105,8 @@ case 504:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</bypassASroute>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_bypassASroute_2):
 case YY_STATE_EOF(S_surfxml_bypassASroute):
+case YY_STATE_EOF(S_surfxml_bypassASroute_2):
 case YY_STATE_EOF(E_surfxml_bypassASroute):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</bypassASroute>' expected.");
        YY_BREAK
@@ -9181,7 +9203,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_process_function) FAIL("Required attribute `function' not set for `process' element.");
   LEAVE; STag_surfxml_process(); surfxml_pcdata_ix = 0; ETag_surfxml_process(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_4: case S_surfxml_platform: case S_surfxml_platform_7: case S_surfxml_platform_8: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_8); break;
+   case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_7: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_4: case S_surfxml_platform_8: SET(S_surfxml_platform_8); break;
   }
  }
        YY_BREAK
@@ -9205,7 +9227,7 @@ YY_RULE_SETUP
   ETag_surfxml_process();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_4: case S_surfxml_platform: case S_surfxml_platform_7: case S_surfxml_platform_8: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_8); break;
+   case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_7: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_4: case S_surfxml_platform_8: SET(S_surfxml_platform_8); break;
   }
  }
        YY_BREAK
@@ -9218,9 +9240,9 @@ case 525:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</process>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_process):
 case YY_STATE_EOF(E_surfxml_process):
 case YY_STATE_EOF(S_surfxml_process_2):
+case YY_STATE_EOF(S_surfxml_process):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</process>' expected.");
        YY_BREAK
 
@@ -9262,7 +9284,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_argument_value) FAIL("Required attribute `value' not set for `argument' element.");
   LEAVE; STag_surfxml_argument(); surfxml_pcdata_ix = 0; ETag_surfxml_argument(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_process_1: case S_surfxml_process_2: case S_surfxml_process: SET(S_surfxml_process_2); break;
+   case S_surfxml_process: case S_surfxml_process_2: case S_surfxml_process_1: SET(S_surfxml_process_2); break;
   }
  }
        YY_BREAK
@@ -9286,7 +9308,7 @@ YY_RULE_SETUP
   ETag_surfxml_argument();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_process_1: case S_surfxml_process_2: case S_surfxml_process: SET(S_surfxml_process_2); break;
+   case S_surfxml_process: case S_surfxml_process_2: case S_surfxml_process_1: SET(S_surfxml_process_2); break;
   }
  }
        YY_BREAK
@@ -9339,7 +9361,7 @@ YY_RULE_SETUP
 {
   LEAVE; STag_surfxml_config(); surfxml_pcdata_ix = 0; ETag_surfxml_config(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_3: case S_surfxml_platform_2: case S_surfxml_platform: SET(S_surfxml_platform_3); break;
+   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_2: SET(S_surfxml_platform_3); break;
   }
  }
        YY_BREAK
@@ -9363,7 +9385,7 @@ YY_RULE_SETUP
   ETag_surfxml_config();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_platform_3: case S_surfxml_platform_2: case S_surfxml_platform: SET(S_surfxml_platform_3); break;
+   case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_2: SET(S_surfxml_platform_3); break;
   }
  }
        YY_BREAK
@@ -9376,9 +9398,9 @@ case 547:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</config>' expected.",surf_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_surfxml_config_2):
-case YY_STATE_EOF(E_surfxml_config):
 case YY_STATE_EOF(S_surfxml_config):
+case YY_STATE_EOF(E_surfxml_config):
+case YY_STATE_EOF(S_surfxml_config_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</config>' expected.");
        YY_BREAK
 
@@ -9436,14 +9458,14 @@ YY_RULE_SETUP
   if (!AX_surfxml_prop_value) FAIL("Required attribute `value' not set for `prop' element.");
   LEAVE; STag_surfxml_prop(); surfxml_pcdata_ix = 0; ETag_surfxml_prop(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_process_2: case S_surfxml_process_1: case S_surfxml_process: SET(S_surfxml_process_2); break;
-   case S_surfxml_storage___type: case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: SET(S_surfxml_storage___type_2); break;
-   case S_surfxml_config_1: case S_surfxml_config_2: case S_surfxml_config: SET(S_surfxml_config_2); break;
-   case S_surfxml_link: case S_surfxml_link_2: case S_surfxml_link_1: SET(S_surfxml_link_2); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_2: case S_surfxml_AS: SET(S_surfxml_AS_3); break;
-   case S_surfxml_host: case S_surfxml_host_1: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
+   case S_surfxml_storage_1: case S_surfxml_storage_2: case S_surfxml_storage: SET(S_surfxml_storage_2); break;
    case S_surfxml_cluster_2: case S_surfxml_cluster: case S_surfxml_cluster_1: SET(S_surfxml_cluster_2); break;
-   case S_surfxml_storage: case S_surfxml_storage_1: case S_surfxml_storage_2: SET(S_surfxml_storage_2); break;
+   case S_surfxml_host_1: case S_surfxml_host: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
+   case S_surfxml_config_1: case S_surfxml_config_2: case S_surfxml_config: SET(S_surfxml_config_2); break;
+   case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_2: SET(S_surfxml_AS_3); break;
+   case S_surfxml_storage___type: case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: SET(S_surfxml_storage___type_2); break;
+   case S_surfxml_process_1: case S_surfxml_process_2: case S_surfxml_process: SET(S_surfxml_process_2); break;
+   case S_surfxml_link_2: case S_surfxml_link_1: case S_surfxml_link: SET(S_surfxml_link_2); break;
   }
  }
        YY_BREAK
@@ -9467,14 +9489,14 @@ YY_RULE_SETUP
   ETag_surfxml_prop();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_process_2: case S_surfxml_process_1: case S_surfxml_process: SET(S_surfxml_process_2); break;
-   case S_surfxml_storage___type: case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: SET(S_surfxml_storage___type_2); break;
-   case S_surfxml_config_1: case S_surfxml_config_2: case S_surfxml_config: SET(S_surfxml_config_2); break;
-   case S_surfxml_link: case S_surfxml_link_2: case S_surfxml_link_1: SET(S_surfxml_link_2); break;
-   case S_surfxml_AS_3: case S_surfxml_AS_2: case S_surfxml_AS: SET(S_surfxml_AS_3); break;
-   case S_surfxml_host: case S_surfxml_host_1: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
+   case S_surfxml_storage_1: case S_surfxml_storage_2: case S_surfxml_storage: SET(S_surfxml_storage_2); break;
    case S_surfxml_cluster_2: case S_surfxml_cluster: case S_surfxml_cluster_1: SET(S_surfxml_cluster_2); break;
-   case S_surfxml_storage: case S_surfxml_storage_1: case S_surfxml_storage_2: SET(S_surfxml_storage_2); break;
+   case S_surfxml_host_1: case S_surfxml_host: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
+   case S_surfxml_config_1: case S_surfxml_config_2: case S_surfxml_config: SET(S_surfxml_config_2); break;
+   case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_2: SET(S_surfxml_AS_3); break;
+   case S_surfxml_storage___type: case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: SET(S_surfxml_storage___type_2); break;
+   case S_surfxml_process_1: case S_surfxml_process_2: case S_surfxml_process: SET(S_surfxml_process_2); break;
+   case S_surfxml_link_2: case S_surfxml_link_1: case S_surfxml_link: SET(S_surfxml_link_2); break;
   }
  }
        YY_BREAK
@@ -9856,6 +9878,7 @@ case YY_STATE_EOF(IMPOSSIBLE):
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
+       } /* end of user's declarations */
 } /* end of surf_parse_lex */
 
 /* yy_get_next_buffer - try to read in a new buffer
index 28de019..7d6a8b7 100644 (file)
@@ -50,7 +50,8 @@ StorageModel::~StorageModel(){
  ************/
 
 Storage::Storage(ModelPtr model, const char *name, xbt_dict_t props,
-                        const char* type_id, char *content_name, char *content_type, sg_size_t size)
+                 const char* type_id, char *content_name, char *content_type,
+                 sg_size_t size)
  : Resource(model, name, props)
  , p_contentType(content_type)
  , m_size(size), m_usedSize(0)
@@ -63,8 +64,9 @@ Storage::Storage(ModelPtr model, const char *name, xbt_dict_t props,
 }
 
 Storage::Storage(ModelPtr model, const char *name, xbt_dict_t props,
-                        lmm_system_t maxminSystem, double bread, double bwrite, double bconnection,
-                    const char* type_id, char *content_name, char *content_type, sg_size_t size, char *attach)
+                 lmm_system_t maxminSystem, double bread, double bwrite,
+                 double bconnection, const char* type_id, char *content_name,
+                 char *content_type, sg_size_t size, char *attach)
  :  Resource(model, name, props, lmm_constraint_new(maxminSystem, this, bconnection))
  , p_contentType(content_type)
  , m_size(size), m_usedSize(0)
@@ -94,7 +96,7 @@ xbt_dict_t Storage::parseContent(char *filename)
   if ((!filename) || (strcmp(filename, "") == 0))
     return NULL;
 
-  xbt_dict_t parse_content = xbt_dict_new_homogeneous(xbt_free);
+  xbt_dict_t parse_content = xbt_dict_new_homogeneous(xbt_free_f);
   FILE *file = NULL;
 
   file = surf_fopen(filename, "r");
index 07eaf8d..c578bff 100644 (file)
@@ -276,8 +276,8 @@ public:
    * @param storage The Storage associated to this StorageAction
    * @param type [description]
    */
-  StorageAction(ModelPtr model, double cost, bool failed,
-                           StoragePtr storage, e_surf_action_storage_type_t type);
+  StorageAction(ModelPtr model, double cost, bool failed, StoragePtr storage,
+      e_surf_action_storage_type_t type);
 
     /**
    * @brief StorageAction constructor
@@ -290,7 +290,7 @@ public:
    * @param type [description]
    */
   StorageAction(ModelPtr model, double cost, bool failed, lmm_variable_t var,
-                           StoragePtr storage, e_surf_action_storage_type_t type);
+      StoragePtr storage, e_surf_action_storage_type_t type);
 
   void setState(e_surf_action_state_t state);
 
index 832cc03..0449320 100644 (file)
@@ -195,7 +195,7 @@ static void storage_define_callbacks()
 
 void storage_register_callbacks() {
 
-  ROUTING_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,xbt_free);
+  ROUTING_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, xbt_free_f);
   ROUTING_STORAGE_HOST_LEVEL = xbt_lib_add_level(storage_lib, routing_storage_host_free);
   ROUTING_STORAGE_TYPE_LEVEL = xbt_lib_add_level(storage_type_lib, routing_storage_type_free);
   SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, surf_storage_resource_free);
@@ -235,7 +235,8 @@ StorageN11Model::~StorageN11Model(){
 }
 
 StoragePtr StorageN11Model::createStorage(const char* id, const char* type_id,
-               const char* content_name, const char* content_type, xbt_dict_t properties, const char* attach)
+    const char* content_name, const char* content_type, xbt_dict_t properties,
+    const char* attach)
 {
 
   xbt_assert(!surf_storage_resource_priv(surf_storage_resource_by_name(id)),
@@ -249,8 +250,8 @@ StoragePtr StorageN11Model::createStorage(const char* id, const char* type_id,
   double Bconnection   = surf_parse_get_bandwidth((char*)xbt_dict_get(storage_type->model_properties, "Bconnection"));
 
   StoragePtr storage = new StorageN11(this, id, properties, p_maxminSystem,
-                 Bread, Bwrite, Bconnection,
-                 type_id, (char *)content_name, xbt_strdup(content_type), storage_type->size, (char *) attach);
+      Bread, Bwrite, Bconnection, type_id, (char *)content_name,
+      xbt_strdup(content_type), storage_type->size, (char *) attach);
 
   xbt_lib_set(storage_lib, id, SURF_STORAGE_LEVEL, storage);
 
@@ -261,7 +262,7 @@ StoragePtr StorageN11Model::createStorage(const char* id, const char* type_id,
       Bread);
 
   if(!p_storageList)
-       p_storageList = xbt_dynar_new(sizeof(char *),NULL);
+    p_storageList = xbt_dynar_new(sizeof(char *),NULL);
   xbt_dynar_push(p_storageList, &storage);
 
   return storage;
@@ -311,7 +312,7 @@ void StorageN11Model::updateActionsState(double /*now*/, double delta)
       // Update the disk usage
       // Update the file size
       // For each action of type write
-      double current_progress =
+      volatile double current_progress =
           delta * lmm_variable_getvalue(action->getVariable());
       long int incr = current_progress;
 
@@ -322,7 +323,7 @@ void StorageN11Model::updateActionsState(double /*now*/, double delta)
                 lrint(action->progress + current_progress),
                 lrint(action->progress)+ incr);
 
-      /* Take care of rounding error accumulation */
+      /* take care of rounding error accumulation */
       if (lrint(action->progress + current_progress) >
           lrint(action->progress)+ incr)
         incr++;
@@ -370,9 +371,10 @@ void StorageN11Model::updateActionsState(double /*now*/, double delta)
  * Resource *
  ************/
 
-StorageN11::StorageN11(StorageModelPtr model, const char* name, xbt_dict_t properties,
-            lmm_system_t maxminSystem, double bread, double bwrite, double bconnection,
-            const char* type_id, char *content_name, char *content_type, sg_size_t size, char *attach)
+StorageN11::StorageN11(StorageModelPtr model, const char* name,
+    xbt_dict_t properties, lmm_system_t maxminSystem, double bread,
+    double bwrite, double bconnection, const char* type_id, char *content_name,
+    char *content_type, sg_size_t size, char *attach)
  : Storage(model, name, properties,
           maxminSystem, bread, bwrite, bconnection, type_id, content_name, content_type, size, attach) {
   XBT_DEBUG("Create resource with Bconnection '%f' Bread '%f' Bwrite '%f' and Size '%llu'", bconnection, bread, bwrite, size);
@@ -482,9 +484,11 @@ StorageN11Action::StorageN11Action(ModelPtr model, double cost, bool failed, Sto
   case WRITE:
     lmm_expand(model->getMaxminSystem(), storage->p_constraintWrite,
                getVariable(), 1.0);
-    ActionPtr action = this;
-    xbt_dynar_push(storage->p_writeActions, &action);
-    ref();
+
+//TODO there is something annoying with what's below. Have to sort it out...
+//    ActionPtr action = this;
+//    xbt_dynar_push(storage->p_writeActions, &action);
+//    ref();
     break;
   }
   XBT_OUT();
index 61cc24e..d5a0cb0 100644 (file)
@@ -392,7 +392,8 @@ size_t surf_workstation_file_tell(surf_resource_t workstation, surf_file_t fd){
   return get_casted_workstation(workstation)->fileTell(fd);
 }
 
-int surf_workstation_file_seek(surf_resource_t workstation, surf_file_t fd, sg_size_t offset, int origin){
+int surf_workstation_file_seek(surf_resource_t workstation, surf_file_t fd,
+                               sg_offset_t offset, int origin){
   return get_casted_workstation(workstation)->fileSeek(fd, offset, origin);
 }
 
index 52b1722..cc093ad 100644 (file)
@@ -25,29 +25,35 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_kernel, surf,
 
 /* This function is a pimple that we ought to fix. But it won't be easy.
  *
- * The surf_solve() function does properly return the set of actions that changed.
- * Instead, each model change a global data, and then the caller of surf_solve must
- * pick into these sets of action_failed and action_done.
+ * The surf_solve() function does properly return the set of actions that
+ * changed. Instead, each model change a global data, and then the caller of
+ * surf_solve must pick into these sets of action_failed and action_done.
  *
- * This was not clean but ok as long as we didn't had to restart the processes when the resource comes back up.
- * We worked by putting sentinel actions on every resources we are interested in,
- * so that surf informs us if/when the corresponding resource fails.
+ * This was not clean but ok as long as we didn't had to restart the processes
+ * when the resource comes back up.
+ * We worked by putting sentinel actions on every resources we are interested
+ * in, so that surf informs us if/when the corresponding resource fails.
  *
- * But this does not work to get Simix informed of when a resource comes back up, and this is where this pimple comes.
- * We have a set of resources that are currently down and for which simix needs to know when it comes back up.
- * And the current function is called *at every simulation step* to sweep over that set, searching for a resource
- * that was turned back up in the meanwhile. This is UGLY and slow.
+ * But this does not work to get Simix informed of when a resource comes back
+ * up, and this is where this pimple comes. We have a set of resources that are
+ * currently down and for which simix needs to know when it comes back up.
+ * And the current function is called *at every simulation step* to sweep over
+ * that set, searching for a resource that was turned back up in the meanwhile.
+ * This is UGLY and slow.
  *
- * The proper solution would be to not rely on globals for the action_failed and action_done swags.
- * They must be passed as parameter by the caller (the handling of these actions in simix may let you
- * think that these two sets can be merged, but their handling in SimDag induce the contrary unless this
- * simdag code can check by itself whether the action is done of failed -- seems very doable, but yet more
- * cleanup to do).
+ * The proper solution would be to not rely on globals for the action_failed and
+ * action_done swags. They must be passed as parameter by the caller (the
+ * handling of these actions in simix may let you think that these two sets can
+ * be merged, but their handling in SimDag induce the contrary unless this
+ * simdag code can check by itself whether the action is done of failed -- seems
+ * very doable, but yet more cleanup to do).
  *
- * Once surf_solve() is passed the set of actions that changed, you want to add a new set of resources back up
- * as parameter to this function. You also want to add a boolean field "restart_watched" to each resource, and
- * make sure that whenever a resource with this field enabled comes back up, it's added to that set so that Simix
- * sees it and react accordingly. This would kill that need for surf to call simix.
+ * Once surf_solve() is passed the set of actions that changed, you want to add
+ * a new set of resources back up as parameter to this function. You also want
+ * to add a boolean field "restart_watched" to each resource, and make sure that
+ * whenever a resource with this field enabled comes back up, it's added to that
+ * set so that Simix sees it and react accordingly. This would kill that need
+ * for surf to call simix.
  *
  */
 
@@ -93,13 +99,14 @@ xbt_dict_t watched_hosts_lib;
 surf_callback(void, void) surfExitCallbacks;
 
 s_surf_model_description_t surf_plugin_description[] = {
-                 {"Energy",
-                  "Cpu energy consumption.",
-                  sg_energy_plugin_init},
-                 {NULL, NULL,  NULL}      /* this array must be NULL terminated */
+    {"Energy",
+     "Cpu energy consumption.",
+     sg_energy_plugin_init},
+     {NULL, NULL,  NULL}      /* this array must be NULL terminated */
 };
 
-/* Don't forget to update the option description in smx_config when you change this */
+/* Don't forget to update the option description in smx_config when you change
+   this */
 s_surf_model_description_t surf_network_model_description[] = {
   {"LV08",
    "Realistic network analytic model (slow-start modeled by multiplying latency by 10.4, bandwidth by .92; bottleneck sharing uses a payload of S=8775 for evaluating RTT). ",
@@ -509,11 +516,11 @@ double Model::shareResources(double now)
 {
   //FIXME: set the good function once and for all
   if (p_updateMechanism == UM_LAZY)
-       return shareResourcesLazy(now);
+    return shareResourcesLazy(now);
   else if (p_updateMechanism == UM_FULL)
-       return shareResourcesFull(now);
+    return shareResourcesFull(now);
   else
-       xbt_die("Invalid cpu update mechanism!");
+    xbt_die("Invalid cpu update mechanism!");
 }
 
 double Model::shareResourcesLazy(double now)
@@ -610,7 +617,7 @@ double Model::shareResourcesMaxMin(ActionListPtr running_actions,
 
   ActionList::iterator it(running_actions->begin()), itend(running_actions->end());
   for(; it != itend ; ++it) {
-         action = &*it;
+    action = &*it;
     value = lmm_variable_getvalue(action->getVariable());
     if ((value > 0) || (action->getMaxDuration() >= 0))
       break;
@@ -738,7 +745,7 @@ const char *Resource::getName() {
 
 xbt_dict_t Resource::getProperties() {
   if (p_properties==NULL)
-       p_properties = xbt_dict_new();
+    p_properties = xbt_dict_new();
   return p_properties;
 }
 
@@ -851,7 +858,7 @@ void Action::setState(e_surf_action_state_t state)
     p_stateSet = NULL;
 
   if (p_stateSet)
-       p_stateSet->push_back(*this);
+    p_stateSet->push_back(*this);
   XBT_OUT();
 }
 
@@ -867,7 +874,7 @@ void Action::setBound(double bound)
     lmm_update_variable_bound(getModel()->getMaxminSystem(), getVariable(), bound);
 
   if (getModel()->getUpdateMechanism() == UM_LAZY && getLastUpdate()!=surf_get_clock())
-         heapRemove(getModel()->getActionHeap());
+    heapRemove(getModel()->getActionHeap());
   XBT_OUT();
 }
 
@@ -925,8 +932,8 @@ void Action::setPriority(double priority)
 void Action::cancel(){
   setState(SURF_ACTION_FAILED);
   if (getModel()->getUpdateMechanism() == UM_LAZY) {
-       if (actionLmmHook::is_linked())
-         getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
+    if (actionLmmHook::is_linked())
+      getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
     heapRemove(getModel()->getActionHeap());
   }
 }
@@ -934,18 +941,18 @@ void Action::cancel(){
 int Action::unref(){
   m_refcount--;
   if (!m_refcount) {
-       if (actionHook::is_linked())
-         p_stateSet->erase(p_stateSet->iterator_to(*this));
-       if (getVariable())
-         lmm_variable_free(getModel()->getMaxminSystem(), getVariable());
-       if (getModel()->getUpdateMechanism() == UM_LAZY) {
-         /* remove from heap */
-         heapRemove(getModel()->getActionHeap());
+    if (actionHook::is_linked())
+      p_stateSet->erase(p_stateSet->iterator_to(*this));
+    if (getVariable())
+      lmm_variable_free(getModel()->getMaxminSystem(), getVariable());
+    if (getModel()->getUpdateMechanism() == UM_LAZY) {
+      /* remove from heap */
+      heapRemove(getModel()->getActionHeap());
       if (actionLmmHook::is_linked())
-           getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
+        getModel()->getModifiedSet()->erase(getModel()->getModifiedSet()->iterator_to(*this));
     }
-       delete this;
-       return 1;
+    delete this;
+    return 1;
   }
   return 0;
 }
index 4270a6e..eef00fb 100644 (file)
@@ -627,7 +627,6 @@ public:
 
   /**
    * @brief Get the state set in which the action is
-   * @details [TODO]
    *
    * @return The state set in which the action is
    */
@@ -650,10 +649,9 @@ private:
 
   /**
    * @brief Share the resources to the actions
-   * @details [TODO]
    *
    * @param now [TODO]
-   * @return in how much time the next action may terminatedescription]
+   * @return In how much time the next action may terminate
    */
   double shareResources(double now);
 
index 1129d13..56d0f61 100644 (file)
@@ -634,7 +634,7 @@ xbt_dynar_t RoutingPlatf::getOneLinkRoutes(){
 
 xbt_dynar_t RoutingPlatf::recursiveGetOneLinkRoutes(AsPtr rc)
 {
-  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free);
+  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free_f);
 
   //adding my one link routes
   xbt_dynar_t onelink_mine = rc->getOneLinkRoutes();
@@ -1006,7 +1006,7 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster)
   
   // For fat trees, the links must be created once all nodes have been added
   if(cluster->topology == SURF_CLUSTER_FAT_TREE) {
-    ((AsClusterFatTree*)current_routing)->create_links(cluster);
+    ((AsClusterFatTree*)current_routing)->create_links();
   }
   // Add a router. It is magically used thanks to the way in which surf_routing_cluster is written,
   // and it's very useful to connect clusters together
index f94b395..2e636fc 100644 (file)
@@ -22,10 +22,14 @@ AsClusterFatTree::~AsClusterFatTree() {
   for (unsigned int i = 0 ; i < this->nodes.size() ; i++) {
     delete this->nodes[i];
   }
+  for (unsigned int i = 0 ; i < this->links.size() ; i++) {
+    delete this->links[i];
+  }
 }
 
 bool AsClusterFatTree::isInSubTree(FatTreeNode *root, FatTreeNode *node) {
-  XBT_DEBUG("Is %d(%u,%u) in the sub tree of %d(%u,%u) ?", node->id, node->level, node->position, root->id, root->level, root->position);
+  XBT_DEBUG("Is %d(%u,%u) in the sub tree of %d(%u,%u) ?", node->id,
+            node->level, node->position, root->id, root->level, root->position);
   if (root->level <= node->level) {
     return false;
   }
@@ -48,25 +52,41 @@ void AsClusterFatTree::getRouteAndLatency(RoutingEdgePtr src,
                                           sg_platf_route_cbarg_t into,
                                           double *latency) {
   FatTreeNode *source, *destination, *currentNode;
-  std::vector<NetworkLink*> route;
+
   std::map<int, FatTreeNode*>::const_iterator tempIter;
+  
+if (dst->getRcType() == SURF_NETWORK_ELEMENT_ROUTER || src->getRcType() == SURF_NETWORK_ELEMENT_ROUTER) return;
+
+  /* Let's find the source and the destination in our internal structure */
   tempIter = this->computeNodes.find(src->getId());
 
   // xbt_die -> assert
   if (tempIter == this->computeNodes.end()) {
-    xbt_die("Could not find the source %s [%d] in the fat tree", src->getName(), src->getId());
+    xbt_die("Could not find the source %s [%d] in the fat tree", src->getName(),
+            src->getId());
   }
   source = tempIter->second;
   tempIter = this->computeNodes.find(dst->getId());
   if (tempIter == this->computeNodes.end()) {
-    xbt_die("Could not find the destination %s [%d] in the fat tree", src->getName(), src->getId());
+    xbt_die("Could not find the destination %s [%d] in the fat tree",
+            dst->getName(), dst->getId());
   }
 
 
   destination = tempIter->second;
-  XBT_DEBUG("Get route and latency from '%s' [%d] to '%s' [%d] in a fat tree",
+  
+  XBT_VERB("Get route and latency from '%s' [%d] to '%s' [%d] in a fat tree",
             src->getName(), src->getId(), dst->getName(), dst->getId());
 
+  /* In case destination is the source, and there is a loopback, let's get
+     through it instead of going up to a switch*/
+  if(source->id == destination->id && this->p_has_loopback) {
+    xbt_dynar_push_as(into->link_list, void*, source->loopback);
+    if(latency) {
+      *latency += source->loopback->getLatency();
+    }
+  }
+
   currentNode = source;
 
   // up part
@@ -79,39 +99,47 @@ void AsClusterFatTree::getRouteAndLatency(RoutingEdgePtr src,
     }
     k = this->upperLevelNodesNumber[currentNode->level];
     d = d % k;
-    route.push_back(currentNode->parents[d]->upLink);
+    xbt_dynar_push_as(into->link_list, void*,currentNode->parents[d]->upLink);
 
     if(latency) {
       *latency += currentNode->parents[d]->upLink->getLatency();
     }
+
+    if (this->p_has_limiter) {
+      xbt_dynar_push_as(into->link_list, void*,currentNode->limiterLink);
+    }
     currentNode = currentNode->parents[d]->upNode;
   }
-  XBT_DEBUG("%d(%u,%u) is in the sub tree of %d(%u,%u).", destination->id, destination->level, destination->position, currentNode->id, currentNode->level, currentNode->position);
+
+  XBT_DEBUG("%d(%u,%u) is in the sub tree of %d(%u,%u).", destination->id,
+            destination->level, destination->position, currentNode->id,
+            currentNode->level, currentNode->position);
+
   // Down part
   while(currentNode != destination) {
     for(unsigned int i = 0 ; i < currentNode->children.size() ; i++) {
       if(i % this->lowerLevelNodesNumber[currentNode->level - 1] ==
          destination->label[currentNode->level - 1]) {
-        route.push_back(currentNode->children[i]->downLink);
+        xbt_dynar_push_as(into->link_list, void*,currentNode->children[i]->downLink);
         if(latency) {
           *latency += currentNode->children[i]->downLink->getLatency();
         }
         currentNode = currentNode->children[i]->downNode;
-        XBT_DEBUG("%d(%u,%u) is accessible through %d(%u,%u)", destination->id, destination->level, destination->position, currentNode->id, currentNode->level, currentNode->position);
+        if (this->p_has_limiter) {
+          xbt_dynar_push_as(into->link_list, void*,currentNode->limiterLink);
+        }
+        XBT_DEBUG("%d(%u,%u) is accessible through %d(%u,%u)", destination->id,
+                  destination->level, destination->position, currentNode->id,
+                  currentNode->level, currentNode->position);
       }
     }
   }
-  
-  for (unsigned int i = 0 ; i < route.size() ; i++) {
-    xbt_dynar_push_as(into->link_list, void*, route[i]);
-  }
-
 }
 
 /* This function makes the assumption that parse_specific_arguments() and
  * addNodes() have already been called
  */
-void AsClusterFatTree::create_links(sg_platf_cluster_cbarg_t cluster){
+void AsClusterFatTree::create_links(){
   if(this->levels == 0) {
     return;
   }
@@ -144,7 +172,7 @@ void AsClusterFatTree::create_links(sg_platf_cluster_cbarg_t cluster){
   // Nodes are totally ordered, by level and then by position, in this->nodes
   for (unsigned int i = 0 ; i < this->levels ; i++) {
     for (unsigned int j = 0 ; j < this->nodesByLevel[i] ; j++) {
-        this->connectNodeToParents(cluster, this->nodes[k]);
+        this->connectNodeToParents(this->nodes[k]);
         k++;
     }
   }
@@ -162,8 +190,7 @@ void AsClusterFatTree::create_links(sg_platf_cluster_cbarg_t cluster){
 
 }
 
-int AsClusterFatTree::connectNodeToParents(sg_platf_cluster_cbarg_t cluster,
-                                           FatTreeNode *node) {
+int AsClusterFatTree::connectNodeToParents(FatTreeNode *node) {
   std::vector<FatTreeNode*>::iterator currentParentNode = this->nodes.begin();
   int connectionsNumber = 0;
   const int level = node->level;
@@ -177,7 +204,7 @@ int AsClusterFatTree::connectNodeToParents(sg_platf_cluster_cbarg_t cluster,
                 node->level, node->position, (*currentParentNode)->id,
                 (*currentParentNode)->level, (*currentParentNode)->position, this->lowerLevelPortsNumber[level]);
       for (unsigned int j = 0 ; j < this->lowerLevelPortsNumber[level] ; j++) {
-      this->addLink(cluster, *currentParentNode, node->label[level] +
+      this->addLink(*currentParentNode, node->label[level] +
                     j * this->lowerLevelNodesNumber[level], node,
                     (*currentParentNode)->label[level] +
                     j * this->upperLevelNodesNumber[level]);
@@ -260,20 +287,19 @@ void AsClusterFatTree::generateSwitches() {
   }
 
 
-  // If we have to many compute nodes, we ditch them
-  
-
   // We create the switches
   int k = 0;
   for (unsigned int i = 0 ; i < this->levels ; i++) {
     for (unsigned int j = 0 ; j < this->nodesByLevel[i + 1] ; j++) {
       FatTreeNode* newNode;
-      newNode = new FatTreeNode(--k, i + 1, j);
-      XBT_DEBUG("We create the switch %d(%d,%d)", newNode->id, newNode->level, newNode->position);
+      newNode = new FatTreeNode(this->cluster, --k, i + 1, j);
+      XBT_DEBUG("We create the switch %d(%d,%d)", newNode->id, newNode->level,
+                newNode->position);
       newNode->children.resize(this->lowerLevelNodesNumber[i] *
                                this->lowerLevelPortsNumber[i]);
       if (i != this->levels - 1) {
-        newNode->parents.resize(this->upperLevelNodesNumber[i + 1] * this->lowerLevelPortsNumber[i + 1]);
+        newNode->parents.resize(this->upperLevelNodesNumber[i + 1] *
+                                this->lowerLevelPortsNumber[i + 1]);
       }
       newNode->label.resize(this->levels);
       this->nodes.push_back(newNode);
@@ -354,18 +380,18 @@ void AsClusterFatTree::addProcessingNode(int id) {
   using std::make_pair;
   static int position = 0;
   FatTreeNode* newNode;
-  newNode = new FatTreeNode(id, 0, position++);
-  newNode->parents.resize(this->upperLevelNodesNumber[0] * this->lowerLevelPortsNumber[0]);
+  newNode = new FatTreeNode(this->cluster, id, 0, position++);
+  newNode->parents.resize(this->upperLevelNodesNumber[0] *
+                          this->lowerLevelPortsNumber[0]);
   newNode->label.resize(this->levels);
   this->computeNodes.insert(make_pair(id,newNode));
   this->nodes.push_back(newNode);
 }
 
-void AsClusterFatTree::addLink(sg_platf_cluster_cbarg_t cluster, 
-                               FatTreeNode *parent, unsigned int parentPort,
+void AsClusterFatTree::addLink(FatTreeNode *parent, unsigned int parentPort,
                                FatTreeNode *child, unsigned int childPort) {
   FatTreeLink *newLink;
-  newLink = new FatTreeLink(cluster, child, parent);
+  newLink = new FatTreeLink(this->cluster, child, parent);
   XBT_DEBUG("Creating a link between the parent (%d,%d,%u)"
             " and the child (%d,%d,%u)", parent->level, parent->position,
             parentPort, child->level, child->position, childPort);
@@ -389,7 +415,6 @@ void AsClusterFatTree::parse_specific_arguments(sg_platf_cluster_cbarg_t
   if (parameters.size() != 4){
     surf_parse_error("Fat trees are defined by the levels number and 3 vectors" 
                      ", see the documentation for more informations");
-    // Well, there's no doc, yet
   }
 
   // The first parts of topo_parameters should be the levels number
@@ -425,6 +450,7 @@ void AsClusterFatTree::parse_specific_arguments(sg_platf_cluster_cbarg_t
   for(size_t i = 0 ; i < tmp.size() ; i++){
     this->lowerLevelPortsNumber.push_back(std::atoi(tmp[i].c_str())); 
   }
+  this->cluster = cluster;
 }
 
 
@@ -457,16 +483,45 @@ void AsClusterFatTree::generateDotFile(const string& filename) const {
     file.close();
   }
   else {
-    std::cerr << "Unable to open file " << filename << std::endl;
+    XBT_DEBUG("Unable to open file %s", filename.c_str());
     return;
   }
 }
 
-FatTreeNode::FatTreeNode(int id, int level, int position) : id(id),
-                                                            level(level),
-                                                            position(position){}
+FatTreeNode::FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level,
+                         int position) : id(id), level(level),
+                                         position(position) {
+  s_sg_platf_link_cbarg_t linkTemplate;
+  if(cluster->limiter_link) {
+    memset(&linkTemplate, 0, sizeof(linkTemplate));
+    linkTemplate.bandwidth = cluster->limiter_link;
+    linkTemplate.latency = 0;
+    linkTemplate.state = SURF_RESOURCE_ON;
+    linkTemplate.policy = SURF_LINK_SHARED;
+    linkTemplate.id = bprintf("limiter_%d", id);
+    sg_platf_new_link(&linkTemplate);
+    this->limiterLink = (NetworkLink*) xbt_lib_get_or_null(link_lib,
+                                                           linkTemplate.id,
+                                                           SURF_LINK_LEVEL);
+    free((void*)linkTemplate.id);
+  }
+  if(cluster->loopback_bw || cluster->loopback_lat) {
+    memset(&linkTemplate, 0, sizeof(linkTemplate));
+    linkTemplate.bandwidth = cluster->loopback_bw;
+    linkTemplate.latency = cluster->loopback_lat;
+    linkTemplate.state = SURF_RESOURCE_ON;
+    linkTemplate.policy = SURF_LINK_FATPIPE;
+    linkTemplate.id = bprintf("loopback_%d", id);
+    sg_platf_new_link(&linkTemplate);
+    this->loopback = (NetworkLink*) xbt_lib_get_or_null(link_lib,
+                                                        linkTemplate.id,
+                                                        SURF_LINK_LEVEL);
+    free((void*)linkTemplate.id);
+  }  
+}
 
-FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *downNode,
+FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster,
+                         FatTreeNode *downNode,
                          FatTreeNode *upNode) : upNode(upNode),
                                                 downNode(downNode) {
   static int uniqueId = 0;
@@ -475,24 +530,28 @@ FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *downNode
   linkTemplate.bandwidth = cluster->bw;
   linkTemplate.latency = cluster->lat;
   linkTemplate.state = SURF_RESOURCE_ON;
-  linkTemplate.policy = cluster->sharing_policy; // Maybe should we do sthg with that ?
-  linkTemplate.id = bprintf("link_from_%d_to_%d_%d", downNode->id, upNode->id, uniqueId);
+  linkTemplate.policy = cluster->sharing_policy; // sthg to do with that ?
+  linkTemplate.id = bprintf("link_from_%d_to_%d_%d", downNode->id, upNode->id,
+                            uniqueId);
   sg_platf_new_link(&linkTemplate);
   NetworkLink* link;
+  std::string tmpID;
   if (cluster->sharing_policy == SURF_LINK_FULLDUPLEX) {
-    std::string tmpID;
     tmpID = std::string(linkTemplate.id) + "_UP";
-    link = (NetworkLink*) xbt_lib_get_or_null(link_lib, tmpID.c_str(), SURF_LINK_LEVEL);
+    link = (NetworkLink*) xbt_lib_get_or_null(link_lib, tmpID.c_str(),
+                                              SURF_LINK_LEVEL);
     this->upLink = link; // check link?
     tmpID = std::string(linkTemplate.id) + "_DOWN";
-    link = (NetworkLink*) xbt_lib_get_or_null(link_lib, tmpID.c_str(), SURF_LINK_LEVEL);
+    link = (NetworkLink*) xbt_lib_get_or_null(link_lib, tmpID.c_str(),
+                                              SURF_LINK_LEVEL);
     this->downLink = link; // check link ?
   }
   else {
-    link = (NetworkLink*) xbt_lib_get_or_null(link_lib, linkTemplate.id, SURF_LINK_LEVEL);
+    link = (NetworkLink*) xbt_lib_get_or_null(link_lib, linkTemplate.id,
+                                              SURF_LINK_LEVEL);
     this->upLink = link;
     this->downLink = link;
   }
   uniqueId++;
-  
+  free((void*)linkTemplate.id);
 }
index addb37e..2f924ad 100644 (file)
 #define SURF_ROUTING_CLUSTER_FAT_TREE_HPP_
 
 
-/* The class AsClusterFatTree describes PGFT, as introduced by Eitan Zahavi
+/** \file surf_routing_cluster_fat_tree.cpp
+ *  The class AsClusterFatTree describes PGFT, as introduced by Eitan Zahavi
  * in "D-Mod-K Routing Providing Non-Blocking Traffic for Shift Permutations
  * on Real Life Fat Trees" (2010). RLFT are PGFT with some restrictions to 
- * address real world constraints, which are not currently enforced (but it 
- * should certainly be checked for)
+ * address real world constraints, which are not currently enforced. 
  */
 
-/* TODO : limiter link ? Loopback?
- *
- */
 class FatTreeNode;
 class FatTreeLink;
 
-
+/** \brief A node in a fat tree.
+ * A FatTreeNode can either be a switch or a processing node. Switches are
+ * identified by a negative ID. This class is closely related to fat
+ */
 class FatTreeNode {
 public:
+  /** Unique ID which identifies every node. */
   int id;
-  unsigned int level; // The 0th level represents the leafs of the PGFT
-  unsigned int position; // Position in the level
+  /* Level into the tree, with 0 being the leafs.
+   */
+  unsigned int level; 
+  /* \brief Position into the level, starting from 0.
+   */
+  unsigned int position; 
+  /** In order to link nodes between them, each one must be assigned a label,
+   * consisting of l integers, l being the levels number of the tree. Each label
+   * is unique in the level, and the way it is generated allows the construction
+   * of a fat tree which fits the desired topology.
+   */
   std::vector<unsigned int> label;
-  /* We can see the sizes sum of the two following vectors as the device 
-   * ports number. If we use the notations used in Zahavi's paper, 
-   * children.size() = m_level and parents.size() = w_(level+1)
-   * 
+
+  /** Links to the lower level, where the position in the vector corresponds to
+   * a port number. 
+   */
+  std::vector<FatTreeLink*> children;
+  /** Links to the upper level, where the position in the vector corresponds to
+   * a port number. 
+   */ 
+  std::vector<FatTreeLink*> parents;
+
+  /** Virtual link standing for the node global capacity.
+   */
+  NetworkLink* limiterLink;
+  /** If present, communications from this node to this node will pass through it
+   * instead of passing by an upper level switch.
    */
-  std::vector<FatTreeLink*> children;  // m, apply from lvl 0 to levels - 1 
-  std::vector<FatTreeLink*> parents; // w, apply from lvl 1 to levels
-  FatTreeNode(int id, int level=-1, int position=-1);
+  NetworkLink* loopback;
+  FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level,
+              int position);
 };
 
+
+
+/** \brief Link in a fat tree.
+ *
+ * Represents a single, duplex link in a fat tree. This is necessary to have a tree.
+ * It is equivalent to a physical link.
+ */
 class FatTreeLink {
 public:
   FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *source,
               FatTreeNode *destination);
-  //  unsigned int ports;
-  /* Links are dependant of the chosen network model, but must implement 
-   * NetworkLink
+  /** Link going up in the tree
    */
   NetworkLink *upLink; 
+  /** Link going down in the tree
+   */
   NetworkLink *downLink;
+  /** Upper end of the link
+   */
   FatTreeNode *upNode;
+  /** Lower end of the link
+   */
   FatTreeNode *downNode;
-  
 };
 
+
+/** \brief Fat tree representation and routing.
+ *
+ * Generate fat trees according to the topology asked for. Almost everything
+ * is based on the work of Eitan Zahavi in "D-Mod-K Routing Providing
+ * Non-Blocking Traffic for Shift Permutations on Real Life Fat Trees" (2010).
+ *
+ * The exact topology is described in the mandatory topo_parameters
+ * field, and follow the "h ; m_h, ..., m_1 ; w_h, ..., w_1 ; p_h, ..., p_1" format.
+ * h stands for the switches levels number, i.e. the fat tree is of height h,
+ * without the processing nodes. m_i stands for the number of lower level nodes
+ * connected to a node in level i. w_i stands for the number of upper levels
+ * nodes connected to a node in level i-1. p_i stands for the number of 
+ * parallel links connecting two nodes between level i and i - 1. Level h is
+ * the topmost switch level, level 1 is the lowest switch level, and level 0
+ * represents the processing nodes. The number of provided nodes must be exactly
+ * the number of processing nodes required to fit the topology, which is the
+ * product of the m_i's.
+ *
+ * Routing is made using a destination-mod-k scheme.
+ */
 class AsClusterFatTree : public AsCluster {
 public:
   AsClusterFatTree();
@@ -62,15 +114,26 @@ public:
   virtual void getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst,
                                   sg_platf_route_cbarg_t into,
                                   double *latency);
-  // virtual void getRouteAndLatency(const int src, const int dst,
-  //                                 std::vector<NetworkLink> *route,
-  //                                 double *latency) const;
-  virtual void create_links(sg_platf_cluster_cbarg_t cluster);
+
+  /** \brief Generate the fat tree
+   * 
+   * Once all processing nodes have been added, this will make sure the fat
+   * tree is generated by calling generateLabels(), generateSwitches() and 
+   * then connection all nodes between them, using their label.
+   */
+  virtual void create_links();
+  /** \brief Read the parameters in topo_parameters field.
+   *
+   * It will also store the cluster for future use.
+   */
   void parse_specific_arguments(sg_platf_cluster_cbarg_t cluster);
+  /** \brief Add a processing node.
+   */
   void addProcessingNode(int id);
   void generateDotFile(const string& filename = "fatTree.dot") const;
 
 private:
+  
   //description of a PGFT (TODO : better doc)
   unsigned int levels;
   std::vector<unsigned int> lowerLevelNodesNumber; // number of children by node
@@ -82,13 +145,14 @@ private:
   std::vector<FatTreeLink*> links;
   std::vector<unsigned int> nodesByLevel;
 
-  void addLink(sg_platf_cluster_cbarg_t cluster, 
-               FatTreeNode *parent, unsigned int parentPort,
+  sg_platf_cluster_cbarg_t cluster;
+
+  void addLink(FatTreeNode *parent, unsigned int parentPort,
                FatTreeNode *child, unsigned int childPort);
   int getLevelPosition(const unsigned int level);
   void generateLabels();
   void generateSwitches();
-  int connectNodeToParents(sg_platf_cluster_cbarg_t cluster, FatTreeNode *node);
+  int connectNodeToParents(FatTreeNode *node);
   bool areRelated(FatTreeNode *parent, FatTreeNode *child);
   bool isInSubTree(FatTreeNode *root, FatTreeNode *node);
 };
index 45b8a93..52d0c35 100644 (file)
@@ -218,11 +218,17 @@ void AsClusterTorus::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst,
 
        info = xbt_dynar_get_as(p_linkUpDownList,linkOffset, s_surf_parsing_link_up_down_t);
 
-       if (use_lnk_up == false)
+       if (use_lnk_up == false){
            xbt_dynar_push_as(route->link_list,void*,info.link_down);
-       else
+
+       if (lat)
+         *lat += static_cast<NetworkLinkPtr>(info.link_down)->getLatency();
+       }else{
            xbt_dynar_push_as(route->link_list,void*,info.link_up);
 
+       if (lat)
+         *lat += static_cast<NetworkLinkPtr>(info.link_up)->getLatency();
+       }
        current_node = next_node;
        next_node = 0;
      }
index 805dd10..7c1ae30 100644 (file)
@@ -176,7 +176,7 @@ void AsDijkstra::addLoopback() {
 
 xbt_dynar_t AsDijkstra::getOnelinkRoutes()
 {
-  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free);
+  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free_f);
   sg_platf_route_cbarg_t route = xbt_new0(s_sg_platf_route_cbarg_t,1);
   route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t),NULL);
 
@@ -278,7 +278,7 @@ void AsDijkstra::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_p
     int nr_nodes = xbt_dynar_length(nodes);
     cost_arr = xbt_new0(double, nr_nodes);      /* link cost from src to other hosts */
     pred_arr = xbt_new0(int, nr_nodes); /* predecessors in path from src */
-    pqueue = xbt_heap_new(nr_nodes, xbt_free);
+    pqueue = xbt_heap_new(nr_nodes, xbt_free_f);
 
     /* initialize */
     cost_arr[src_node_id] = 0.0;
@@ -398,8 +398,8 @@ void AsDijkstra::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_p
 
 AsDijkstra::~AsDijkstra()
 {
-  xbt_graph_free_graph(p_routeGraph, &xbt_free,
-      &graph_edge_data_free, &xbt_free);
+  xbt_graph_free_graph(p_routeGraph, &xbt_free_f,
+      &graph_edge_data_free, &xbt_free_f);
   xbt_dict_free(&p_graphNodeMap);
   if (m_cached)
     xbt_dict_free(&p_routeCache);
index 18d3c9e..7d4e942 100644 (file)
@@ -48,7 +48,7 @@ AsFloyd::~AsFloyd(){
 /* Business methods */
 xbt_dynar_t AsFloyd::getOneLinkRoutes()
 {
-  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free);
+  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free_f);
   sg_platf_route_cbarg_t route =   xbt_new0(s_sg_platf_route_cbarg_t, 1);
   route->link_list = xbt_dynar_new(sizeof(sg_routing_link_t), NULL);
 
index d00fdb8..4c74df4 100644 (file)
@@ -71,7 +71,7 @@ AsFull::~AsFull(){
 
 xbt_dynar_t AsFull::getOneLinkRoutes()
 {
-  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free);
+  xbt_dynar_t ret = xbt_dynar_new(sizeof(OnelinkPtr), xbt_free_f);
 
   int src, dst;
   int table_size = xbt_dynar_length(p_indexNetworkElm);
index dafaab1..d19fdef 100644 (file)
@@ -420,8 +420,8 @@ void STag_surfxml_prop(void)
   }
   else{
     if (!current_property_set)
-      current_property_set = xbt_dict_new_homogeneous(xbt_free_f); // Maybe, it should raise an error
-    xbt_dict_set(current_property_set, A_surfxml_prop_id, xbt_strdup(A_surfxml_prop_value), NULL);
+       current_property_set = xbt_dict_new(); // Maybe, it should raise an error
+    xbt_dict_set(current_property_set, A_surfxml_prop_id, xbt_strdup(A_surfxml_prop_value), xbt_free_f);
   }
 }
 
index da4b1f2..73baddf 100644 (file)
@@ -228,7 +228,7 @@ WorkstationVMHL13::WorkstationVMHL13(WorkstationVMModelPtr model, const char* na
   p_storage = NULL;
 
   /* Currently, a VM uses the network resource of its physical host. In
-   * host_lib, this network resource object is refered from two different keys.
+   * host_lib, this network resource object is referred from two different keys.
    * When deregistering the reference that points the network resource object
    * from the VM name, we have to make sure that the system does not call the
    * free callback for the network resource object. The network resource object
@@ -272,8 +272,8 @@ WorkstationVMHL13::WorkstationVMHL13(WorkstationVMModelPtr model, const char* na
 }
 
 /*
- * A physical host does not disapper in the current SimGrid code, but a VM may
- * disapper during a simulation.
+ * A physical host does not disappear in the current SimGrid code, but a VM may
+ * disappear during a simulation.
  */
 WorkstationVMHL13::~WorkstationVMHL13()
 {
@@ -293,7 +293,7 @@ WorkstationVMHL13::~WorkstationVMHL13()
   xbt_lib_unset(host_lib, getName(), ROUTING_HOST_LEVEL, 0);
   xbt_lib_unset(host_lib, getName(), SURF_WKS_LEVEL, 0);
 
-  /* TODO: comment out when VM stroage is implemented. */
+  /* TODO: comment out when VM storage is implemented. */
   // xbt_lib_unset(host_lib, name, SURF_STORAGE_LEVEL, 0);
 
 
@@ -439,7 +439,7 @@ void WorkstationVMHL13::setAffinity(CpuPtr cpu, unsigned long mask){
 }
 
 /*
- * A surf level object will be useless in the upper layer. Returing the
+ * A surf level object will be useless in the upper layer. Returning the
  * dict_elm of the host.
  **/
 surf_resource_t WorkstationVMHL13::getPm()
index 00ecfdf..ba424e9 100644 (file)
@@ -251,6 +251,7 @@ ActionPtr Workstation::open(const char* fullpath) {
   else
     xbt_die("Can't find mount point for '%s' on '%s'", fullpath, getName());
 
+  XBT_DEBUG("OPEN %s on disk '%s'",path, st->getName());
   ActionPtr action = st->open((const char*)mount_name, (const char*)path);
   free((char*)path);
   free((char*)mount_name);
@@ -259,19 +260,19 @@ ActionPtr Workstation::open(const char* fullpath) {
 
 ActionPtr Workstation::close(surf_file_t fd) {
   StoragePtr st = findStorageOnMountList(fd->mount);
-  XBT_DEBUG("CLOSE on disk '%s'",st->getName());
+  XBT_DEBUG("CLOSE %s on disk '%s'",fd->name, st->getName());
   return st->close(fd);
 }
 
 ActionPtr Workstation::read(surf_file_t fd, sg_size_t size) {
   StoragePtr st = findStorageOnMountList(fd->mount);
-  XBT_DEBUG("READ on disk '%s'",st->getName());
+  XBT_DEBUG("READ %s on disk '%s'",fd->name, st->getName());
   return st->read(fd, size);
 }
 
 ActionPtr Workstation::write(surf_file_t fd, sg_size_t size) {
   StoragePtr st = findStorageOnMountList(fd->mount);
-  XBT_DEBUG("WRITE on disk '%s'",st->getName());
+  XBT_DEBUG("WRITE %s on disk '%s'",fd->name, st->getName());
   return st->write(fd, size);
 }
 
@@ -288,7 +289,7 @@ int Workstation::unlink(surf_file_t fd) {
           st->getName());
       return -1;
     } else {
-      XBT_DEBUG("UNLINK on disk '%s'",st->getName());
+      XBT_DEBUG("UNLINK %s on disk '%s'",fd->name, st->getName());
       st->m_usedSize -= fd->size;
 
       // Remove the file from storage
@@ -325,7 +326,7 @@ sg_size_t Workstation::fileTell(surf_file_t fd){
   return fd->current_position;
 }
 
-int Workstation::fileSeek(surf_file_t fd, sg_size_t offset, int origin){
+int Workstation::fileSeek(surf_file_t fd, sg_offset_t offset, int origin){
 
   switch (origin) {
   case SEEK_SET:
@@ -353,7 +354,7 @@ int Workstation::fileMove(surf_file_t fd, const char* fullpath){
     *new_psize = *psize;
     if (psize){// src file exists
       xbt_dict_remove(findStorageOnMountList(fd->mount)->p_content, fd->name);
-      char *path = (char *) xbt_malloc ((strlen(fullpath)-strlen(fd->mount)+1));;
+      char *path = (char *) xbt_malloc ((strlen(fullpath)-strlen(fd->mount)+1));
       strncpy(path, fullpath+strlen(fd->mount),
               strlen(fullpath)-strlen(fd->mount)+1);
       xbt_dict_set(findStorageOnMountList(fd->mount)->p_content, path,
index b4e2dd7..967f2e4 100644 (file)
@@ -165,8 +165,9 @@ public:
    * @param netElm The RoutingEdge associated to this Workstation
    * @param cpu The Cpu associated to this Workstation
    */
-  Workstation(ModelPtr model, const char *name, xbt_dict_t props, lmm_constraint_t constraint,
-                     xbt_dynar_t storage, RoutingEdgePtr netElm, CpuPtr cpu);
+  Workstation(ModelPtr model, const char *name, xbt_dict_t props,
+      lmm_constraint_t constraint, xbt_dynar_t storage, RoutingEdgePtr netElm,
+      CpuPtr cpu);
 
   /**
    * @brief Workstation destructor
@@ -346,7 +347,7 @@ public:
    *  - SEEK_END: end of the file
    * @return MSG_OK if successful, otherwise MSG_TASK_CANCELED
    */
-  virtual int fileSeek(surf_file_t fd, sg_size_t offset, int origin);
+  virtual int fileSeek(surf_file_t fd, sg_offset_t offset, int origin);
 
   /**
    * @brief Move a file to another location on the *same mount point*.
index bfb40af..be9aeaa 100644 (file)
@@ -27,7 +27,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 37
+#define YY_FLEX_SUBMINOR_VERSION 39
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -160,7 +160,15 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -199,6 +207,13 @@ extern FILE *xbt_graph_parse_in, *xbt_graph_parse_out;
                     if ( xbt_graph_parse_text[yyl] == '\n' )\
                         --xbt_graph_parse_lineno;\
             }while(0)
+    #define YY_LINENO_REWIND_TO(dst) \
+            do {\
+                const char *p;\
+                for ( p = yy_cp-1; p >= (dst); --p)\
+                    if ( *p == '\n' )\
+                        --xbt_graph_parse_lineno;\
+            }while(0)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -466,8 +481,8 @@ static yyconst flex_int16_t yy_accept[564] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   13,    0,    0,   15,
-        0,   14,    0
+        0,    0,    0,    0,    0,    0,   15,    0,    0,   14,
+        0,   13,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -1127,39 +1142,39 @@ const char graphxml_flexml_version[] = "1.9.6";
 int graphxml_pcdata_ix;
 extern char *graphxml_bufferstack;
 #define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix)
-AT_graphxml_node_name AX_graphxml_node_name;
-#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
-short int graphxml_node_name_isset;
-AT_graphxml_node_data AX_graphxml_node_data;
-#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
-short int graphxml_node_data_isset;
-AT_graphxml_node_position___x AX_graphxml_node_position___x;
-#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
-short int graphxml_node_position___x_isset;
-AT_graphxml_edge_source AX_graphxml_edge_source;
-#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
-short int graphxml_edge_source_isset;
+AT_graphxml_node_position___y AX_graphxml_node_position___y;
+#define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y)
+short int graphxml_node_position___y_isset;
+AT_graphxml_edge_label AX_graphxml_edge_label;
+#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label)
+short int graphxml_edge_label_isset;
 AT_graphxml_edge_data AX_graphxml_edge_data;
 #define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
 short int graphxml_edge_data_isset;
-AT_graphxml_graph_isDirected AX_graphxml_graph_isDirected;
-#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
-short int graphxml_graph_isDirected_isset;
+AT_graphxml_node_name AX_graphxml_node_name;
+#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
+short int graphxml_node_name_isset;
 AT_graphxml_edge_name AX_graphxml_edge_name;
 #define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name)
 short int graphxml_edge_name_isset;
-AT_graphxml_node_position___y AX_graphxml_node_position___y;
-#define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y)
-short int graphxml_node_position___y_isset;
+AT_graphxml_edge_source AX_graphxml_edge_source;
+#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
+short int graphxml_edge_source_isset;
 AT_graphxml_edge_length AX_graphxml_edge_length;
 #define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length)
 short int graphxml_edge_length_isset;
+AT_graphxml_graph_isDirected AX_graphxml_graph_isDirected;
+#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
+short int graphxml_graph_isDirected_isset;
+AT_graphxml_node_position___x AX_graphxml_node_position___x;
+#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
+short int graphxml_node_position___x_isset;
+AT_graphxml_node_data AX_graphxml_node_data;
+#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
+short int graphxml_node_data_isset;
 AT_graphxml_edge_target AX_graphxml_edge_target;
 #define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target)
 short int graphxml_edge_target_isset;
-AT_graphxml_edge_label AX_graphxml_edge_label;
-#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label)
-short int graphxml_edge_label_isset;
 AT_graphxml_node_label AX_graphxml_node_label;
 #define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
 short int graphxml_node_label_isset;
@@ -1428,7 +1443,12 @@ static int input (void );
     
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1529,6 +1549,34 @@ YY_DECL
        register char *yy_cp, *yy_bp;
        register int yy_act;
     
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! xbt_graph_parse_in )
+                       xbt_graph_parse_in = stdin;
+
+               if ( ! xbt_graph_parse_out )
+                       xbt_graph_parse_out = stdout;
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       xbt_graph_parse_ensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE );
+               }
+
+               xbt_graph_parse__load_buffer_state( );
+               }
+
+       {
+
  /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */
  SET(PROLOG);
  reset_graphxml_parse_err_msg();
@@ -1580,32 +1628,6 @@ YY_DECL
 
  /* COMMENTS and PIs: handled uniformly for efficiency. */
 
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
-
-#ifdef YY_USER_INIT
-               YY_USER_INIT;
-#endif
-
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
-
-               if ( ! xbt_graph_parse_in )
-                       xbt_graph_parse_in = stdin;
-
-               if ( ! xbt_graph_parse_out )
-                       xbt_graph_parse_out = stdout;
-
-               if ( ! YY_CURRENT_BUFFER ) {
-                       xbt_graph_parse_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE );
-               }
-
-               xbt_graph_parse__load_buffer_state( );
-               }
-
        while ( 1 )             /* loops until end-of-file is reached */
                {
                yy_cp = (yy_c_buf_p);
@@ -1622,7 +1644,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -1731,17 +1753,17 @@ FAIL("Bad declaration %s.",xbt_graph_parse_text);
 case 13:
 /* rule 13 can match eol */
 YY_RULE_SETUP
-SET(ROOT_graphxml_edge);
+SET(ROOT_graphxml_graph);
        YY_BREAK
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
-SET(ROOT_graphxml_graph);
+SET(ROOT_graphxml_node);
        YY_BREAK
 case 15:
 /* rule 15 can match eol */
 YY_RULE_SETUP
-SET(ROOT_graphxml_node);
+SET(ROOT_graphxml_edge);
        YY_BREAK
 case 16:
 /* rule 16 can match eol */
@@ -1838,10 +1860,10 @@ case 30:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</graph>' expected.",xbt_graph_parse_text[0]);
        YY_BREAK
-case YY_STATE_EOF(S_graphxml_graph_3):
-case YY_STATE_EOF(S_graphxml_graph):
 case YY_STATE_EOF(S_graphxml_graph_5):
 case YY_STATE_EOF(E_graphxml_graph):
+case YY_STATE_EOF(S_graphxml_graph_3):
+case YY_STATE_EOF(S_graphxml_graph):
 case YY_STATE_EOF(S_graphxml_graph_1):
 FAIL("Premature EOF: `</graph>' expected.");
        YY_BREAK
@@ -1939,7 +1961,7 @@ YY_RULE_SETUP
   LEAVE; STag_graphxml_node(); graphxml_pcdata_ix = 0; ETag_graphxml_node(); popbuffer(); /* attribute */
   switch (YY_START) {
    case ROOT_graphxml_node: SET(EPILOG); break;
-   case S_graphxml_graph: case S_graphxml_graph_2: case S_graphxml_graph_3: SET(S_graphxml_graph_3); break;
+   case S_graphxml_graph_2: case S_graphxml_graph_3: case S_graphxml_graph: SET(S_graphxml_graph_3); break;
   }
  }
        YY_BREAK
@@ -1964,7 +1986,7 @@ YY_RULE_SETUP
   popbuffer(); /* attribute */
   switch (YY_START) {
    case ROOT_graphxml_node: SET(EPILOG); break;
-   case S_graphxml_graph: case S_graphxml_graph_2: case S_graphxml_graph_3: SET(S_graphxml_graph_3); break;
+   case S_graphxml_graph_2: case S_graphxml_graph_3: case S_graphxml_graph: SET(S_graphxml_graph_3); break;
   }
  }
        YY_BREAK
@@ -2088,8 +2110,8 @@ YY_RULE_SETUP
   if (!AX_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element.");
   LEAVE; STag_graphxml_edge(); graphxml_pcdata_ix = 0; ETag_graphxml_edge(); popbuffer(); /* attribute */
   switch (YY_START) {
+   case S_graphxml_graph_5: case S_graphxml_graph_4: case S_graphxml_graph_1: case S_graphxml_graph: case S_graphxml_graph_3: SET(S_graphxml_graph_5); break;
    case ROOT_graphxml_edge: SET(EPILOG); break;
-   case S_graphxml_graph_5: case S_graphxml_graph: case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_4: SET(S_graphxml_graph_5); break;
   }
  }
        YY_BREAK
@@ -2113,8 +2135,8 @@ YY_RULE_SETUP
   ETag_graphxml_edge();
   popbuffer(); /* attribute */
   switch (YY_START) {
+   case S_graphxml_graph_5: case S_graphxml_graph_4: case S_graphxml_graph_1: case S_graphxml_graph: case S_graphxml_graph_3: SET(S_graphxml_graph_5); break;
    case ROOT_graphxml_edge: SET(EPILOG); break;
-   case S_graphxml_graph_5: case S_graphxml_graph: case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_4: SET(S_graphxml_graph_5); break;
   }
  }
        YY_BREAK
@@ -2384,6 +2406,7 @@ case YY_STATE_EOF(IMPOSSIBLE):
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
+       } /* end of user's declarations */
 } /* end of xbt_graph_parse_lex */
 
 /* yy_get_next_buffer - try to read in a new buffer
index 7fa4bc7..953666c 100644 (file)
@@ -17,7 +17,7 @@ xbt_lib_t xbt_lib_new(void)
 {
   xbt_lib_t lib;
   lib = xbt_new(s_xbt_lib_t, 1);
-  lib->dict = xbt_dict_new_homogeneous(xbt_free);
+  lib->dict = xbt_dict_new_homogeneous(xbt_free_f);
   lib->levels = 0;
   lib->free_f = NULL;
   return lib;
index ad11760..410bf81 100644 (file)
@@ -715,6 +715,7 @@ static void xbt_log_connect_categories(void)
   XBT_LOG_CONNECT(surf_route_cluster);
   XBT_LOG_CONNECT(surf_route_cluster_torus);
   XBT_LOG_CONNECT(surf_route_dijkstra);
+  XBT_LOG_CONNECT(surf_route_fat_tree);
   XBT_LOG_CONNECT(surf_route_floyd);
   XBT_LOG_CONNECT(surf_route_full);
   XBT_LOG_CONNECT(surf_route_none);
index 94aa3d1..68cd43f 100644 (file)
@@ -57,7 +57,7 @@ static void mm_gnuld_legacy_init(void) { /* This function is called from mmalloc
  */
 static int allocated_junk = 0; /* keep track of many blocks of our little area was already given to someone */
 #define JUNK_SIZE 8
-#define MAX_JUNK_AREAS (3*4096/JUNK_SIZE)
+#define MAX_JUNK_AREAS (32 * 1024 / JUNK_SIZE)
 static char junkareas[MAX_JUNK_AREAS][JUNK_SIZE];
 
 /* This version use mmalloc if there is a current heap, or the legacy implem if not */
index f3a9fbc..7cc39e4 100644 (file)
@@ -146,7 +146,7 @@ void _xbt_replay_action_exit(void)
 
 /**
  * \ingroup XBT_replay
- * \brief TODO
+ * \brief function used internally to actually run the replay
 
  * \param argc argc .
  * \param argv argv
index 90548a5..e48c49a 100644 (file)
@@ -1,5 +1,5 @@
 
-$ process_join ${srcdir:=.}/process_join_p.xml ${srcdir:=.}/process_join_d.xml
+$ ./process_join$EXEEXT ${srcdir:=.}/process_join_p.xml ${srcdir:=.}/process_join_d.xml
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Start slave
 > [Tremblay:slave from master:(2) 0.000000] [msg_test/INFO] Slave started
 > [Tremblay:master:(1) 0.000000] [msg_test/INFO] Join the slave (timeout 2)
index 55b0bcc..7a217ab 100644 (file)
@@ -3,12 +3,15 @@ cmake_minimum_required(VERSION 2.6)
 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 
 add_executable(storage_basic storage_basic.c)
+add_executable(concurrent_rw concurrent_rw.c)
 
 ### Add definitions for compile
 if(NOT WIN32)
   target_link_libraries(storage_basic simgrid m pthread )
+  target_link_libraries(concurrent_rw simgrid m pthread )
 else()
   target_link_libraries(storage_basic simgrid)
+  target_link_libraries(concurrent_rw simgrid)
 endif()
 
 set(tesh_files
@@ -20,11 +23,13 @@ set(xml_files
   ${xml_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/platform.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/deployment.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/one_host_platform.xml
   PARENT_SCOPE
   )
 set(teshsuite_src
   ${teshsuite_src}
   ${CMAKE_CURRENT_SOURCE_DIR}/storage_basic.c
+  ${CMAKE_CURRENT_SOURCE_DIR}/concurrent_rw.c
   PARENT_SCOPE
   )
 set(bin_files
diff --git a/teshsuite/msg/storage/concurrent_rw.c b/teshsuite/msg/storage/concurrent_rw.c
new file mode 100644 (file)
index 0000000..8d938bb
--- /dev/null
@@ -0,0 +1,136 @@
+/* Copyright (c) 2008-2010, 2012-2014. The SimGrid Team.
+ * All rights reserved.
+*/
+
+#include "msg/msg.h"
+#include "xbt/log.h"
+#include <unistd.h>
+
+
+#define FILENAME1 "/sd1/doc/simgrid/examples/cxx/autoDestination/Main.cxx"
+
+int host(int argc, char *argv[]);
+void storage_info(msg_host_t host);
+void display_storage_properties(msg_storage_t storage);
+void dump_storage_by_name(char *name);
+void display_storage_content(msg_storage_t storage);
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(storage,"Messages specific for this simulation");
+
+
+
+void storage_info(msg_host_t host)
+{
+  const char* host_name = MSG_host_get_name(host);
+  XBT_INFO("*** Storage info on %s ***", host_name);
+
+  xbt_dict_cursor_t cursor = NULL;
+  char* mount_name;
+  char* storage_name;
+  msg_storage_t storage;
+
+  xbt_dict_t storage_list = MSG_host_get_mounted_storage_list(host);
+
+  xbt_dict_foreach(storage_list,cursor,mount_name,storage_name)
+  {
+    XBT_INFO("\tStorage name: %s, mount name: %s", storage_name, mount_name);
+
+    storage = MSG_storage_get_by_name(storage_name);
+
+    sg_size_t free_size = MSG_storage_get_free_size(storage);
+    sg_size_t used_size = MSG_storage_get_used_size(storage);
+
+    XBT_INFO("\t\tFree size: %llu bytes", free_size);
+    XBT_INFO("\t\tUsed size: %llu bytes", used_size);
+
+    display_storage_properties(storage);
+    dump_storage_by_name(storage_name);
+  }
+  xbt_dict_free(&storage_list);
+}
+
+void display_storage_properties(msg_storage_t storage){
+  xbt_dict_cursor_t cursor = NULL;
+  char *key, *data;
+  xbt_dict_t props = MSG_storage_get_properties(storage);
+  if (xbt_dict_length(props) > 0){
+    XBT_INFO("\tProperties of mounted storage: %s", MSG_storage_get_name(storage));
+    xbt_dict_foreach(props, cursor, key, data)
+         XBT_INFO("\t\t'%s' -> '%s'", key, data);
+  }else{
+       XBT_INFO("\tNo property attached.");
+  }
+}
+
+void dump_storage_by_name(char *name){
+  XBT_INFO("*** Dump a storage element ***");
+  msg_storage_t storage = MSG_storage_get_by_name(name);
+
+  if(storage){
+    display_storage_content(storage);
+  }
+  else{
+    XBT_INFO("Unable to retrieve storage element by its name: %s.", name);
+  }
+}
+
+void display_storage_content(msg_storage_t storage){
+  XBT_INFO("Print the content of the storage element: %s",MSG_storage_get_name(storage));
+  xbt_dict_cursor_t cursor = NULL;
+  char *file;
+  sg_size_t *psize;
+  xbt_dict_t content = MSG_storage_get_content(storage);
+  if (content){
+    xbt_dict_foreach(content, cursor, file, psize)
+    XBT_INFO("\t%s size: %llu bytes", file, *psize);
+  } else {
+    XBT_INFO("\tNo content.");
+  }
+  xbt_dict_free(&content);
+}
+
+
+
+
+
+int host(int argc, char *argv[])
+{
+       char name[2048];
+       sprintf(name,"%s%i", FILENAME1,MSG_process_self_PID());
+       msg_file_t file = MSG_file_open(name, NULL);
+       //MSG_file_read(file, MSG_file_get_size(file));
+       MSG_file_write(file, 500000);
+
+       XBT_INFO("Size of %s: %llu", MSG_file_get_name(file), MSG_file_get_size(file));
+       MSG_file_close(file);
+
+       return 1;
+}
+
+
+int main(int argc, char **argv)
+{
+
+  int res, i;
+  MSG_init(&argc, argv);
+  MSG_create_environment(argv[1]);
+
+  MSG_function_register("host", host);
+  storage_info(MSG_get_host_by_name(xbt_strdup("host")));
+  for(i = 0 ; i<10; i++){
+       MSG_process_create(xbt_strdup("host"), host, NULL, MSG_get_host_by_name(xbt_strdup("host")));
+  }
+
+
+
+
+  res = MSG_main();
+  storage_info(MSG_get_host_by_name(xbt_strdup("host")));
+  XBT_INFO("Simulation time %g", MSG_get_clock());
+
+  if (res == MSG_OK)
+    return 0;
+  else
+    return 1;
+
+}
diff --git a/teshsuite/msg/storage/one_host_platform.xml b/teshsuite/msg/storage/one_host_platform.xml
new file mode 100644 (file)
index 0000000..e4262df
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+
+<platform version="3">
+       <AS id="AS0" routing="Full">
+               <!-- STORAGE TYPES -->
+               <storage_type id="single_HDD" model="linear_no_lat" size="750GiB" content_type="txt_unix">
+                       <model_prop id="Bwrite" value="30MBps" />
+                       <model_prop id="Bread" value="100MBps" />
+                       <model_prop id="Bconnection" value="150MBps" />
+               </storage_type>
+
+               <!-- DISKS -->
+               <storage id="cdisk" typeId="single_HDD" content="storage_content_c.txt" attach="host"/>
+
+               <!-- HOSTS -->
+               <host id="host" power="1000000000">
+                       <mount storageId="cdisk" name="/sd1" />
+               </host>
+       </AS>
+</platform>
index d352f27..77577dc 100644 (file)
@@ -17,6 +17,7 @@ sg_size_t read_local_file(const char *src);
 void dump_storage_by_name(char *name);
 void display_storage_content(msg_storage_t storage);
 void get_set_storage_data(const char *storage_name);
+void dump_platform_storages(void);
 int client(int argc, char *argv[]);
 int server(int argc, char *argv[]);
 
@@ -139,6 +140,17 @@ void get_set_storage_data(const char *storage_name){
   xbt_free(data);
 }
 
+void dump_platform_storages(void){
+  unsigned int cursor;
+  xbt_dynar_t storages = MSG_storages_as_dynar();
+  msg_storage_t storage;
+  xbt_dynar_foreach(storages, cursor, storage){
+    XBT_INFO("Storage %s is attached to %s", MSG_storage_get_name(storage), MSG_storage_get_host(storage));
+    MSG_storage_set_property_value(storage, "other usage", xbt_strdup("gpfs"), xbt_free_f);
+  }
+  xbt_dynar_free(&storages);
+}
+
 int client(int argc, char *argv[])
 {
   hsm_put("server","/sd1/doc/simgrid/examples/cxx/autoDestination/FinalizeTask.cxx","/sd2/scratch/toto.cxx");
@@ -177,13 +189,14 @@ int server(int argc, char *argv[])
       char *dest = MSG_task_get_data(to_execute);
       sg_size_t size_to_write = (sg_size_t)MSG_task_get_data_size(to_execute);
       write_local_file(dest, size_to_write);
-       }
+    }
 
     MSG_task_destroy(to_execute);
     to_execute = NULL;
   }
 
   storage_info(MSG_host_self());
+  dump_platform_storages();
   return 1;
 }
 
index 288ebc3..2b6e0f9 100644 (file)
@@ -1,4 +1,4 @@
-$ storage_basic --cfg=path:${srcdir:=.} ${srcdir:=.}/platform.xml ${srcdir:=.}/deployment.xml 0 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ./storage_basic$EXEEXT --cfg=path:${srcdir:=.} ${srcdir:=.}/platform.xml ${srcdir:=.}/deployment.xml 0 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:server@server) *** Storage info on server ***
 > [  0.000000] (1:server@server)       Storage name: sdisk1, mount name: /sd1
 > [  0.000000] (1:server@server)               Free size: 322122547160 bytes
@@ -57,4 +57,7 @@ $ storage_basic --cfg=path:${srcdir:=.} ${srcdir:=.}/platform.xml ${srcdir:=.}/d
 > [  3.208145] (1:server@server)       /doc/simgrid/examples/cxx/basic/Main.cxx size: 10 bytes
 > [  3.208145] (1:server@server)       /scratch/toto.cxx size: 500001 bytes
 > [  3.208145] (1:server@server)       /doc/simgrid/examples/cxx/basic/Slave.cxx size: 10 bytes
+> [  3.208145] (1:server@server) Storage cdisk is attached to client
+> [  3.208145] (1:server@server) Storage sdisk1 is attached to server
+> [  3.208145] (1:server@server) Storage sdisk2 is attached to server
 > [  3.208145] (0:@) Simulated time: 3.20814
index c5ca5dc..0f9ee4a 100644 (file)
@@ -8,19 +8,19 @@ See bogus_disk_attachment.tesh -->
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
 
 <platform version="3">
-       <AS id="AS0" routing="Full">
-               <!-- STORAGE TYPES -->
-               <storage_type id="single_HDD" model="SSD" size="4000">
-                       <model_prop id="Bwrite" value="30000000" /> <!-- 30Mo/s -->
-                       <model_prop id="Bread" value="100000000" /> <!-- 100Mo/s -->
-                       <model_prop id="Bconnection" value="150000000" /> <!-- 150Mo/s -->
-               </storage_type>
-               
-               <storage id="cdisk" typeId="single_HDD"  attach="plouf" />
+  <AS id="AS0" routing="Full">
+    <!-- STORAGE TYPES -->
+    <storage_type id="single_HDD" model="SSD" size="4000">
+      <model_prop id="Bwrite" value="30000000" /> <!-- 30Mo/s -->
+      <model_prop id="Bread" value="100000000" /> <!-- 100Mo/s -->
+      <model_prop id="Bconnection" value="150000000" /> <!-- 150Mo/s -->
+    </storage_type>
 
-               <!-- HOSTS -->
-               <host id="client" power="1000000000">
-                       <mount storageId="cdisk" name="/sd1" />
-               </host>
-       </AS>
+    <storage id="cdisk" typeId="single_HDD"  attach="plouf" />
+
+    <!-- HOSTS -->
+    <host id="client" power="1000000000">
+      <mount storageId="cdisk" name="/sd1" />
+    </host>
+  </AS>
 </platform>
\ No newline at end of file
index 153598d..28d4dc3 100644 (file)
@@ -60,10 +60,11 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi")
 include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include/")
 
+if(enable_smpi AND enable_smpi_MPICH3_testsuite)
 #C version - use automatic privatization if mmap is supported, manual through SMPI macros if not
-if(HAVE_MMAP)
-add_library(mtest_c STATIC util/mtest.c)
-else()
-add_library(mtest_c STATIC util/mtest_manual.c)
+  if(HAVE_MMAP)
+    add_library(mtest_c STATIC util/mtest.c)
+  else()
+    add_library(mtest_c STATIC util/mtest_manual.c)
+  endif()
 endif()
-
index f8686dc..6a829c5 100644 (file)
@@ -38,7 +38,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
   add_executable(simple-commit simple-commit.c)
 #  add_executable(simple-pack simple-pack.c)
 #  add_executable(simple-pack-external simple-pack-external.c)
-#  add_executable(simple-resized simple-resized.c)
+  add_executable(simple-resized simple-resized.c)
   add_executable(simple-size-extent simple-size-extent.c)
 #  add_executable(sizedtypes sizedtypes.c)
 #  add_executable(slice-pack slice-pack.c)
@@ -55,8 +55,8 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
   add_executable(tfree tfree.c)
 #  add_executable(tmatchsize tmatchsize.c)
 #  add_executable(transpose-pack transpose-pack.c)
-#  add_executable(tresized2 tresized2.c)
-#  add_executable(tresized tresized.c)
+  add_executable(tresized2 tresized2.c)
+  add_executable(tresized tresized.c)
 #  add_executable(triangular-pack triangular-pack.c)
   add_executable(typecommit typecommit.c)
 #  add_executable(typefree typefree.c)
@@ -94,7 +94,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
   target_link_libraries(simple-commit simgrid mtest_c)
 #  target_link_libraries(simple-pack simgrid mtest_c)
 #  target_link_libraries(simple-pack-external simgrid mtest_c)
-#  target_link_libraries(simple-resized simgrid mtest_c)
+  target_link_libraries(simple-resized simgrid mtest_c)
   target_link_libraries(simple-size-extent simgrid mtest_c)
 #  target_link_libraries(sizedtypes simgrid mtest_c)
 #  target_link_libraries(slice-pack simgrid mtest_c)
@@ -111,8 +111,8 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
   target_link_libraries(tfree simgrid mtest_c)
 #  target_link_libraries(tmatchsize simgrid mtest_c)
 #  target_link_libraries(transpose-pack simgrid mtest_c)
-#  target_link_libraries(tresized2 simgrid mtest_c)
-#  target_link_libraries(tresized simgrid mtest_c)
+  target_link_libraries(tresized2 simgrid mtest_c)
+  target_link_libraries(tresized simgrid mtest_c)
 #  target_link_libraries(triangular-pack simgrid mtest_c)
   target_link_libraries(typecommit simgrid mtest_c)
 #  target_link_libraries(typefree simgrid mtest_c)
index ea89c43..c78593f 100644 (file)
@@ -18,7 +18,7 @@ typecommit 1
 zeroparms 1
 #getpartelm 2
 #needs  MPI_Type_create_resized
-#tresized 2
+tresized 2
 #tresized2 2
 #needs MPI_Type_match_size
 #tmatchsize 1
@@ -49,7 +49,7 @@ simple-size-extent 1
 #struct-empty-el 1
 contig-zero-count 1
 #needs MPI_Type_create_resized
-#simple-resized 1
+simple-resized 1
 #needs MPI_Pack
 #unusual-noncontigs 1
 #buggy, and needs MPI_Get_elements
index b3f9899..55916b7 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F2C)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index ad84557..0ae2a3f 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F2C)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index dd71163..61b5b03 100644 (file)
@@ -1,4 +1,4 @@
-uallreducef 4
+#uallreducef 4
 exscanf 5
 #alltoallwf 7
 alltoallvf 7
index cedc5c1..3560877 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F2C)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index bc07be4..fc6366c 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F2C)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index cf6b636..2d0c920 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F2C)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index 523aa93..7cee626 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F2C)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index e7cc14a..8145098 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F2C)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index c0e65e2..b56403b 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F2C)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index 1f8e36b..c48dd83 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F90)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index 3ad68e7..d5c02d2 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F90)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index 398f3db..254e6b1 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F90)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index 9275e6a..89e3b7d 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F90)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
index 04968a4..224b031 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_F90)
+if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   if(WIN32)
     set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
   else()
diff --git a/teshsuite/smpi/mpich3-test/rma/CMakeLists.txt b/teshsuite/smpi/mpich3-test/rma/CMakeLists.txt
new file mode 100644 (file)
index 0000000..391c07a
--- /dev/null
@@ -0,0 +1,400 @@
+cmake_minimum_required(VERSION 2.6)
+
+if(enable_smpi AND enable_smpi_MPICH3_testsuite)
+  if(WIN32)
+    set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
+  else()
+    set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
+    set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
+  endif()
+
+  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
+  set(MPICH_FLAGS "-DHAVE_STDLIB_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STRING_H=1 -DUSE_STDARG=1 -DHAVE_LONG_DOUBLE=1 -DHAVE_PROTOTYPES=1 -DHAVE_SIGNAL_H=1 -DHAVE_SIGACTION=1 -DHAVE_SLEEP=1 -DHAVE_SYSCONF=1  -Wno-error=unused-variable")
+  include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi")
+  include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
+
+
+  add_executable(accfence1 accfence1.c)
+  add_executable(accfence2_am accfence2_am.c)
+  add_executable(accfence2 accfence2.c)
+#  add_executable(accpscw1 accpscw1.c)
+#  add_executable(adlb_mimic1 adlb_mimic1.c)
+  add_executable(allocmem allocmem.c)
+#  add_executable(attrorderwin attrorderwin.c)
+#  add_executable(baseattrwin baseattrwin.c)
+#  add_executable(compare_and_swap compare_and_swap.c)
+#  add_executable(contention_put contention_put.c)
+#  add_executable(contention_putget contention_putget.c)
+#  add_executable(contig_displ contig_displ.c)
+  add_executable(epochtest epochtest.c)
+#  add_executable(fetchandadd_am fetchandadd_am.c)
+#  add_executable(fetchandadd fetchandadd.c)
+#  add_executable(fetchandadd_tree_am fetchandadd_tree_am.c)
+#  add_executable(fetchandadd_tree fetchandadd_tree.c)
+#  add_executable(fetch_and_op fetch_and_op.c)
+#  add_executable(fkeyvalwin fkeyvalwin.c)
+#  add_executable(flush flush.c)
+#  add_executable(get_acc_local get_acc_local.c)
+#  add_executable(get_accumulate get_accumulate.c)
+  add_executable(getfence1 getfence1.c)
+#  add_executable(getgroup getgroup.c)
+#  add_executable(ircpi ircpi.c)
+#  add_executable(linked_list_bench_lock_all linked_list_bench_lock_all.c)
+#  add_executable(linked_list_bench_lock_excl linked_list_bench_lock_excl.c)
+#  add_executable(linked_list_bench_lock_shr linked_list_bench_lock_shr.c)
+#  add_executable(linked_list linked_list.c)
+#  add_executable(linked_list_fop linked_list_fop.c)
+#  add_executable(linked_list_lockall linked_list_lockall.c)
+#  add_executable(lockcontention2 lockcontention2.c)
+#  add_executable(lockcontention3 lockcontention3.c)
+#  add_executable(lockcontention lockcontention.c)
+#  add_executable(locknull locknull.c)
+#  add_executable(lockopts lockopts.c)
+#  add_executable(manyrma2 manyrma2.c)
+#  add_executable(mcs-mutex mcs-mutex.c)
+#  add_executable(mixedsync mixedsync.c)
+#  add_executable(mutex_bench mutex_bench.c)
+#  add_executable(nullpscw nullpscw.c)
+#  add_executable(pscw_ordering pscw_ordering.c)
+#  add_executable(put_base put_base.c)
+#  add_executable(put_bottom put_bottom.c)
+  add_executable(putfence1 putfence1.c)
+  add_executable(putfidx putfidx.c)
+#  add_executable(putpscw1 putpscw1.c)
+#  add_executable(req_example req_example.c)
+#  add_executable(reqops reqops.c)
+#  add_executable(rmanull rmanull.c)
+#  add_executable(rmazero rmazero.c)
+#  add_executable(selfrma selfrma.c)
+#  add_executable(strided_acc_indexed strided_acc_indexed.c)
+#  add_executable(strided_acc_onelock strided_acc_onelock.c)
+#  add_executable(strided_acc_subarray strided_acc_subarray.c)
+#  add_executable(strided_getacc_indexed strided_getacc_indexed.c)
+#  add_executable(strided_getacc_indexed_shared strided_getacc_indexed_shared.c)
+#  add_executable(strided_get_indexed strided_get_indexed.c)
+#  add_executable(strided_putget_indexed strided_putget_indexed.c)
+#  add_executable(strided_putget_indexed_shared strided_putget_indexed_shared.c)
+  add_executable(test1_am test1_am.c)
+  add_executable(test1 test1.c)
+  add_executable(test1_dt test1_dt.c)
+#  add_executable(test2_am test2_am.c)
+#  add_executable(test2 test2.c)
+#  add_executable(test3_am test3_am.c)
+#  add_executable(test3 test3.c)
+#  add_executable(test4_am test4_am.c)
+#  add_executable(test4 test4.c)
+  add_executable(test5_am test5_am.c)
+  add_executable(test5 test5.c)
+  add_executable(transpose1 transpose1.c)
+  add_executable(transpose2 transpose2.c)
+#  add_executable(transpose3 transpose3.c)
+#  add_executable(transpose4 transpose4.c)
+#  add_executable(transpose5 transpose5.c)
+  add_executable(transpose6 transpose6.c)
+  add_executable(transpose7 transpose7.c)
+#  add_executable(wincall wincall.c)
+  add_executable(window_creation window_creation.c)
+#  add_executable(win_dynamic_acc win_dynamic_acc.c)
+#  add_executable(win_flavors win_flavors.c)
+#  add_executable(win_info win_info.c)
+#  add_executable(winname winname.c)
+#  add_executable(win_shared win_shared.c)
+#  add_executable(win_shared_noncontig win_shared_noncontig.c)
+#  add_executable(win_shared_noncontig_put win_shared_noncontig_put.c)
+#  add_executable(wintest wintest.c)
+
+
+
+  target_link_libraries(accfence1 simgrid mtest_c)
+  target_link_libraries(accfence2_am simgrid mtest_c)
+  target_link_libraries(accfence2 simgrid mtest_c)
+#  target_link_libraries(accpscw1 simgrid mtest_c)
+#  target_link_libraries(adlb_mimic1 simgrid mtest_c)
+  target_link_libraries(allocmem simgrid mtest_c)
+#  target_link_libraries(attrorderwin simgrid mtest_c)
+#  target_link_libraries(baseattrwin simgrid mtest_c)
+#  target_link_libraries(compare_and_swap simgrid mtest_c)
+#  target_link_libraries(contention_put simgrid mtest_c)
+#  target_link_libraries(contention_putget simgrid mtest_c)
+#  target_link_libraries(contig_displ simgrid mtest_c)
+  target_link_libraries(epochtest simgrid mtest_c)
+#  target_link_libraries(fetchandadd_am simgrid mtest_c)
+#  target_link_libraries(fetchandadd simgrid mtest_c)
+#  target_link_libraries(fetchandadd_tree_am simgrid mtest_c)
+#  target_link_libraries(fetchandadd_tree simgrid mtest_c)
+#  target_link_libraries(fetch_and_op simgrid mtest_c)
+#  target_link_libraries(fkeyvalwin simgrid mtest_c)
+#  target_link_libraries(flush simgrid mtest_c)
+#  target_link_libraries(get_acc_local simgrid mtest_c)
+#  target_link_libraries(get_accumulate simgrid mtest_c)
+  target_link_libraries(getfence1 simgrid mtest_c)
+#  target_link_libraries(getgroup simgrid mtest_c)
+#  target_link_libraries(ircpi simgrid mtest_c)
+#  target_link_libraries(linked_list_bench_lock_all simgrid mtest_c)
+#  target_link_libraries(linked_list_bench_lock_excl simgrid mtest_c)
+#  target_link_libraries(linked_list_bench_lock_shr simgrid mtest_c)
+#  target_link_libraries(linked_list simgrid mtest_c)
+#  target_link_libraries(linked_list_fop simgrid mtest_c)
+#  target_link_libraries(linked_list_lockall simgrid mtest_c)
+#  target_link_libraries(lockcontention2 simgrid mtest_c)
+#  target_link_libraries(lockcontention3 simgrid mtest_c)
+#  target_link_libraries(lockcontention simgrid mtest_c)
+#  target_link_libraries(locknull simgrid mtest_c)
+#  target_link_libraries(lockopts simgrid mtest_c)
+#  target_link_libraries(manyrma2 simgrid mtest_c)
+#  target_link_libraries(mcs-mutex simgrid mtest_c)
+#  target_link_libraries(mixedsync simgrid mtest_c)
+#  target_link_libraries(mutex_bench simgrid mtest_c)
+#  target_link_libraries(nullpscw simgrid mtest_c)
+#  target_link_libraries(pscw_ordering simgrid mtest_c)
+#  target_link_libraries(put_base simgrid mtest_c)
+#  target_link_libraries(put_bottom simgrid mtest_c)
+  target_link_libraries(putfence1 simgrid mtest_c)
+  target_link_libraries(putfidx simgrid mtest_c)
+#  target_link_libraries(putpscw1 simgrid mtest_c)
+#  target_link_libraries(req_example simgrid mtest_c)
+#  target_link_libraries(reqops simgrid mtest_c)
+#  target_link_libraries(rmanull simgrid mtest_c)
+#  target_link_libraries(rmazero simgrid mtest_c)
+#  target_link_libraries(selfrma simgrid mtest_c)
+#  target_link_libraries(strided_acc_indexed simgrid mtest_c)
+#  target_link_libraries(strided_acc_onelock simgrid mtest_c)
+#  target_link_libraries(strided_acc_subarray simgrid mtest_c)
+#  target_link_libraries(strided_getacc_indexed simgrid mtest_c)
+#  target_link_libraries(strided_getacc_indexed_shared simgrid mtest_c)
+#  target_link_libraries(strided_get_indexed simgrid mtest_c)
+#  target_link_libraries(strided_putget_indexed simgrid mtest_c)
+#  target_link_libraries(strided_putget_indexed_shared simgrid mtest_c)
+  target_link_libraries(test1_am simgrid mtest_c)
+  target_link_libraries(test1 simgrid mtest_c)
+  target_link_libraries(test1_dt simgrid mtest_c)
+#  target_link_libraries(test2_am simgrid mtest_c)
+#  target_link_libraries(test2 simgrid mtest_c)
+#  target_link_libraries(test3_am simgrid mtest_c)
+#  target_link_libraries(test3 simgrid mtest_c)
+#  target_link_libraries(test4_am simgrid mtest_c)
+#  target_link_libraries(test4 simgrid mtest_c)
+  target_link_libraries(test5_am simgrid mtest_c)
+  target_link_libraries(test5 simgrid mtest_c)
+  target_link_libraries(transpose1 simgrid mtest_c)
+  target_link_libraries(transpose2 simgrid mtest_c)
+#  target_link_libraries(transpose3 simgrid mtest_c)
+#  target_link_libraries(transpose4 simgrid mtest_c)
+#  target_link_libraries(transpose5 simgrid mtest_c)
+  target_link_libraries(transpose6 simgrid mtest_c)
+  target_link_libraries(transpose7 simgrid mtest_c)
+#  target_link_libraries(wincall simgrid mtest_c)
+  target_link_libraries(window_creation simgrid mtest_c)
+#  target_link_libraries(win_dynamic_acc simgrid mtest_c)
+#  target_link_libraries(win_flavors simgrid mtest_c)
+#  target_link_libraries(win_info simgrid mtest_c)
+#  target_link_libraries(winname simgrid mtest_c)
+#  target_link_libraries(win_shared simgrid mtest_c)
+#  target_link_libraries(win_shared_noncontig simgrid mtest_c)
+#  target_link_libraries(win_shared_noncontig_put simgrid mtest_c)
+#  target_link_libraries(wintest simgrid mtest_c)
+
+
+
+ set_target_properties(accfence1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(accfence2_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(accfence2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(accpscw1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(adlb_mimic1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(allocmem PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(attrorderwin PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(baseattrwin PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(compare_and_swap PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(contention_put PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(contention_putget PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(contig_displ PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(epochtest PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(fetchandadd_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(fetchandadd PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(fetchandadd_tree_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(fetchandadd_tree PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(fetch_and_op PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(fkeyvalwin PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(flush PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(get_acc_local PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(get_accumulate PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(getfence1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(getgroup PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(ircpi PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(linked_list_bench_lock_all PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(linked_list_bench_lock_excl PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(linked_list_bench_lock_shr PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(linked_list PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(linked_list_fop PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(linked_list_lockall PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(lockcontention2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(lockcontention3 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(lockcontention PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(locknull PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(lockopts PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(manyrma2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(mcs-mutex PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(mixedsync PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(mutex_bench PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(nullpscw PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(pscw_ordering PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(put_base PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(put_bottom PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(putfence1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(putfidx PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(putpscw1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(req_example PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(reqops PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(rmanull PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(rmazero PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(selfrma PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(strided_acc_indexed PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(strided_acc_onelock PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(strided_acc_subarray PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(strided_getacc_indexed PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(strided_getacc_indexed_shared PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(strided_get_indexed PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(strided_putget_indexed PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(strided_putget_indexed_shared PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(test1_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(test1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(test1_dt PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(test2_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(test2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(test3_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(test3 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(test4_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(test4 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(test5_am PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(test5 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(transpose1 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(transpose2 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(transpose3 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(transpose4 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(transpose5 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(transpose6 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(transpose7 PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(wincall PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+ set_target_properties(window_creation PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(win_dynamic_acc PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(win_flavors PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(win_info PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(winname PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(win_shared PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(win_shared_noncontig PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(win_shared_noncontig_put PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+# set_target_properties(wintest PROPERTIES COMPILE_FLAGS "${MPICH_FLAGS}")
+
+endif()
+
+set(tesh_files
+  ${tesh_files}
+  PARENT_SCOPE
+  )
+set(xml_files
+  ${xml_files}
+  PARENT_SCOPE
+  )
+set(examples_src
+  ${examples_src}
+ ${CMAKE_CURRENT_SOURCE_DIR}/accfence1.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/accfence2_am.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/accfence2.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/accpscw1.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/adlb_mimic1.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/allocmem.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/attrorderwin.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/baseattrwin.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/compare_and_swap.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/contention_put.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/contention_putget.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/contig_displ.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/epochtest.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/fetchandadd_am.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/fetchandadd.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/fetchandadd_tree_am.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/fetchandadd_tree.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/fetch_and_op.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/fkeyvalwin.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/flush.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/get_acc_local.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/get_accumulate.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/getfence1.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/getgroup.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/ircpi.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/linked_list_bench_lock_all.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/linked_list_bench_lock_excl.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/linked_list_bench_lock_shr.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/linked_list.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/linked_list_fop.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/linked_list_lockall.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/lockcontention2.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/lockcontention3.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/lockcontention.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/locknull.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/lockopts.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/manyrma2.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/mcs-mutex.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/mixedsync.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/mutex_bench.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/nullpscw.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/pscw_ordering.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/put_base.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/put_bottom.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/putfence1.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/putfidx.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/putpscw1.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/req_example.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/reqops.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/rmanull.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/rmazero.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/selfrma.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/strided_acc_indexed.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/strided_acc_onelock.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/strided_acc_subarray.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/strided_getacc_indexed.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/strided_getacc_indexed_shared.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/strided_get_indexed.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/strided_putget_indexed.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/strided_putget_indexed_shared.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test1_am.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test1.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test1_dt.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test2_am.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test2.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test3_am.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test3.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test4_am.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test4.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test5_am.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/test5.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/transpose1.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/transpose2.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/transpose3.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/transpose4.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/transpose5.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/transpose6.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/transpose7.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/wincall.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/window_creation.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/win_dynamic_acc.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/win_flavors.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/win_info.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/winname.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/win_shared.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/win_shared_noncontig.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/win_shared_noncontig_put.c 
+ ${CMAKE_CURRENT_SOURCE_DIR}/wintest.c 
+  PARENT_SCOPE
+  )
+set(bin_files
+  ${bin_files}
+  PARENT_SCOPE
+  )
+set(txt_files
+  ${txt_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/testlist
+  ${CMAKE_CURRENT_SOURCE_DIR}/mcs-mutex.h
+  ${CMAKE_CURRENT_SOURCE_DIR}/squelch.h
+  PARENT_SCOPE
+  )
diff --git a/teshsuite/smpi/mpich3-test/rma/accfence1.c b/teshsuite/smpi/mpich3-test/rma/accfence1.c
new file mode 100644 (file)
index 0000000..91d9f43
--- /dev/null
@@ -0,0 +1,103 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Accumulate/Replace with Fence";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0, err;
+    int rank, size, source, dest;
+    int minsize = 2, count; 
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Aint      extent;
+    MTestDatatype sendtype, recvtype;
+
+    MTest_Init( &argc, &argv );
+
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       source = 0;
+       dest   = size - 1;
+       
+       for (count = 1; count < 65000; count = count * 2) {
+           while (MTestGetDatatypes( &sendtype, &recvtype, count )) {
+               /* Make sure that everyone has a recv buffer */
+               recvtype.InitBuf( &recvtype );
+
+               MPI_Type_extent( recvtype.datatype, &extent );
+               MPI_Win_create( recvtype.buf, recvtype.count * extent, 
+                               (int)extent, MPI_INFO_NULL, comm, &win );
+               MPI_Win_fence( 0, win );
+               if (rank == source) {
+                   sendtype.InitBuf( &sendtype );
+
+                   /* To improve reporting of problems about operations, we
+                      change the error handler to errors return */
+                   MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+                   
+                   /* MPI_REPLACE on accumulate is almost the same 
+                      as MPI_Put; the only difference is in the
+                      handling of overlapping accumulate operations,
+                      which are not tested here */
+                   err = MPI_Accumulate( sendtype.buf, sendtype.count, 
+                                         sendtype.datatype, dest, 0, 
+                                         recvtype.count, recvtype.datatype, 
+                                         MPI_REPLACE, win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           printf( "Accumulate types: send %s, recv %s\n",
+                                   MTestGetDatatypeName( &sendtype ),
+                                   MTestGetDatatypeName( &recvtype ) );
+                           MTestPrintError( err );
+                       }
+                   }
+                   err = MPI_Win_fence( 0, win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+               }
+               else if (rank == dest) {
+                   MPI_Win_fence( 0, win );
+                   /* This should have the same effect, in terms of
+                      transfering data, as a send/recv pair */
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) {
+                       errs += err;
+                   }
+               }
+               else {
+                   MPI_Win_fence( 0, win );
+               }
+               MPI_Win_free( &win );
+               MTestFreeDatatype( &sendtype );
+               MTestFreeDatatype( &recvtype );
+           }
+       }
+        MTestFreeComm(&comm);
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/accfence2.c b/teshsuite/smpi/mpich3-test/rma/accfence2.c
new file mode 100644 (file)
index 0000000..4bf0f93
--- /dev/null
@@ -0,0 +1,91 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+
+#ifndef MAX_INT
+#define MAX_INT 0x7fffffff
+#endif
+
+/*
+static char MTEST_Descrip[] = "Test MPI_Accumulate with fence";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    int rank, size, source, dest;
+    int minsize = 2, count, i; 
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Datatype  datatype;
+    int           *winbuf, *sbuf;
+
+    MTest_Init( &argc, &argv );
+
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       source = 0;
+       dest   = size - 1;
+       
+       for (count = 1; count < 65000; count = count * 2) {
+           datatype = MPI_INT;
+           /* We compare with an integer value that can be as large as
+              size * (count * count + (1/2)*(size-1))
+              For large machines (size large), this can exceed the 
+              maximum integer for some large values of count.  We check
+              that in advance and break this loop if the above value 
+              would exceed MAX_INT.  Specifically,
+
+              size*count*count + (1/2)*size*(size-1) > MAX_INT
+              count*count > (MAX_INT/size - (1/2)*(size-1))
+           */
+           if (count * count > (MAX_INT/size - (size-1)/2)) break;
+           winbuf = (int *)malloc( count * sizeof(int) );
+           sbuf   = (int *)malloc( count * sizeof(int) );
+
+           for (i=0; i<count; i++) winbuf[i] = 0;
+           for (i=0; i<count; i++) sbuf[i] = rank + i * count;
+           MPI_Win_create( winbuf, count * sizeof(int), sizeof(int),
+                           MPI_INFO_NULL, comm, &win );
+           MPI_Win_fence( 0, win );
+           MPI_Accumulate( sbuf, count, MPI_INT, source, 0, count, MPI_INT,
+                               MPI_SUM, win );
+           MPI_Win_fence( 0, win );
+           if (rank == source) {
+               /* Check the results */
+               for (i=0; i<count; i++) {
+                   int result = i * count * size + (size*(size-1))/2;
+                   if (winbuf[i] != result) {
+                       if (errs < 10) {
+                           fprintf( stderr, "Winbuf[%d] = %d, expected %d (count = %d, size = %d)\n",
+                                    i, winbuf[i], result, count, size );
+                       }
+                       errs++;
+                   }
+               }
+           }
+           free( winbuf );
+           free( sbuf );
+           MPI_Win_free( &win );
+       }
+        MTestFreeComm(&comm);
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/accfence2_am.c b/teshsuite/smpi/mpich3-test/rma/accfence2_am.c
new file mode 100644 (file)
index 0000000..11d2fb7
--- /dev/null
@@ -0,0 +1,97 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+
+#ifndef MAX_INT
+#define MAX_INT 0x7fffffff
+#endif
+
+/*
+static char MTEST_Descrip[] = "Test MPI_Accumulate with fence";
+*/
+
+/* same as accfence2.c, but uses alloc_mem */
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    int rank, size, source, dest;
+    int minsize = 2, count, i; 
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Datatype  datatype;
+    int           *winbuf, *sbuf;
+
+    MTest_Init( &argc, &argv );
+
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       source = 0;
+       dest   = size - 1;
+       
+       for (count = 32768; count < 65000; count = count * 2) {
+           datatype = MPI_INT;
+
+           /* We compare with an integer value that can be as large as
+              size * (count * count + (1/2)*(size-1))
+              For large machines (size large), this can exceed the 
+              maximum integer for some large values of count.  We check
+              that in advance and break this loop if the above value 
+              would exceed MAX_INT.  Specifically,
+
+              size*count*count + (1/2)*size*(size-1) > MAX_INT
+              count*count > (MAX_INT/size - (1/2)*(size-1))
+           */
+           if (count * count > (MAX_INT/size - (size-1)/2)) break;
+
+           MPI_Alloc_mem( count * sizeof(int), MPI_INFO_NULL, &winbuf );
+           MPI_Alloc_mem( count * sizeof(int), MPI_INFO_NULL, &sbuf );
+
+           for (i=0; i<count; i++) winbuf[i] = 0;
+           for (i=0; i<count; i++) sbuf[i] = rank + i * count;
+           MPI_Win_create( winbuf, count * sizeof(int), sizeof(int),
+                           MPI_INFO_NULL, comm, &win );
+           MPI_Win_fence( 0, win );
+           MPI_Accumulate( sbuf, count, MPI_INT, source, 0, count, MPI_INT,
+                               MPI_SUM, win );
+           MPI_Win_fence( 0, win );
+           if (rank == source) {
+               /* Check the results */
+               for (i=0; i<count; i++) {
+                   int result = i * count * size + (size*(size-1))/2;
+                   if (winbuf[i] != result) {
+                       if (errs < 10) {
+                           fprintf( stderr, "Winbuf[%d] = %d, expected %d (count = %d, size = %d)\n",
+                                    i, winbuf[i], result, count, size );
+                       }
+                       errs++;
+                   }
+               }
+           }
+
+           MPI_Win_free( &win );
+
+            MPI_Free_mem(winbuf);
+            MPI_Free_mem(sbuf);
+       }
+        MTestFreeComm(&comm);
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/accpscw1.c b/teshsuite/smpi/mpich3-test/rma/accpscw1.c
new file mode 100644 (file)
index 0000000..4b4976e
--- /dev/null
@@ -0,0 +1,110 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Accumulate/replace with Post/Start/Complete/Wait";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0, err;
+    int rank, size, source, dest;
+    int minsize = 2, count; 
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Aint      extent;
+    MPI_Group     wingroup, neighbors;
+    MTestDatatype sendtype, recvtype;
+
+    MTest_Init( &argc, &argv );
+
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       source = 0;
+       dest   = size - 1;
+       
+       for (count = 1; count < 65000; count = count * 2) {
+           while (MTestGetDatatypes( &sendtype, &recvtype, count )) {
+               /* Make sure that everyone has a recv buffer */
+               recvtype.InitBuf( &recvtype );
+
+               MPI_Type_extent( recvtype.datatype, &extent );
+               MPI_Win_create( recvtype.buf, recvtype.count * extent, 
+                               (int)extent, MPI_INFO_NULL, comm, &win );
+               MPI_Win_get_group( win, &wingroup );
+               if (rank == source) {
+                   /* To improve reporting of problems about operations, we
+                      change the error handler to errors return */
+                   MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+                   sendtype.InitBuf( &sendtype );
+                   
+                   /* Neighbor is dest only */
+                   MPI_Group_incl( wingroup, 1, &dest, &neighbors );
+                   err = MPI_Win_start( neighbors, 0, win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+                   MPI_Group_free( &neighbors );
+                   err = MPI_Accumulate( sendtype.buf, sendtype.count, 
+                                         sendtype.datatype, dest, 0, 
+                                         recvtype.count, recvtype.datatype, 
+                                         MPI_REPLACE, win );
+                   if (err) {
+                       errs++;
+                       MTestPrintError( err );
+                   }
+                   err = MPI_Win_complete( win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+               }
+               else if (rank == dest) {
+                   MPI_Group_incl( wingroup, 1, &source, &neighbors );
+                   MPI_Win_post( neighbors, 0, win );
+                   MPI_Group_free( &neighbors );
+                   MPI_Win_wait( win );
+                   /* This should have the same effect, in terms of
+                      transfering data, as a send/recv pair */
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) {
+                       errs += errs;
+                   }
+               }
+               else {
+                   /* Nothing; the other processes need not call any 
+                      MPI routines */
+                   ;
+               }
+               MPI_Win_free( &win );
+               MTestFreeDatatype( &sendtype );
+               MTestFreeDatatype( &recvtype );
+               MPI_Group_free( &wingroup );
+           }
+       }
+       MTestFreeComm( &comm );
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/adlb_mimic1.c b/teshsuite/smpi/mpich3-test/rma/adlb_mimic1.c
new file mode 100644 (file)
index 0000000..22767fb
--- /dev/null
@@ -0,0 +1,169 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mpi.h"
+#include "mpitest.h"
+
+#define NUM_TIMES 500
+#define MAX_BUF_SIZE (400 * 1024 * 1024) /* 400 MB */
+#define PUT_SIZE (1024 * 1024) /* 1MB */
+
+/*
+static char MTEST_Descrip[] = "ADLB mimic test";
+*/
+
+/*
+ * ALGORITHM:
+ *    This test uses one server process (S), one target process (T)
+ *    and a bunch of origin processes (O). 'O' PUTs (LOCK/PUT/UNLOCK)
+ *    data to a distinct part of the window, and sends a message to
+ *    'S' once the UNLOCK has completed. The server forwards this
+ *    message to 'T'. 'T' GETS the data from this buffer after it
+ *    receives the message from 'S', to see if it contains the correct
+ *    contents.
+ *
+ *                          -------
+ *                          |  S  |
+ *                          -------
+ *                         ^       \
+ *                step 2  /         \ step 3
+ *                 SEND  /           \ SEND
+ *                      /             v
+ *                  -------  step 1   -------
+ *                  |     | --------> |     |
+ *                  |     |   PUT     |     |
+ *                  |  O  |           |  T  |
+ *                  |     |  step 4   |     |
+ *                  |     | <-------- |     |
+ *                  -------   SEND    -------
+ *
+ */
+
+int main(int argc, char **argv)
+{
+    int comm_size, comm_rank, i, by_rank, errs = 0;
+    int rc;
+    char *rma_win_addr, *local_buf;
+    char check;
+    MPI_Win win;
+    MPI_Status status;
+    int max_buf_size = 0, put_size = PUT_SIZE;
+
+    MTest_Init(&argc, &argv);
+    MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank);
+
+    if (comm_size <= 2) {
+       fprintf( stderr, "This test requires at least 3 processes\n" );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+
+    max_buf_size = comm_size * put_size;
+    if (max_buf_size > MAX_BUF_SIZE) {
+       fprintf( stderr, "Too many processes in COMM_WORLD (max is %d)\n",
+                MAX_BUF_SIZE / put_size );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+
+    /* If alloc mem returns an error (because too much memory is requested */
+    MPI_Errhandler_set( MPI_COMM_WORLD, MPI_ERRORS_RETURN );
+
+    rc = MPI_Alloc_mem(max_buf_size, MPI_INFO_NULL, (void *) &rma_win_addr);
+    if (rc) {
+       MTestPrintErrorMsg( "Unable to MPI_Alloc_mem space (not an error)", rc );
+       MPI_Abort( MPI_COMM_WORLD, 0 );
+    }
+
+    memset(rma_win_addr, 0, max_buf_size);
+    MPI_Win_create((void *) rma_win_addr, max_buf_size, 1, MPI_INFO_NULL, 
+                  MPI_COMM_WORLD, &win);
+
+    /* Note that it is not necessary to use MPI_Alloc_mem for the memory that
+       is not part of the MPI_Win.  */
+    rc = MPI_Alloc_mem(put_size, MPI_INFO_NULL, (void *) &local_buf);
+    if (rc) {
+       MTestPrintErrorMsg( "Unable to MPI_Alloc_mem space (not an error)", rc );
+       MPI_Abort( MPI_COMM_WORLD, 0 );
+    }
+
+    for (i = 0; i < put_size; i++)
+        local_buf[i] = 1;
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    if (comm_rank == 0) { /* target */
+        for (i = 0; i < (NUM_TIMES * (comm_size - 2)); i++) {
+            /* Wait for a message from the server to notify me that
+             * someone put some data in my window */
+            MPI_Recv(&by_rank, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &status);
+
+            /* Got a message from the server that 'by_rank' put some
+             * data in my local window. Check the last byte to make
+             * sure we got it correctly. */
+            MPI_Win_lock(MPI_LOCK_SHARED, 0, 0, win);
+            MPI_Get((void *) &check, 1, MPI_CHAR, 0, 
+                   ((by_rank + 1) * put_size) - 1, 1,
+                    MPI_CHAR, win);
+            MPI_Win_unlock(0, win);
+
+            /* If this is not the value I expect, count it as an error */
+            if (check != 1)
+                errs++;
+
+            /* Reset the buffer to zero for the next round */
+            memset((void *) (rma_win_addr + (by_rank * put_size)), 0, put_size);
+
+            /* Tell the origin that I am ready for the next round */
+            MPI_Send(NULL, 0, MPI_INT, by_rank, 0, MPI_COMM_WORLD);
+        }
+    }
+
+    else if (comm_rank == 1) { /* server */
+        for (i = 0; i < (NUM_TIMES * (comm_size - 2)); i++) {
+            /* Wait for a message from any of the origin processes
+             * informing me that it has put data to the target
+             * process */
+            MPI_Recv(NULL, 0, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, 
+                    &status);
+            by_rank = status.MPI_SOURCE;
+
+            /* Tell the target process that it should be seeing some
+             * data in its local buffer */
+            MPI_Send(&by_rank, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
+        }
+    }
+
+    else { /* origin */
+        for (i = 0; i < NUM_TIMES; i++) {
+            /* Put some data in the target window */
+            MPI_Win_lock(MPI_LOCK_SHARED, 0, 0, win);
+            MPI_Put(local_buf, put_size, MPI_CHAR, 0, comm_rank * put_size, 
+                   put_size, MPI_CHAR, win);
+            MPI_Win_unlock(0, win);
+
+            /* Tell the server that the put has completed */
+            MPI_Send(NULL, 0, MPI_INT, 1, 0, MPI_COMM_WORLD);
+
+            /* Wait for a message from the target that it is ready for
+             * the next round */
+            MPI_Recv(NULL, 0, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
+        }
+    }
+
+    MPI_Win_free(&win);
+
+    MPI_Free_mem(rma_win_addr);
+    MPI_Free_mem(local_buf);
+
+    MTest_Finalize(errs);
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/allocmem.c b/teshsuite/smpi/mpich3-test/rma/allocmem.c
new file mode 100644 (file)
index 0000000..1969941
--- /dev/null
@@ -0,0 +1,49 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Simple test that alloc_mem and free_mem work together";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0, err;
+    int j, count;
+    char *ap;
+
+    MTest_Init( &argc, &argv );
+
+    MPI_Errhandler_set( MPI_COMM_WORLD, MPI_ERRORS_RETURN );
+    for (count=1; count < 128000; count *= 2) {
+       
+       err = MPI_Alloc_mem( count, MPI_INFO_NULL, &ap );
+       if (err) {
+           int errclass;
+           /* An error of  MPI_ERR_NO_MEM is allowed */
+           MPI_Error_class( err, &errclass );
+           if (errclass != MPI_ERR_NO_MEM) {
+               errs++;
+               MTestPrintError( err );
+           }
+           
+       }
+       else {
+           /* Access all of this memory */
+           for (j=0; j<count; j++) {
+               ap[j] = (char)(j & 0x7f);
+           }
+           MPI_Free_mem( ap );
+       }
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/attrorderwin.c b/teshsuite/smpi/mpich3-test/rma/attrorderwin.c
new file mode 100644 (file)
index 0000000..972dda7
--- /dev/null
@@ -0,0 +1,129 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTestDescrip[] = "Test creating and inserting attributes in \
+different orders to ensure that the list management code handles all cases.";
+*/
+
+int checkAttrs( MPI_Win win, int n, int key[], int attrval[] );
+int checkNoAttrs( MPI_Win win, int n, int key[] );
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    int key[3], attrval[3];
+    int i;
+    int buf[1];
+    MPI_Comm comm;
+    MPI_Win  win;
+
+    MTest_Init( &argc, &argv );
+
+    {
+       comm = MPI_COMM_WORLD;
+       MPI_Win_create( buf, sizeof(int), sizeof(int), MPI_INFO_NULL,
+                       comm, &win );
+
+       /* Create key values */
+       for (i=0; i<3; i++) {
+           MPI_Win_create_keyval( MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN,
+                              &key[i], (void *)0 );
+           attrval[i] = 1024 * i;
+       }
+       
+       /* Insert attribute in several orders.  Test after put with get,
+        then delete, then confirm delete with get. */
+
+       MPI_Win_set_attr( win, key[2], &attrval[2] );
+       MPI_Win_set_attr( win, key[1], &attrval[1] );
+       MPI_Win_set_attr( win, key[0], &attrval[0] );
+
+       errs += checkAttrs( win, 3, key, attrval );
+       
+       MPI_Win_delete_attr( win, key[0] );
+       MPI_Win_delete_attr( win, key[1] );
+       MPI_Win_delete_attr( win, key[2] );
+
+       errs += checkNoAttrs( win, 3, key );
+       
+       MPI_Win_set_attr( win, key[1], &attrval[1] );
+       MPI_Win_set_attr( win, key[2], &attrval[2] );
+       MPI_Win_set_attr( win, key[0], &attrval[0] );
+
+       errs += checkAttrs( win, 3, key, attrval );
+       
+       MPI_Win_delete_attr( win, key[2] );
+       MPI_Win_delete_attr( win, key[1] );
+       MPI_Win_delete_attr( win, key[0] );
+
+       errs += checkNoAttrs( win, 3, key );
+
+       MPI_Win_set_attr( win, key[0], &attrval[0] );
+       MPI_Win_set_attr( win, key[1], &attrval[1] );
+       MPI_Win_set_attr( win, key[2], &attrval[2] );
+
+       errs += checkAttrs( win, 3, key, attrval );
+       
+       MPI_Win_delete_attr( win, key[1] );
+       MPI_Win_delete_attr( win, key[2] );
+       MPI_Win_delete_attr( win, key[0] );
+
+       errs += checkNoAttrs( win, 3, key );
+       
+       for (i=0; i<3; i++) {
+           MPI_Win_free_keyval( &key[i] );
+       }
+       MPI_Win_free( &win );
+    }
+    
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+  
+}
+
+int checkAttrs( MPI_Win win, int n, int key[], int attrval[] )
+{
+    int errs = 0;
+    int i, flag, *val_p;
+
+    for (i=0; i<n; i++) {
+       MPI_Win_get_attr( win, key[i], &val_p, &flag );
+       if (!flag) {
+           errs++;
+           fprintf( stderr, "Attribute for key %d not set\n", i );
+       }
+       else if (val_p != &attrval[i]) {
+           errs++;
+           fprintf( stderr, "Atribute value for key %d not correct\n",
+                    i );
+       }
+    }
+
+    return errs;
+}
+
+int checkNoAttrs( MPI_Win win, int n, int key[] )
+{
+    int errs = 0;
+    int i, flag, *val_p;
+
+    for (i=0; i<n; i++) {
+       MPI_Win_get_attr( win, key[i], &val_p, &flag );
+       if (flag) {
+           errs++;
+           fprintf( stderr, "Attribute for key %d set but should be deleted\n", i );
+       }
+    }
+
+    return errs;
+}
+       
diff --git a/teshsuite/smpi/mpich3-test/rma/baseattrwin.c b/teshsuite/smpi/mpich3-test/rma/baseattrwin.c
new file mode 100644 (file)
index 0000000..fc1ccc9
--- /dev/null
@@ -0,0 +1,80 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include <stdio.h>
+#include "mpi.h"
+#include "mpitest.h"
+
+int main( int argc, char **argv)
+{
+    int    errs = 0;
+    void *v;
+    int  flag;
+    int  rank, size;
+    int base[1024];
+    MPI_Aint n;
+    int     disp;
+    MPI_Win win;
+
+    MTest_Init( &argc, &argv );
+    MPI_Comm_size( MPI_COMM_WORLD, &size );
+    MPI_Comm_rank( MPI_COMM_WORLD, &rank );
+
+    /* Create a window; then extract the values */
+    n    = 1024;
+    disp = 4;
+    MPI_Win_create( base, n, disp, MPI_INFO_NULL, MPI_COMM_WORLD, &win );
+
+    MPI_Win_get_attr( win, MPI_WIN_BASE, &v, &flag );
+    if (!flag) {
+       errs++;
+       fprintf( stderr, "Could not get WIN_BASE\n" );
+    }
+    else {
+       /* MPI 2.1, section 11.2.2.  v must be a pointer to the start of the 
+        window.  It is not a pointer to a pointer to the start of the window. 
+       */
+       if ((int*)v != base) {
+           errs++;
+           fprintf( stderr, "Got incorrect value for WIN_BASE (%p, should be %p)", 
+                    v, base );
+       }
+    }
+
+    MPI_Win_get_attr( win, MPI_WIN_SIZE, &v, &flag );
+    if (!flag) {
+       errs++;
+       fprintf( stderr, "Could not get WIN_SIZE\n" );
+    }
+    else {
+       MPI_Aint vval = *(MPI_Aint*)v;
+       if (vval != n) {
+           errs++;
+           fprintf( stderr, "Got wrong value for WIN_SIZE (%ld, should be %ld)\n", 
+                    (long) vval, (long) n );
+       }
+    }
+
+    MPI_Win_get_attr( win, MPI_WIN_DISP_UNIT, &v, &flag );
+    if (!flag) {
+       errs++;
+       fprintf( stderr, "Could not get WIN_DISP_UNIT\n" );
+    }
+    else {
+       int vval = *(int*)v;
+       if (vval != disp) {
+           errs++;
+           fprintf( stderr, "Got wrong value for WIN_DISP_UNIT (%d, should be %d)\n",
+                    vval, disp );
+       }
+    }
+
+    MPI_Win_free(&win);
+    MTest_Finalize( errs );
+    MPI_Finalize( );
+    
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/compare_and_swap.c b/teshsuite/smpi/mpich3-test/rma/compare_and_swap.c
new file mode 100644 (file)
index 0000000..96eace1
--- /dev/null
@@ -0,0 +1,108 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define ITER 100
+
+int main(int argc, char **argv) {
+    int       i, j, rank, nproc;
+    int       errors = 0, all_errors = 0;
+    int      *val_ptr;
+    MPI_Win   win;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    val_ptr = malloc(sizeof(int));
+
+    *val_ptr = 0;
+
+    MPI_Win_create(val_ptr, sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+
+    /* Test self communication */
+
+    for (i = 0; i < ITER; i++) {
+        int next = i + 1, result = -1;
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+        MPI_Compare_and_swap(&next, &i, &result, MPI_INT, rank, 0, win);
+        MPI_Win_unlock(rank, win);
+        if (result != i) {
+            SQUELCH( printf("%d->%d -- Error: next=%d compare=%d result=%d val=%d\n", rank,
+                           rank, next, i, result, *val_ptr); );
+            errors++;
+        }
+    }
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    *val_ptr = 0;
+    MPI_Win_unlock(rank, win);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Test neighbor communication */
+
+    for (i = 0; i < ITER; i++) {
+        int next = i + 1, result = -1;
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, (rank+1)%nproc, 0, win);
+        MPI_Compare_and_swap(&next, &i, &result, MPI_INT, (rank+1)%nproc, 0, win);
+        MPI_Win_unlock((rank+1)%nproc, win);
+        if (result != i) {
+            SQUELCH( printf("%d->%d -- Error: next=%d compare=%d result=%d val=%d\n", rank,
+                           (rank+1)%nproc, next, i, result, *val_ptr); );
+            errors++;
+        }
+    }
+
+    fflush(NULL);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    *val_ptr = 0;
+    MPI_Win_unlock(rank, win);
+    MPI_Barrier(MPI_COMM_WORLD);
+
+
+    /* Test contention */
+
+    if (rank != 0) {
+        for (i = 0; i < ITER; i++) {
+            int next = i + 1, result = -1;
+            MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
+            MPI_Compare_and_swap(&next, &i, &result, MPI_INT, 0, 0, win);
+            MPI_Win_unlock(0, win);
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    if (rank == 0 && nproc > 1) {
+        if (*val_ptr != ITER) {
+            SQUELCH( printf("%d - Error: expected=%d val=%d\n", rank, ITER, *val_ptr); );
+            errors++;
+        }
+    }
+
+    MPI_Win_free(&win);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    free(val_ptr);
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/contention_put.c b/teshsuite/smpi/mpich3-test/rma/contention_put.c
new file mode 100644 (file)
index 0000000..2b2be30
--- /dev/null
@@ -0,0 +1,105 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/** Contended RMA put test -- James Dinan <dinan@mcs.anl.gov>
+  *
+  * Each process issues COUNT put operations to non-overlapping locations on
+  * every other processs.
+  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "mpi.h"
+#include "mpitest.h"
+
+#define MAXELEMS      6400
+#define COUNT         1000
+
+static int me, nproc;
+static const int verbose = 0;
+
+int test_put(void);
+
+int test_put(void)
+{
+  MPI_Win  dst_win;
+  double  *dst_buf;
+  double   src_buf[MAXELEMS];
+  int      i, j;
+  int      errs = 0;
+
+  MPI_Alloc_mem(sizeof(double)*nproc*MAXELEMS, MPI_INFO_NULL, &dst_buf);
+  MPI_Win_create(dst_buf, sizeof(double)*nproc*MAXELEMS, 1, MPI_INFO_NULL, 
+                MPI_COMM_WORLD, &dst_win);
+
+  for (i = 0; i < MAXELEMS; i++)
+    src_buf[i] = me + 1.0;
+
+  MPI_Win_lock(MPI_LOCK_EXCLUSIVE, me, 0, dst_win);
+
+  for (i = 0; i < nproc*MAXELEMS; i++)
+    dst_buf[i] = 0.0;
+
+  MPI_Win_unlock(me, dst_win);
+
+  MPI_Barrier(MPI_COMM_WORLD);
+
+  for(i = 0; i < nproc; i++) {
+    /* int target = (me + i) % nproc; */
+    int target = i;
+    for(j = 0; j < COUNT; j++) {
+      if (verbose) printf("%2d -> %2d [%2d]\n", me, target, j); 
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, dst_win);
+      MPI_Put(&src_buf[j], sizeof(double), MPI_BYTE, target, 
+             (me*MAXELEMS+j)*sizeof(double), sizeof(double), MPI_BYTE, dst_win);
+      MPI_Win_unlock(target, dst_win);
+    }
+  }
+
+  MPI_Barrier(MPI_COMM_WORLD);
+
+  /* Check that the correct data was returned.  This assumes that the 
+     systems have the same data representations */
+  for (i=0; i<nproc; i++) {
+      for (j=0; j<COUNT; j++) {
+         if (dst_buf[i*MAXELEMS+j] != 1.0 + i) {
+             errs++;
+             printf( "dst_buf[%d] = %e, expected %e\n",
+                     i*MAXELEMS+j, dst_buf[i*MAXELEMS+j], 1.0 + i );
+         }
+      }
+  }
+
+  MPI_Win_free(&dst_win);
+  MPI_Free_mem(dst_buf);
+
+  return errs;
+}
+
+
+int main(int argc, char* argv[]) {
+    int errs = 0;
+
+    MTest_Init(&argc, &argv);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    MPI_Comm_rank(MPI_COMM_WORLD, &me);
+    
+    assert(COUNT <= MAXELEMS);
+    
+    if (me == 0 && verbose) {
+       printf("Test starting on %d processes\n", nproc); 
+       fflush(stdout);
+    }
+    
+    errs = test_put();
+    
+    MPI_Barrier(MPI_COMM_WORLD);
+    
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return MTestReturnValue( errs );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/contention_putget.c b/teshsuite/smpi/mpich3-test/rma/contention_putget.c
new file mode 100644 (file)
index 0000000..6a539a0
--- /dev/null
@@ -0,0 +1,99 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/** Contended RMA put/get test -- James Dinan <dinan@mcs.anl.gov>
+  *
+  * Each process issues COUNT put and get operations to non-overlapping
+  * locations on every other processs.
+  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "mpi.h"
+
+#define MAXELEMS      6400
+#define COUNT         1000
+
+static int me, nproc;
+static const int verbose = 0;
+
+void test_put(void);
+void test_put(void)
+{
+  MPI_Win  dst_win;
+  double  *dst_buf;
+  double   src_buf[MAXELEMS];
+  int      i, j;
+
+  MPI_Alloc_mem(sizeof(double)*nproc*MAXELEMS, MPI_INFO_NULL, &dst_buf);
+  MPI_Win_create(dst_buf, sizeof(double)*nproc*MAXELEMS, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &dst_win);
+
+  for (i = 0; i < MAXELEMS; i++)
+    src_buf[i] = me + 1.0;
+
+  MPI_Win_lock(MPI_LOCK_EXCLUSIVE, me, 0, dst_win);
+
+  for (i = 0; i < nproc*MAXELEMS; i++)
+    dst_buf[i] = 0.0;
+
+  MPI_Win_unlock(me, dst_win);
+
+  MPI_Barrier(MPI_COMM_WORLD);
+
+  for(i = 0; i < nproc; i++) {
+    int target = i;
+
+    for(j = 0; j < COUNT; j++) {
+      if (verbose) printf("%2d -> %2d [%2d]\n", me, target, j); 
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, dst_win);
+      MPI_Put(&src_buf[j], sizeof(double), MPI_BYTE, target, (me*MAXELEMS+j)*sizeof(double), sizeof(double), MPI_BYTE, dst_win);
+      MPI_Win_unlock(target, dst_win);
+    }
+
+    for(j = 0; j < COUNT; j++) {
+      if (verbose) printf("%2d <- %2d [%2d]\n", me, target, j); 
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, dst_win);
+      MPI_Get(&src_buf[j], sizeof(double), MPI_BYTE, target, (me*MAXELEMS+j)*sizeof(double), sizeof(double), MPI_BYTE, dst_win);
+      MPI_Win_unlock(target, dst_win);
+    }
+  }
+
+  MPI_Barrier(MPI_COMM_WORLD);
+
+  MPI_Win_free(&dst_win);
+  MPI_Free_mem(dst_buf);
+}
+
+
+int main(int argc, char* argv[]) {
+  MPI_Init(&argc, &argv);
+  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+  MPI_Comm_rank(MPI_COMM_WORLD, &me);
+
+  assert(COUNT <= MAXELEMS);
+
+  if (me == 0 && verbose) {
+    printf("Test starting on %d processes\n", nproc); 
+    fflush(stdout);
+  }
+
+  test_put();
+
+  MPI_Barrier(MPI_COMM_WORLD);
+
+  MPI_Finalize();
+
+  if (me == 0 && verbose) {
+    printf("Test completed.\n");
+    fflush(stdout);
+  }
+
+  if (me == 0)
+    printf(" No Errors\n");
+
+  return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/contig_displ.c b/teshsuite/smpi/mpich3-test/rma/contig_displ.c
new file mode 100644 (file)
index 0000000..9d37da6
--- /dev/null
@@ -0,0 +1,98 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <mpi.h>
+#include "mpitest.h"
+
+/* Run with 1 process.
+
+   This program does an MPI_Get with an indexed datatype. The datatype
+   comprises a single integer at an initial displacement of 1 integer. 
+   That is, the first integer in the array is to be skipped.
+
+   This program found a bug in IBM's MPI in which MPI_Get ignored the
+   displacement and got the first integer instead of the second. 
+*/
+
+int main(int argc, char **argv)
+{
+    int rank, nprocs, mpi_err, *array;
+    int getval, disp, errs=0;
+    MPI_Win win;
+    MPI_Datatype type;
+    
+    MTest_Init(&argc,&argv); 
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (rank == 0) {
+        /* To improve reporting of problems about operations, we
+           change the error handler to errors return */
+        MPI_Comm_set_errhandler( MPI_COMM_SELF, MPI_ERRORS_RETURN );
+        /* create an indexed datatype that points to the second integer 
+           in an array (the first integer is skipped). */
+        disp  =  1;
+        mpi_err = MPI_Type_create_indexed_block(1, 1, &disp, MPI_INT, &type);
+        if (mpi_err != MPI_SUCCESS) goto err_return;
+        mpi_err = MPI_Type_commit(&type);
+        if (mpi_err != MPI_SUCCESS) goto err_return;
+        /* allocate window of size 2 integers*/
+        mpi_err = MPI_Alloc_mem(2*sizeof(int), MPI_INFO_NULL, &array);
+        if (mpi_err != MPI_SUCCESS) goto err_return;
+        /* create window object */
+        mpi_err = MPI_Win_create(array, 2*sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_SELF, &win);
+        if (mpi_err != MPI_SUCCESS) goto err_return;
+  
+        /* initialize array */
+        array[0] = 100;
+        array[1] = 200;
+        getval = 0;
+        
+        /* To improve reporting of problems about operations, we
+           change the error handler to errors return */
+        MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+        mpi_err = MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
+        if (mpi_err != MPI_SUCCESS) goto err_return;
+        /* get the current value of element array[1] */
+        mpi_err = MPI_Get(&getval, 1, MPI_INT, 0, 0, 1, type, win);
+        if (mpi_err != MPI_SUCCESS) goto err_return;
+        mpi_err = MPI_Win_unlock(0, win);
+        if (mpi_err != MPI_SUCCESS) goto err_return;
+        /* getval should contain the value of array[1] */
+        if (getval != array[1]) {
+            errs++;
+            printf("getval=%d, should be %d\n", getval, array[1]);
+        }
+        MPI_Free_mem(array);
+        MPI_Win_free(&win);
+        MPI_Type_free(&type);
+    }
+
+    MTest_Finalize(errs);
+    MPI_Finalize();
+    return 0;
+
+ err_return:
+    printf("MPI function error returned an error\n");
+    MTestPrintError( mpi_err );
+    errs++;
+    MTest_Finalize(errs);
+    MPI_Finalize();
+    return 1;
+}
+
+
diff --git a/teshsuite/smpi/mpich3-test/rma/epochtest.c b/teshsuite/smpi/mpich3-test/rma/epochtest.c
new file mode 100644 (file)
index 0000000..7a3222a
--- /dev/null
@@ -0,0 +1,191 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2009 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/*
+ * This test looks at the behavior of MPI_Win_fence and epochs.  Each 
+ * MPI_Win_fence may both begin and end both the exposure and access epochs.
+ * Thus, it is not necessary to use MPI_Win_fence in pairs.
+ *
+ * The tests have this form:
+ *    Process A             Process B
+ *     fence                 fence
+ *      put,put
+ *     fence                 fence
+ *                            put,put
+ *     fence                 fence
+ *      put,put               put,put
+ *     fence                 fence
+ */
+
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Put with Fences used to separate epochs";
+*/
+
+#define MAX_PERR 10
+
+int PrintRecvedError( const char *, MTestDatatype *, MTestDatatype * );
+
+int main( int argc, char **argv )
+{
+    int errs = 0, err;
+    int rank, size, source, dest;
+    int minsize = 2, count; 
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Aint      extent;
+    MTestDatatype sendtype, recvtype;
+    int           onlyInt = 0;
+
+    MTest_Init( &argc, &argv );
+    /* Check for a simple choice of communicator and datatypes */
+    if (getenv( "MTEST_SIMPLE" )) onlyInt = 1;
+
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       source = 0;
+       dest   = size - 1;
+       
+       for (count = 1; count < 65000; count = count * 2) {
+           while (MTestGetDatatypes( &sendtype, &recvtype, count )) {
+
+               MTestPrintfMsg( 1, 
+                      "Putting count = %d of sendtype %s receive type %s\n", 
+                               count, MTestGetDatatypeName( &sendtype ),
+                               MTestGetDatatypeName( &recvtype ) );
+
+               /* Make sure that everyone has a recv buffer */
+               recvtype.InitBuf( &recvtype );
+
+               MPI_Type_extent( recvtype.datatype, &extent );
+               MPI_Win_create( recvtype.buf, recvtype.count * extent, 
+                               extent, MPI_INFO_NULL, comm, &win );
+               /* To improve reporting of problems about operations, we
+                  change the error handler to errors return */
+               MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+
+               /* At this point, we have all of the elements that we 
+                  need to begin the multiple fence and put tests */
+               /* Fence 1 */
+               err = MPI_Win_fence( MPI_MODE_NOPRECEDE, win ); 
+               if (err) { if (errs++ < MAX_PERR) MTestPrintError(err); }
+               /* Source puts */
+               if (rank == source) {
+                   sendtype.InitBuf( &sendtype );
+                   
+                   err = MPI_Put( sendtype.buf, sendtype.count, 
+                                  sendtype.datatype, dest, 0, 
+                                  recvtype.count, recvtype.datatype, win );
+                   if (err) { if (errs++ < MAX_PERR) MTestPrintError(err); }
+               }
+
+               /* Fence 2 */
+               err = MPI_Win_fence( 0, win );
+               if (err) { if (errs++ < MAX_PERR) MTestPrintError(err); }
+               /* dest checks data, then Dest puts */
+               if (rank == dest) {
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) { if (errs++ < MAX_PERR) { 
+                           PrintRecvedError( "fence 2", &sendtype, &recvtype );
+                       }
+                   }
+                   sendtype.InitBuf( &sendtype );
+                   
+                   err = MPI_Put( sendtype.buf, sendtype.count, 
+                                  sendtype.datatype, source, 0, 
+                                  recvtype.count, recvtype.datatype, win );
+                   if (err) { if (errs++ < MAX_PERR) MTestPrintError(err); }
+               }
+
+               /* Fence 3 */
+               err = MPI_Win_fence( 0, win );
+               if (err) { if (errs++ < MAX_PERR) MTestPrintError(err); }
+               /* src checks data, then Src and dest puts*/
+               if (rank == source) {
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) { if (errs++ < MAX_PERR) { 
+                           PrintRecvedError( "fence 3", &sendtype, &recvtype );
+                       }
+                   }
+                   sendtype.InitBuf( &sendtype );
+                   
+                   err = MPI_Put( sendtype.buf, sendtype.count, 
+                                  sendtype.datatype, dest, 0, 
+                                  recvtype.count, recvtype.datatype, win );
+                   if (err) { if (errs++ < MAX_PERR) MTestPrintError(err); }
+               }
+               if (rank == dest) {
+                   sendtype.InitBuf( &sendtype );
+                   
+                   err = MPI_Put( sendtype.buf, sendtype.count, 
+                                  sendtype.datatype, source, 0, 
+                                  recvtype.count, recvtype.datatype, win );
+                   if (err) { if (errs++ < MAX_PERR) MTestPrintError(err); }
+               }
+
+               /* Fence 4 */
+               err = MPI_Win_fence( MPI_MODE_NOSUCCEED, win );
+               if (err) { if (errs++ < MAX_PERR) MTestPrintError(err); }
+               /* src and dest checks data */
+               if (rank == source) {
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) { if (errs++ < MAX_PERR) { 
+                           PrintRecvedError( "src fence4", &sendtype, &recvtype );
+                       }
+                   }
+               }
+               if (rank == dest) {
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) { if (errs++ < MAX_PERR) { 
+                           PrintRecvedError( "dest fence4", &sendtype, &recvtype );
+                       }
+                   }
+               }
+
+               MPI_Win_free( &win );
+               MTestFreeDatatype( &sendtype );
+               MTestFreeDatatype( &recvtype );
+
+               /* Only do one datatype in the simple case */
+               if (onlyInt) break;
+           }
+           /* Only do one count in the simple case */
+           if (onlyInt) break;
+       }
+        MTestFreeComm(&comm);
+       /* Only do one communicator in the simple case */
+       if (onlyInt) break;
+    }
+
+    MTest_Finalize( errs );
+
+    
+    
+    MPI_Finalize();
+    return 0;
+}
+
+
+int PrintRecvedError( const char *msg, 
+                     MTestDatatype *sendtypePtr, MTestDatatype *recvtypePtr )
+{
+    printf( "At step %s, Data in target buffer did not match for destination datatype %s (put with source datatype %s)\n", 
+           msg, 
+           MTestGetDatatypeName( recvtypePtr ),
+           MTestGetDatatypeName( sendtypePtr ) );
+    /* Redo the test, with the errors printed */
+    recvtypePtr->printErrors = 1;
+    (void)MTestCheckRecv( 0, recvtypePtr );
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/fetch_and_op.c b/teshsuite/smpi/mpich3-test/rma/fetch_and_op.c
new file mode 100644 (file)
index 0000000..93503dd
--- /dev/null
@@ -0,0 +1,311 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define ITER 100
+
+#if defined (FOP_TYPE_CHAR)
+#  define TYPE_C   char
+#  define TYPE_MPI MPI_CHAR
+#  define TYPE_FMT "%d"
+#elif defined (FOP_TYPE_SHORT)
+#  define TYPE_C   short
+#  define TYPE_MPI MPI_SHORT
+#  define TYPE_FMT "%d"
+#elif defined (FOP_TYPE_LONG)
+#  define TYPE_C   long
+#  define TYPE_MPI MPI_LONG
+#  define TYPE_FMT "%ld"
+#elif defined (FOP_TYPE_DOUBLE)
+#  define TYPE_C   double
+#  define TYPE_MPI MPI_DOUBLE
+#  define TYPE_FMT "%f"
+#elif defined (FOP_TYPE_LONG_DOUBLE)
+#  define TYPE_C   long double
+#  define TYPE_MPI MPI_LONG_DOUBLE
+#  define TYPE_FMT "%Lf"
+#else
+#  define TYPE_C   int
+#  define TYPE_MPI MPI_INT
+#  define TYPE_FMT "%d"
+#endif
+
+#define CMP(x, y) ((x - ((TYPE_C) (y))) > 1.0e-9)
+
+void reset_vars(TYPE_C *val_ptr, TYPE_C *res_ptr, MPI_Win win) {
+    int i, rank, nproc;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++) {
+        val_ptr[i] = 0;
+        res_ptr[i] = -1;
+    }
+    MPI_Win_unlock(rank, win);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+}
+
+int main(int argc, char **argv) {
+    int       i, rank, nproc, mpi_type_size;
+    int       errors = 0, all_errors = 0;
+    TYPE_C   *val_ptr, *res_ptr;
+    MPI_Win   win;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+    MPI_Type_size(TYPE_MPI, &mpi_type_size);
+    assert(mpi_type_size == sizeof(TYPE_C));
+
+    val_ptr = malloc(sizeof(TYPE_C)*nproc);
+    res_ptr = malloc(sizeof(TYPE_C)*nproc);
+
+    MPI_Win_create(val_ptr, sizeof(TYPE_C)*nproc, sizeof(TYPE_C), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+
+    /* Test self communication */
+
+    reset_vars(val_ptr, res_ptr, win);
+
+    for (i = 0; i < ITER; i++) {
+        TYPE_C one = 1, result = -1;
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+        MPI_Fetch_and_op(&one, &result, TYPE_MPI, rank, 0, MPI_SUM, win);
+        MPI_Win_unlock(rank, win);
+    }
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    if ( CMP(val_ptr[0], ITER) ) {
+        SQUELCH( printf("%d->%d -- SELF: expected "TYPE_FMT", got "TYPE_FMT"\n", rank, rank, (TYPE_C) ITER, val_ptr[0]); );
+        errors++;
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test neighbor communication */
+
+    reset_vars(val_ptr, res_ptr, win);
+
+    for (i = 0; i < ITER; i++) {
+        TYPE_C one = 1, result = -1;
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, (rank+1)%nproc, 0, win);
+        MPI_Fetch_and_op(&one, &result, TYPE_MPI, (rank+1)%nproc, 0, MPI_SUM, win);
+        MPI_Win_unlock((rank+1)%nproc, win);
+        if ( CMP(result, i) ) {
+            SQUELCH( printf("%d->%d -- NEIGHBOR[%d]: expected result "TYPE_FMT", got "TYPE_FMT"\n", (rank+1)%nproc, rank, i, (TYPE_C) i, result); );
+            errors++;
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    if ( CMP(val_ptr[0], ITER) ) {
+        SQUELCH( printf("%d->%d -- NEIGHBOR: expected "TYPE_FMT", got "TYPE_FMT"\n", (rank+1)%nproc, rank, (TYPE_C) ITER, val_ptr[0]); );
+        errors++;
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test contention */
+
+    reset_vars(val_ptr, res_ptr, win);
+
+    if (rank != 0) {
+        for (i = 0; i < ITER; i++) {
+            TYPE_C one = 1, result;
+            MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
+            MPI_Fetch_and_op(&one, &result, TYPE_MPI, 0, 0, MPI_SUM, win);
+            MPI_Win_unlock(0, win);
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    if (rank == 0 && nproc > 1) {
+        if ( CMP(val_ptr[0], ITER*(nproc-1)) ) {
+            SQUELCH( printf("*->%d - CONTENTION: expected="TYPE_FMT" val="TYPE_FMT"\n", rank, (TYPE_C) ITER*(nproc-1), val_ptr[0]); );
+            errors++;
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test all-to-all communication (fence) */
+
+    reset_vars(val_ptr, res_ptr, win);
+
+    for (i = 0; i < ITER; i++) {
+        int j;
+
+        MPI_Win_fence(MPI_MODE_NOPRECEDE, win);
+        for (j = 0; j < nproc; j++) {
+            TYPE_C rank_cnv = (TYPE_C) rank;
+            MPI_Fetch_and_op(&rank_cnv, &res_ptr[j], TYPE_MPI, j, rank, MPI_SUM, win);
+            res_ptr[j] = i*rank;
+        }
+        MPI_Win_fence(MPI_MODE_NOSUCCEED, win);
+        MPI_Barrier(MPI_COMM_WORLD);
+
+        for (j = 0; j < nproc; j++) {
+            if ( CMP(res_ptr[j], i*rank) ) {
+                SQUELCH( printf("%d->%d -- ALL-TO-ALL (FENCE) [%d]: expected result "TYPE_FMT", got "TYPE_FMT"\n", rank, j, i, (TYPE_C) i*rank, res_ptr[j]); );
+                errors++;
+            }
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++) {
+        if ( CMP(val_ptr[i], ITER*i) ) {
+            SQUELCH( printf("%d->%d -- ALL-TO-ALL (FENCE): expected "TYPE_FMT", got "TYPE_FMT"\n", i, rank, (TYPE_C) ITER*i, val_ptr[i]); );
+            errors++;
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test all-to-all communication (lock-all) */
+
+    reset_vars(val_ptr, res_ptr, win);
+
+    for (i = 0; i < ITER; i++) {
+        int j;
+
+        MPI_Win_lock_all(0, win);
+        for (j = 0; j < nproc; j++) {
+            TYPE_C rank_cnv = (TYPE_C) rank;
+            MPI_Fetch_and_op(&rank_cnv, &res_ptr[j], TYPE_MPI, j, rank, MPI_SUM, win);
+            res_ptr[j] = i*rank;
+        }
+        MPI_Win_unlock_all(win);
+        MPI_Barrier(MPI_COMM_WORLD);
+
+        for (j = 0; j < nproc; j++) {
+            if ( CMP(res_ptr[j], i*rank) ) {
+                SQUELCH( printf("%d->%d -- ALL-TO-ALL (LOCK-ALL) [%d]: expected result "TYPE_FMT", got "TYPE_FMT"\n", rank, j, i, (TYPE_C) i*rank, res_ptr[j]); );
+                errors++;
+            }
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++) {
+        if ( CMP(val_ptr[i], ITER*i) ) {
+            SQUELCH( printf("%d->%d -- ALL-TO-ALL (LOCK-ALL): expected "TYPE_FMT", got "TYPE_FMT"\n", i, rank, (TYPE_C) ITER*i, val_ptr[i]); );
+            errors++;
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test all-to-all communication (lock-all+flush) */
+
+    reset_vars(val_ptr, res_ptr, win);
+
+    for (i = 0; i < ITER; i++) {
+        int j;
+
+        MPI_Win_lock_all(0, win);
+        for (j = 0; j < nproc; j++) {
+            TYPE_C rank_cnv = (TYPE_C) rank;
+            MPI_Fetch_and_op(&rank_cnv, &res_ptr[j], TYPE_MPI, j, rank, MPI_SUM, win);
+            res_ptr[j] = i*rank;
+            MPI_Win_flush(j, win);
+        }
+        MPI_Win_unlock_all(win);
+        MPI_Barrier(MPI_COMM_WORLD);
+
+        for (j = 0; j < nproc; j++) {
+            if ( CMP(res_ptr[j], i*rank) ) {
+                SQUELCH( printf("%d->%d -- ALL-TO-ALL (LOCK-ALL+FLUSH) [%d]: expected result "TYPE_FMT", got "TYPE_FMT"\n", rank, j, i, (TYPE_C) i*rank, res_ptr[j]); );
+                errors++;
+            }
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++) {
+        if ( CMP(val_ptr[i], ITER*i) ) {
+            SQUELCH( printf("%d->%d -- ALL-TO-ALL (LOCK-ALL+FLUSH): expected "TYPE_FMT", got "TYPE_FMT"\n", i, rank, (TYPE_C) ITER*i, val_ptr[i]); );
+            errors++;
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test NO_OP (neighbor communication) */
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    reset_vars(val_ptr, res_ptr, win);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++)
+        val_ptr[i] = (TYPE_C) rank;
+    MPI_Win_unlock(rank, win);
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    for (i = 0; i < ITER; i++) {
+        int target = (rank+1) % nproc;
+
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
+        MPI_Fetch_and_op(NULL, res_ptr, TYPE_MPI, target, 0, MPI_NO_OP, win);
+        MPI_Win_unlock(target, win);
+
+        if (res_ptr[0] != (TYPE_C) target) {
+            SQUELCH( printf("%d->%d -- NOP[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                            target, rank, i, (TYPE_C) target, res_ptr[0]); );
+            errors++;
+        }
+    }
+
+    /* Test NO_OP (self communication) */
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    reset_vars(val_ptr, res_ptr, win);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++)
+        val_ptr[i] = (TYPE_C) rank;
+    MPI_Win_unlock(rank, win);
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    for (i = 0; i < ITER; i++) {
+        int target = rank;
+
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
+        MPI_Fetch_and_op(NULL, res_ptr, TYPE_MPI, target, 0, MPI_NO_OP, win);
+        MPI_Win_unlock(target, win);
+
+        if (res_ptr[0] != (TYPE_C) target) {
+            SQUELCH( printf("%d->%d -- NOP_SELF[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                            target, rank, i, (TYPE_C) target, res_ptr[0]); );
+            errors++;
+        }
+    }
+
+    MPI_Win_free(&win);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    free(val_ptr);
+    free(res_ptr);
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/fetchandadd.c b/teshsuite/smpi/mpich3-test/rma/fetchandadd.c
new file mode 100644 (file)
index 0000000..dd12a4c
--- /dev/null
@@ -0,0 +1,127 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+
+/* Fetch and add example from Using MPI-2 (the non-scalable version,
+   Fig. 6.12). */ 
+
+
+#define NTIMES 20  /* no of times each process calls the counter
+                      routine */
+
+int localvalue=0;  /* contribution of this process to the counter. We
+                    define it as a global variable because attribute
+                    caching on the window is not enabled yet. */ 
+
+void Get_nextval(MPI_Win win, int *val_array, MPI_Datatype get_type,
+                 int rank, int nprocs, int *value);
+
+int compar(const void *a, const void *b);
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, i, blens[2], disps[2], *counter_mem, *val_array,
+        *results, *counter_vals;
+    MPI_Datatype get_type;
+    MPI_Win win;
+    int errs = 0;
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (rank == 0) {
+        /* allocate counter memory and initialize to 0 */
+        counter_mem = (int *) calloc(nprocs, sizeof(int));
+        MPI_Win_create(counter_mem, nprocs*sizeof(int), sizeof(int),
+                       MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+
+        MPI_Win_free(&win); 
+        free(counter_mem);
+
+        /* gather the results from other processes, sort them, and check 
+           whether they represent a counter being incremented by 1 */
+
+        results = (int *) malloc(NTIMES*nprocs*sizeof(int));
+        for (i=0; i<NTIMES*nprocs; i++)
+            results[i] = -1;
+
+        MPI_Gather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, results, NTIMES, MPI_INT, 
+                   0, MPI_COMM_WORLD);
+
+        qsort(results+NTIMES, NTIMES*(nprocs-1), sizeof(int), compar);
+
+        for (i=NTIMES+1; i<(NTIMES*nprocs); i++)
+            if (results[i] != results[i-1] + 1)
+                errs++;
+        
+        free(results);
+    }
+    else {
+        blens[0] = rank;
+        disps[0] = 0;
+        blens[1] = nprocs - rank - 1;
+        disps[1] = rank + 1;
+
+        MPI_Type_indexed(2, blens, disps, MPI_INT, &get_type);
+        MPI_Type_commit(&get_type);
+
+        val_array = (int *) malloc(nprocs * sizeof(int));
+
+        /* allocate array to store the values obtained from the 
+           fetch-and-add counter */
+        counter_vals = (int *) malloc(NTIMES * sizeof(int));
+
+        MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); 
+
+        for (i=0; i<NTIMES; i++) {
+            Get_nextval(win, val_array, get_type, rank, nprocs, counter_vals+i);
+            /* printf("Rank %d, counter %d\n", rank, value); */
+        }
+
+        MPI_Win_free(&win);
+
+        free(val_array);
+        MPI_Type_free(&get_type);
+
+        /* gather the results to the root */
+        MPI_Gather(counter_vals, NTIMES, MPI_INT, NULL, 0, MPI_DATATYPE_NULL, 
+                   0, MPI_COMM_WORLD);
+        free(counter_vals);
+    }
+
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
+
+
+void Get_nextval(MPI_Win win, int *val_array, MPI_Datatype get_type,
+                 int rank, int nprocs, int *value) 
+{
+    int one=1, i;
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
+    MPI_Accumulate(&one, 1, MPI_INT, 0, rank, 1, MPI_INT, MPI_SUM, win);
+    MPI_Get(val_array, 1, get_type, 0, 0, 1, get_type, win); 
+    MPI_Win_unlock(0, win);
+
+    *value = 0;
+    val_array[rank] = localvalue;
+    for (i=0; i<nprocs; i++)
+        *value = *value + val_array[i];
+
+    localvalue++;
+}
+
+int compar(const void *a, const void *b)
+{
+    return (*((int *)a) - *((int *)b));
+}
+
diff --git a/teshsuite/smpi/mpich3-test/rma/fetchandadd_am.c b/teshsuite/smpi/mpich3-test/rma/fetchandadd_am.c
new file mode 100644 (file)
index 0000000..0ecde99
--- /dev/null
@@ -0,0 +1,137 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+
+/* Fetch and add example from Using MPI-2 (the non-scalable version,
+   Fig. 6.12). */ 
+
+/* same as fetchandadd.c but uses alloc_mem */
+
+#define NTIMES 20  /* no of times each process calls the counter
+                      routine */
+
+int localvalue=0;  /* contribution of this process to the counter. We
+                    define it as a global variable because attribute
+                    caching on the window is not enabled yet. */ 
+
+void Get_nextval(MPI_Win win, int *val_array, MPI_Datatype get_type,
+                 int rank, int nprocs, int *value);
+
+int compar(const void *a, const void *b);
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, i, blens[2], disps[2], *counter_mem, *val_array,
+        *results, *counter_vals;
+    MPI_Datatype get_type;
+    MPI_Win win;
+    int errs = 0;
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (rank == 0) {
+        /* allocate counter memory and initialize to 0 */
+        /* counter_mem = (int *) calloc(nprocs, sizeof(int)); */
+
+        i = MPI_Alloc_mem(nprocs*sizeof(int), MPI_INFO_NULL, &counter_mem);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+
+        for (i=0; i<nprocs; i++) counter_mem[i] = 0;
+
+        MPI_Win_create(counter_mem, nprocs*sizeof(int), sizeof(int),
+                       MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+
+        MPI_Win_free(&win); 
+        MPI_Free_mem(counter_mem);
+
+        /* gather the results from other processes, sort them, and check 
+           whether they represent a counter being incremented by 1 */
+
+        results = (int *) malloc(NTIMES*nprocs*sizeof(int));
+        for (i=0; i<NTIMES*nprocs; i++)
+            results[i] = -1;
+
+        MPI_Gather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, results, NTIMES, MPI_INT, 
+                   0, MPI_COMM_WORLD);
+
+        qsort(results+NTIMES, NTIMES*(nprocs-1), sizeof(int), compar);
+
+        for (i=NTIMES+1; i<(NTIMES*nprocs); i++)
+            if (results[i] != results[i-1] + 1)
+                errs++;
+        
+        free(results);
+    }
+    else {
+        blens[0] = rank;
+        disps[0] = 0;
+        blens[1] = nprocs - rank - 1;
+        disps[1] = rank + 1;
+
+        MPI_Type_indexed(2, blens, disps, MPI_INT, &get_type);
+        MPI_Type_commit(&get_type);
+
+        val_array = (int *) malloc(nprocs * sizeof(int));
+
+        /* allocate array to store the values obtained from the 
+           fetch-and-add counter */
+        counter_vals = (int *) malloc(NTIMES * sizeof(int));
+
+        MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); 
+
+        for (i=0; i<NTIMES; i++) {
+            Get_nextval(win, val_array, get_type, rank, nprocs, counter_vals+i);
+            /* printf("Rank %d, counter %d\n", rank, value); */
+        }
+
+        MPI_Win_free(&win);
+
+        free(val_array);
+        MPI_Type_free(&get_type);
+
+        /* gather the results to the root */
+        MPI_Gather(counter_vals, NTIMES, MPI_INT, NULL, 0, MPI_DATATYPE_NULL, 
+                   0, MPI_COMM_WORLD);
+        free(counter_vals);
+    }
+
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
+
+
+void Get_nextval(MPI_Win win, int *val_array, MPI_Datatype get_type,
+                 int rank, int nprocs, int *value) 
+{
+    int one=1, i;
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
+    MPI_Accumulate(&one, 1, MPI_INT, 0, rank, 1, MPI_INT, MPI_SUM, win);
+    MPI_Get(val_array, 1, get_type, 0, 0, 1, get_type, win); 
+    MPI_Win_unlock(0, win);
+
+    *value = 0;
+    val_array[rank] = localvalue;
+    for (i=0; i<nprocs; i++)
+        *value = *value + val_array[i];
+
+    localvalue++;
+}
+
+int compar(const void *a, const void *b)
+{
+    return (*((int *)a) - *((int *)b));
+}
+
diff --git a/teshsuite/smpi/mpich3-test/rma/fetchandadd_tree.c b/teshsuite/smpi/mpich3-test/rma/fetchandadd_tree.c
new file mode 100644 (file)
index 0000000..8b3c8f3
--- /dev/null
@@ -0,0 +1,176 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+
+/* This is the tree-based scalable version of the fetch-and-add
+   example from Using MPI-2, pg 206-207. The code in the book (Fig
+   6.16) has bugs that are fixed below. */ 
+
+
+#define NTIMES 20  /* no of times each process calls the counter
+                      routine */
+
+int localvalue=0;  /* contribution of this process to the counter. We
+                    define it as a global variable because attribute
+                    caching on the window is not enabled yet. */ 
+
+void Get_nextval_tree(MPI_Win win, int *get_array, MPI_Datatype get_type,
+                 MPI_Datatype acc_type, int nlevels, int *value);
+
+int compar(const void *a, const void *b);
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, i, *counter_mem, *get_array, *get_idx, *acc_idx,
+        mask, nlevels, level, idx, tmp_rank, pof2;
+    MPI_Datatype get_type, acc_type;
+    MPI_Win win;
+    int errs = 0, *results, *counter_vals;
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (rank == 0) {
+        /* allocate counter memory and initialize to 0 */
+
+        /* find the next power-of-two >= nprocs */
+        pof2 = 1;
+        while (pof2 < nprocs) pof2 *= 2;
+
+        counter_mem = (int *) calloc(pof2*2, sizeof(int));
+        MPI_Win_create(counter_mem, pof2*2*sizeof(int), sizeof(int),
+                       MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+
+        MPI_Win_free(&win); 
+        free(counter_mem);
+
+        /* gather the results from other processes, sort them, and check 
+           whether they represent a counter being incremented by 1 */
+
+        results = (int *) malloc(NTIMES*nprocs*sizeof(int));
+        for (i=0; i<NTIMES*nprocs; i++)
+            results[i] = -1;
+
+        MPI_Gather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, results, NTIMES, MPI_INT, 
+                   0, MPI_COMM_WORLD);
+
+        qsort(results+NTIMES, NTIMES*(nprocs-1), sizeof(int), compar);
+
+        for (i=NTIMES+1; i<(NTIMES*nprocs); i++)
+            if (results[i] != results[i-1] + 1)
+                errs++;
+        
+        free(results);
+    }
+    else {
+        /* Get the largest power of two smaller than nprocs */ 
+        mask = 1; 
+        nlevels = 0;
+        while (mask < nprocs) {
+            mask <<= 1; 
+            nlevels++;
+        }
+        mask >>= 1;
+
+        get_array = (int *) malloc(nlevels * sizeof(int));
+        get_idx = (int *) malloc(nlevels * sizeof(int));
+        acc_idx = (int *) malloc(nlevels * sizeof(int));
+
+        level = 0; 
+        idx   = 0; 
+        tmp_rank = rank;
+        while (mask >= 1) { 
+            if (tmp_rank < mask) { 
+                /* go to left for acc_idx, go to right for
+                   get_idx. set idx=acc_idx for next iteration */ 
+                acc_idx[level] = idx + 1; 
+                get_idx[level] = idx + mask*2; 
+                idx            = idx + 1; 
+            } 
+            else { 
+                /* go to right for acc_idx, go to left for
+                   get_idx. set idx=acc_idx for next iteration */ 
+                acc_idx[level] = idx + mask*2; 
+                get_idx[level] = idx + 1; 
+                idx            = idx + mask*2; 
+            } 
+            level++;
+            tmp_rank = tmp_rank % mask;
+            mask >>= 1; 
+        } 
+
+/*        for (i=0; i<nlevels; i++)
+            printf("Rank %d, acc_idx[%d]=%d, get_idx[%d]=%d\n", rank,
+                   i, acc_idx[i], i, get_idx[i]);
+*/
+
+        MPI_Type_create_indexed_block(nlevels, 1, get_idx, MPI_INT, &get_type);
+        MPI_Type_create_indexed_block(nlevels, 1, acc_idx, MPI_INT, &acc_type);
+        MPI_Type_commit(&get_type);
+        MPI_Type_commit(&acc_type);
+
+        /* allocate array to store the values obtained from the 
+           fetch-and-add counter */
+        counter_vals = (int *) malloc(NTIMES * sizeof(int));
+
+        MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); 
+
+        for (i=0; i<NTIMES; i++) {
+            Get_nextval_tree(win, get_array, get_type, acc_type,
+                             nlevels, counter_vals+i); 
+            /* printf("Rank %d, counter %d\n", rank, value); */
+        }
+
+        MPI_Win_free(&win);
+        free(get_array);
+        free(get_idx);
+        free(acc_idx);
+        MPI_Type_free(&get_type);
+        MPI_Type_free(&acc_type);
+
+         /* gather the results to the root */
+        MPI_Gather(counter_vals, NTIMES, MPI_INT, NULL, 0, MPI_DATATYPE_NULL, 
+                   0, MPI_COMM_WORLD);
+        free(counter_vals);
+   }
+
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return MTestReturnValue( errs );
+} 
+
+
+void Get_nextval_tree(MPI_Win win, int *get_array, MPI_Datatype get_type,
+                      MPI_Datatype acc_type, int nlevels, int *value)
+{
+    int *one, i;
+
+    one = (int *) malloc(nlevels*sizeof(int));
+    for (i=0; i<nlevels; i++) one[i] = 1;
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
+    MPI_Accumulate(one, nlevels, MPI_INT, 0, 0, 1, acc_type,
+                   MPI_SUM, win);
+    MPI_Get(get_array, nlevels, MPI_INT, 0, 0, 1, get_type, win);
+    MPI_Win_unlock(0, win);
+
+    *value = localvalue;
+    for (i=0; i<nlevels; i++)
+        *value = *value + get_array[i];
+
+    localvalue++;
+
+    free(one);
+}
+
+int compar(const void *a, const void *b)
+{
+    return (*((int *)a) - *((int *)b));
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/fetchandadd_tree_am.c b/teshsuite/smpi/mpich3-test/rma/fetchandadd_tree_am.c
new file mode 100644 (file)
index 0000000..f5ca1e0
--- /dev/null
@@ -0,0 +1,188 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+
+/* This is the tree-based scalable version of the fetch-and-add
+   example from Using MPI-2, pg 206-207. The code in the book (Fig
+   6.16) has bugs that are fixed below. */ 
+
+/* same as fetchandadd_tree.c but uses alloc_mem */
+
+#define NTIMES 20  /* no of times each process calls the counter
+                      routine */
+
+int localvalue=0;  /* contribution of this process to the counter. We
+                    define it as a global variable because attribute
+                    caching on the window is not enabled yet. */ 
+
+void Get_nextval_tree(MPI_Win win, int *get_array, MPI_Datatype get_type,
+                 MPI_Datatype acc_type, int nlevels, int *value);
+
+int compar(const void *a, const void *b);
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, i, *counter_mem, *get_array, *get_idx, *acc_idx,
+        mask, nlevels, level, idx, tmp_rank, pof2;
+    MPI_Datatype get_type, acc_type;
+    MPI_Win win;
+    int errs = 0, *results, *counter_vals;
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (rank == 0) {
+        /* allocate counter memory and initialize to 0 */
+
+        /* find the next power-of-two >= nprocs */
+        pof2 = 1;
+        while (pof2 < nprocs) pof2 *= 2;
+
+        /* counter_mem = (int *) calloc(pof2*2, sizeof(int)); */
+
+        i = MPI_Alloc_mem(pof2*2*sizeof(int), MPI_INFO_NULL, &counter_mem);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+
+        for (i=0; i<(pof2*2); i++) counter_mem[i] = 0;
+
+        MPI_Win_create(counter_mem, pof2*2*sizeof(int), sizeof(int),
+                       MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+
+        MPI_Win_free(&win); 
+
+        /* free(counter_mem) */
+        MPI_Free_mem(counter_mem);
+
+        /* gather the results from other processes, sort them, and check 
+           whether they represent a counter being incremented by 1 */
+
+        results = (int *) malloc(NTIMES*nprocs*sizeof(int));
+        for (i=0; i<NTIMES*nprocs; i++)
+            results[i] = -1;
+
+        MPI_Gather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, results, NTIMES, MPI_INT, 
+                   0, MPI_COMM_WORLD);
+
+        qsort(results+NTIMES, NTIMES*(nprocs-1), sizeof(int), compar);
+
+        for (i=NTIMES+1; i<(NTIMES*nprocs); i++)
+            if (results[i] != results[i-1] + 1)
+                errs++;
+        
+        free(results);
+    }
+    else {
+        /* Get the largest power of two smaller than nprocs */ 
+        mask = 1; 
+        nlevels = 0;
+        while (mask < nprocs) {
+            mask <<= 1; 
+            nlevels++;
+        }
+        mask >>= 1;
+
+        get_array = (int *) malloc(nlevels * sizeof(int));
+        get_idx = (int *) malloc(nlevels * sizeof(int));
+        acc_idx = (int *) malloc(nlevels * sizeof(int));
+
+        level = 0; 
+        idx   = 0; 
+        tmp_rank = rank;
+        while (mask >= 1) { 
+            if (tmp_rank < mask) { 
+                /* go to left for acc_idx, go to right for
+                   get_idx. set idx=acc_idx for next iteration */ 
+                acc_idx[level] = idx + 1; 
+                get_idx[level] = idx + mask*2; 
+                idx            = idx + 1; 
+            } 
+            else { 
+                /* go to right for acc_idx, go to left for
+                   get_idx. set idx=acc_idx for next iteration */ 
+                acc_idx[level] = idx + mask*2; 
+                get_idx[level] = idx + 1; 
+                idx            = idx + mask*2; 
+            } 
+            level++;
+            tmp_rank = tmp_rank % mask;
+            mask >>= 1; 
+        } 
+
+/*        for (i=0; i<nlevels; i++)
+            printf("Rank %d, acc_idx[%d]=%d, get_idx[%d]=%d\n", rank,
+                   i, acc_idx[i], i, get_idx[i]);
+*/
+
+        MPI_Type_create_indexed_block(nlevels, 1, get_idx, MPI_INT, &get_type);
+        MPI_Type_create_indexed_block(nlevels, 1, acc_idx, MPI_INT, &acc_type);
+        MPI_Type_commit(&get_type);
+        MPI_Type_commit(&acc_type);
+
+        /* allocate array to store the values obtained from the 
+           fetch-and-add counter */
+        counter_vals = (int *) malloc(NTIMES * sizeof(int));
+
+        MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); 
+
+        for (i=0; i<NTIMES; i++) {
+            Get_nextval_tree(win, get_array, get_type, acc_type,
+                             nlevels, counter_vals+i); 
+            /* printf("Rank %d, counter %d\n", rank, value); */
+        }
+
+        MPI_Win_free(&win);
+        free(get_array);
+        free(get_idx);
+        free(acc_idx);
+        MPI_Type_free(&get_type);
+        MPI_Type_free(&acc_type);
+
+         /* gather the results to the root */
+        MPI_Gather(counter_vals, NTIMES, MPI_INT, NULL, 0, MPI_DATATYPE_NULL, 
+                   0, MPI_COMM_WORLD);
+        free(counter_vals);
+   }
+
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return MTestReturnValue( errs );
+} 
+
+
+void Get_nextval_tree(MPI_Win win, int *get_array, MPI_Datatype get_type,
+                      MPI_Datatype acc_type, int nlevels, int *value)
+{
+    int *one, i;
+
+    one = (int *) malloc(nlevels*sizeof(int));
+    for (i=0; i<nlevels; i++) one[i] = 1;
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
+    MPI_Accumulate(one, nlevels, MPI_INT, 0, 0, 1, acc_type,
+                   MPI_SUM, win);
+    MPI_Get(get_array, nlevels, MPI_INT, 0, 0, 1, get_type, win);
+    MPI_Win_unlock(0, win);
+
+    *value = localvalue;
+    for (i=0; i<nlevels; i++)
+        *value = *value + get_array[i];
+
+    localvalue++;
+
+    free(one);
+}
+
+int compar(const void *a, const void *b)
+{
+    return (*((int *)a) - *((int *)b));
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/fkeyvalwin.c b/teshsuite/smpi/mpich3-test/rma/fkeyvalwin.c
new file mode 100644 (file)
index 0000000..7aed170
--- /dev/null
@@ -0,0 +1,93 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitestconf.h"
+#include "mpitest.h"
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+/*
+static char MTestDescrip[] = "Test freeing keyvals while still attached to \
+a win, then make sure that the keyval delete code are still \
+executed";
+*/
+
+/* Copy increments the attribute value */
+/* Note that we can really ignore this because there is no win dup */
+int copy_fn( MPI_Win oldwin, int keyval, void *extra_state,
+            void *attribute_val_in, void *attribute_val_out, 
+            int *flag);
+int copy_fn( MPI_Win oldwin, int keyval, void *extra_state,
+            void *attribute_val_in, void *attribute_val_out, 
+            int *flag)
+{
+    /* Copy the address of the attribute */
+    *(void **)attribute_val_out = attribute_val_in;
+    /* Change the value */
+    *(int *)attribute_val_in = *(int *)attribute_val_in + 1;
+    *flag = 1;
+    return MPI_SUCCESS;
+}
+
+/* Delete decrements the attribute value */
+int delete_fn( MPI_Win win, int keyval, void *attribute_val, 
+              void *extra_state);
+int delete_fn( MPI_Win win, int keyval, void *attribute_val, 
+              void *extra_state)
+{
+    *(int *)attribute_val = *(int *)attribute_val - 1;
+    return MPI_SUCCESS;
+}
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    int attrval;
+    int i, key[32], keyval, saveKeyval;
+    MPI_Win win;
+    MTest_Init( &argc, &argv );
+
+    while (MTestGetWin( &win, 0 )) {
+       if (win == MPI_WIN_NULL) continue;
+
+       MPI_Win_create_keyval( copy_fn, delete_fn, &keyval, (void *)0 );
+       saveKeyval = keyval;   /* in case we need to free explicitly */
+       attrval = 1;
+       MPI_Win_set_attr( win, keyval, (void*)&attrval );
+       /* See MPI-1, 5.7.1.  Freeing the keyval does not remove it if it
+          is in use in an attribute */
+       MPI_Win_free_keyval( &keyval );
+       
+       /* We create some dummy keyvals here in case the same keyval
+          is reused */
+       for (i=0; i<32; i++) {
+           MPI_Win_create_keyval( MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN,
+                              &key[i], (void *)0 );
+       }
+
+        MTestFreeWin(&win);
+
+       /* Check that the original attribute was freed */
+       if (attrval != 0) {
+           errs++;
+           printf( "Attribute not decremented when win %s freed\n",
+                   MTestGetWinName() );
+       }
+       /* Free those other keyvals */
+       for (i=0; i<32; i++) {
+           MPI_Win_free_keyval( &key[i] );
+       }
+
+    }
+    MTest_Finalize( errs );
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/flush.c b/teshsuite/smpi/mpich3-test/rma/flush.c
new file mode 100644 (file)
index 0000000..1f21470
--- /dev/null
@@ -0,0 +1,89 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include <mpi.h>
+#include <stdio.h>
+#include "mpitest.h"
+
+#define ITER 100
+
+int main( int argc, char *argv[] )
+{
+    int rank, nproc, i;
+    int errors = 0, all_errors = 0;
+    int *buf;
+    MPI_Win window;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    if (nproc < 2) {
+        if (rank == 0) printf("Error: must be run with two or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    /** Create using MPI_Win_create() **/
+
+    if (rank == 0) {
+      MPI_Alloc_mem(sizeof(int), MPI_INFO_NULL, &buf);
+      *buf = nproc-1;
+    } else
+      buf = NULL;
+
+    MPI_Win_create(buf, sizeof(int)*(rank == 0), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &window);
+
+    /* Test flush of an empty epoch */
+    MPI_Win_lock(MPI_LOCK_SHARED, 0, 0, window);
+    MPI_Win_flush_all(window);
+    MPI_Win_unlock(0, window);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Test third-party communication, through rank 0. */
+    MPI_Win_lock(MPI_LOCK_SHARED, 0, 0, window);
+
+    for (i = 0; i < ITER; i++) {
+        int val = -1, exp = -1;
+
+        /* Processes form a ring.  Process 0 starts first, then passes a token
+         * to the right.  Each process, in turn, performs third-party
+         * communication via process 0's window. */
+        if (rank > 0) {
+            MPI_Recv(NULL, 0, MPI_BYTE, rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        }
+
+        MPI_Get_accumulate(&rank, 1, MPI_INT, &val, 1, MPI_INT, 0, 0, 1, MPI_INT, MPI_REPLACE, window);
+        MPI_Win_flush(0, window);
+
+        exp = (rank + nproc-1) % nproc;
+
+        if (val != exp) {
+            printf("%d - Got %d, expected %d\n", rank, val, exp);
+            errors++;
+        }
+
+        if (rank < nproc-1) {
+            MPI_Send(NULL, 0, MPI_BYTE, rank+1, 0, MPI_COMM_WORLD);
+        }
+
+        MPI_Barrier(MPI_COMM_WORLD);
+    }
+
+    MPI_Win_unlock(0, window);
+
+    MPI_Win_free(&window);
+    if (buf) MPI_Free_mem(buf);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/get_acc_local.c b/teshsuite/smpi/mpich3-test/rma/get_acc_local.c
new file mode 100644 (file)
index 0000000..ecf3258
--- /dev/null
@@ -0,0 +1,52 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+
+#include "mpitest.h"
+
+int       errors  = 0;
+const int NITER   = 1000;
+const int acc_val = 3;
+
+int main(int argc, char **argv)
+{
+    int         rank, nproc;
+    int         out_val, i, counter = 0;
+    MPI_Win     win;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_create(&counter, sizeof(int), sizeof(int), MPI_INFO_NULL,
+                   MPI_COMM_WORLD, &win);
+
+    for (i = 0; i < NITER; i++) {
+        MPI_Win_lock(MPI_LOCK_SHARED, rank, 0, win);
+        MPI_Get_accumulate(&acc_val, 1, MPI_INT, &out_val, 1, MPI_INT,
+                            rank, 0, 1, MPI_INT, MPI_SUM, win);
+        MPI_Win_unlock(rank, win);
+
+        if (out_val != acc_val*i) {
+            errors++;
+            printf("Error: got %d, expected %d at iter %d\n", out_val, acc_val*i, i);
+            break;
+        }
+    }
+
+    MPI_Win_free(&win);
+
+    if (errors == 0 && rank == 0)
+        printf(" No errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/get_accumulate.c b/teshsuite/smpi/mpich3-test/rma/get_accumulate.c
new file mode 100644 (file)
index 0000000..5a533fe
--- /dev/null
@@ -0,0 +1,413 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ *
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define ITER  100
+#define COUNT 5
+
+#if defined (GACC_TYPE_SHORT)
+#  define TYPE_C   short
+#  define TYPE_MPI_BASE MPI_SHORT
+#  define TYPE_FMT "%d"
+#elif defined (GACC_TYPE_LONG)
+#  define TYPE_C   long
+#  define TYPE_MPI_BASE MPI_LONG
+#  define TYPE_FMT "%ld"
+#elif defined (GACC_TYPE_DOUBLE)
+#  define TYPE_C   double
+#  define TYPE_MPI_BASE MPI_DOUBLE
+#  define TYPE_FMT "%f"
+#else
+#  define TYPE_C   int
+#  define TYPE_MPI_BASE MPI_INT
+#  define TYPE_FMT "%d"
+#endif
+
+#if defined(GACC_TYPE_DERIVED)
+#  define TYPE_MPI derived_type
+#else
+#  define TYPE_MPI TYPE_MPI_BASE
+#endif
+
+void reset_bufs(TYPE_C *win_ptr, TYPE_C *res_ptr, TYPE_C *val_ptr, TYPE_C value, MPI_Win win) {
+    int rank, nproc, i;
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    memset(win_ptr, 0, sizeof(TYPE_C)*nproc*COUNT);
+    MPI_Win_unlock(rank, win);
+
+    memset(res_ptr, -1, sizeof(TYPE_C)*nproc*COUNT);
+
+    for (i = 0; i < COUNT; i++)
+        val_ptr[i] = value;
+
+    MPI_Barrier(MPI_COMM_WORLD);
+}
+
+int main(int argc, char **argv) {
+    int       i, rank, nproc;
+    int       errors = 0, all_errors = 0;
+    TYPE_C   *win_ptr, *res_ptr, *val_ptr;
+    MPI_Win   win;
+#if defined (GACC_TYPE_DERIVED)
+    MPI_Datatype derived_type;
+#endif
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    win_ptr = malloc(sizeof(TYPE_C)*nproc*COUNT);
+    res_ptr = malloc(sizeof(TYPE_C)*nproc*COUNT);
+    val_ptr = malloc(sizeof(TYPE_C)*COUNT);
+
+#if defined (GACC_TYPE_DERIVED)
+    MPI_Type_contiguous(1, TYPE_MPI_BASE, &derived_type);
+    MPI_Type_commit(&derived_type);
+#endif
+
+    MPI_Win_create(win_ptr, sizeof(TYPE_C)*nproc*COUNT, sizeof(TYPE_C),
+                   MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+
+    /* Test self communication */
+
+    reset_bufs(win_ptr, res_ptr, val_ptr, 1, win);
+
+    for (i = 0; i < ITER; i++) {
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+        MPI_Get_accumulate(val_ptr, COUNT, TYPE_MPI, res_ptr, COUNT, TYPE_MPI, 
+                            rank, 0, COUNT, TYPE_MPI, MPI_SUM, win);
+        MPI_Win_unlock(rank, win);
+    }
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < COUNT; i++) {
+        if (win_ptr[i] != ITER) {
+            SQUELCH( printf("%d->%d -- SELF[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                            rank, rank, i, (TYPE_C) ITER, win_ptr[i]); );
+            errors++;
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test neighbor communication */
+
+    reset_bufs(win_ptr, res_ptr, val_ptr, 1, win);
+
+    for (i = 0; i < ITER; i++) {
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, (rank+1)%nproc, 0, win);
+        MPI_Get_accumulate(val_ptr, COUNT, TYPE_MPI, res_ptr, COUNT, TYPE_MPI, 
+                            (rank+1)%nproc, 0, COUNT, TYPE_MPI, MPI_SUM, win);
+        MPI_Win_unlock((rank+1)%nproc, win);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < COUNT; i++) {
+        if (win_ptr[i] != ITER) {
+            SQUELCH( printf("%d->%d -- NEIGHBOR[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                            (rank+1)%nproc, rank, i, (TYPE_C) ITER, win_ptr[i]); );
+            errors++;
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test contention */
+
+    reset_bufs(win_ptr, res_ptr, val_ptr, 1, win);
+
+    if (rank != 0) {
+        for (i = 0; i < ITER; i++) {
+            MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
+            MPI_Get_accumulate(val_ptr, COUNT, TYPE_MPI, res_ptr, COUNT, TYPE_MPI, 
+                                0, 0, COUNT, TYPE_MPI, MPI_SUM, win);
+            MPI_Win_unlock(0, win);
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    if (rank == 0 && nproc > 1) {
+        for (i = 0; i < COUNT; i++) {
+            if (win_ptr[i] != ITER*(nproc-1)) {
+                SQUELCH( printf("*->%d - CONTENTION[%d]: expected="TYPE_FMT" val="TYPE_FMT"\n",
+                                rank, i, (TYPE_C) ITER*(nproc-1), win_ptr[i]); );
+                errors++;
+            }
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test all-to-all communication (fence) */
+
+    reset_bufs(win_ptr, res_ptr, val_ptr, rank, win);
+
+    for (i = 0; i < ITER; i++) {
+        int j;
+
+        MPI_Win_fence(MPI_MODE_NOPRECEDE, win);
+        for (j = 0; j < nproc; j++) {
+            MPI_Get_accumulate(val_ptr, COUNT, TYPE_MPI, &res_ptr[j*COUNT], COUNT, TYPE_MPI,
+                                j, rank*COUNT, COUNT, TYPE_MPI, MPI_SUM, win);
+        }
+        MPI_Win_fence(MPI_MODE_NOSUCCEED, win);
+        MPI_Barrier(MPI_COMM_WORLD);
+
+        for (j = 0; j < nproc; j++) {
+            int c;
+            for (c = 0; c < COUNT; c++) {
+                if (res_ptr[j*COUNT+c] != i*rank) {
+                    SQUELCH( printf("%d->%d -- ALL-TO-ALL (FENCE) [%d]: iter %d, expected result "TYPE_FMT", got "TYPE_FMT"\n", 
+                                    rank, j, c, i, (TYPE_C) i*rank, res_ptr[j*COUNT+c]); );
+                    errors++;
+                }
+            }
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++) {
+        int c;
+        for (c = 0; c < COUNT; c++) {
+            if (win_ptr[i*COUNT+c] != ITER*i) {
+                SQUELCH( printf("%d->%d -- ALL-TO-ALL (FENCE): expected "TYPE_FMT", got "TYPE_FMT"\n", 
+                                i, rank, (TYPE_C) ITER*i, win_ptr[i*COUNT+c]); );
+                errors++;
+            }
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test all-to-all communication (lock-all) */
+
+    reset_bufs(win_ptr, res_ptr, val_ptr, rank, win);
+
+    for (i = 0; i < ITER; i++) {
+        int j;
+
+        MPI_Win_lock_all(0, win);
+        for (j = 0; j < nproc; j++) {
+            MPI_Get_accumulate(val_ptr, COUNT, TYPE_MPI, &res_ptr[j*COUNT], COUNT, TYPE_MPI,
+                                j, rank*COUNT, COUNT, TYPE_MPI, MPI_SUM, win);
+        }
+        MPI_Win_unlock_all(win);
+        MPI_Barrier(MPI_COMM_WORLD);
+
+        for (j = 0; j < nproc; j++) {
+            int c;
+            for (c = 0; c < COUNT; c++) {
+                if (res_ptr[j*COUNT+c] != i*rank) {
+                    SQUELCH( printf("%d->%d -- ALL-TO-ALL (LOCK-ALL) [%d]: iter %d, expected result "TYPE_FMT", got "TYPE_FMT"\n", 
+                                    rank, j, c, i, (TYPE_C) i*rank, res_ptr[j*COUNT+c]); );
+                    errors++;
+                }
+            }
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++) {
+        int c;
+        for (c = 0; c < COUNT; c++) {
+            if (win_ptr[i*COUNT+c] != ITER*i) {
+                SQUELCH( printf("%d->%d -- ALL-TO-ALL (LOCK-ALL): expected "TYPE_FMT", got "TYPE_FMT"\n", 
+                                i, rank, (TYPE_C) ITER*i, win_ptr[i*COUNT+c]); );
+                errors++;
+            }
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test all-to-all communication (lock-all+flush) */
+
+    reset_bufs(win_ptr, res_ptr, val_ptr, rank, win);
+
+    for (i = 0; i < ITER; i++) {
+        int j;
+
+        MPI_Win_lock_all(0, win);
+        for (j = 0; j < nproc; j++) {
+            MPI_Get_accumulate(val_ptr, COUNT, TYPE_MPI, &res_ptr[j*COUNT], COUNT, TYPE_MPI,
+                                j, rank*COUNT, COUNT, TYPE_MPI, MPI_SUM, win);
+            MPI_Win_flush(j, win);
+        }
+        MPI_Win_unlock_all(win);
+        MPI_Barrier(MPI_COMM_WORLD);
+
+        for (j = 0; j < nproc; j++) {
+            int c;
+            for (c = 0; c < COUNT; c++) {
+                if (res_ptr[j*COUNT+c] != i*rank) {
+                    SQUELCH( printf("%d->%d -- ALL-TO-ALL (LOCK-ALL+FLUSH) [%d]: iter %d, expected result "TYPE_FMT", got "TYPE_FMT"\n", 
+                                    rank, j, c, i, (TYPE_C) i*rank, res_ptr[j*COUNT+c]); );
+                    errors++;
+                }
+            }
+        }
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < nproc; i++) {
+        int c;
+        for (c = 0; c < COUNT; c++) {
+            if (win_ptr[i*COUNT+c] != ITER*i) {
+                SQUELCH( printf("%d->%d -- ALL-TO-ALL (LOCK-ALL+FLUSH): expected "TYPE_FMT", got "TYPE_FMT"\n", 
+                                i, rank, (TYPE_C) ITER*i, win_ptr[i*COUNT+c]); );
+                errors++;
+            }
+        }
+    }
+    MPI_Win_unlock(rank, win);
+
+    /* Test NO_OP (neighbor communication) */
+
+    reset_bufs(win_ptr, res_ptr, val_ptr, 1, win);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < COUNT*nproc; i++)
+        win_ptr[i] = (TYPE_C) rank;
+    MPI_Win_unlock(rank, win);
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    for (i = 0; i < ITER; i++) {
+        int j, target = (rank+1) % nproc;
+
+        /* Test: origin_buf = NULL */
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
+        MPI_Get_accumulate(NULL, COUNT, TYPE_MPI, res_ptr, COUNT, TYPE_MPI,
+                            target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
+        MPI_Win_unlock(target, win);
+
+        for (j = 0; j < COUNT; j++) {
+            if (res_ptr[j] != (TYPE_C) target) {
+                SQUELCH( printf("%d->%d -- NOP(1)[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                                target, rank, i, (TYPE_C) target, res_ptr[i]); );
+                errors++;
+            }
+        }
+
+        /* Test: origin_buf = NULL, origin_count = 0 */
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
+        MPI_Get_accumulate(NULL, 0, TYPE_MPI, res_ptr, COUNT, TYPE_MPI,
+                            target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
+        MPI_Win_unlock(target, win);
+
+        for (j = 0; j < COUNT; j++) {
+            if (res_ptr[j] != (TYPE_C) target) {
+                SQUELCH( printf("%d->%d -- NOP(2)[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                                target, rank, i, (TYPE_C) target, res_ptr[i]); );
+                errors++;
+            }
+        }
+
+        /* Test: origin_buf = NULL, origin_count = 0, origin_dtype = NULL */
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
+        MPI_Get_accumulate(NULL, 0, MPI_DATATYPE_NULL, res_ptr, COUNT, TYPE_MPI,
+                            target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
+        MPI_Win_unlock(target, win);
+
+        for (j = 0; j < COUNT; j++) {
+            if (res_ptr[j] != (TYPE_C) target) {
+                SQUELCH( printf("%d->%d -- NOP(2)[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                                target, rank, i, (TYPE_C) target, res_ptr[i]); );
+                errors++;
+            }
+        }
+    }
+
+    /* Test NO_OP (self communication) */
+
+    reset_bufs(win_ptr, res_ptr, val_ptr, 1, win);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, win);
+    for (i = 0; i < COUNT*nproc; i++)
+        win_ptr[i] = (TYPE_C) rank;
+    MPI_Win_unlock(rank, win);
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    for (i = 0; i < ITER; i++) {
+        int j, target = rank;
+
+        /* Test: origin_buf = NULL */
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
+        MPI_Get_accumulate(NULL, COUNT, TYPE_MPI, res_ptr, COUNT, TYPE_MPI,
+                            target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
+        MPI_Win_unlock(target, win);
+
+        for (j = 0; j < COUNT; j++) {
+            if (res_ptr[j] != (TYPE_C) target) {
+                SQUELCH( printf("%d->%d -- NOP_SELF(1)[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                                target, rank, i, (TYPE_C) target, res_ptr[i]); );
+                errors++;
+            }
+        }
+
+        /* Test: origin_buf = NULL, origin_count = 0 */
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
+        MPI_Get_accumulate(NULL, 0, TYPE_MPI, res_ptr, COUNT, TYPE_MPI,
+                            target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
+        MPI_Win_unlock(target, win);
+
+        for (j = 0; j < COUNT; j++) {
+            if (res_ptr[j] != (TYPE_C) target) {
+                SQUELCH( printf("%d->%d -- NOP_SELF(2)[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                                target, rank, i, (TYPE_C) target, res_ptr[i]); );
+                errors++;
+            }
+        }
+
+        /* Test: origin_buf = NULL, origin_count = 0, origin_dtype = NULL */
+        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, target, 0, win);
+        MPI_Get_accumulate(NULL, 0, MPI_DATATYPE_NULL, res_ptr, COUNT, TYPE_MPI,
+                            target, 0, COUNT, TYPE_MPI, MPI_NO_OP, win);
+        MPI_Win_unlock(target, win);
+
+        for (j = 0; j < COUNT; j++) {
+            if (res_ptr[j] != (TYPE_C) target) {
+                SQUELCH( printf("%d->%d -- NOP_SELF(2)[%d]: expected "TYPE_FMT", got "TYPE_FMT"\n",
+                                target, rank, i, (TYPE_C) target, res_ptr[i]); );
+                errors++;
+            }
+        }
+    }
+
+    MPI_Win_free(&win);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+#if defined (GACC_TYPE_DERIVED)
+    MPI_Type_free(&derived_type);
+#endif
+
+    free(win_ptr);
+    free(res_ptr);
+    free(val_ptr);
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/getfence1.c b/teshsuite/smpi/mpich3-test/rma/getfence1.c
new file mode 100644 (file)
index 0000000..2aaba82
--- /dev/null
@@ -0,0 +1,99 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Get with Fence";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0, err;
+    int rank, size, source, dest;
+    int minsize = 2, count; 
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Aint      extent;
+    MTestDatatype sendtype, recvtype;
+
+    MTest_Init( &argc, &argv );
+
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       source = 0;
+       dest   = size - 1;
+       
+       for (count = 1; count < 65000; count = count * 2) {
+           while (MTestGetDatatypes( &sendtype, &recvtype, count )) {
+               /* Make sure that everyone has a recv buffer */
+               recvtype.InitBuf( &recvtype );
+               sendtype.InitBuf( &sendtype );
+               /* By default, print information about errors */
+               recvtype.printErrors = 1;
+               sendtype.printErrors = 1;
+
+               MPI_Type_extent( sendtype.datatype, &extent );
+               MPI_Win_create( sendtype.buf, sendtype.count * extent, 
+                               (int)extent, MPI_INFO_NULL, comm, &win );
+               MPI_Win_fence( 0, win );
+               if (rank == source) {
+                   /* The source does not need to do anything besides the
+                      fence */
+                   MPI_Win_fence( 0, win );
+               }
+               else if (rank == dest) {
+                   /* To improve reporting of problems about operations, we
+                      change the error handler to errors return */
+                   MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+
+                   /* This should have the same effect, in terms of
+                      transfering data, as a send/recv pair */
+                   err = MPI_Get( recvtype.buf, recvtype.count, 
+                                  recvtype.datatype, source, 0, 
+                                  sendtype.count, sendtype.datatype, win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+                   err = MPI_Win_fence( 0, win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) {
+                       errs += err;
+                   }
+               }
+               else {
+                   MPI_Win_fence( 0, win );
+               }
+               MPI_Win_free( &win );
+               MTestFreeDatatype( &recvtype );
+               MTestFreeDatatype( &sendtype );
+           }
+       }
+        MTestFreeComm(&comm);
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/getgroup.c b/teshsuite/smpi/mpich3-test/rma/getgroup.c
new file mode 100644 (file)
index 0000000..4dd0c0d
--- /dev/null
@@ -0,0 +1,52 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Test of Win_get_group";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    int result;
+    int buf[10];
+    MPI_Win   win;
+    MPI_Group group, wingroup;
+    int minsize = 2;
+    MPI_Comm      comm;
+
+    MTest_Init( &argc, &argv );
+
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+
+       MPI_Win_create( buf, sizeof(int) * 10, sizeof(int), 
+                       MPI_INFO_NULL, comm, &win );
+       MPI_Win_get_group( win, &wingroup );
+       MPI_Comm_group( comm, &group );
+       MPI_Group_compare( group, wingroup, &result );
+       if (result != MPI_IDENT) {
+           errs++;
+           fprintf( stderr, "Group returned by Win_get_group not the same as the input group\n" );
+       }
+       MPI_Group_free( &wingroup );
+       MPI_Group_free( &group );
+       MPI_Win_free( &win );
+        MTestFreeComm(&comm);
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/ircpi.c b/teshsuite/smpi/mpich3-test/rma/ircpi.c
new file mode 100644 (file)
index 0000000..99a83ed
--- /dev/null
@@ -0,0 +1,71 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include <math.h> 
+
+/* From Using MPI-2 */
+
+int main(int argc, char *argv[]) 
+{ 
+    int n, myid, numprocs, i, ierr; 
+    double PI25DT = 3.141592653589793238462643; 
+    double mypi, pi, h, sum, x; 
+    MPI_Win nwin, piwin; 
+    MPI_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&numprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&myid); 
+    if (myid == 0) { 
+       MPI_Win_create(&n, sizeof(int), 1, MPI_INFO_NULL, 
+                      MPI_COMM_WORLD, &nwin); 
+       MPI_Win_create(&pi, sizeof(double), 1, MPI_INFO_NULL, 
+                      MPI_COMM_WORLD, &piwin);  
+    } 
+    else { 
+       MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL, 
+                      MPI_COMM_WORLD, &nwin); 
+       MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL, 
+                      MPI_COMM_WORLD, &piwin); 
+    } 
+    while (1) { 
+        if (myid == 0) { 
+            fprintf(stdout, "Enter the number of intervals: (0 quits) ");
+           fflush(stdout); 
+            ierr=scanf("%d",&n); 
+           pi = 0.0;                    
+        } 
+       MPI_Win_fence(0, nwin); 
+       if (myid != 0)  
+           MPI_Get(&n, 1, MPI_INT, 0, 0, 1, MPI_INT, nwin); 
+       MPI_Win_fence(0, nwin); 
+        if (n == 0) 
+            break; 
+        else { 
+            h   = 1.0 / (double) n; 
+            sum = 0.0; 
+            for (i = myid + 1; i <= n; i += numprocs) { 
+                x = h * ((double)i - 0.5); 
+                sum += (4.0 / (1.0 + x*x)); 
+            } 
+            mypi = h * sum; 
+           MPI_Win_fence( 0, piwin); 
+           MPI_Accumulate(&mypi, 1, MPI_DOUBLE, 0, 0, 1, MPI_DOUBLE, 
+                          MPI_SUM, piwin); 
+           MPI_Win_fence(0, piwin); 
+            if (myid == 0) { 
+                fprintf(stdout, "pi is approximately %.16f, Error is %.16f\n", 
+                       pi, fabs(pi - PI25DT)); 
+               fflush(stdout);
+           }
+        } 
+    } 
+    MPI_Win_free(&nwin); 
+    MPI_Win_free(&piwin); 
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/linked_list.c b/teshsuite/smpi/mpich3-test/rma/linked_list.c
new file mode 100644 (file)
index 0000000..c0dc769
--- /dev/null
@@ -0,0 +1,231 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/*            MPI-3 distributed linked list construction example
+ *            --------------------------------------------------
+ * 
+ * Construct a distributed shared linked list using proposed MPI-3 dynamic
+ * windows.  Initially process 0 creates the head of the list, attaches it to
+ * the window, and broadcasts the pointer to all processes.  All processes then
+ * concurrently append N new elements to the list.  When a process attempts to
+ * attach its element to the tail of list it may discover that its tail pointer
+ * is stale and it must chase ahead to the new tail before the element can be
+ * attached.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include <assert.h>
+#include "mpitest.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#define NUM_ELEMS 32
+#define NPROBE    100
+#define ELEM_PER_ROW 16
+
+/* Linked list pointer */
+typedef struct {
+    int      rank;
+    MPI_Aint disp;
+} llist_ptr_t;
+
+/* Linked list element */
+typedef struct {
+    int value;
+    llist_ptr_t next;
+} llist_elem_t;
+
+static const llist_ptr_t nil = { -1, (MPI_Aint) MPI_BOTTOM };
+static const int verbose = 0;
+
+/* List of locally allocated list elements. */
+static llist_elem_t **my_elems = NULL;
+static int my_elems_size  = 0;
+static int my_elems_count = 0;
+
+/* Allocate a new shared linked list element */
+MPI_Aint alloc_elem(int value, MPI_Win win) {
+    MPI_Aint disp;
+    llist_elem_t *elem_ptr;
+
+    /* Allocate the new element and register it with the window */
+    MPI_Alloc_mem(sizeof(llist_elem_t), MPI_INFO_NULL, &elem_ptr);
+    elem_ptr->value = value;
+    elem_ptr->next  = nil;
+    MPI_Win_attach(win, elem_ptr, sizeof(llist_elem_t));
+
+    /* Add the element to the list of local elements so we can free it later. */
+    if (my_elems_size == my_elems_count) {
+        my_elems_size += 100;
+        my_elems = realloc(my_elems, my_elems_size*sizeof(void*));
+    }
+    my_elems[my_elems_count] = elem_ptr;
+    my_elems_count++;
+
+    MPI_Get_address(elem_ptr, &disp);
+    return disp;
+}
+
+int main(int argc, char **argv) {
+    int           procid, nproc, i;
+    MPI_Win       llist_win;
+    llist_ptr_t   head_ptr, tail_ptr;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &procid);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &llist_win);
+
+    /* Process 0 creates the head node */
+    if (procid == 0)
+        head_ptr.disp = alloc_elem(-1, llist_win);
+
+    /* Broadcast the head pointer to everyone */
+    head_ptr.rank = 0;
+    MPI_Bcast(&head_ptr.disp, 1, MPI_AINT, 0, MPI_COMM_WORLD);
+    tail_ptr = head_ptr;
+
+    /* All processes concurrently append NUM_ELEMS elements to the list */
+    for (i = 0; i < NUM_ELEMS; i++) {
+        llist_ptr_t new_elem_ptr;
+        int success;
+
+        /* Create a new list element and register it with the window */
+        new_elem_ptr.rank = procid;
+        new_elem_ptr.disp = alloc_elem(procid, llist_win);
+
+        /* Append the new node to the list.  This might take multiple attempts if
+           others have already appended and our tail pointer is stale. */
+        do {
+            llist_ptr_t next_tail_ptr = nil;
+
+            MPI_Win_lock(MPI_LOCK_EXCLUSIVE, tail_ptr.rank, 0, llist_win);
+
+            MPI_Compare_and_swap((void*) &new_elem_ptr.rank, (void*) &nil.rank,
+                                  (void*) &next_tail_ptr.rank, MPI_INT, tail_ptr.rank,
+                                  (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.rank), llist_win);
+
+            MPI_Win_unlock(tail_ptr.rank, llist_win);
+            success = (next_tail_ptr.rank == nil.rank);
+
+            if (success) {
+                int i, flag;
+
+                MPI_Win_lock(MPI_LOCK_EXCLUSIVE, tail_ptr.rank, 0, llist_win);
+
+                MPI_Put(&new_elem_ptr.disp, 1, MPI_AINT, tail_ptr.rank,
+                        (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.disp), 1,
+                        MPI_AINT, llist_win);
+
+                MPI_Win_unlock(tail_ptr.rank, llist_win);
+                tail_ptr = new_elem_ptr;
+
+                /* For implementations that use pt-to-pt messaging, force progress for other threads'
+                   RMA operations. */
+                for (i = 0; i < NPROBE; i++)
+                    MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE);
+
+            } else {
+                /* Tail pointer is stale, fetch the displacement.  May take multiple tries
+                   if it is being updated. */
+                do {
+                    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, tail_ptr.rank, 0, llist_win);
+
+                    MPI_Get( &next_tail_ptr.disp, 1, MPI_AINT, tail_ptr.rank,
+                             (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.disp),
+                             1, MPI_AINT, llist_win);
+
+                    MPI_Win_unlock(tail_ptr.rank, llist_win);
+                } while (next_tail_ptr.disp == nil.disp);
+                tail_ptr = next_tail_ptr;
+            }
+        } while (!success);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Traverse the list and verify that all processes inserted exactly the correct
+       number of elements. */
+    if (procid == 0) {
+        int  have_root = 0;
+        int  errors    = 0;
+        int *counts, count = 0;
+
+        counts = (int*) malloc(sizeof(int) * nproc);
+        assert(counts != NULL);
+
+        for (i = 0; i < nproc; i++)
+            counts[i] = 0;
+
+        tail_ptr = head_ptr;
+
+        /* Walk the list and tally up the number of elements inserted by each rank */
+        while (tail_ptr.disp != nil.disp) {
+            llist_elem_t elem;
+
+            MPI_Win_lock(MPI_LOCK_EXCLUSIVE, tail_ptr.rank, 0, llist_win);
+
+            MPI_Get(&elem, sizeof(llist_elem_t), MPI_BYTE,
+                    tail_ptr.rank, tail_ptr.disp, sizeof(llist_elem_t), MPI_BYTE, llist_win);
+
+            MPI_Win_unlock(tail_ptr.rank, llist_win);
+
+            tail_ptr = elem.next;
+
+            /* This is not the root */
+            if (have_root) {
+                assert(elem.value >= 0 && elem.value < nproc);
+                counts[elem.value]++;
+                count++;
+
+                if (verbose) {
+                    int last_elem = tail_ptr.disp == nil.disp;
+                    printf("%2d%s", elem.value, last_elem ? "" : " -> ");
+                    if (count % ELEM_PER_ROW == 0 && !last_elem)
+                        printf("\n");
+                }
+            }
+
+            /* This is the root */
+            else {
+                assert(elem.value == -1);
+                have_root = 1;
+            }
+        }
+
+        if (verbose)
+          printf("\n\n");
+
+        /* Verify the counts we collected */
+        for (i = 0; i < nproc; i++) {
+            int expected = NUM_ELEMS;
+
+            if (counts[i] != expected) {
+                printf("Error: Rank %d inserted %d elements, expected %d\n", i, counts[i], expected);
+                errors++;
+            }
+        }
+
+        printf("%s\n", errors == 0 ? " No Errors" : "FAIL");
+        free(counts);
+    }
+
+    MPI_Win_free(&llist_win);
+
+    /* Free all the elements in the list */
+    for ( ; my_elems_count > 0; my_elems_count--)
+        MPI_Free_mem(my_elems[my_elems_count-1]);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_all.c b/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_all.c
new file mode 100644 (file)
index 0000000..ef67050
--- /dev/null
@@ -0,0 +1,263 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/*            MPI-3 distributed linked list construction example
+ *            --------------------------------------------------
+ *
+ * Construct a distributed shared linked list using proposed MPI-3 dynamic
+ * windows.  Initially process 0 creates the head of the list, attaches it to
+ * the window, and broadcasts the pointer to all processes.  Each process p then
+ * appends N new elements to the list when the tail reaches process p-1.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include <assert.h>
+#include "mpitest.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#define NUM_ELEMS 1000
+#define MAX_NPROBE nproc
+#define MIN_NPROBE 1
+#define ELEM_PER_ROW 16
+
+#define MIN(X,Y) ((X < Y) ? (X) : (Y))
+#define MAX(X,Y) ((X > Y) ? (X) : (Y))
+
+/* Linked list pointer */
+typedef struct {
+    int      rank;
+    MPI_Aint disp;
+} llist_ptr_t;
+
+/* Linked list element */
+typedef struct {
+    int value;
+    llist_ptr_t next;
+} llist_elem_t;
+
+static const llist_ptr_t nil = { -1, (MPI_Aint) MPI_BOTTOM };
+static const int verbose = 0;
+static const int print_perf = 0;
+
+/* List of locally allocated list elements. */
+static llist_elem_t **my_elems = NULL;
+static int my_elems_size  = 0;
+static int my_elems_count = 0;
+
+/* Allocate a new shared linked list element */
+MPI_Aint alloc_elem(int value, MPI_Win win) {
+    MPI_Aint disp;
+    llist_elem_t *elem_ptr;
+
+    /* Allocate the new element and register it with the window */
+    MPI_Alloc_mem(sizeof(llist_elem_t), MPI_INFO_NULL, &elem_ptr);
+    elem_ptr->value = value;
+    elem_ptr->next  = nil;
+    MPI_Win_attach(win, elem_ptr, sizeof(llist_elem_t));
+
+    /* Add the element to the list of local elements so we can free it later. */
+    if (my_elems_size == my_elems_count) {
+        my_elems_size += 100;
+        my_elems = realloc(my_elems, my_elems_size*sizeof(void*));
+    }
+    my_elems[my_elems_count] = elem_ptr;
+    my_elems_count++;
+
+    MPI_Get_address(elem_ptr, &disp);
+    return disp;
+}
+
+int main(int argc, char **argv) {
+    int           procid, nproc, i, j, my_nelem;
+    int           pollint = 0;
+    double        time;
+    MPI_Win       llist_win;
+    llist_ptr_t   head_ptr, tail_ptr;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &procid);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &llist_win);
+
+    /* Process 0 creates the head node */
+    if (procid == 0)
+        head_ptr.disp = alloc_elem(procid, llist_win);
+
+    /* Broadcast the head pointer to everyone */
+    head_ptr.rank = 0;
+    MPI_Bcast(&head_ptr.disp, 1, MPI_AINT, 0, MPI_COMM_WORLD);
+    tail_ptr = head_ptr;
+
+    /* All processes append NUM_ELEMS elements to the list; rank 0 has already
+     * appended an element. */
+    if (procid == 0)
+        i = 1;
+    else
+        i = 0;
+
+    my_nelem = NUM_ELEMS/nproc;
+    if (procid < NUM_ELEMS % nproc)
+        my_nelem++;
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    time = MPI_Wtime();
+
+    /* Lock the window for shared access to all targets */
+    MPI_Win_lock_all(0, llist_win);
+
+    for ( ; i < my_nelem; i++) {
+        llist_ptr_t new_elem_ptr;
+        int success = 0;
+
+        /* Create a new list element and register it with the window */
+        new_elem_ptr.rank = procid;
+        new_elem_ptr.disp = alloc_elem(procid, llist_win);
+
+        /* Append the new node to the list.  This might take multiple attempts if
+           others have already appended and our tail pointer is stale. */
+        do {
+            int flag;
+
+            /* The tail is at my left neighbor, append my element. */
+            if (tail_ptr.rank == (procid + nproc-1) % nproc)
+            {
+                if (verbose)
+                    printf("%d: Appending to <%d, %p>\n", procid, tail_ptr.rank, (void*) tail_ptr.disp);
+#if 1
+                MPI_Accumulate(&new_elem_ptr, sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                               (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next), sizeof(llist_ptr_t),
+                               MPI_BYTE, MPI_REPLACE, llist_win);
+#else
+                MPI_Put(&new_elem_ptr, sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                        (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next), sizeof(llist_ptr_t),
+                        MPI_BYTE, llist_win);
+#endif
+                MPI_Win_flush(tail_ptr.rank, llist_win);
+
+                success = 1;
+                tail_ptr = new_elem_ptr;
+            }
+
+            /* Otherwise, chase the tail. */
+            else
+            {
+                llist_ptr_t next_tail_ptr;
+
+                MPI_Get_accumulate( NULL, 0, MPI_DATATYPE_NULL, &next_tail_ptr,
+                                    sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                                    (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next),
+                                    sizeof(llist_ptr_t), MPI_BYTE, MPI_NO_OP, llist_win);
+
+                MPI_Win_flush(tail_ptr.rank, llist_win);
+
+                if (next_tail_ptr.rank != nil.rank) {
+                    if (verbose)
+                        printf("%d: Chasing to <%d, %p>\n", procid, next_tail_ptr.rank, (void*) next_tail_ptr.disp);
+                    tail_ptr = next_tail_ptr;
+                    pollint = MAX(MIN_NPROBE, pollint/2);
+                }
+                else {
+                    for (j = 0; j < pollint; j++)
+                        MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE);
+
+                    pollint = MIN(MAX_NPROBE, pollint*2);
+                }
+            }
+        } while (!success);
+    }
+
+    MPI_Win_unlock_all(llist_win);
+    MPI_Barrier(MPI_COMM_WORLD);
+    time = MPI_Wtime() - time;
+
+    /* Traverse the list and verify that all processes inserted exactly the correct
+       number of elements. */
+    if (procid == 0) {
+        int  errors    = 0;
+        int *counts, count = 0;
+
+        counts = (int*) malloc(sizeof(int) * nproc);
+        assert(counts != NULL);
+
+        for (i = 0; i < nproc; i++)
+            counts[i] = 0;
+
+        tail_ptr = head_ptr;
+
+        MPI_Win_lock_all(0, llist_win);
+
+        /* Walk the list and tally up the number of elements inserted by each rank */
+        while (tail_ptr.disp != nil.disp) {
+            llist_elem_t elem;
+
+            MPI_Get(&elem, sizeof(llist_elem_t), MPI_BYTE,
+                    tail_ptr.rank, tail_ptr.disp, sizeof(llist_elem_t), MPI_BYTE, llist_win);
+
+            MPI_Win_flush(tail_ptr.rank, llist_win);
+
+            tail_ptr = elem.next;
+
+            assert(elem.value >= 0 && elem.value < nproc);
+            counts[elem.value]++;
+            count++;
+
+            if (verbose) {
+                int last_elem = tail_ptr.disp == nil.disp;
+                printf("%2d%s", elem.value, last_elem ? "" : " -> ");
+                if (count % ELEM_PER_ROW == 0 && !last_elem)
+                    printf("\n");
+            }
+        }
+
+        MPI_Win_unlock_all(llist_win);
+
+        if (verbose)
+          printf("\n\n");
+
+        /* Verify the counts we collected */
+        for (i = 0; i < nproc; i++) {
+            int expected;
+
+            expected = NUM_ELEMS/nproc;
+            if (i < NUM_ELEMS % nproc)
+                expected++;
+
+            if (counts[i] != expected) {
+                printf("Error: Rank %d inserted %d elements, expected %d\n", i, counts[i], expected);
+                errors++;
+            }
+        }
+
+        printf("%s\n", errors == 0 ? " No Errors" : "FAIL");
+        free(counts);
+    }
+
+    if (print_perf) {
+        double max_time;
+
+        MPI_Reduce(&time, &max_time, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
+
+        if (procid == 0) {
+            printf("Total time = %0.2f sec, elem/sec = %0.2f, sec/elem = %0.2f usec\n", max_time, NUM_ELEMS/max_time, max_time/NUM_ELEMS*1.0e6);
+        }
+    }
+
+    MPI_Win_free(&llist_win);
+
+    /* Free all the elements in the list */
+    for ( ; my_elems_count > 0; my_elems_count--)
+        MPI_Free_mem(my_elems[my_elems_count-1]);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_excl.c b/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_excl.c
new file mode 100644 (file)
index 0000000..8bf5427
--- /dev/null
@@ -0,0 +1,266 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/*            MPI-3 distributed linked list construction example
+ *            --------------------------------------------------
+ *
+ * Construct a distributed shared linked list using proposed MPI-3 dynamic
+ * windows.  Initially process 0 creates the head of the list, attaches it to
+ * the window, and broadcasts the pointer to all processes.  Each process p then
+ * appends N new elements to the list when the tail reaches process p-1.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include <assert.h>
+#include "mpitest.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#define NUM_ELEMS 1000
+#define MAX_NPROBE nproc
+#define MIN_NPROBE 1
+#define ELEM_PER_ROW 16
+
+#define MIN(X,Y) ((X < Y) ? (X) : (Y))
+#define MAX(X,Y) ((X > Y) ? (X) : (Y))
+
+/* Linked list pointer */
+typedef struct {
+    int      rank;
+    MPI_Aint disp;
+} llist_ptr_t;
+
+/* Linked list element */
+typedef struct {
+    int value;
+    llist_ptr_t next;
+} llist_elem_t;
+
+static const llist_ptr_t nil = { -1, (MPI_Aint) MPI_BOTTOM };
+static const int verbose = 0;
+static const int print_perf = 0;
+
+/* List of locally allocated list elements. */
+static llist_elem_t **my_elems = NULL;
+static int my_elems_size  = 0;
+static int my_elems_count = 0;
+
+/* Allocate a new shared linked list element */
+MPI_Aint alloc_elem(int value, MPI_Win win) {
+    MPI_Aint disp;
+    llist_elem_t *elem_ptr;
+
+    /* Allocate the new element and register it with the window */
+    MPI_Alloc_mem(sizeof(llist_elem_t), MPI_INFO_NULL, &elem_ptr);
+    elem_ptr->value = value;
+    elem_ptr->next  = nil;
+    MPI_Win_attach(win, elem_ptr, sizeof(llist_elem_t));
+
+    /* Add the element to the list of local elements so we can free it later. */
+    if (my_elems_size == my_elems_count) {
+        my_elems_size += 100;
+        my_elems = realloc(my_elems, my_elems_size*sizeof(void*));
+    }
+    my_elems[my_elems_count] = elem_ptr;
+    my_elems_count++;
+
+    MPI_Get_address(elem_ptr, &disp);
+    return disp;
+}
+
+int main(int argc, char **argv) {
+    int           procid, nproc, i, j, my_nelem;
+    int           pollint = 0;
+    double        time;
+    MPI_Win       llist_win;
+    llist_ptr_t   head_ptr, tail_ptr;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &procid);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &llist_win);
+
+    /* Process 0 creates the head node */
+    if (procid == 0)
+        head_ptr.disp = alloc_elem(procid, llist_win);
+
+    /* Broadcast the head pointer to everyone */
+    head_ptr.rank = 0;
+    MPI_Bcast(&head_ptr.disp, 1, MPI_AINT, 0, MPI_COMM_WORLD);
+    tail_ptr = head_ptr;
+
+    /* All processes append NUM_ELEMS elements to the list; rank 0 has already
+     * appended an element. */
+    if (procid == 0)
+        i = 1;
+    else
+        i = 0;
+    my_nelem = NUM_ELEMS/nproc;
+    if (procid < NUM_ELEMS % nproc)
+        my_nelem++;
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    time = MPI_Wtime();
+
+    for ( ; i < my_nelem; i++) {
+        llist_ptr_t new_elem_ptr;
+        int success = 0;
+
+        /* Create a new list element and register it with the window */
+        new_elem_ptr.rank = procid;
+        new_elem_ptr.disp = alloc_elem(procid, llist_win);
+
+        /* Append the new node to the list.  This might take multiple attempts if
+           others have already appended and our tail pointer is stale. */
+        do {
+            int flag;
+
+            /* The tail is at my left neighbor, append my element. */
+            if (tail_ptr.rank == (procid + nproc-1) % nproc)
+            {
+                if (verbose)
+                    printf("%d: Appending to <%d, %p>\n", procid, tail_ptr.rank, (void*) tail_ptr.disp);
+
+                MPI_Win_lock(MPI_LOCK_EXCLUSIVE, tail_ptr.rank, 0, llist_win);
+#if USE_ACC
+                MPI_Accumulate(&new_elem_ptr, sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                               (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next), sizeof(llist_ptr_t),
+                               MPI_BYTE, MPI_REPLACE, llist_win);
+#else
+                MPI_Put(&new_elem_ptr, sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                        (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next), sizeof(llist_ptr_t),
+                        MPI_BYTE, llist_win);
+#endif
+                MPI_Win_unlock(tail_ptr.rank, llist_win);
+
+                success = 1;
+                tail_ptr = new_elem_ptr;
+            }
+
+            /* Otherwise, chase the tail. */
+            else
+            {
+                llist_ptr_t next_tail_ptr;
+
+                MPI_Win_lock(MPI_LOCK_EXCLUSIVE, tail_ptr.rank, 0, llist_win);
+#if USE_ACC
+                MPI_Get_accumulate( NULL, 0, MPI_DATATYPE_NULL, &next_tail_ptr,
+                                    sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                                    (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next),
+                                    sizeof(llist_ptr_t), MPI_BYTE, MPI_NO_OP, llist_win);
+#else
+                MPI_Get(&next_tail_ptr, sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                        (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next),
+                        sizeof(llist_ptr_t), MPI_BYTE, llist_win);
+#endif
+                MPI_Win_unlock(tail_ptr.rank, llist_win);
+
+                if (next_tail_ptr.rank != nil.rank) {
+                    if (verbose)
+                        printf("%d: Chasing to <%d, %p>\n", procid, next_tail_ptr.rank, (void*) next_tail_ptr.disp);
+                    tail_ptr = next_tail_ptr;
+                    pollint = MAX(MIN_NPROBE, pollint/2);
+                }
+                else {
+                    for (j = 0; j < pollint; j++)
+                        MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE);
+
+                    pollint = MIN(MAX_NPROBE, pollint*2);
+                }
+            }
+        } while (!success);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    time = MPI_Wtime() - time;
+
+    /* Traverse the list and verify that all processes inserted exactly the correct
+       number of elements. */
+    if (procid == 0) {
+        int  errors    = 0;
+        int *counts, count = 0;
+
+        counts = (int*) malloc(sizeof(int) * nproc);
+        assert(counts != NULL);
+
+        for (i = 0; i < nproc; i++)
+            counts[i] = 0;
+
+        tail_ptr = head_ptr;
+
+        MPI_Win_lock_all(0, llist_win);
+
+        /* Walk the list and tally up the number of elements inserted by each rank */
+        while (tail_ptr.disp != nil.disp) {
+            llist_elem_t elem;
+
+            MPI_Get(&elem, sizeof(llist_elem_t), MPI_BYTE,
+                    tail_ptr.rank, tail_ptr.disp, sizeof(llist_elem_t), MPI_BYTE, llist_win);
+
+            MPI_Win_flush(tail_ptr.rank, llist_win);
+
+            tail_ptr = elem.next;
+
+            assert(elem.value >= 0 && elem.value < nproc);
+            counts[elem.value]++;
+            count++;
+
+            if (verbose) {
+                int last_elem = tail_ptr.disp == nil.disp;
+                printf("%2d%s", elem.value, last_elem ? "" : " -> ");
+                if (count % ELEM_PER_ROW == 0 && !last_elem)
+                    printf("\n");
+            }
+        }
+
+        MPI_Win_unlock_all(llist_win);
+
+        if (verbose)
+          printf("\n\n");
+
+        /* Verify the counts we collected */
+        for (i = 0; i < nproc; i++) {
+            int expected;
+
+            expected = NUM_ELEMS/nproc;
+            if (i < NUM_ELEMS % nproc)
+                expected++;
+
+            if (counts[i] != expected) {
+                printf("Error: Rank %d inserted %d elements, expected %d\n", i, counts[i], expected);
+                errors++;
+            }
+        }
+
+        printf("%s\n", errors == 0 ? " No Errors" : "FAIL");
+        free(counts);
+    }
+
+    if (print_perf) {
+        double max_time;
+
+        MPI_Reduce(&time, &max_time, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
+
+        if (procid == 0) {
+            printf("Total time = %0.2f sec, elem/sec = %0.2f, sec/elem = %0.2f usec\n", max_time, NUM_ELEMS/max_time, max_time/NUM_ELEMS*1.0e6);
+        }
+    }
+
+    MPI_Win_free(&llist_win);
+
+    /* Free all the elements in the list */
+    for ( ; my_elems_count > 0; my_elems_count--)
+        MPI_Free_mem(my_elems[my_elems_count-1]);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_shr.c b/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_shr.c
new file mode 100644 (file)
index 0000000..62315ed
--- /dev/null
@@ -0,0 +1,263 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/*            MPI-3 distributed linked list construction example
+ *            --------------------------------------------------
+ *
+ * Construct a distributed shared linked list using proposed MPI-3 dynamic
+ * windows.  Initially process 0 creates the head of the list, attaches it to
+ * the window, and broadcasts the pointer to all processes.  Each process p then
+ * appends N new elements to the list when the tail reaches process p-1.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include <assert.h>
+#include "mpitest.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#define NUM_ELEMS 1000
+#define MAX_NPROBE nproc
+#define MIN_NPROBE 1
+#define ELEM_PER_ROW 16
+
+#define MIN(X,Y) ((X < Y) ? (X) : (Y))
+#define MAX(X,Y) ((X > Y) ? (X) : (Y))
+
+/* Linked list pointer */
+typedef struct {
+    int      rank;
+    MPI_Aint disp;
+} llist_ptr_t;
+
+/* Linked list element */
+typedef struct {
+    int value;
+    llist_ptr_t next;
+} llist_elem_t;
+
+static const llist_ptr_t nil = { -1, (MPI_Aint) MPI_BOTTOM };
+static const int verbose = 0;
+static const int print_perf = 0;
+
+/* List of locally allocated list elements. */
+static llist_elem_t **my_elems = NULL;
+static int my_elems_size  = 0;
+static int my_elems_count = 0;
+
+/* Allocate a new shared linked list element */
+MPI_Aint alloc_elem(int value, MPI_Win win) {
+    MPI_Aint disp;
+    llist_elem_t *elem_ptr;
+
+    /* Allocate the new element and register it with the window */
+    MPI_Alloc_mem(sizeof(llist_elem_t), MPI_INFO_NULL, &elem_ptr);
+    elem_ptr->value = value;
+    elem_ptr->next  = nil;
+    MPI_Win_attach(win, elem_ptr, sizeof(llist_elem_t));
+
+    /* Add the element to the list of local elements so we can free it later. */
+    if (my_elems_size == my_elems_count) {
+        my_elems_size += 100;
+        my_elems = realloc(my_elems, my_elems_size*sizeof(void*));
+    }
+    my_elems[my_elems_count] = elem_ptr;
+    my_elems_count++;
+
+    MPI_Get_address(elem_ptr, &disp);
+    return disp;
+}
+
+int main(int argc, char **argv) {
+    int           procid, nproc, i, j, my_nelem;
+    int           pollint = 0;
+    double        time;
+    MPI_Win       llist_win;
+    llist_ptr_t   head_ptr, tail_ptr;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &procid);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &llist_win);
+
+    /* Process 0 creates the head node */
+    if (procid == 0)
+        head_ptr.disp = alloc_elem(procid, llist_win);
+
+    /* Broadcast the head pointer to everyone */
+    head_ptr.rank = 0;
+    MPI_Bcast(&head_ptr.disp, 1, MPI_AINT, 0, MPI_COMM_WORLD);
+    tail_ptr = head_ptr;
+
+    /* All processes append NUM_ELEMS elements to the list; rank 0 has already
+     * appended an element. */
+    if (procid == 0)
+        i = 1;
+    else
+        i = 0;
+
+    my_nelem = NUM_ELEMS/nproc;
+    if (procid < NUM_ELEMS % nproc)
+        my_nelem++;
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    time = MPI_Wtime();
+
+    for ( ; i < my_nelem; i++) {
+        llist_ptr_t new_elem_ptr;
+        int success = 0;
+
+        /* Create a new list element and register it with the window */
+        new_elem_ptr.rank = procid;
+        new_elem_ptr.disp = alloc_elem(procid, llist_win);
+
+        /* Append the new node to the list.  This might take multiple attempts if
+           others have already appended and our tail pointer is stale. */
+        do {
+            int flag;
+
+            /* The tail is at my left neighbor, append my element. */
+            if (tail_ptr.rank == (procid + nproc-1) % nproc)
+            {
+                if (verbose)
+                    printf("%d: Appending to <%d, %p>\n", procid, tail_ptr.rank, (void*) tail_ptr.disp);
+
+#ifdef USE_MODE_NOCHECK
+                MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, MPI_MODE_NOCHECK, llist_win);
+#else
+                MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, 0, llist_win);
+#endif
+                MPI_Accumulate(&new_elem_ptr, sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                               (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next), sizeof(llist_ptr_t),
+                               MPI_BYTE, MPI_REPLACE, llist_win);
+                MPI_Win_unlock(tail_ptr.rank, llist_win);
+
+                success = 1;
+                tail_ptr = new_elem_ptr;
+            }
+
+            /* Otherwise, chase the tail. */
+            else
+            {
+                llist_ptr_t next_tail_ptr;
+
+#ifdef USE_MODE_NOCHECK
+                MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, MPI_MODE_NOCHECK, llist_win);
+#else
+                MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, 0, llist_win);
+#endif
+                MPI_Get_accumulate( NULL, 0, MPI_DATATYPE_NULL, &next_tail_ptr,
+                                    sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank,
+                                    (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next),
+                                    sizeof(llist_ptr_t), MPI_BYTE, MPI_NO_OP, llist_win);
+                MPI_Win_unlock(tail_ptr.rank, llist_win);
+
+                if (next_tail_ptr.rank != nil.rank) {
+                    if (verbose)
+                        printf("%d: Chasing to <%d, %p>\n", procid, next_tail_ptr.rank, (void*) next_tail_ptr.disp);
+                    tail_ptr = next_tail_ptr;
+                    pollint = MAX(MIN_NPROBE, pollint/2);
+                }
+                else {
+                    for (j = 0; j < pollint; j++)
+                        MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE);
+
+                    pollint = MIN(MAX_NPROBE, pollint*2);
+                }
+            }
+        } while (!success);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    time = MPI_Wtime() - time;
+
+    /* Traverse the list and verify that all processes inserted exactly the correct
+       number of elements. */
+    if (procid == 0) {
+        int  errors    = 0;
+        int *counts, count = 0;
+
+        counts = (int*) malloc(sizeof(int) * nproc);
+        assert(counts != NULL);
+
+        for (i = 0; i < nproc; i++)
+            counts[i] = 0;
+
+        tail_ptr = head_ptr;
+
+        MPI_Win_lock_all(0, llist_win);
+
+        /* Walk the list and tally up the number of elements inserted by each rank */
+        while (tail_ptr.disp != nil.disp) {
+            llist_elem_t elem;
+
+            MPI_Get(&elem, sizeof(llist_elem_t), MPI_BYTE,
+                    tail_ptr.rank, tail_ptr.disp, sizeof(llist_elem_t), MPI_BYTE, llist_win);
+
+            MPI_Win_flush(tail_ptr.rank, llist_win);
+
+            tail_ptr = elem.next;
+
+            assert(elem.value >= 0 && elem.value < nproc);
+            counts[elem.value]++;
+            count++;
+
+            if (verbose) {
+                int last_elem = tail_ptr.disp == nil.disp;
+                printf("%2d%s", elem.value, last_elem ? "" : " -> ");
+                if (count % ELEM_PER_ROW == 0 && !last_elem)
+                    printf("\n");
+            }
+        }
+
+        MPI_Win_unlock_all(llist_win);
+
+        if (verbose)
+          printf("\n\n");
+
+        /* Verify the counts we collected */
+        for (i = 0; i < nproc; i++) {
+            int expected;
+
+            expected = NUM_ELEMS/nproc;
+            if (i < NUM_ELEMS % nproc)
+                expected++;
+
+            if (counts[i] != expected) {
+                printf("Error: Rank %d inserted %d elements, expected %d\n", i, counts[i], expected);
+                errors++;
+            }
+        }
+
+        printf("%s\n", errors == 0 ? " No Errors" : "FAIL");
+        free(counts);
+    }
+
+    if (print_perf) {
+        double max_time;
+
+        MPI_Reduce(&time, &max_time, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
+
+        if (procid == 0) {
+            printf("Total time = %0.2f sec, elem/sec = %0.2f, sec/elem = %0.2f usec\n", max_time, NUM_ELEMS/max_time, max_time/NUM_ELEMS*1.0e6);
+        }
+    }
+
+    MPI_Win_free(&llist_win);
+
+    /* Free all the elements in the list */
+    for ( ; my_elems_count > 0; my_elems_count--)
+        MPI_Free_mem(my_elems[my_elems_count-1]);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/linked_list_fop.c b/teshsuite/smpi/mpich3-test/rma/linked_list_fop.c
new file mode 100644 (file)
index 0000000..bb95b77
--- /dev/null
@@ -0,0 +1,242 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/*            MPI-3 distributed linked list construction example
+ *            --------------------------------------------------
+ * 
+ * Construct a distributed shared linked list using proposed MPI-3 dynamic
+ * windows.  Initially process 0 creates the head of the list, attaches it to
+ * the window, and broadcasts the pointer to all processes.  All processes then
+ * concurrently append N new elements to the list.  When a process attempts to
+ * attach its element to the tail of list it may discover that its tail pointer
+ * is stale and it must chase ahead to the new tail before the element can be
+ * attached.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include <assert.h>
+#include "mpitest.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#define NUM_ELEMS 32
+#define NPROBE    100
+#define ELEM_PER_ROW 16
+
+/* Linked list pointer */
+typedef struct {
+    int      rank;
+    MPI_Aint disp;
+} llist_ptr_t;
+
+/* Linked list element */
+typedef struct {
+    int value;
+    llist_ptr_t next;
+} llist_elem_t;
+
+static const llist_ptr_t nil = { -1, (MPI_Aint) MPI_BOTTOM };
+static const int verbose = 0;
+
+/* List of locally allocated list elements. */
+static llist_elem_t **my_elems = NULL;
+static int my_elems_size  = 0;
+static int my_elems_count = 0;
+
+/* Allocate a new shared linked list element */
+MPI_Aint alloc_elem(int value, MPI_Win win) {
+    MPI_Aint disp;
+    llist_elem_t *elem_ptr;
+
+    /* Allocate the new element and register it with the window */
+    MPI_Alloc_mem(sizeof(llist_elem_t), MPI_INFO_NULL, &elem_ptr);
+    elem_ptr->value = value;
+    elem_ptr->next  = nil;
+    MPI_Win_attach(win, elem_ptr, sizeof(llist_elem_t));
+
+    /* Add the element to the list of local elements so we can free it later. */
+    if (my_elems_size == my_elems_count) {
+        my_elems_size += 100;
+        my_elems = realloc(my_elems, my_elems_size*sizeof(void*));
+    }
+    my_elems[my_elems_count] = elem_ptr;
+    my_elems_count++;
+
+    MPI_Get_address(elem_ptr, &disp);
+    return disp;
+}
+
+int main(int argc, char **argv) {
+    int           procid, nproc, i;
+    MPI_Win       llist_win;
+    llist_ptr_t   head_ptr, tail_ptr;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &procid);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &llist_win);
+
+    /* Process 0 creates the head node */
+    if (procid == 0)
+        head_ptr.disp = alloc_elem(-1, llist_win);
+
+    /* Broadcast the head pointer to everyone */
+    head_ptr.rank = 0;
+    MPI_Bcast(&head_ptr.disp, 1, MPI_AINT, 0, MPI_COMM_WORLD);
+    tail_ptr = head_ptr;
+
+    /* All processes concurrently append NUM_ELEMS elements to the list */
+    for (i = 0; i < NUM_ELEMS; i++) {
+        llist_ptr_t new_elem_ptr;
+        int success;
+
+        /* Create a new list element and register it with the window */
+        new_elem_ptr.rank = procid;
+        new_elem_ptr.disp = alloc_elem(procid, llist_win);
+
+        /* Append the new node to the list.  This might take multiple attempts if
+           others have already appended and our tail pointer is stale. */
+        do {
+            llist_ptr_t next_tail_ptr = nil;
+
+            MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, MPI_MODE_NOCHECK, llist_win);
+
+            MPI_Compare_and_swap((void*) &new_elem_ptr.rank, (void*) &nil.rank,
+                                  (void*) &next_tail_ptr.rank, MPI_INT, tail_ptr.rank,
+                                  (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.rank), llist_win);
+
+            MPI_Win_unlock(tail_ptr.rank, llist_win);
+            success = (next_tail_ptr.rank == nil.rank);
+
+            if (success) {
+                int i, flag;
+                MPI_Aint result;
+
+                MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, MPI_MODE_NOCHECK, llist_win);
+
+                MPI_Fetch_and_op(&new_elem_ptr.disp, &result, MPI_AINT, tail_ptr.rank,
+                                  (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.disp),
+                                  MPI_REPLACE, llist_win);
+
+                /* Note: accumulate is faster, since we don't need the result.  Replacing with
+                   Fetch_and_op to create a more complete test case. */
+                /*
+                MPI_Accumulate(&new_elem_ptr.disp, 1, MPI_AINT, tail_ptr.rank,
+                               (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.disp), 1,
+                               MPI_AINT, MPI_REPLACE, llist_win);
+                */
+
+                MPI_Win_unlock(tail_ptr.rank, llist_win);
+                tail_ptr = new_elem_ptr;
+
+                /* For implementations that use pt-to-pt messaging, force progress for other threads'
+                   RMA operations. */
+                for (i = 0; i < NPROBE; i++)
+                    MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE);
+
+            } else {
+                /* Tail pointer is stale, fetch the displacement.  May take multiple tries
+                   if it is being updated. */
+                do {
+                    MPI_Aint junk = 0;
+
+                    MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, MPI_MODE_NOCHECK, llist_win);
+
+                    MPI_Fetch_and_op(NULL, &next_tail_ptr.disp, MPI_AINT, tail_ptr.rank,
+                                      (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.disp),
+                                      MPI_NO_OP, llist_win);
+
+                    MPI_Win_unlock(tail_ptr.rank, llist_win);
+                } while (next_tail_ptr.disp == nil.disp);
+                tail_ptr = next_tail_ptr;
+            }
+        } while (!success);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Traverse the list and verify that all processes inserted exactly the correct
+       number of elements. */
+    if (procid == 0) {
+        int  have_root = 0;
+        int  errors    = 0;
+        int *counts, count = 0;
+
+        counts = (int*) malloc(sizeof(int) * nproc);
+        assert(counts != NULL);
+
+        for (i = 0; i < nproc; i++)
+            counts[i] = 0;
+
+        tail_ptr = head_ptr;
+
+        /* Walk the list and tally up the number of elements inserted by each rank */
+        while (tail_ptr.disp != nil.disp) {
+            llist_elem_t elem;
+
+            MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, MPI_MODE_NOCHECK, llist_win);
+
+            MPI_Get(&elem, sizeof(llist_elem_t), MPI_BYTE,
+                    tail_ptr.rank, tail_ptr.disp, sizeof(llist_elem_t), MPI_BYTE, llist_win);
+
+            MPI_Win_unlock(tail_ptr.rank, llist_win);
+
+            tail_ptr = elem.next;
+
+            /* This is not the root */
+            if (have_root) {
+                assert(elem.value >= 0 && elem.value < nproc);
+                counts[elem.value]++;
+                count++;
+
+                if (verbose) {
+                    int last_elem = tail_ptr.disp == nil.disp;
+                    printf("%2d%s", elem.value, last_elem ? "" : " -> ");
+                    if (count % ELEM_PER_ROW == 0 && !last_elem)
+                        printf("\n");
+                }
+            }
+
+            /* This is the root */
+            else {
+                assert(elem.value == -1);
+                have_root = 1;
+            }
+        }
+
+        if (verbose)
+          printf("\n\n");
+
+        /* Verify the counts we collected */
+        for (i = 0; i < nproc; i++) {
+            int expected = NUM_ELEMS;
+
+            if (counts[i] != expected) {
+                printf("Error: Rank %d inserted %d elements, expected %d\n", i, counts[i], expected);
+                errors++;
+            }
+        }
+
+        printf("%s\n", errors == 0 ? " No Errors" : "FAIL");
+        free(counts);
+    }
+
+    MPI_Win_free(&llist_win);
+
+    /* Free all the elements in the list */
+    for ( ; my_elems_count > 0; my_elems_count--)
+        MPI_Free_mem(my_elems[my_elems_count-1]);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/linked_list_lockall.c b/teshsuite/smpi/mpich3-test/rma/linked_list_lockall.c
new file mode 100644 (file)
index 0000000..f1373fb
--- /dev/null
@@ -0,0 +1,231 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/*            MPI-3 distributed linked list construction example
+ *            --------------------------------------------------
+ *
+ * Construct a distributed shared linked list using proposed MPI-3 dynamic
+ * windows.  Initially process 0 creates the head of the list, attaches it to
+ * the window, and broadcasts the pointer to all processes.  All processes then
+ * concurrently append N new elements to the list.  When a process attempts to
+ * attach its element to the tail of list it may discover that its tail pointer
+ * is stale and it must chase ahead to the new tail before the element can be
+ * attached.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include <assert.h>
+#include "mpitest.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#define NUM_ELEMS 32
+#define NPROBE    100
+#define ELEM_PER_ROW 16
+
+/* Linked list pointer */
+typedef struct {
+    int      rank;
+    MPI_Aint disp;
+} llist_ptr_t;
+
+/* Linked list element */
+typedef struct {
+    int value;
+    llist_ptr_t next;
+} llist_elem_t;
+
+static const llist_ptr_t nil = { -1, (MPI_Aint) MPI_BOTTOM };
+static const int verbose = 0;
+
+/* List of locally allocated list elements. */
+static llist_elem_t **my_elems = NULL;
+static int my_elems_size  = 0;
+static int my_elems_count = 0;
+
+/* Allocate a new shared linked list element */
+MPI_Aint alloc_elem(int value, MPI_Win win) {
+    MPI_Aint disp;
+    llist_elem_t *elem_ptr;
+
+    /* Allocate the new element and register it with the window */
+    MPI_Alloc_mem(sizeof(llist_elem_t), MPI_INFO_NULL, &elem_ptr);
+    elem_ptr->value = value;
+    elem_ptr->next  = nil;
+    MPI_Win_attach(win, elem_ptr, sizeof(llist_elem_t));
+
+    /* Add the element to the list of local elements so we can free it later. */
+    if (my_elems_size == my_elems_count) {
+        my_elems_size += 100;
+        my_elems = realloc(my_elems, my_elems_size*sizeof(void*));
+    }
+    my_elems[my_elems_count] = elem_ptr;
+    my_elems_count++;
+
+    MPI_Get_address(elem_ptr, &disp);
+    return disp;
+}
+
+int main(int argc, char **argv) {
+    int           procid, nproc, i;
+    MPI_Win       llist_win;
+    llist_ptr_t   head_ptr, tail_ptr;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &procid);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &llist_win);
+
+    /* Process 0 creates the head node */
+    if (procid == 0)
+        head_ptr.disp = alloc_elem(-1, llist_win);
+
+    /* Broadcast the head pointer to everyone */
+    head_ptr.rank = 0;
+    MPI_Bcast(&head_ptr.disp, 1, MPI_AINT, 0, MPI_COMM_WORLD);
+    tail_ptr = head_ptr;
+
+    /* Lock the window for shared access to all targets */
+    MPI_Win_lock_all(0, llist_win);
+
+    /* All processes concurrently append NUM_ELEMS elements to the list */
+    for (i = 0; i < NUM_ELEMS; i++) {
+        llist_ptr_t new_elem_ptr;
+        int success;
+
+        /* Create a new list element and register it with the window */
+        new_elem_ptr.rank = procid;
+        new_elem_ptr.disp = alloc_elem(procid, llist_win);
+
+        /* Append the new node to the list.  This might take multiple attempts if
+           others have already appended and our tail pointer is stale. */
+        do {
+            llist_ptr_t next_tail_ptr = nil;
+
+            MPI_Compare_and_swap((void*) &new_elem_ptr.rank, (void*) &nil.rank,
+                                  (void*) &next_tail_ptr.rank, MPI_INT, tail_ptr.rank,
+                                  (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.rank), llist_win);
+
+            MPI_Win_flush(tail_ptr.rank, llist_win);
+            success = (next_tail_ptr.rank == nil.rank);
+
+            if (success) {
+                int i, flag;
+
+                MPI_Accumulate(&new_elem_ptr.disp, 1, MPI_AINT, tail_ptr.rank,
+                               (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.disp), 1,
+                               MPI_AINT, MPI_REPLACE, llist_win);
+
+                MPI_Win_flush(tail_ptr.rank, llist_win);
+                tail_ptr = new_elem_ptr;
+
+                /* For implementations that use pt-to-pt messaging, force progress for other threads'
+                   RMA operations. */
+                for (i = 0; i < NPROBE; i++)
+                    MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE);
+
+            } else {
+                /* Tail pointer is stale, fetch the displacement.  May take multiple tries
+                   if it is being updated. */
+                do {
+                    MPI_Get_accumulate( NULL, 0, MPI_DATATYPE_NULL, &next_tail_ptr.disp,
+                                        1, MPI_AINT, tail_ptr.rank,
+                                        (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next.disp),
+                                        1, MPI_AINT, MPI_NO_OP, llist_win);
+                    MPI_Win_flush(tail_ptr.rank, llist_win);
+                } while (next_tail_ptr.disp == nil.disp);
+                tail_ptr = next_tail_ptr;
+            }
+        } while (!success);
+    }
+
+    MPI_Win_unlock_all(llist_win);
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Traverse the list and verify that all processes inserted exactly the correct
+       number of elements. */
+    if (procid == 0) {
+        int  have_root = 0;
+        int  errors    = 0;
+        int *counts, count = 0;
+
+        counts = (int*) malloc(sizeof(int) * nproc);
+        assert(counts != NULL);
+
+        for (i = 0; i < nproc; i++)
+            counts[i] = 0;
+
+        tail_ptr = head_ptr;
+
+        MPI_Win_lock_all(0, llist_win);
+
+        /* Walk the list and tally up the number of elements inserted by each rank */
+        while (tail_ptr.disp != nil.disp) {
+            llist_elem_t elem;
+
+            MPI_Get(&elem, sizeof(llist_elem_t), MPI_BYTE,
+                    tail_ptr.rank, tail_ptr.disp, sizeof(llist_elem_t), MPI_BYTE, llist_win);
+
+            MPI_Win_flush(tail_ptr.rank, llist_win);
+
+            tail_ptr = elem.next;
+
+            /* This is not the root */
+            if (have_root) {
+                assert(elem.value >= 0 && elem.value < nproc);
+                counts[elem.value]++;
+                count++;
+
+                if (verbose) {
+                    int last_elem = tail_ptr.disp == nil.disp;
+                    printf("%2d%s", elem.value, last_elem ? "" : " -> ");
+                    if (count % ELEM_PER_ROW == 0 && !last_elem)
+                        printf("\n");
+                }
+            }
+
+            /* This is the root */
+            else {
+                assert(elem.value == -1);
+                have_root = 1;
+            }
+        }
+
+        MPI_Win_unlock_all(llist_win);
+
+        if (verbose)
+          printf("\n\n");
+
+        /* Verify the counts we collected */
+        for (i = 0; i < nproc; i++) {
+            int expected = NUM_ELEMS;
+
+            if (counts[i] != expected) {
+                printf("Error: Rank %d inserted %d elements, expected %d\n", i, counts[i], expected);
+                errors++;
+            }
+        }
+
+        printf("%s\n", errors == 0 ? " No Errors" : "FAIL");
+        free(counts);
+    }
+
+    MPI_Win_free(&llist_win);
+
+    /* Free all the elements in the list */
+    for ( ; my_elems_count > 0; my_elems_count--)
+        MPI_Free_mem(my_elems[my_elems_count-1]);
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/lockcontention.c b/teshsuite/smpi/mpich3-test/rma/lockcontention.c
new file mode 100644 (file)
index 0000000..8fbce4b
--- /dev/null
@@ -0,0 +1,101 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+
+/* This is a modified version of test4.c. Sent by Liwei Peng, Microsoft. */
+
+/* tests passive target RMA on 3 processes. tests the lock-single_op-unlock
+   optimization. */
+
+
+#define SIZE1 100
+#define SIZE2 200
+
+int main(int argc, char *argv[])
+{
+    int rank, nprocs, A[SIZE2], B[SIZE2], i;
+    MPI_Comm CommThree;
+    MPI_Win win;
+    int errs = 0;
+    int trank = 1;
+
+    MTest_Init(&argc,&argv);
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs);
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank);
+
+    if (nprocs < 3) {
+        fprintf(stderr, "Run this program with 3 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 3), rank, &CommThree);
+
+    if (rank < 3) {
+        if (rank == 0) {
+            for (i=0; i<SIZE2; i++) {
+                A[i] = B[i] = i;
+            }
+        }
+        else if (rank == 2) {
+            for (i=0; i<SIZE2; i++) {
+                A[i] = B[i] = -1;
+            }
+        }
+        else if (rank == 1) {
+            for (i=0; i<SIZE2; i++) {
+                B[i] = (-4)*i;
+            }
+        }
+
+        MPI_Win_create(B, SIZE2*sizeof(int), sizeof(int), MPI_INFO_NULL, CommThree, &win);
+
+        if (rank == 0) {
+            for (i=0; i<SIZE1; i++) {
+                MPI_Win_lock(MPI_LOCK_EXCLUSIVE, trank, 0, win);
+                MPI_Put(A+i, 1, MPI_INT, trank, i, 1, MPI_INT, win);
+                /*  MPI_Put(A+i, 1, MPI_INT, trank, i, 1, MPI_INT, win);
+                    MPI_Put(A+i, 1, MPI_INT, trank, i, 1, MPI_INT, win); */
+                MPI_Win_unlock(trank, win);
+            }
+
+            MPI_Win_free(&win);
+        }
+        else if (rank == 2) {
+            for (i=0; i<SIZE1; i++) {
+                MPI_Win_lock(MPI_LOCK_EXCLUSIVE, trank, 0, win);
+                MPI_Get(A+i, 1, MPI_INT, trank, SIZE1+i, 1, MPI_INT, win);
+                MPI_Win_unlock(trank, win);
+            }
+
+            MPI_Win_free(&win);
+
+            for (i=0; i<SIZE1; i++)
+                if (A[i] != (-4)*(i+SIZE1)) {
+                    printf("Get Error: A[%d] is %d, should be %d\n", i, A[i], (-4)*(i+SIZE1));
+                    errs++;
+                }
+        }
+
+        else if (rank == 1) { /*target*/
+            MPI_Win_free(&win);
+
+            for (i=0; i<SIZE1; i++) {
+                if (B[i] != i) {
+                    printf("Put Error: B[%d] is %d, should be %d\n", i, B[i], i);
+                    errs++;
+                }
+            }
+        }
+    }
+    MPI_Comm_free(&CommThree);
+
+    MTest_Finalize(errs);
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/lockcontention2.c b/teshsuite/smpi/mpich3-test/rma/lockcontention2.c
new file mode 100644 (file)
index 0000000..bae541f
--- /dev/null
@@ -0,0 +1,305 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2010 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+
+/* 
+ * Tests for lock contention, including special cases within the MPICH code 
+ * (any MPI implementation should pass these tests; in the MPICH case, our
+ * coverage analysis showed that the lockcontention.c test was not covering
+ * all cases, and in fact, this test revealed a bug in the code).
+ *
+ * In all of these tests, each process writes (or accesses) the values
+ * rank + i*size_of_world for NELM times.
+ *
+ * This test strives to avoid operations not strictly permitted by MPI RMA,
+ * for example, it doesn't target the same locations with multiple put/get
+ * calls in the same access epoch.
+ */
+
+#define NELM 200
+#define NBLOCK 10
+#define MAX_ERRS_REPORT 10
+
+/* 
+ *  Each process writes data into the rmabuf on the process with target rank
+ *  trank.  The final result in rmabuf are the consecutive integers starting
+ *  from 0.  Each process, however, does not write a consecutive block.  
+ *  Instead, they write these locations:
+ *
+ *  for i=0,...,NELM-1
+ *     for j=0,...,NBLOCK-1
+ *         j + NBLOCK * (rank + i * wsize)
+ *  
+ * The value written is the location.
+ *
+ * In many cases, multiple RMA operations are needed.  Where these must not
+ * overlap, the above pattern is replicated at NBLOCK*NELM*wsize.
+ * (NBLOCK is either 1 or NBLOCK in the code below, depending on use) 
+ */
+
+static int toterrs = 0;
+
+int testValues( int, int, int, int *, const char * );
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, wsize, i, j, cnt;
+    int *rmabuf, *localbuf, *localbuf2, *vals;
+    MPI_Win win;
+    int trank = 0;
+    int windowsize;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&wsize); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (wsize < 2) {
+        fprintf(stderr, "Run this program with at least 2 processes\n");
+        MPI_Abort(MPI_COMM_WORLD,1);
+    }
+
+    windowsize = (2*NBLOCK + 2) * NELM * wsize;
+    rmabuf     = (int *)malloc( windowsize * sizeof(int) );
+    localbuf   = (int *)malloc( NELM * sizeof(int) );
+    localbuf2  = (int *)malloc( NELM * NBLOCK * sizeof(int) );
+    vals       = (int *)malloc( NELM*sizeof(int) );
+
+    /* 
+     * Initialize the buffers
+     */
+    for (i=0; i<NELM; i++) {
+      localbuf[i] = rank + i*wsize;
+    }
+    cnt = 0;
+    for (i=0; i<NELM; i++) {
+       for (j=0; j<NBLOCK; j++) {
+           localbuf2[cnt++] = j + NBLOCK * (rank + i*wsize);
+       }
+    }
+    for (i=0; i<windowsize; i++) {
+      rmabuf[i] = -1;
+    }
+
+    /* Create the window */
+    MPI_Win_create(rmabuf, windowsize*sizeof(int), sizeof(int), MPI_INFO_NULL, 
+                  MPI_COMM_WORLD, &win); 
+
+    /* Multiple puts, with contention at trank */
+    MPI_Barrier( MPI_COMM_WORLD );
+    for (i=0; i<NELM; i++) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       MPI_Put( &localbuf[i], 1, MPI_INT, trank, 
+                rank + i*wsize, 1, MPI_INT, win );
+       MPI_Put( &localbuf[i], 1, MPI_INT, trank, 
+                rank + (i+NELM)*wsize, 1, MPI_INT, win );
+       MPI_Win_unlock( trank, win );
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+    if (rank == trank) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       toterrs += testValues( 1, NELM, wsize, rmabuf, "Multiple puts (1)" );
+       toterrs += testValues( 1, NELM, wsize, rmabuf + wsize*NELM,
+                              "Multiple puts (2)" );
+       MPI_Win_unlock( trank, win );
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+    /* Reinit the rmabuf */
+    for (i=0; i<windowsize; i++) {
+      rmabuf[i] = -1;
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+
+    /* Single put with contention */
+    trank = 0;
+    for (i=0; i<NELM; i++) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       MPI_Put( &localbuf[i], 1, MPI_INT, trank, rank + i*wsize, 1, MPI_INT, 
+                win );
+       MPI_Win_unlock( trank, win );
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+    if (rank == trank) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       toterrs += testValues( 1, NELM, wsize, rmabuf, "Single put" );
+       MPI_Win_unlock( trank, win );
+    }
+
+    /* Reinit the rmabuf */
+    for (i=0; i<windowsize; i++) {
+       rmabuf[i] = -1;
+    }
+    /* Longer puts with contention at trank */
+    MPI_Barrier( MPI_COMM_WORLD );
+    for (i=0; i<NELM; i++) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       if (rank != trank) {
+           MPI_Put( &localbuf2[i*NBLOCK], NBLOCK, MPI_INT, trank, 
+                    NELM * wsize + NBLOCK*(rank+i*wsize), NBLOCK, 
+                    MPI_INT, win );
+           MPI_Put( &localbuf2[i*NBLOCK], NBLOCK, MPI_INT, trank, 
+                    NELM * wsize + NBLOCK*(rank+(i+NELM)*wsize), NBLOCK, 
+                    MPI_INT, win );
+       }
+       MPI_Put( &localbuf[i], 1, MPI_INT, trank, rank+i*wsize, 1, MPI_INT, 
+                win );
+       MPI_Win_unlock( trank, win );
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+    if (rank == trank) {
+       /* For simplicity in testing, set the values that rank==trank
+          would have set. */
+       for (i=0; i<NELM; i++) {
+           for (j=0; j<NBLOCK; j++) {
+               rmabuf[NELM*wsize + NBLOCK*(trank+i*wsize) + j] = 
+                   j + NBLOCK*(trank +i*wsize);
+               rmabuf[NELM*wsize + NBLOCK*(trank+(i+NELM)*wsize) + j] = 
+                   j + NBLOCK*(trank + i*wsize);
+           }
+       }
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       toterrs += testValues( 1, NELM, wsize, rmabuf, "Long puts (1)" );
+       toterrs += testValues( NBLOCK, NELM, wsize, rmabuf + NELM * wsize,
+                              "Long puts(2)" );
+       toterrs += testValues( NBLOCK, NELM, wsize, 
+                              rmabuf + NELM * wsize * (1 + NBLOCK),
+                              "Long puts(3)" );
+       MPI_Win_unlock( trank, win );
+    }
+    
+    /* Reinit the rmabuf */
+    for (i=0; i<windowsize; i++) {
+       rmabuf[i] = -1;
+    }
+    for (i=0; i< NELM; i++) 
+       vals[i] = -2;
+    
+    /* Put mixed with Get */
+    MPI_Barrier( MPI_COMM_WORLD );
+    for (i=0; i<NELM; i++) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       if (rank != trank) {
+           MPI_Put( &localbuf2[i], NBLOCK, MPI_INT, trank, 
+                    NELM*wsize + NBLOCK*(rank + i*wsize), NBLOCK, MPI_INT, 
+                    win );
+           MPI_Put( &localbuf[i], 1, MPI_INT, trank, 
+                    rank + i*wsize, 1, MPI_INT, win );
+       }
+       else {
+           MPI_Get( &vals[i], 1, MPI_INT, trank, i, 1, MPI_INT, win );
+       }
+       MPI_Win_unlock( trank, win );
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+    if (rank == trank) {
+       /* Just test the Get */
+       for (i=0; i<wsize; i++) {
+           if (i == trank) {
+               if (vals[i] != -1) {
+                   toterrs++;
+                   if (toterrs < MAX_ERRS_REPORT) {
+                       printf( "put/get: vals[%d] = %d, expected -1\n",
+                               i, vals[i] );
+                   }
+               }
+           }
+           else if (vals[i] != i && vals[i] != -1) {
+               toterrs++;
+               if (toterrs < MAX_ERRS_REPORT) {
+                   printf( "put/get: vals[%d] = %d, expected -1 or %d\n",
+                           i, vals[i], i );
+               }
+           }
+       }
+    }
+
+    /* Contention only with get */
+    for (i=0; i<windowsize; i++) {
+       rmabuf[i] = -i;
+    }
+    for (i=0; i<NELM; i++)
+       vals[i] = -2;
+
+    MPI_Barrier( MPI_COMM_WORLD );
+    for (i=0; i<NELM; i++) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       MPI_Get( &vals[i], 1, MPI_INT, trank, i, 1, MPI_INT, win );
+       MPI_Win_unlock( trank, win );
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+    if (rank == trank) {
+       for (i=0; i<NELM; i++) {
+           if (vals[i] != -i) {
+               toterrs++;
+               if (toterrs < MAX_ERRS_REPORT) {
+                   printf( "single get: vals[%d] = %d, expected %d\n",
+                           i, vals[i], -i );
+               }
+           }
+       }
+    }
+
+    /* Contention with accumulate */
+    MPI_Barrier( MPI_COMM_WORLD );
+    for (i=0; i<NELM*wsize; i++) {
+       rmabuf[i] = 0;
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+    for (i=0; i<NELM; i++) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       MPI_Accumulate( &localbuf[i], 1, MPI_INT, trank, rank+i*wsize, 
+                       1, MPI_INT, MPI_SUM, win );
+       MPI_Accumulate( &localbuf[i], 1, MPI_INT, trank, rank+i*wsize, 
+                       1, MPI_INT, MPI_SUM, win );
+       MPI_Win_unlock( trank, win );
+    }
+    MPI_Barrier( MPI_COMM_WORLD );
+    if (rank == trank) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, trank, 0, win );
+       for (i=0; i<NELM * wsize; i++) {
+           if (rmabuf[i] != 2*i) {
+               toterrs++;
+               if (toterrs < MAX_ERRS_REPORT) {
+                   printf( "2 accumulate: rmabuf[%d] = %d, expected %d\n",
+                           i, rmabuf[i], 2*i );
+               }
+           }
+       }
+       MPI_Win_unlock( trank, win );
+    }
+
+    MPI_Win_free( &win );
+
+    free( rmabuf );
+    free( localbuf );
+    free( localbuf2 );
+    free( vals );
+   
+    MTest_Finalize(toterrs);
+    MPI_Finalize(); 
+    return 0; 
+} 
+
+/* Test the values in the rmabuf against the expected values.  Return the 
+   number of errors */
+int testValues( int nb, int nelm, int wsize, int *rmabuf, const char *msg )
+{
+    int i, errs = 0;
+               
+    for (i=0; i<nb * nelm * wsize; i++) {
+       if (rmabuf[i] != i) {
+           if (toterrs + errs < MAX_ERRS_REPORT) {
+               printf( "%s:rmabuf[%d] = %d expected %d\n", 
+                       msg, i, rmabuf[i], i );
+           }
+           errs++;
+       }
+    }
+
+    return errs;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/lockcontention3.c b/teshsuite/smpi/mpich3-test/rma/lockcontention3.c
new file mode 100644 (file)
index 0000000..d70e26c
--- /dev/null
@@ -0,0 +1,487 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+#include <assert.h>
+#include <string.h>
+
+#define LAST_TEST 14
+#define RMA_SIZE  2048
+#define OFFSET_1  7
+#define OFFSET_2  83
+#define OFFSET_3  157
+
+#define PUT_VAL 0xdcba97
+#define ACC_VAL 10771134
+
+/* 
+ * Additional tests for lock contention.  These are designed to exercise
+ * some of the optimizations within MPICH, but all are valid MPI programs.
+ * Tests structure includes
+ *    lock local (must happen at this time since application can use load
+ *                store after the lock)
+ *    send message to partner
+ *                                  receive message
+ *                                  send ack
+ *    receive ack
+ *    Provide a delay so that
+ *      the partner will see the
+ *      conflict
+ *                                  partner executes:
+ *                                  lock         // Note: this may block
+ *                                     rma operations (see below)
+ *                                  unlock
+ *    
+ *    unlock                        send back to partner
+ *    receive from partner 
+ *    check for correct data
+ *
+ * The delay may be implemented as a ring of message communication; this
+ * is likely to automatically scale the time to what is needed
+ */
+
+/* Define a datatype to be used with */
+int stride    = 11;
+int veccount  = 7;
+MPI_Datatype  vectype;
+/* Define long RMA ops size */
+int longcount = 512;
+int medcount  = 127;
+int mednum    = 4;
+
+void RMATest( int i, MPI_Win win, int master, int *srcbuf, int srcbufsize, int *getbuf, int getbufsize );
+int  RMACheck( int i, int *buf, MPI_Aint bufsize );
+int  RMACheckGet( int i, MPI_Win win, int *getbuf, MPI_Aint getsize);
+void RMATestInit( int i, int *buf, MPI_Aint bufsize );
+
+int main( int argc, char *argv[] )
+{
+    int      errs = 0;
+    MPI_Win  win;
+    int  *rmabuffer=0, *getbuf=0;
+    MPI_Aint bufsize=0, getbufsize=0;
+    int      master, partner, next, wrank, wsize, i;
+    int      ntest = LAST_TEST;
+    int *srcbuf;
+
+    MTest_Init( &argc, &argv );
+
+    /* Determine who is responsible for each part of the test */
+    MPI_Comm_rank( MPI_COMM_WORLD, &wrank );
+    MPI_Comm_size( MPI_COMM_WORLD, &wsize );
+    if (wsize < 3) {
+       fprintf( stderr, "This test requires at least 3 processes\n" );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+
+    master  = 0;
+    partner = 1;
+    next = wrank + 1;
+    if (next == partner) next++;
+    if (next >= wsize) {
+       next = 0;
+       if (next == partner) next++;
+    }
+
+    /* Determine the last test to run (by default, run them all) */
+    for (i=1; i<argc; i++) {
+       if (strcmp( "-ntest", argv[i] ) == 0) { 
+           i++;
+           if (i < argc) {
+               ntest = atoi( argv[i] );
+           }
+           else {
+               fprintf( stderr, "Missing value for -ntest\n" );
+               MPI_Abort( MPI_COMM_WORLD, 1 );
+           }
+       }
+    }
+
+    MPI_Type_vector( veccount, 1, stride, MPI_INT, &vectype );
+    MPI_Type_commit( &vectype );
+
+    /* Create the RMA window */
+    bufsize = 0;
+    if (wrank == master) {
+       bufsize = RMA_SIZE;
+       MPI_Alloc_mem( bufsize*sizeof(int), MPI_INFO_NULL, &rmabuffer );
+    }
+    else if (wrank == partner) {
+       getbufsize = RMA_SIZE;
+       getbuf = (int *)malloc( getbufsize*sizeof(int) );
+       if (!getbuf) {
+           fprintf( stderr, "Unable to allocated %d bytes for getbuf\n", 
+                   (int)getbufsize );
+           MPI_Abort( MPI_COMM_WORLD, 1 );
+       }
+    }
+    srcbuf = malloc(RMA_SIZE*sizeof(*srcbuf));
+    assert(srcbuf);
+
+    MPI_Win_create( rmabuffer, bufsize, sizeof(int), MPI_INFO_NULL,
+                   MPI_COMM_WORLD, &win );
+    
+    /* Run a sequence of tests */
+    for (i=0; i<=ntest; i++) {
+       if (wrank == master) {
+           MTestPrintfMsg( 0, "Test %d\n", i );
+           /* Because this lock is local, it must return only when the
+            lock is acquired */
+           MPI_Win_lock( MPI_LOCK_EXCLUSIVE, 0, master, win );
+           RMATestInit( i, rmabuffer, bufsize );
+           MPI_Send( MPI_BOTTOM, 0, MPI_INT, partner, i, MPI_COMM_WORLD );
+           MPI_Send( MPI_BOTTOM, 0, MPI_INT, next, i, MPI_COMM_WORLD );
+           MPI_Recv( MPI_BOTTOM, 0, MPI_INT, MPI_ANY_SOURCE, i, 
+                     MPI_COMM_WORLD, MPI_STATUS_IGNORE );
+           MPI_Win_unlock( master, win );
+           MPI_Recv( MPI_BOTTOM, 0, MPI_INT, partner, i, MPI_COMM_WORLD, 
+                     MPI_STATUS_IGNORE );
+           errs += RMACheck( i, rmabuffer, bufsize );
+       }
+       else if (wrank == partner) {
+           MPI_Recv( MPI_BOTTOM, 0, MPI_INT, master, i, MPI_COMM_WORLD,
+                     MPI_STATUS_IGNORE );
+           MPI_Win_lock( MPI_LOCK_EXCLUSIVE, 0, master, win );
+           RMATest( i, win, master, srcbuf, RMA_SIZE, getbuf, getbufsize );
+           MPI_Win_unlock( master, win );
+           errs += RMACheckGet( i, win, getbuf, getbufsize );
+           MPI_Send( MPI_BOTTOM, 0, MPI_INT, master, i, MPI_COMM_WORLD );
+       }
+       else {
+           MPI_Recv( MPI_BOTTOM, 0, MPI_INT, MPI_ANY_SOURCE, i, 
+                     MPI_COMM_WORLD, MPI_STATUS_IGNORE );
+           MPI_Send( MPI_BOTTOM, 0, MPI_INT, next, i, MPI_COMM_WORLD );
+       }
+    }
+
+    if (rmabuffer) {
+       MPI_Free_mem( rmabuffer );
+    }
+    if (getbuf) {
+       free( getbuf );
+    }
+    MPI_Win_free( &win );
+    MPI_Type_free( &vectype );
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return MTestReturnValue( errs );
+}
+
+/* Perform the tests.
+ *
+ * The srcbuf must be passed in because the buffer must remain valid
+ * until the subsequent unlock call. */
+void RMATest( int i, MPI_Win win, int master, int *srcbuf, int srcbufsize, int *getbuf, int getbufsize )
+{
+    int j, k;
+    int *source = srcbuf;
+    assert(srcbufsize == RMA_SIZE);
+
+    for (j=0; j<srcbufsize; j++) source[j] = -j;
+
+    switch (i) {
+    case 0: /* Single short put (1 word at OFFSET_1) */
+       source[0] = PUT_VAL;
+       MPI_Put( source, 1, MPI_INT, master, OFFSET_1, 1, MPI_INT, win );
+       break;
+    case 1: /* Single short accumulate (1 word of value 17 at OFFSET_2) */
+       source[0] = ACC_VAL;
+       MPI_Accumulate( source, 1, MPI_INT, master, 
+                       OFFSET_2, 1, MPI_INT, MPI_SUM, win );
+       break;
+    case 2: /* Single short get (1 word at OFFSET_3) */
+       getbuf[0] = -1;
+       MPI_Get( getbuf, 1, MPI_INT, master, OFFSET_3, 1, MPI_INT, win );
+       break;
+    case 3: /* Datatype single put (strided put) */
+       for (j=0; j<veccount; j++) {
+           source[j*stride] = PUT_VAL + j;
+       }
+       MPI_Put( source, 1, vectype, master, OFFSET_1, 1, vectype, win );
+       break;
+    case 4: /* Datatype single accumulate (strided acc) */
+       for (j=0; j<veccount; j++) {
+           source[j*stride] = ACC_VAL + j;
+       }
+       MPI_Accumulate( source, 1, vectype, master, 
+                       OFFSET_2, 1, vectype, MPI_SUM, win );
+       break;
+    case 5: /* Datatype single get (strided get) */
+       for (j=0; j<veccount; j++) {
+           getbuf[j] = -j;
+       }
+       MPI_Get( getbuf, 1, vectype, master,
+                OFFSET_3, 1, vectype, win );
+       break;
+    case 6: /* a few small puts (like strided put, but 1 word at a time) */
+       for (j=0; j<veccount; j++) {
+           source[j*stride] = PUT_VAL + j;
+       }
+       for (j=0; j<veccount; j++) {
+           MPI_Put( source + j*stride, 1, MPI_INT, master, 
+                    OFFSET_1+j*stride, 1, MPI_INT, win );
+       }
+       break;
+    case 7: /* a few small accumulates (like strided acc, but 1 word at a time )*/
+       for (j=0; j<veccount; j++) {
+           source[j*stride] = ACC_VAL + j;
+       }
+       for (j=0; j<veccount; j++) {
+           MPI_Accumulate( source + j*stride, 1, MPI_INT, master, 
+                           OFFSET_2+j*stride, 1, MPI_INT, MPI_SUM, win );
+       }
+       break;
+    case 8: /* a few small gets (like strided get, but 1 word at a time) */
+       for (j=0; j<veccount; j++) {
+           getbuf[j*stride] = -j;
+       }
+       for (j=0; j<veccount; j++) {
+           MPI_Get( getbuf + j*stride, 1, MPI_INT, master, 
+                    OFFSET_3+j*stride, 1, MPI_INT, win );
+       }
+       break;
+    case 9: /* Single long put (OFFSET_1) */
+       for (j=0; j<longcount; j++) source[j] = j;
+       MPI_Put( source, longcount, MPI_INT, master,
+                OFFSET_1, longcount, MPI_INT, win ); 
+       break;
+    case 10: /* Single long accumulate (OFFSET_2) */
+       for (j=0; j<longcount; j++) source[j] = j;
+       MPI_Accumulate( source, longcount, MPI_INT, master, 
+                       OFFSET_2, longcount, MPI_INT, MPI_SUM, win );
+       break;
+    case 11: /* Single long get (OFFSET_3) */
+       for (j=0; j<longcount; j++) getbuf[j] = -j;
+       MPI_Get( getbuf, longcount, MPI_INT, master,
+                OFFSET_3, longcount, MPI_INT, win ); 
+       break;
+    case 12: /* a few long puts (start at OFFSET_1, medcount ) */
+       for (j=0; j<mednum; j++) {
+           for (k=0; k<medcount; k++) {
+               source[j*medcount+k] = j*2*medcount+k;
+           }
+           MPI_Put( source + j*medcount, medcount, MPI_INT, master,
+                    OFFSET_1 + j*2*medcount, medcount, MPI_INT, win );
+       }
+       break;
+    case 13: /* a few long accumulates (start at OFFSET_2, medcount) */
+       for (j=0; j<mednum; j++) {
+           for (k=0; k<medcount; k++) {
+               source[j*medcount+k] = ACC_VAL + j*2*medcount+k;
+           }
+           MPI_Accumulate( source + j*medcount, medcount, MPI_INT, master,
+                           OFFSET_2 + j*2*medcount, medcount, MPI_INT, 
+                           MPI_SUM, win );
+       }
+       break;
+    case 14: /* a few long gets (start at OFFSET_3, medcount) */
+       for (j=0; j<mednum; j++) {
+           for (k=0; k<medcount; k++) {
+               getbuf[j*medcount+k] = -(j*medcount+k);
+           }
+           MPI_Get( getbuf + j*medcount, medcount, MPI_INT, master,
+                           OFFSET_3 + j*2*medcount, medcount, MPI_INT, win );
+       }
+       break;
+    }
+}
+
+int RMACheck( int i, int *buf, MPI_Aint bufsize )
+{
+    int j, k;
+    int errs = 0;
+
+    switch (i) {
+    case 0: /* Single short put (1 word at OFFSET_1) */
+       if (buf[OFFSET_1] != PUT_VAL) {
+           errs++;
+           printf( "case 0: value is %d should be %d\n", 
+                   buf[OFFSET_1], PUT_VAL );
+       }
+       break;
+    case 1: /* Single short accumulate (1 word of value 17 at OFFSET_2) */
+       if (buf[OFFSET_2] != ACC_VAL + OFFSET_2) {
+           errs++;
+           printf( "case 1: value is %d should be %d\n", 
+                   buf[OFFSET_2], ACC_VAL + OFFSET_2 );
+       }
+       break;
+    case 2: /* Single short get (1 word at OFFSET_3) */
+       /* See RMACheckGet */
+       break;
+    case 3: /* Datatype single put (strided put) */
+    case 6: /* a few small puts (like strided put, but 1 word at a time) */
+        /* FIXME: The conditional and increment are reversed below.  This looks
+         * like a bug, and currently prevents the following test from running. */
+       for (j=0; j++; j<veccount) {
+           if (buf[j*stride] != PUT_VAL + j) {
+               errs++;
+               printf( "case %d: value is %d should be %d\n", i,
+                       buf[j*stride], PUT_VAL+j );
+           }
+       }
+       break;
+    case 4: /* Datatype single accumulate (strided acc) */
+    case 7: /* a few small accumulates (like strided acc, but 1 word at a time )*/
+        /* FIXME: The conditional and increment are reversed below.  This looks
+         * like a bug, and currently prevents the following test from running. */
+       for (j=0; j++; j<veccount) {
+           if (buf[j*stride] != ACC_VAL + j + OFFSET_2 + j*stride) {
+               errs++;
+               printf( "case %d: value is %d should be %d\n", i,
+                       buf[j*stride], ACC_VAL+j+OFFSET_2+j*stride );
+           }
+       }
+       break;
+    case 5: /* Datatype single get (strided get) */
+    case 8: /* a few small gets (like strided get, but 1 word at a time) */
+       /* See RMACheckGet */
+       break;
+    case 9: /* Single long put (OFFSET_1) */
+       for (j=0; j<longcount; j++) {
+           if (buf[OFFSET_1+j] != j) {
+               errs++;
+               printf( "case 9: value is %d should be %d\n",
+                       buf[OFFSET_1+j], OFFSET_1 + j );
+           }
+       }
+       break;
+    case 10: /* Single long accumulate (OFFSET_2) */
+       for (j=0; j<longcount; j++) {
+           if (buf[OFFSET_2+j] != OFFSET_2 + j + j) {
+               errs++;
+               printf( "case 10: value is %d should be %d\n", 
+                       buf[OFFSET_2+j], OFFSET_2 + j + j );
+           }
+       }
+       break;
+    case 11: /* Single long get (OFFSET_3) */
+       /* See RMACheckGet */
+       break;
+    case 12: /* a few long puts (start at OFFSET_1, medcount ) */
+       for (j=0; j<mednum; j++) {
+           for (k=0; k<medcount; k++) {
+               if (buf[OFFSET_1 + j*2*medcount + k] != 
+                   j*2*medcount+k ) {
+                   errs++;
+                   printf( "case 12: value is %d should be %d\n", 
+                           buf[OFFSET_1+j*2*medcount + k], j*2*medcount + k );
+               }
+           }
+       }
+       break;
+    case 13: /* a few long accumulates (start at OFFSET_2, medcount) */
+       for (j=0; j<mednum; j++) {
+           for (k=0; k<medcount; k++) {
+               if (buf[OFFSET_2 + j*2*medcount + k] != 
+                   OFFSET_2 + 2*j*2*medcount+2*k + ACC_VAL ) {
+                   errs++;
+                   printf( "case 13: value is %d should be %d\n", 
+                           buf[OFFSET_2+j*2*medcount + k], 
+                           OFFSET_2 + 2*j*2*medcount + k +ACC_VAL);
+               }
+           }
+       }
+       break;
+    case 14: /* a few long gets (start at OFFSET_3, medcount) */
+       /* See RMACheckGet */
+       break;
+    default:
+       fprintf( stderr, "Unrecognized case %d\n", i );
+       errs++;
+       break;
+    }
+    return errs;
+}
+
+int RMACheckGet( int i, MPI_Win win, int *getbuf, MPI_Aint getsize)
+{
+    int errs = 0;
+    int j, k;
+
+    /* */
+    switch (i) {
+    case 0: /* Single short put (1 word at OFFSET_1) */
+       break;
+    case 1: /* Single short accumulate (1 word of value 17 at OFFSET_2) */
+       break;
+    case 2: /* Single short get (1 word at OFFSET_3) */
+       if (getbuf[0] != OFFSET_3) {
+           errs++;
+           printf( "case 2: value is %d should be %d\n", 
+                   getbuf[0], OFFSET_3 );
+       }
+       break;
+    case 3: /* Datatype single put (strided put) */
+       break;
+    case 4: /* Datatype single accumulate (strided acc) */
+       break;
+    case 5: /* Datatype single get (strided get) */
+    case 8: /* a few small gets (like strided get, but 1 word at a time) */
+       for (j=0; j<veccount; j++) {
+           if (getbuf[j*stride] != OFFSET_3 + j*stride) {
+               errs++;
+               printf( "case %d: value is %d should be %d\n", i,
+                       getbuf[j*stride], OFFSET_3 + j*stride );
+           }
+       }
+       
+       break;
+    case 6: /* a few small puts (like strided put, but 1 word at a time) */
+       break;
+    case 7: /* a few small accumulates (like strided acc, but 1 word at a time )*/
+       break;
+    case 9: /* Single long put (OFFSET_1) */
+       break;
+    case 10: /* Single long accumulate (OFFSET_2) */
+       break;
+    case 11: /* Single long get (OFFSET_3) */
+       for (j=0; j<longcount; j++) {
+           if (getbuf[j] != OFFSET_3 + j) {
+               errs++;
+               printf( "case 11: value is %d should be %d\n",
+                       getbuf[j], OFFSET_3 + j );
+           }
+       }
+       break;
+    case 12: /* a few long puts (start at OFFSET_1, medcount ) */
+       break;
+    case 13: /* a few long accumulates (start at OFFSET_2, medcount) */
+       break;
+    case 14: /* a few long gets (start at OFFSET_3, medcount) */
+       for (j=0; j<mednum; j++) {
+           for (k=0; k<medcount; k++) {
+               if (getbuf[j*medcount + k] != 
+                   OFFSET_3 + j*2*medcount+k ) {
+                   errs++;
+                   printf( "case 14: buf[%d] value is %d should be %d\n", 
+                           j*medcount + k,
+                           getbuf[j*medcount + k], 
+                           OFFSET_3 + j*2*medcount + k );
+               }
+           }
+       }
+       break;
+    default:
+       fprintf( stderr, "Unrecognized case %d\n", i );
+       errs++;
+       break;
+    }
+    return errs;
+}
+
+
+void RMATestInit( int i, int *buf, MPI_Aint bufsize )
+{
+    int j;
+    for (j=0; j<bufsize; j++) {
+       buf[j] = j;
+    }
+}
+
diff --git a/teshsuite/smpi/mpich3-test/rma/locknull.c b/teshsuite/smpi/mpich3-test/rma/locknull.c
new file mode 100644 (file)
index 0000000..8b04ce6
--- /dev/null
@@ -0,0 +1,66 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2008 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+#include <string.h>
+
+/*
+static char MTEST_Descrip[] = "Locks with no RMA operations";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    int rank, size, i;
+    MPI_Comm      comm;
+    MPI_Win       win;
+    int           *winbuf, count;
+
+    MTest_Init( &argc, &argv );
+
+    comm = MPI_COMM_WORLD;
+
+    MPI_Comm_rank( comm, &rank );
+    MPI_Comm_size( comm, &size );
+
+    /* Allocate and initialize buf */
+    count  = 1000;
+
+    MPI_Alloc_mem( count*sizeof(int), MPI_INFO_NULL, &winbuf );
+
+    MPI_Win_create( winbuf, count * sizeof(int), sizeof(int), MPI_INFO_NULL, 
+                   comm, &win );
+
+    /* Clear winbuf */
+    memset( winbuf, 0, count*sizeof(int) );
+
+    /* Note that for i == rank, this is a useful operation - it allows 
+       the programmer to use direct loads and stores, rather than 
+       put/get/accumulate, to access the local memory window. */
+    for (i=0; i<size; i++) {
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, i, 0, win );
+       MPI_Win_unlock( i, win );
+    }
+
+    for (i=0; i<size; i++) {
+       MPI_Win_lock( MPI_LOCK_SHARED, i, 0, win );
+       MPI_Win_unlock( i, win );
+    }
+
+    MPI_Win_free( &win );
+    MPI_Free_mem( winbuf );
+
+    /* If this test completes, no error has been found */
+    /* A more complete test may ensure that local locks in fact block
+       remote, exclusive locks */
+    MTest_Finalize( errs );
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/lockopts.c b/teshsuite/smpi/mpich3-test/rma/lockopts.c
new file mode 100644 (file)
index 0000000..6f962e3
--- /dev/null
@@ -0,0 +1,211 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+
+/* tests passive target RMA on 2 processes. tests the lock-single_op-unlock 
+   optimization for less common cases:
+
+   origin datatype derived, target datatype predefined
+
+*/
+int main(int argc, char *argv[]) 
+{ 
+    int          wrank, nprocs, *srcbuf, *rmabuf, i;
+    int          memsize;
+    MPI_Datatype vectype;
+    MPI_Win      win;
+    int          errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&wrank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    memsize = 10 * 4 * nprocs;
+    /* Create and initialize data areas */
+    srcbuf = (int *)malloc( sizeof(int) * memsize );
+    MPI_Alloc_mem( sizeof(int) * memsize, MPI_INFO_NULL, &rmabuf );
+    if (!srcbuf || !rmabuf) {
+       printf( "Unable to allocate srcbuf and rmabuf of size %d\n", memsize );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+    for (i=0; i<memsize; i++) {
+      rmabuf[i] = -i;
+      srcbuf[i] = i;
+    }
+
+    MPI_Win_create( rmabuf, memsize*sizeof(int), sizeof(int), MPI_INFO_NULL, 
+                   MPI_COMM_WORLD, &win );
+
+    /* Vector of 10 elements, separated by 4 */
+    MPI_Type_vector( 10, 1, 4, MPI_INT, &vectype );
+    MPI_Type_commit( &vectype );
+
+    /* Accumulate with a derived origin type and target predefined type*/
+    if (wrank == 0) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, 0, 0, win );
+       for (i=0; i<10; i++) {
+           if (rmabuf[i] != -i + 4*i) {
+               errs++;
+               printf( "Acc: expected rmabuf[%d] = %d but saw %d\n", 
+                       i, -i + 4*i, rmabuf[i] );
+           }
+           rmabuf[i] = -i;
+       }
+       for (i=10; i<memsize; i++) {
+           if (rmabuf[i] != -i) {
+               errs++;
+               printf( "Acc: expected rmabuf[%d] = %d but saw %d\n", 
+                       i, -i, rmabuf[i] );
+               rmabuf[i] = -i;
+           }
+       }
+       MPI_Win_unlock( 0, win );
+    }
+    else if (wrank == 1) {
+       MPI_Win_lock( MPI_LOCK_SHARED, 0, 0, win );
+       MPI_Accumulate( srcbuf, 1, vectype, 0, 0, 10, MPI_INT, MPI_SUM, win );
+       MPI_Win_unlock( 0, win );
+       MPI_Barrier( MPI_COMM_WORLD );
+    }
+    else {
+       MPI_Barrier( MPI_COMM_WORLD );
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Put with a derived origin type and target predefined type*/
+    if (wrank == 0) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, 0, 0, win );
+       for (i=0; i<10; i++) {
+           if (rmabuf[i] != 4*i) {
+               errs++;
+               printf( "Put: expected rmabuf[%d] = %d but saw %d\n", 
+                       i, 4*i, rmabuf[i] );
+           }
+           rmabuf[i] = -i;
+       }
+       for (i=10; i<memsize; i++) {
+           if (rmabuf[i] != -i) {
+               errs++;
+               printf( "Put: expected rmabuf[%d] = %d but saw %d\n", 
+                       i, -i, rmabuf[i] );
+               rmabuf[i] = -i;
+           }
+       }
+       MPI_Win_unlock( 0, win );
+    }
+    else if (wrank == 1) {
+       MPI_Win_lock( MPI_LOCK_SHARED, 0, 0, win );
+       MPI_Put( srcbuf, 1, vectype, 0, 0, 10, MPI_INT, win );
+       MPI_Win_unlock( 0, win );
+       MPI_Barrier( MPI_COMM_WORLD );
+    }
+    else {
+       MPI_Barrier( MPI_COMM_WORLD );
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Put with a derived origin type and target predefined type, with 
+       a get (see the move-to-end optimization) */
+    if (wrank == 0) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, 0, 0, win );
+       for (i=0; i<10; i++) {
+           if (rmabuf[i] != 4*i) {
+               errs++;
+               printf( "Put: expected rmabuf[%d] = %d but saw %d\n", 
+                       i, 4*i, rmabuf[i] );
+           }
+           rmabuf[i] = -i;
+       }
+       for (i=10; i<memsize; i++) {
+           if (rmabuf[i] != -i) {
+               errs++;
+               printf( "Put: expected rmabuf[%d] = %d but saw %d\n", 
+                       i, -i, rmabuf[i] );
+               rmabuf[i] = -i;
+           }
+       }
+       MPI_Win_unlock( 0, win );
+    }
+    else if (wrank == 1) {
+       int val;
+       MPI_Win_lock( MPI_LOCK_SHARED, 0, 0, win );
+       MPI_Get( &val, 1, MPI_INT, 0, 10, 1, MPI_INT, win );
+       MPI_Put( srcbuf, 1, vectype, 0, 0, 10, MPI_INT, win );
+       MPI_Win_unlock( 0, win );
+       MPI_Barrier( MPI_COMM_WORLD );
+       if (val != -10) {
+           errs++;
+           printf( "Get: Expected -10, got %d\n", val );
+       }
+    }
+    else {
+       MPI_Barrier( MPI_COMM_WORLD );
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Put with a derived origin type and target predefined type, with 
+       a get already at the end (see the move-to-end optimization) */
+    if (wrank == 0) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_lock( MPI_LOCK_EXCLUSIVE, 0, 0, win );
+       for (i=0; i<10; i++) {
+           if (rmabuf[i] != 4*i) {
+               errs++;
+               printf( "Put: expected rmabuf[%d] = %d but saw %d\n", 
+                       i, 4*i, rmabuf[i] );
+           }
+           rmabuf[i] = -i;
+       }
+       for (i=10; i<memsize; i++) {
+           if (rmabuf[i] != -i) {
+               errs++;
+               printf( "Put: expected rmabuf[%d] = %d but saw %d\n", 
+                       i, -i, rmabuf[i] );
+               rmabuf[i] = -i;
+           }
+       }
+       MPI_Win_unlock( 0, win );
+    }
+    else if (wrank == 1) {
+       int val;
+       MPI_Win_lock( MPI_LOCK_SHARED, 0, 0, win );
+       MPI_Put( srcbuf, 1, vectype, 0, 0, 10, MPI_INT, win );
+       MPI_Get( &val, 1, MPI_INT, 0, 10, 1, MPI_INT, win );
+       MPI_Win_unlock( 0, win );
+       MPI_Barrier( MPI_COMM_WORLD );
+       if (val != -10) {
+           errs++;
+           printf( "Get: Expected -10, got %d\n", val );
+       }
+    }
+    else {
+       MPI_Barrier( MPI_COMM_WORLD );
+    }
+
+    MPI_Win_free( &win );
+    MPI_Free_mem( rmabuf );
+    free( srcbuf );
+    MPI_Type_free( &vectype );
+
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
+
diff --git a/teshsuite/smpi/mpich3-test/rma/manyrma2.c b/teshsuite/smpi/mpich3-test/rma/manyrma2.c
new file mode 100644 (file)
index 0000000..91d9518
--- /dev/null
@@ -0,0 +1,308 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2010 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* This test is a simplification of the one in perf/manyrma.c that tests
+   for correct handling of the case where many RMA operations occur between
+   synchronization events.
+   This is one of the ways that RMA may be used, and is used in the 
+   reference implementation of the graph500 benchmark.
+*/
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX_COUNT 65536*4/16
+#define MAX_RMA_SIZE 2 /* 16 in manyrma performance test */
+#define MAX_RUNS 10
+
+typedef enum { SYNC_NONE=0, 
+              SYNC_ALL=-1, SYNC_FENCE=1, SYNC_LOCK=2, SYNC_PSCW=4 } sync_t;
+typedef enum { RMA_NONE=0, RMA_ALL=-1, RMA_PUT=1, RMA_ACC=2, RMA_GET=4 } rma_t;
+/* Note GET not yet implemented */
+/* By default, run only a subset of the available tests, to keep the
+   total runtime reasonably short.  Command line arguments may be used
+   to run other tests. */
+sync_t syncChoice = SYNC_FENCE;
+rma_t rmaChoice = RMA_ACC;
+
+static int verbose = 0;
+
+void RunAccFence( MPI_Win win, int destRank, int cnt, int sz );
+void RunAccLock( MPI_Win win, int destRank, int cnt, int sz );
+void RunPutFence( MPI_Win win, int destRank, int cnt, int sz );
+void RunPutLock( MPI_Win win, int destRank, int cnt, int sz );
+void RunAccPSCW( MPI_Win win, int destRank, int cnt, int sz, 
+                MPI_Group exposureGroup, MPI_Group accessGroup );
+void RunPutPSCW( MPI_Win win, int destRank, int cnt, int sz, 
+                MPI_Group exposureGroup, MPI_Group accessGroup );
+
+int main( int argc, char *argv[] )
+{
+    int arraysize, i, cnt, sz, maxCount=MAX_COUNT, *arraybuffer;
+    int wrank, wsize, destRank, srcRank;
+    MPI_Win win;
+    MPI_Group wgroup, accessGroup, exposureGroup;
+    int    maxSz = MAX_RMA_SIZE;
+
+    MPI_Init( &argc, &argv );
+
+    for (i=1; i<argc; i++) {
+       if (strcmp( argv[i], "-put" ) == 0) {
+           if (rmaChoice == RMA_ALL) rmaChoice = RMA_NONE;
+           rmaChoice  |= RMA_PUT;
+       }
+       else if (strcmp( argv[i], "-acc" ) == 0) {
+           if (rmaChoice == RMA_ALL) rmaChoice = RMA_NONE;
+           rmaChoice  |= RMA_ACC;
+       }
+       else if (strcmp( argv[i], "-fence" ) == 0) {
+           if (syncChoice == SYNC_ALL) syncChoice = SYNC_NONE;
+           syncChoice |= SYNC_FENCE;
+       }
+       else if (strcmp( argv[i], "-lock" ) == 0) {
+           if (syncChoice == SYNC_ALL) syncChoice = SYNC_NONE;
+           syncChoice |= SYNC_LOCK;
+       }
+       else if (strcmp( argv[i], "-pscw" ) == 0) {
+           if (syncChoice == SYNC_ALL) syncChoice = SYNC_NONE;
+           syncChoice |= SYNC_PSCW;
+       }
+       else if (strcmp( argv[i], "-maxsz" ) == 0) {
+           i++;
+           maxSz = atoi( argv[i] );
+       }
+       else if (strcmp( argv[i], "-maxcount" ) == 0) {
+           i++;
+           maxCount = atoi( argv[i] );
+       }
+       else {
+           fprintf( stderr, "Unrecognized argument %s\n", argv[i] );
+           fprintf( stderr, "%s [ -put ] [ -acc ] [ -lock ] [ -fence ] [ -pscw ] [ -maxsz msgsize ]\n", argv[0] );
+           MPI_Abort( MPI_COMM_WORLD, 1 );
+       }
+    }
+    
+    MPI_Comm_rank( MPI_COMM_WORLD, &wrank );
+    MPI_Comm_size( MPI_COMM_WORLD, &wsize );
+    destRank = wrank + 1;
+    while (destRank >= wsize) destRank = destRank - wsize;
+    srcRank = wrank - 1;
+    if (srcRank < 0) srcRank += wsize;
+
+    /* Create groups for PSCW */
+    MPI_Comm_group( MPI_COMM_WORLD, &wgroup );
+    MPI_Group_incl( wgroup, 1, &destRank, &accessGroup );
+    MPI_Group_incl( wgroup, 1, &srcRank, &exposureGroup );
+    MPI_Group_free( &wgroup );
+
+    arraysize = maxSz * MAX_COUNT;
+    arraybuffer = (int*)malloc( arraysize * sizeof(int) );
+    if (!arraybuffer) {
+       fprintf( stderr, "Unable to allocate %d words\n", arraysize );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+
+    MPI_Win_create( arraybuffer, arraysize*sizeof(int), (int)sizeof(int),
+                   MPI_INFO_NULL, MPI_COMM_WORLD, &win );
+
+    if (maxCount > MAX_COUNT) {
+       fprintf( stderr, "MaxCount must not exceed %d\n", MAX_COUNT );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+
+    if ((syncChoice & SYNC_FENCE) && (rmaChoice & RMA_ACC)) {
+       for (sz=1; sz<=maxSz; sz = sz + sz) {
+           if (wrank == 0 && verbose) 
+               printf( "Accumulate with fence, %d elements\n", sz );
+           cnt = 1;
+           while (cnt <= maxCount) {
+               RunAccFence( win, destRank, cnt, sz );
+               cnt = 2 * cnt;
+           }
+       }
+    }
+
+    if ((syncChoice & SYNC_LOCK) && (rmaChoice & RMA_ACC)) {
+       for (sz=1; sz<=maxSz; sz = sz + sz) {
+           if (wrank == 0 && verbose) 
+               printf( "Accumulate with lock, %d elements\n", sz );
+           cnt = 1;
+           while (cnt <= maxCount) {
+               RunAccLock( win, destRank, cnt, sz );
+               cnt = 2 * cnt;
+           }
+       }
+    }
+
+    if ((syncChoice & SYNC_FENCE) && (rmaChoice & RMA_PUT)) {
+       for (sz=1; sz<=maxSz; sz = sz + sz) {
+           if (wrank == 0 && verbose) 
+               printf( "Put with fence, %d elements\n", sz );
+           cnt = 1;
+           while (cnt <= maxCount) {
+               RunPutFence( win, destRank, cnt, sz );
+               cnt = 2 * cnt;
+           }
+       }
+    }
+
+    if ((syncChoice & SYNC_LOCK) && (rmaChoice & RMA_PUT)) {
+       for (sz=1; sz<=maxSz; sz = sz + sz) {
+           if (wrank == 0 && verbose) 
+               printf( "Put with lock, %d elements\n", sz );
+           cnt = 1;
+           while (cnt <= maxCount) {
+               RunPutLock( win, destRank, cnt, sz );
+               cnt = 2 * cnt;
+           }
+       }
+    }
+
+    if ((syncChoice & SYNC_PSCW) && (rmaChoice & RMA_PUT)) {
+       for (sz=1; sz<=maxSz; sz = sz + sz) {
+           if (wrank == 0 && verbose) 
+               printf( "Put with pscw, %d elements\n", sz );
+           cnt = 1;
+           while (cnt <= maxCount) {
+               RunPutPSCW( win, destRank, cnt, sz, 
+                           exposureGroup, accessGroup );
+               cnt = 2 * cnt;
+           }
+       }
+    }
+
+    if ((syncChoice & SYNC_PSCW) && (rmaChoice & RMA_ACC)) {
+       for (sz=1; sz<=maxSz; sz = sz + sz) {
+           if (wrank == 0 && verbose) 
+               printf( "Accumulate with pscw, %d elements\n", sz );
+           cnt = 1;
+           while (cnt <= maxCount) {
+               RunAccPSCW( win, destRank, cnt, sz, 
+                           exposureGroup, accessGroup );
+               cnt = 2 * cnt;
+           }
+       }
+    }
+
+    MPI_Win_free( &win );
+
+    MPI_Group_free( &accessGroup );
+    MPI_Group_free( &exposureGroup );
+
+    /* If we get here without timing out or failing, we succeeded */
+    if (wrank == 0) printf( " No Errors\n" );
+    
+    MPI_Finalize();
+    return 0;
+}
+
+
+void RunAccFence( MPI_Win win, int destRank, int cnt, int sz )
+{
+    int k, i, j, one = 1;
+
+    for (k=0; k<MAX_RUNS; k++) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_fence( 0, win );
+       j = 0;
+       for (i=0; i<cnt; i++) {
+           MPI_Accumulate( &one, sz, MPI_INT, destRank, 
+                           j, sz, MPI_INT, MPI_SUM, win );
+           j += sz;
+       }
+       MPI_Win_fence( 0, win );
+    }
+}
+
+void RunAccLock( MPI_Win win, int destRank, int cnt, int sz )
+{
+    int k, i, j, one = 1;
+
+    for (k=0; k<MAX_RUNS; k++) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_lock( MPI_LOCK_SHARED, destRank, 0, win );
+       j = 0;
+       for (i=0; i<cnt; i++) {
+           MPI_Accumulate( &one, sz, MPI_INT, destRank, 
+                           j, sz, MPI_INT, MPI_SUM, win );
+           j += sz;
+       }
+       MPI_Win_unlock( destRank, win );
+    }
+}
+
+void RunPutFence( MPI_Win win, int destRank, int cnt, int sz )
+{
+    int k, i, j, one = 1;
+
+    for (k=0; k<MAX_RUNS; k++) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_fence( 0, win );
+       j = 0;
+       for (i=0; i<cnt; i++) {
+           MPI_Put( &one, sz, MPI_INT, destRank, 
+                           j, sz, MPI_INT, win );
+           j += sz;
+       }
+       MPI_Win_fence( 0, win );
+    }
+}
+
+void RunPutLock( MPI_Win win, int destRank, int cnt, int sz )
+{
+    int k, i, j, one = 1;
+
+    for (k=0; k<MAX_RUNS; k++) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_lock( MPI_LOCK_SHARED, destRank, 0, win );
+       j = 0;
+       for (i=0; i<cnt; i++) {
+           MPI_Put( &one, sz, MPI_INT, destRank, j, sz, MPI_INT, win );
+           j += sz;
+       }
+       MPI_Win_unlock( destRank, win );
+    }
+}
+
+void RunPutPSCW( MPI_Win win, int destRank, int cnt, int sz, 
+                MPI_Group exposureGroup, MPI_Group accessGroup )
+{
+    int k, i, j, one = 1;
+
+    for (k=0; k<MAX_RUNS; k++) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_post( exposureGroup, 0, win );
+       MPI_Win_start( accessGroup, 0, win );
+       j = 0;
+       for (i=0; i<cnt; i++) {
+           MPI_Put( &one, sz, MPI_INT, destRank, j, sz, MPI_INT, win );
+           j += sz;
+       }
+       MPI_Win_complete( win );
+       MPI_Win_wait( win );
+    }
+}
+
+void RunAccPSCW( MPI_Win win, int destRank, int cnt, int sz, 
+                MPI_Group exposureGroup, MPI_Group accessGroup )
+{
+    int k, i, j, one = 1;
+
+    for (k=0; k<MAX_RUNS; k++) {
+       MPI_Barrier( MPI_COMM_WORLD );
+       MPI_Win_post( exposureGroup, 0, win );
+       MPI_Win_start( accessGroup, 0, win );
+       j = 0;
+       for (i=0; i<cnt; i++) {
+           MPI_Accumulate( &one, sz, MPI_INT, destRank, 
+                           j, sz, MPI_INT, MPI_SUM, win );
+           j += sz;
+       }
+       MPI_Win_complete( win );
+       MPI_Win_wait( win );
+    }
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/mcs-mutex.c b/teshsuite/smpi/mpich3-test/rma/mcs-mutex.c
new file mode 100644 (file)
index 0000000..533fbdb
--- /dev/null
@@ -0,0 +1,216 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2013 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <strings.h>
+
+#include <mpi.h>
+#include "mcs-mutex.h"
+
+/* TODO: Make these mutex operations no-ops for sequential runs */
+
+/** Create an MCS mutex.  Collective on comm.
+  *
+  * @param[out] comm communicator containing all processes that will use the
+  *                  mutex
+  * @param[out] tail_rank rank of the process in comm that holds the tail
+  *                  pointer
+  * @param[out] hdl  handle to the mutex
+  * @return          MPI status
+  */
+int MCS_Mutex_create(int tail_rank, MPI_Comm comm, MCS_Mutex * hdl_out)
+{
+    int rank, nproc;
+    MCS_Mutex hdl;
+
+    hdl = malloc(sizeof(struct mcs_mutex_s));
+    assert(hdl != NULL);
+
+    MPI_Comm_dup(comm, &hdl->comm);
+
+    MPI_Comm_rank(hdl->comm, &rank);
+    MPI_Comm_size(hdl->comm, &nproc);
+
+    hdl->tail_rank = tail_rank;
+
+#ifdef USE_WIN_SHARED
+    MPI_Win_allocate_shared(2*sizeof(int), sizeof(int), MPI_INFO_NULL,
+                            hdl->comm, &hdl->base, &hdl->window);
+#else
+    MPI_Win_allocate(2*sizeof(int), sizeof(int), MPI_INFO_NULL, hdl->comm,
+                     &hdl->base, &hdl->window);
+#endif
+
+    MPI_Win_lock_all(0, hdl->window);
+
+    hdl->base[0] = MPI_PROC_NULL;
+    hdl->base[1] = MPI_PROC_NULL;
+
+    MPI_Win_sync(hdl->window);
+    MPI_Barrier(hdl->comm);
+
+    *hdl_out = hdl;
+    return MPI_SUCCESS;
+}
+
+
+/** Free an MCS mutex.  Collective on ranks in the communicator used at the
+  * time of creation.
+  *
+  * @param[in] hdl handle to the group that will be freed
+  * @return        MPI status
+  */
+int MCS_Mutex_free(MCS_Mutex * hdl_ptr)
+{
+    MCS_Mutex hdl = *hdl_ptr;
+
+    MPI_Win_unlock_all(hdl->window);
+
+    MPI_Win_free(&hdl->window);
+    MPI_Comm_free(&hdl->comm);
+
+    free(hdl);
+    hdl_ptr = NULL;
+
+    return MPI_SUCCESS;
+}
+
+
+/** Lock a mutex.
+  *
+  * @param[in] hdl   Handle to the mutex
+  * @return          MPI status
+  */
+int MCS_Mutex_lock(MCS_Mutex hdl)
+{
+    int rank, nproc;
+    int prev;
+
+    MPI_Comm_rank(hdl->comm, &rank);
+    MPI_Comm_size(hdl->comm, &nproc);
+
+    /* This store is safe, since it cannot happen concurrently with a remote
+     * write */
+    hdl->base[MCS_MTX_ELEM_DISP] = MPI_PROC_NULL;
+    MPI_Win_sync(hdl->window);
+
+    MPI_Fetch_and_op(&rank, &prev, MPI_INT, hdl->tail_rank, MCS_MTX_TAIL_DISP,
+                     MPI_REPLACE, hdl->window);
+    MPI_Win_flush(hdl->tail_rank, hdl->window);
+
+    /* If there was a previous tail, update their next pointer and wait for
+     * notification.  Otherwise, the mutex was successfully acquired. */
+    if (prev != MPI_PROC_NULL) {
+        /* Wait for notification */
+        MPI_Status status;
+
+        MPI_Accumulate(&rank, 1, MPI_INT, prev, MCS_MTX_ELEM_DISP, 1, MPI_INT, MPI_REPLACE, hdl->window);
+        MPI_Win_flush(prev, hdl->window);
+
+        debug_print("%2d: LOCK   - waiting for notification from %d\n", rank, prev);
+        MPI_Recv(NULL, 0, MPI_BYTE, prev, MCS_MUTEX_TAG, hdl->comm, &status);
+    }
+
+    debug_print("%2d: LOCK   - lock acquired\n", rank);
+
+    return MPI_SUCCESS;
+}
+
+
+/** Attempt to acquire a mutex.
+  *
+  * @param[in] hdl   Handle to the mutex
+  * @param[out] success Indicates whether the mutex was acquired
+  * @return          MPI status
+  */
+int MCS_Mutex_trylock(MCS_Mutex hdl, int *success)
+{
+    int rank, nproc;
+    int tail, nil = MPI_PROC_NULL;
+
+    MPI_Comm_rank(hdl->comm, &rank);
+    MPI_Comm_size(hdl->comm, &nproc);
+
+    /* This store is safe, since it cannot happen concurrently with a remote
+     * write */
+    hdl->base[MCS_MTX_ELEM_DISP] = MPI_PROC_NULL;
+    MPI_Win_sync(hdl->window);
+
+    /* Check if the lock is available and claim it if it is. */
+    MPI_Compare_and_swap(&rank, &nil, &tail, MPI_INT, hdl->tail_rank,
+                         MCS_MTX_TAIL_DISP, hdl->window);
+    MPI_Win_flush(hdl->tail_rank, hdl->window);
+
+    /* If the old tail was MPI_PROC_NULL, we have claimed the mutex */
+    *success = (tail == nil);
+
+    debug_print("%2d: TRYLOCK - %s\n", rank, (*success) ? "Success" : "Non-success");
+
+    return MPI_SUCCESS;
+}
+
+
+/** Unlock a mutex.
+  *
+  * @param[in] hdl   Handle to the mutex
+  * @return          MPI status
+  */
+int MCS_Mutex_unlock(MCS_Mutex hdl)
+{
+    int rank, nproc, next;
+
+    MPI_Comm_rank(hdl->comm, &rank);
+    MPI_Comm_size(hdl->comm, &nproc);
+
+    MPI_Win_sync(hdl->window);
+
+    /* Read my next pointer.  FOP is used since another process may write to
+     * this location concurrent with this read. */
+    MPI_Fetch_and_op(NULL, &next, MPI_INT, rank, MCS_MTX_ELEM_DISP, MPI_NO_OP,
+                     hdl->window);
+    MPI_Win_flush(rank, hdl->window);
+
+    if ( next == MPI_PROC_NULL) {
+        int tail;
+        int nil = MPI_PROC_NULL;
+
+        /* Check if we are the at the tail of the lock queue.  If so, we're
+         * done.  If not, we need to send notification. */
+        MPI_Compare_and_swap(&nil, &rank, &tail, MPI_INT, hdl->tail_rank,
+                             MCS_MTX_TAIL_DISP, hdl->window);
+        MPI_Win_flush(hdl->tail_rank, hdl->window);
+
+        if (tail != rank) {
+            debug_print("%2d: UNLOCK - waiting for next pointer (tail = %d)\n", rank, tail);
+            assert(tail >= 0 && tail < nproc);
+
+            for (;;) {
+                int flag;
+
+                MPI_Fetch_and_op(NULL, &next, MPI_INT, rank, MCS_MTX_ELEM_DISP,
+                                 MPI_NO_OP, hdl->window);
+
+                MPI_Win_flush(rank, hdl->window);
+                if (next != MPI_PROC_NULL) break;
+
+                MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag,
+                           MPI_STATUS_IGNORE);
+            }
+        }
+    }
+
+    /* Notify the next waiting process */
+    if (next != MPI_PROC_NULL) {
+        debug_print("%2d: UNLOCK - notifying %d\n", rank, next);
+        MPI_Send(NULL, 0, MPI_BYTE, next, MCS_MUTEX_TAG, hdl->comm);
+    }
+
+    debug_print("%2d: UNLOCK - lock released\n", rank);
+
+    return MPI_SUCCESS;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/mcs-mutex.h b/teshsuite/smpi/mpich3-test/rma/mcs-mutex.h
new file mode 100644 (file)
index 0000000..c8d8843
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2013 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#if !defined MCSMUTEX_H_INCLUDED
+#define MCSMUTEX_H_INCLUDED
+
+#include <mpi.h>
+
+#define MCS_MUTEX_TAG 100
+
+#ifdef ENABLE_DEBUG
+#define debug_print(...) do { printf(__VA_ARGS__); } while (0)
+#else
+#define debug_print(...)
+#endif
+
+struct mcs_mutex_s {
+    int tail_rank;
+    MPI_Comm comm;
+    MPI_Win window;
+    int *base;
+};
+
+typedef struct mcs_mutex_s * MCS_Mutex;
+
+#define MCS_MTX_ELEM_DISP 0
+#define MCS_MTX_TAIL_DISP 1
+
+int MCS_Mutex_create(int tail_rank, MPI_Comm comm, MCS_Mutex * hdl_out);
+int MCS_Mutex_free(MCS_Mutex * hdl_ptr);
+int MCS_Mutex_lock(MCS_Mutex hdl);
+int MCS_Mutex_trylock(MCS_Mutex hdl, int *success);
+int MCS_Mutex_unlock(MCS_Mutex hdl);
+
+#endif /* MCSMUTEX_H_INCLUDED */
diff --git a/teshsuite/smpi/mpich3-test/rma/mixedsync.c b/teshsuite/smpi/mpich3-test/rma/mixedsync.c
new file mode 100644 (file)
index 0000000..c558516
--- /dev/null
@@ -0,0 +1,245 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+#include <string.h>
+
+/*
+static char MTEST_Descrip[] = "Mix synchronization types";
+*/
+
+void delay( double time );
+void delay( double time )
+{
+    double t1;
+    t1 = MPI_Wtime();
+    while (MPI_Wtime() - t1 < time) ;
+}
+
+int main( int argc, char *argv[] )
+{
+    int      errs = 0;
+    int      crank, csize, source, dest, loop;
+    int      *buf0, *buf1, *buf2, *inbuf2, count0, count1, count2, count, i;
+    MPI_Comm comm;
+    MPI_Win  win;
+    int      *winbuf;
+
+    MTest_Init( &argc, &argv );
+
+    comm = MPI_COMM_WORLD;
+
+    count0 = 1000;
+    count1 = 1;
+    count2 = 100;
+
+    count = count0 + count1 + count2 + 2;
+    
+    /* Allocate and initialize the local buffers */
+    buf0   = (int *)malloc( count0 * sizeof(int) );
+    buf1   = (int *)malloc( count1 * sizeof(int) );
+    buf2   = (int *)malloc( count2 * sizeof(int) );
+    inbuf2 = (int *)malloc( count2 * sizeof(int) );
+    if (!buf0 || !buf1 || !buf2 || !inbuf2) {
+       fprintf( stderr, "Unable to allocated buf0-2\n" );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+    for (i=0; i<count0; i++) buf0[i] = i;
+    for (i=0; i<count1; i++) buf1[i] = i + count0;
+    for (i=0; i<count2; i++) buf2[i] = i + count0 + count1;
+
+    /* Allocate the window buffer and create the memory window. */
+    MPI_Alloc_mem( count*sizeof(int), MPI_INFO_NULL, &winbuf );
+    if (!winbuf) {
+       fprintf( stderr, "Unable to allocate %d words\n", count );
+       MPI_Abort( MPI_COMM_WORLD, 0 );
+    }
+    MPI_Win_create( winbuf, count*sizeof(int), sizeof(int), MPI_INFO_NULL, 
+                   comm, &win );
+
+    MPI_Comm_size( comm, &csize );
+    MPI_Comm_rank( comm, &crank );
+    dest   = 0;
+    source = 1;
+
+    for (loop=0; loop<2; loop++) {
+       /* Perform several communication operations, mixing synchronization
+          types.  Use multiple communication to avoid the single-operation
+          optimization that may be present. */
+       MTestPrintfMsg( 3, "Beginning loop %d of mixed sync put operations\n", 
+                       loop ); 
+       MPI_Barrier( comm );
+       if (crank == source) {
+           MTestPrintfMsg( 3, "About to perform exclusive lock\n" );
+           MPI_Win_lock( MPI_LOCK_EXCLUSIVE, dest, 0, win );
+           MPI_Put( buf0, count0, MPI_INT, dest, 0, count0, MPI_INT, win );
+           MPI_Put( buf1, count1, MPI_INT, dest, count0, count1, MPI_INT, 
+                    win );
+           MPI_Put( buf2, count2, MPI_INT, dest, count0+count1, count2, 
+                    MPI_INT, win );
+           MPI_Win_unlock( dest, win );
+           MTestPrintfMsg( 3, "Released exclusive lock\n" );
+       }
+       else if (crank == dest) {
+           /* Just delay a bit */
+           delay( 0.0001 );
+       }
+
+       /* The synchronization mode can only be changed when the process 
+          memory and public copy are guaranteed to have the same values 
+          (See 11.7, Semantics and Correctness). This barrier ensures that 
+          the lock/unlock completes before the fence call.  */
+       MPI_Barrier( comm );
+
+       MTestPrintfMsg( 3, "About to start fence\n" );
+       MPI_Win_fence( 0, win );
+       if (crank == source) {
+           MPI_Put( buf0, count0, MPI_INT, dest, 1, count0, MPI_INT, win );
+           MPI_Put( buf1, count1, MPI_INT, dest, 1+count0, count1, MPI_INT, 
+                    win );
+           MPI_Put( buf2, count2, MPI_INT, dest, 1+count0+count1, count2, 
+                    MPI_INT, win );
+       }
+       MPI_Win_fence( 0, win );
+       MTestPrintfMsg( 3, "Finished with fence sync\n" );
+
+       /* Check results */
+       if (crank == dest) {
+           for (i=0; i<count0+count1+count2; i++) {
+               if (winbuf[1+i] != i) {
+                   errs++;
+                   if (errs < 10) {
+                       fprintf( stderr, "winbuf[%d] = %d, expected %d\n",
+                                1+i, winbuf[1+i], i ); fflush(stderr);
+                   }
+               }
+           }
+       }
+       
+       /* End of test loop */
+    }
+
+    /* Use mixed put and accumulate */
+    for (loop=0; loop<2; loop++) {
+       /* Perform several communication operations, mixing synchronization
+          types.  Use multiple communication to avoid the single-operation
+          optimization that may be present. */
+       MTestPrintfMsg( 3, "Begining loop %d of mixed sync put/acc operations\n", 
+                       loop ); 
+       memset( winbuf, 0, count*sizeof(int) );
+       MPI_Barrier( comm );
+       if (crank == source) {
+           MPI_Win_lock( MPI_LOCK_EXCLUSIVE, dest, 0, win );
+           MPI_Accumulate( buf0, count0, MPI_INT, dest, 0, count0, MPI_INT, 
+                           MPI_SUM, win );
+           MPI_Accumulate( buf1, count1, MPI_INT, dest, count0, count1, 
+                           MPI_INT, MPI_SUM, win );
+           MPI_Put( buf2, count2, MPI_INT, dest, count0+count1, count2, 
+                    MPI_INT, win );
+           MPI_Win_unlock( dest, win );
+       }
+       else if (crank == dest) {
+           /* Just delay a bit */
+           delay( 0.0001 );
+       }
+       /* See above - the fence should not start until the unlock completes */
+       MPI_Barrier( comm );
+       MPI_Win_fence( 0, win );
+       if (crank == source) {
+           MPI_Accumulate( buf0, count0, MPI_INT, dest, 1, count0, MPI_INT, 
+                           MPI_REPLACE, win );
+           MPI_Accumulate( buf1, count1, MPI_INT, dest, 1+count0, count1, 
+                           MPI_INT, MPI_REPLACE, win );
+           MPI_Put( buf2, count2, MPI_INT, dest, 1+count0+count1, count2, 
+                    MPI_INT, win );
+       }
+       MPI_Win_fence( 0, win );
+
+       /* Check results */
+       if (crank == dest) {
+           for (i=0; i<count0+count1+count2; i++) {
+               if (winbuf[1+i] != i) {
+                   errs++;
+                   if (errs < 10) {
+                       fprintf( stderr, "winbuf[%d] = %d, expected %d\n",
+                                1+i, winbuf[1+i], i ); fflush(stderr);
+                   }
+               }
+           }
+       }
+       
+       /* End of test loop */
+    }
+
+    /* Use mixed accumulate and get */
+    for (loop=0; loop<2; loop++) {
+       /* Perform several communication operations, mixing synchronization
+          types.  Use multiple communication to avoid the single-operation
+          optimization that may be present. */
+       MTestPrintfMsg( 3, "Begining loop %d of mixed sync put/get/acc operations\n", 
+                       loop ); 
+       MPI_Barrier( comm );
+       if (crank == source) {
+           MPI_Win_lock( MPI_LOCK_EXCLUSIVE, dest, 0, win );
+           MPI_Accumulate( buf0, count0, MPI_INT, dest, 0, count0, MPI_INT, 
+                           MPI_REPLACE, win );
+           MPI_Put( buf1, count1, MPI_INT, dest, count0, count1, MPI_INT, 
+                    win );
+           MPI_Get( inbuf2, count2, MPI_INT, dest, count0+count1, count2, 
+                    MPI_INT, win );
+           MPI_Win_unlock( dest, win );
+       }
+       else if (crank == dest) {
+           /* Just delay a bit */
+           delay( 0.0001 );
+       }
+       /* See above - the fence should not start until the unlock completes */
+       MPI_Barrier( comm );
+       MPI_Win_fence( 0, win );
+       if (crank == source) {
+           MPI_Accumulate( buf0, count0, MPI_INT, dest, 1, count0, MPI_INT, 
+                           MPI_REPLACE, win );
+           MPI_Put( buf1, count1, MPI_INT, dest, 1+count0, count1, MPI_INT, 
+                    win );
+           MPI_Get( inbuf2, count2, MPI_INT, dest, 1+count0+count1, count2, 
+                    MPI_INT, win );
+       }
+       MPI_Win_fence( 0, win );
+
+       /* Check results */
+       if (crank == dest) {
+           /* Do the put/accumulate parts */
+           for (i=0; i<count0+count1; i++) {
+               if (winbuf[1+i] != i) {
+                   errs++;
+                   if (errs < 10) {
+                       fprintf( stderr, "winbuf[%d] = %d, expected %d\n",
+                                1+i, winbuf[1+i], i ); fflush(stderr);
+                   }
+               }
+           }
+       }
+       
+       /* End of test loop */
+    }
+
+    MTestPrintfMsg( 3, "Freeing the window\n" );
+    MPI_Barrier( comm );
+    MPI_Win_free( &win );
+    MPI_Free_mem( winbuf );
+    free( buf0 );
+    free( buf1 );
+    free( buf2 );
+    free( inbuf2 );
+
+    MTest_Finalize( errs );
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/mutex_bench.c b/teshsuite/smpi/mpich3-test/rma/mutex_bench.c
new file mode 100644 (file)
index 0000000..2db24e4
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2013. See COPYRIGHT in top-level directory.
+ */
+
+/** MPI Mutex test -- James Dinan <dinan@mcs.anl.gov>
+  *
+  * All processes create a mutex then lock+unlock it N times.
+  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include <mpi.h>
+#include "mpitest.h"
+#include "mcs-mutex.h"
+
+#define NUM_ITER    1000
+#define NUM_MUTEXES 1
+
+const int verbose = 0;
+double delay_ctr = 0.0;
+
+int main(int argc, char ** argv) {
+  int rank, nproc, i;
+  double t_mpix_mtx, t_mcs_mtx;
+  MPI_Comm mtx_comm;
+  MCS_Mutex mcs_mtx;
+
+  MPI_Init(&argc, &argv);
+
+  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+#ifdef USE_WIN_SHARED
+  MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank,
+                      MPI_INFO_NULL, &mtx_comm);
+#else
+  mtx_comm = MPI_COMM_WORLD;
+#endif
+
+  MCS_Mutex_create(0, mtx_comm, &mcs_mtx);
+
+  MPI_Barrier(MPI_COMM_WORLD);
+  t_mcs_mtx = MPI_Wtime();
+
+  for (i = 0; i < NUM_ITER; i++) {
+    /* Combining trylock and lock here is helpful for testing because it makes
+     * CAS and Fetch-and-op contend for the tail pointer. */
+    if (rank % 2) {
+      int success = 0;
+      while (!success) {
+        MCS_Mutex_trylock(mcs_mtx, &success);
+      }
+    }
+    else {
+        MCS_Mutex_lock(mcs_mtx);
+    }
+    MCS_Mutex_unlock(mcs_mtx);
+  }
+
+  MPI_Barrier(MPI_COMM_WORLD);
+  t_mcs_mtx = MPI_Wtime() - t_mcs_mtx;
+
+  MCS_Mutex_free(&mcs_mtx);
+
+  if (rank == 0) {
+      if (verbose) {
+          printf("Nproc %d, MCS Mtx = %f us\n", nproc, t_mcs_mtx/NUM_ITER*1.0e6);
+      }
+  }
+
+  if (mtx_comm != MPI_COMM_WORLD)
+      MPI_Comm_free(&mtx_comm);
+
+  MTest_Finalize(0);
+  MPI_Finalize();
+
+  return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/nullpscw.c b/teshsuite/smpi/mpich3-test/rma/nullpscw.c
new file mode 100644 (file)
index 0000000..c5b1342
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2006 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include <stdio.h>
+#include <mpi.h>
+#include "mpitest.h"
+
+int main(int argc, char* argv[])
+{
+  MPI_Win win;
+  MPI_Group group;
+  int errs = 0;
+
+  MTest_Init(&argc,&argv); 
+
+  MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win);
+  MPI_Win_get_group(win, &group);
+  
+  MPI_Win_post(group, 0, win);
+  MPI_Win_start(group, 0, win);
+  
+  MPI_Win_complete(win);
+  
+  MPI_Win_wait(win);
+
+  MPI_Group_free( &group );
+  MPI_Win_free(&win); 
+
+  MTest_Finalize(errs);
+  MPI_Finalize();
+  return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/pscw_ordering.c b/teshsuite/smpi/mpich3-test/rma/pscw_ordering.c
new file mode 100644 (file)
index 0000000..9cb1cee
--- /dev/null
@@ -0,0 +1,139 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* This test checks an oddball case for generalized active target
+ * synchronization where the start occurs before the post.  Since start can
+ * block until the corresponding post, the group passed to start must be
+ * disjoint from the group passed to post and processes must avoid a circular
+ * wait.  Here, odd/even groups are used to accomplish this and the even group
+ * reverses its start/post calls.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+int main(int argc, char **argv) {
+    int i, rank, nproc, errors = 0;
+
+    int *win_buf;
+    MPI_Win win;
+
+    int odd_nproc, even_nproc;
+    int *odd_ranks, *even_ranks;
+    MPI_Group odd_group, even_group, world_group;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    if (nproc < 2) {
+        if (rank == 0)
+            printf("Error: this test requires two or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 100);
+    }
+
+    /* Set up odd/even groups and buffers */
+
+    odd_nproc = nproc / 2;
+    even_nproc  = nproc / 2 + ( (nproc % 2 == 0) ? 0 : 1 );
+
+    odd_ranks = malloc(sizeof(int) * odd_nproc);
+    even_ranks = malloc(sizeof(int) * even_nproc);
+
+    for (i = 0; i < even_nproc; i++)
+        even_ranks[i] = i*2;
+
+    for (i = 0; i < odd_nproc; i++)
+        odd_ranks[i] = i*2+1;
+
+    MPI_Comm_group(MPI_COMM_WORLD, &world_group);
+    MPI_Group_incl(world_group, odd_nproc, odd_ranks, &odd_group);
+    MPI_Group_incl(world_group, even_nproc, even_ranks, &even_group);
+
+    /* Create the window */
+
+    MPI_Alloc_mem(nproc*sizeof(int), MPI_INFO_NULL, &win_buf);
+
+    for (i = 0; i < nproc; i++)
+        win_buf[i] = -1;
+
+    MPI_Win_create(win_buf, nproc*sizeof(int), sizeof(int), MPI_INFO_NULL,
+                   MPI_COMM_WORLD, &win);
+
+    /* Perform PSCW communication: Odd/even matchup */
+
+    if (rank % 2 == 0) {
+        MPI_Win_start(odd_group, 0, win);  /* Even-numbered procs target odd procs */
+        MPI_Win_post(odd_group, 0, win);   /* Even procs are targeted by odd procs */
+
+        /* Write to my slot at each target */
+        for (i = 0; i < odd_nproc; i++)
+            MPI_Put(&rank, 1, MPI_INT, odd_ranks[i], rank, 1, MPI_INT, win);
+    }
+    else {
+        MPI_Win_post(even_group, 0, win);  /* Odd procs are targeted by even procs */
+        MPI_Win_start(even_group, 0, win); /* Odd-numbered procs target even procs */
+
+        /* Write to my slot at each target */
+        for (i = 0; i < even_nproc; i++)
+            MPI_Put(&rank, 1, MPI_INT, even_ranks[i], rank, 1, MPI_INT, win);
+    }
+
+
+    MPI_Win_complete(win);
+    MPI_Win_wait(win);
+
+    /* Perform PSCW communication: Odd/odd and even/even matchup */
+
+    if (rank % 2 == 0) {
+        MPI_Win_post(even_group, 0, win);  /* Even procs are targeted by even procs */
+        MPI_Win_start(even_group, 0, win); /* Even-numbered procs target even procs */
+
+        /* Write to my slot at each target */
+        for (i = 0; i < even_nproc; i++)
+            MPI_Put(&rank, 1, MPI_INT, even_ranks[i], rank, 1, MPI_INT, win);
+    }
+    else {
+        MPI_Win_post(odd_group, 0, win);   /* Odd procs are targeted by odd procs */
+        MPI_Win_start(odd_group, 0, win);  /* Odd-numbered procs target odd procs */
+
+        /* Write to my slot at each target */
+        for (i = 0; i < odd_nproc; i++)
+            MPI_Put(&rank, 1, MPI_INT, odd_ranks[i], rank, 1, MPI_INT, win);
+    }
+
+
+    MPI_Win_complete(win);
+    MPI_Win_wait(win);
+
+    for (i = 0; i < nproc; i++) {
+        if (win_buf[i] != i) {
+            errors++;
+
+            SQUELCH( printf("%d: Error -- win_buf[%d] = %d, expected %d\n",
+                            rank, i, win_buf[i], i);
+                   );
+        }
+    }
+
+    MPI_Win_free(&win);
+    MPI_Free_mem(win_buf);
+
+    MPI_Group_free(&world_group);
+    MPI_Group_free(&odd_group);
+    MPI_Group_free(&even_group);
+
+    free(odd_ranks);
+    free(even_ranks);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/put_base.c b/teshsuite/smpi/mpich3-test/rma/put_base.c
new file mode 100644 (file)
index 0000000..ba95a1c
--- /dev/null
@@ -0,0 +1,148 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Put Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov> 
+ * Date  : March, 2011
+ *
+ * This code performs N strided put operations into a 2d patch of a shared
+ * array.  The array has dimensions [X, Y] and the subarray has dimensions
+ * [SUB_X, SUB_Y] and begins at index [0, 0].  The input and output buffers are
+ * specified using an MPI datatype.
+ *
+ * This test generates a datatype that is relative to an arbitrary base address
+ * in memory and tests the RMA implementation's ability to perform the correct
+ * transfer.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 1024
+#define YDIM 1024
+#define SUB_XDIM 1024
+#define SUB_YDIM 1024
+#define ITERATIONS 10
+
+int main(int argc, char **argv) {
+    int i, j, rank, nranks, peer, bufsize, errors;
+    double  *win_buf, *src_buf, *dst_buf;
+    MPI_Win buf_win;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &win_buf);
+    /* Alloc_mem is not required for the origin buffers for RMA operations - 
+       just for the Win_create memory */
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &dst_buf);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf  + i) = 1.0 + rank;
+        *(src_buf + i) = 1.0 + rank;
+    }
+
+    MPI_Win_create(win_buf, bufsize, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Perform ITERATIONS strided put operations */
+
+    for (i = 0; i < ITERATIONS; i++) {
+      MPI_Aint idx_loc[SUB_YDIM];
+      int idx_rem[SUB_YDIM];
+      int blk_len[SUB_YDIM];
+      MPI_Datatype src_type, dst_type;
+
+      void *base_ptr = dst_buf;
+      MPI_Aint base_int;
+
+      MPI_Get_address(base_ptr, &base_int);
+
+      for (j = 0; j < SUB_YDIM; j++) {
+        MPI_Get_address(&src_buf[j*XDIM], &idx_loc[j]);
+        idx_loc[j] = idx_loc[j] - base_int;
+        idx_rem[j] = j*XDIM*sizeof(double);
+        blk_len[j] = SUB_XDIM*sizeof(double);
+      }
+
+      MPI_Type_create_hindexed(SUB_YDIM, blk_len, idx_loc, MPI_BYTE, &src_type);
+      MPI_Type_create_indexed_block(SUB_YDIM, SUB_XDIM*sizeof(double), idx_rem, MPI_BYTE, &dst_type);
+
+      MPI_Type_commit(&src_type);
+      MPI_Type_commit(&dst_type);
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Put(base_ptr, 1, src_type, peer, 0, 1, dst_type, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Type_free(&src_type);
+      MPI_Type_free(&dst_type);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Verify that the results are correct */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = (1.0 + ((rank+nranks-1)%nranks));
+        if (actual - expected > 1e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = 1.0 + rank;
+        if (actual - expected > 1e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = 1.0 + rank;
+        if (actual - expected > 1e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(win_buf);
+    MPI_Free_mem(src_buf);
+    MPI_Free_mem(dst_buf);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/put_bottom.c b/teshsuite/smpi/mpich3-test/rma/put_bottom.c
new file mode 100644 (file)
index 0000000..6634ea0
--- /dev/null
@@ -0,0 +1,138 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Put Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov> 
+ * Date  : March, 2011
+ *
+ * This code performs N strided put operations into a 2d patch of a shared
+ * array.  The array has dimensions [X, Y] and the subarray has dimensions
+ * [SUB_X, SUB_Y] and begins at index [0, 0].  The input and output buffers are
+ * specified using an MPI datatype.
+ *
+ * This test generates a datatype that is relative to MPI_BOTTOM and tests the
+ * RMA implementation's ability to perform the correct transfer.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 1024
+#define YDIM 1024
+#define SUB_XDIM 1024
+#define SUB_YDIM 1024
+#define ITERATIONS 10
+
+int main(int argc, char **argv) {
+    int i, j, rank, nranks, peer, bufsize, errors;
+    double *win_buf, *src_buf, *dst_buf;
+    MPI_Win buf_win;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &win_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &dst_buf);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf  + i) = 1.0 + rank;
+        *(src_buf + i) = 1.0 + rank;
+    }
+
+    MPI_Win_create(win_buf, bufsize, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Perform ITERATIONS strided put operations */
+
+    for (i = 0; i < ITERATIONS; i++) {
+      MPI_Aint idx_loc[SUB_YDIM];
+      int idx_rem[SUB_YDIM];
+      int blk_len[SUB_YDIM];
+      MPI_Datatype src_type, dst_type;
+
+      for (j = 0; j < SUB_YDIM; j++) {
+        MPI_Get_address(&src_buf[j*XDIM], &idx_loc[j]);
+        idx_rem[j] = j*XDIM*sizeof(double);
+        blk_len[j] = SUB_XDIM*sizeof(double);
+      }
+
+      MPI_Type_create_hindexed(SUB_YDIM, blk_len, idx_loc, MPI_BYTE, &src_type);
+      MPI_Type_create_indexed_block(SUB_YDIM, SUB_XDIM*sizeof(double), idx_rem, MPI_BYTE, &dst_type);
+
+      MPI_Type_commit(&src_type);
+      MPI_Type_commit(&dst_type);
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Put(MPI_BOTTOM, 1, src_type, peer, 0, 1, dst_type, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Type_free(&src_type);
+      MPI_Type_free(&dst_type);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Verify that the results are correct */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = (1.0 + ((rank+nranks-1)%nranks));
+        if (actual - expected > 1e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = 1.0 + rank;
+        if (actual - expected > 1e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = 1.0 + rank;
+        if (actual - expected > 1e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(win_buf);
+    MPI_Free_mem(src_buf);
+    MPI_Free_mem(dst_buf);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/putfence1.c b/teshsuite/smpi/mpich3-test/rma/putfence1.c
new file mode 100644 (file)
index 0000000..1020063
--- /dev/null
@@ -0,0 +1,109 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Put with Fence";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0, err;
+    int rank, size, source, dest;
+    int minsize = 2, count; 
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Aint      extent;
+    MTestDatatype sendtype, recvtype;
+
+    MTest_Init( &argc, &argv );
+
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       source = 0;
+       dest   = size - 1;
+       
+       for (count = 1; count < 65000; count = count * 2) {
+           while (MTestGetDatatypes( &sendtype, &recvtype, count )) {
+
+               MTestPrintfMsg( 1, 
+                      "Putting count = %d of sendtype %s receive type %s\n", 
+                               count, MTestGetDatatypeName( &sendtype ),
+                               MTestGetDatatypeName( &recvtype ) );
+
+               /* Make sure that everyone has a recv buffer */
+               recvtype.InitBuf( &recvtype );
+
+               MPI_Type_extent( recvtype.datatype, &extent );
+               MPI_Win_create( recvtype.buf, recvtype.count * extent, 
+                               extent, MPI_INFO_NULL, comm, &win );
+               MPI_Win_fence( 0, win );
+               if (rank == source) {
+                   /* To improve reporting of problems about operations, we
+                      change the error handler to errors return */
+                   MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+
+                   sendtype.InitBuf( &sendtype );
+                   
+                   err = MPI_Put( sendtype.buf, sendtype.count, 
+                                  sendtype.datatype, dest, 0, 
+                                  recvtype.count, recvtype.datatype, win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+                   err = MPI_Win_fence( 0, win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+               }
+               else if (rank == dest) {
+                   MPI_Win_fence( 0, win );
+                   /* This should have the same effect, in terms of
+                      transfering data, as a send/recv pair */
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) {
+                       if (errs < 10) {
+                           printf( "Data in target buffer did not match for destination datatype %s (put with source datatype %s)\n", 
+                                   MTestGetDatatypeName( &recvtype ),
+                                   MTestGetDatatypeName( &sendtype ) );
+                           /* Redo the test, with the errors printed */
+                           recvtype.printErrors = 1;
+                           (void)MTestCheckRecv( 0, &recvtype );
+                       }
+                       errs += err;
+                   }
+               }
+               else {
+                   MPI_Win_fence( 0, win );
+               }
+               MPI_Win_free( &win );
+               MTestFreeDatatype( &sendtype );
+               MTestFreeDatatype( &recvtype );
+           }
+       }
+        MTestFreeComm(&comm);
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/putfidx.c b/teshsuite/smpi/mpich3-test/rma/putfidx.c
new file mode 100644 (file)
index 0000000..6a23eb2
--- /dev/null
@@ -0,0 +1,125 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+/*
+static char MTEST_Descrip[] = "Put with Fence for an indexed datatype";
+*/
+
+int CheckMPIErr( int err );
+
+int main( int argc, char *argv[] )
+{
+    int           errs = 0, err;
+    int           i, rank, size, source, dest;
+    int           blksize, totsize;
+    int           *recvBuf = 0, *srcBuf = 0;
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Aint      extent;
+    MPI_Datatype  originType;
+    int           counts[2];
+    int           displs[2];
+
+    MTest_Init( &argc, &argv );
+
+    /* Select the communicator and datatypes */
+    comm = MPI_COMM_WORLD;
+
+    /* Create the datatype */
+    /* One MPI Implementation fails this test with sufficiently large 
+       values of blksize - it appears to convert this type to an 
+       incorrect contiguous move */
+    blksize = 2048;
+    counts[0] = blksize;
+    counts[1] = blksize;
+    displs[0] = 0;
+    displs[1] = blksize + 1;
+    MPI_Type_indexed( 2, counts, displs, MPI_INT, &originType );
+    MPI_Type_commit( &originType );
+
+    totsize = 2 * blksize;
+
+    /* Determine the sender and receiver */
+    MPI_Comm_rank( comm, &rank );
+    MPI_Comm_size( comm, &size );
+    source = 0;
+    dest   = size - 1;
+       
+    recvBuf = (int *) malloc( totsize * sizeof(int) );
+    srcBuf  = (int *) malloc( (totsize + 1) * sizeof(int) ) ;
+    
+    if (!recvBuf || !srcBuf) {
+       fprintf( stderr, "Could not allocate buffers\n" );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+    
+    /* Initialize the send and recv buffers */
+    for (i=0; i<totsize; i++) {
+       recvBuf[i] = -1;
+    }
+    for (i=0; i<blksize; i++) {
+       srcBuf[i] = i;
+       srcBuf[blksize+1+i] = blksize+i;
+    }
+    srcBuf[blksize] = -1;
+
+    MPI_Type_extent( MPI_INT, &extent );
+    MPI_Win_create( recvBuf, totsize * extent, extent, 
+                   MPI_INFO_NULL, comm, &win );
+    MPI_Win_fence( 0, win );
+    if (rank == source) {
+       /* To improve reporting of problems about operations, we
+          change the error handler to errors return */
+       MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+
+       err = MPI_Put( srcBuf, 1, originType, dest, 0, 
+                      totsize, MPI_INT, win );
+       errs += CheckMPIErr( err );
+       err = MPI_Win_fence( 0, win );
+       errs += CheckMPIErr( err );
+    }
+    else if (rank == dest) {
+       MPI_Win_fence( 0, win );
+       for (i=0; i<totsize; i++) {
+           if (recvBuf[i] != i) {
+               errs++;
+               if (errs < 10) {
+                   printf( "recvBuf[%d] = %d should = %d\n", 
+                           i, recvBuf[i], i );
+               }
+           }
+       }
+    }
+    else {
+       MPI_Win_fence( 0, win );
+    }
+    
+    MPI_Type_free( &originType );
+    MPI_Win_free( &win );
+    free( recvBuf );
+    free( srcBuf );
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
+
+int CheckMPIErr( int err )
+{
+    int rc = 0;
+    if (err != MPI_SUCCESS) { 
+       MTestPrintError( err );
+       rc = 1;
+    }
+    return rc;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/putpscw1.c b/teshsuite/smpi/mpich3-test/rma/putpscw1.c
new file mode 100644 (file)
index 0000000..ff18f4c
--- /dev/null
@@ -0,0 +1,109 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Put with Post/Start/Complete/Wait";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0, err;
+    int rank, size, source, dest;
+    int minsize = 2, count; 
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Aint      extent;
+    MPI_Group     wingroup, neighbors;
+    MTestDatatype sendtype, recvtype;
+
+    MTest_Init( &argc, &argv );
+
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, minsize, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       source = 0;
+       dest   = size - 1;
+       
+       for (count = 1; count < 65000; count = count * 2) {
+           while (MTestGetDatatypes( &sendtype, &recvtype, count )) {
+               /* Make sure that everyone has a recv buffer */
+               recvtype.InitBuf( &recvtype );
+
+               MPI_Type_extent( recvtype.datatype, &extent );
+               MPI_Win_create( recvtype.buf, recvtype.count * extent, 
+                               (int)extent, MPI_INFO_NULL, comm, &win );
+               MPI_Win_get_group( win, &wingroup );
+               if (rank == source) {
+                   /* To improve reporting of problems about operations, we
+                      change the error handler to errors return */
+                   MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+                   sendtype.InitBuf( &sendtype );
+                   
+                   /* Neighbor is dest only */
+                   MPI_Group_incl( wingroup, 1, &dest, &neighbors );
+                   err = MPI_Win_start( neighbors, 0, win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+                   MPI_Group_free( &neighbors );
+                   err = MPI_Put( sendtype.buf, sendtype.count, 
+                                   sendtype.datatype, dest, 0, 
+                                  recvtype.count, recvtype.datatype, win );
+                   if (err) {
+                       errs++;
+                       MTestPrintError( err );
+                   }
+                   err = MPI_Win_complete( win );
+                   if (err) {
+                       errs++;
+                       if (errs < 10) {
+                           MTestPrintError( err );
+                       }
+                   }
+               }
+               else if (rank == dest) {
+                   MPI_Group_incl( wingroup, 1, &source, &neighbors );
+                   MPI_Win_post( neighbors, 0, win );
+                   MPI_Group_free( &neighbors );
+                   MPI_Win_wait( win );
+                   /* This should have the same effect, in terms of
+                      transfering data, as a send/recv pair */
+                   err = MTestCheckRecv( 0, &recvtype );
+                   if (err) {
+                       errs += errs;
+                   }
+               }
+               else {
+                   /* Nothing; the other processes need not call any 
+                      MPI routines */
+                   ;
+               }
+               MPI_Win_free( &win );
+               MTestFreeDatatype( &sendtype );
+               MTestFreeDatatype( &recvtype );
+               MPI_Group_free( &wingroup );
+           }
+       }
+       MTestFreeComm( &comm );
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/req_example.c b/teshsuite/smpi/mpich3-test/rma/req_example.c
new file mode 100644 (file)
index 0000000..571325c
--- /dev/null
@@ -0,0 +1,91 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include <mpi.h>
+#include <stdio.h>
+#include <assert.h>
+#include "mpitest.h"
+
+#define NSTEPS 100
+#define N 1000
+#define M 10
+
+/* This is example 11.21 from the MPI 3.0 spec:
+ *
+ * The following example shows how request-based operations can be used to
+ * overlap communication with computation. Each process fetches, processes,
+ * and writes the result for NSTEPS chunks of data. Instead of a single
+ * buffer, M local buffers are used to allow up to M communication operations
+ * to overlap with computation.
+ */
+
+/* Use a global variable to inhibit compiler optimizations in the compute
+ * function. */
+double junk = 0.0;
+
+void compute(int step, double *data) {
+    int i;
+
+    for (i = 0; i < N; i++)
+        junk += data[i] * (double) step;
+}
+
+int main( int argc, char *argv[] )
+{
+    int i, rank, nproc;
+    int errors = 0, all_errors = 0;
+    MPI_Win win;
+    MPI_Request put_req[M] = { MPI_REQUEST_NULL };
+    MPI_Request get_req;
+    double *baseptr;
+    double data[M][N]; /* M buffers of length N */
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    assert(M < NSTEPS);
+
+    MPI_Win_allocate(NSTEPS*N*sizeof(double), sizeof(double), MPI_INFO_NULL,
+                     MPI_COMM_WORLD, &baseptr, &win);
+
+    MPI_Win_lock_all(0, win);
+
+    for (i = 0; i < NSTEPS; i++) {
+        int target = (rank+1) % nproc;
+        int j;
+
+        /* Find a free put request */
+        if (i < M) {
+            j = i;
+        } else {
+            MPI_Waitany(M, put_req, &j, MPI_STATUS_IGNORE);
+        }
+
+        MPI_Rget(data[j], N, MPI_DOUBLE, target, i*N, N, MPI_DOUBLE, win,
+                 &get_req);
+        MPI_Wait(&get_req,MPI_STATUS_IGNORE);
+
+        compute(i, data[j]);
+        MPI_Rput(data[j], N, MPI_DOUBLE, target, i*N, N, MPI_DOUBLE, win,
+                 &put_req[j]);
+
+    }
+
+    MPI_Waitall(M, put_req, MPI_STATUSES_IGNORE);
+    MPI_Win_unlock_all(win);
+
+    MPI_Win_free(&win);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/reqops.c b/teshsuite/smpi/mpich3-test/rma/reqops.c
new file mode 100644 (file)
index 0000000..ef2636f
--- /dev/null
@@ -0,0 +1,286 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include <mpi.h>
+#include <stdio.h>
+#include <assert.h>
+#include "mpitest.h"
+
+#define ITER 100
+
+int main( int argc, char *argv[] )
+{
+    int rank, nproc, i;
+    int errors = 0, all_errors = 0;
+    int *buf;
+    MPI_Win window;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    if (nproc < 2) {
+        if (rank == 0) printf("Error: must be run with two or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    /** Create using MPI_Win_create() **/
+
+    if (rank == 0) {
+      MPI_Alloc_mem(4*sizeof(int), MPI_INFO_NULL, &buf);
+      *buf = nproc-1;
+    } else
+      buf = NULL;
+
+    MPI_Win_create(buf, 4*sizeof(int)*(rank == 0), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &window);
+
+    /* PROC_NULL Communication */
+    {
+        MPI_Request pn_req[4];
+        int val[4], res;
+
+        MPI_Win_lock_all(0, window);
+
+        MPI_Rget_accumulate(&val[0], 1, MPI_INT, &res, 1, MPI_INT, MPI_PROC_NULL, 0, 1, MPI_INT, MPI_REPLACE, window, &pn_req[0]);
+        MPI_Rget(&val[1], 1, MPI_INT, MPI_PROC_NULL, 1, 1, MPI_INT, window, &pn_req[1]);
+        MPI_Rput(&val[2], 1, MPI_INT, MPI_PROC_NULL, 2, 1, MPI_INT, window, &pn_req[2]);
+        MPI_Raccumulate(&val[3], 1, MPI_INT, MPI_PROC_NULL, 3, 1, MPI_INT, MPI_REPLACE, window, &pn_req[3]);
+
+        assert(pn_req[0] != MPI_REQUEST_NULL);
+        assert(pn_req[1] != MPI_REQUEST_NULL);
+        assert(pn_req[2] != MPI_REQUEST_NULL);
+        assert(pn_req[3] != MPI_REQUEST_NULL);
+
+        MPI_Win_unlock_all(window);
+
+        MPI_Waitall(4, pn_req, MPI_STATUSES_IGNORE);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Win_lock(MPI_LOCK_SHARED, 0, 0, window);
+
+    /* GET-ACC: Test third-party communication, through rank 0. */
+    for (i = 0; i < ITER; i++) {
+        MPI_Request gacc_req;
+        int val = -1, exp = -1;
+
+        /* Processes form a ring.  Process 0 starts first, then passes a token
+         * to the right.  Each process, in turn, performs third-party
+         * communication via process 0's window. */
+        if (rank > 0) {
+            MPI_Recv(NULL, 0, MPI_BYTE, rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        }
+
+        MPI_Rget_accumulate(&rank, 1, MPI_INT, &val, 1, MPI_INT, 0, 0, 1, MPI_INT, MPI_REPLACE, window, &gacc_req);
+        assert(gacc_req != MPI_REQUEST_NULL);
+        MPI_Wait(&gacc_req, MPI_STATUS_IGNORE);
+
+        exp = (rank + nproc-1) % nproc;
+
+        if (val != exp) {
+            printf("%d - Got %d, expected %d\n", rank, val, exp);
+            errors++;
+        }
+
+        if (rank < nproc-1) {
+            MPI_Send(NULL, 0, MPI_BYTE, rank+1, 0, MPI_COMM_WORLD);
+        }
+
+        MPI_Barrier(MPI_COMM_WORLD);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    if (rank == 0) *buf = nproc-1;
+    MPI_Win_sync(window);
+
+    /* GET+PUT: Test third-party communication, through rank 0. */
+    for (i = 0; i < ITER; i++) {
+        MPI_Request req;
+        int val = -1, exp = -1;
+
+        /* Processes form a ring.  Process 0 starts first, then passes a token
+         * to the right.  Each process, in turn, performs third-party
+         * communication via process 0's window. */
+        if (rank > 0) {
+            MPI_Recv(NULL, 0, MPI_BYTE, rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        }
+
+        MPI_Rget(&val, 1, MPI_INT, 0, 0, 1, MPI_INT, window, &req);
+        assert(req != MPI_REQUEST_NULL);
+        MPI_Wait(&req, MPI_STATUS_IGNORE);
+
+        MPI_Rput(&rank, 1, MPI_INT, 0, 0, 1, MPI_INT, window, &req);
+        assert(req != MPI_REQUEST_NULL);
+        MPI_Wait(&req, MPI_STATUS_IGNORE);
+
+        exp = (rank + nproc-1) % nproc;
+
+        if (val != exp) {
+            printf("%d - Got %d, expected %d\n", rank, val, exp);
+            errors++;
+        }
+
+        if (rank < nproc-1) {
+            MPI_Send(NULL, 0, MPI_BYTE, rank+1, 0, MPI_COMM_WORLD);
+        }
+
+        MPI_Barrier(MPI_COMM_WORLD);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    if (rank == 0) *buf = nproc-1;
+    MPI_Win_sync(window);
+
+    /* GET+ACC: Test third-party communication, through rank 0. */
+    for (i = 0; i < ITER; i++) {
+        MPI_Request req;
+        int val = -1, exp = -1;
+
+        /* Processes form a ring.  Process 0 starts first, then passes a token
+         * to the right.  Each process, in turn, performs third-party
+         * communication via process 0's window. */
+        if (rank > 0) {
+            MPI_Recv(NULL, 0, MPI_BYTE, rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+        }
+
+        MPI_Rget(&val, 1, MPI_INT, 0, 0, 1, MPI_INT, window, &req);
+        assert(req != MPI_REQUEST_NULL);
+        MPI_Wait(&req, MPI_STATUS_IGNORE);
+
+        MPI_Raccumulate(&rank, 1, MPI_INT, 0, 0, 1, MPI_INT, MPI_REPLACE, window, &req);
+        assert(req != MPI_REQUEST_NULL);
+        MPI_Wait(&req, MPI_STATUS_IGNORE);
+
+        exp = (rank + nproc-1) % nproc;
+
+        if (val != exp) {
+            printf("%d - Got %d, expected %d\n", rank, val, exp);
+            errors++;
+        }
+
+        if (rank < nproc-1) {
+            MPI_Send(NULL, 0, MPI_BYTE, rank+1, 0, MPI_COMM_WORLD);
+        }
+
+        MPI_Barrier(MPI_COMM_WORLD);
+    }
+    MPI_Win_unlock(0, window);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Wait inside of an epoch */
+    {
+        MPI_Request pn_req[4];
+        int val[4], res;
+        const int target = 0;
+
+        MPI_Win_lock_all(0, window);
+
+        MPI_Rget_accumulate(&val[0], 1, MPI_INT, &res, 1, MPI_INT, target, 0, 1, MPI_INT, MPI_REPLACE, window, &pn_req[0]);
+        MPI_Rget(&val[1], 1, MPI_INT, target, 1, 1, MPI_INT, window, &pn_req[1]);
+        MPI_Rput(&val[2], 1, MPI_INT, target, 2, 1, MPI_INT, window, &pn_req[2]);
+        MPI_Raccumulate(&val[3], 1, MPI_INT, target, 3, 1, MPI_INT, MPI_REPLACE, window, &pn_req[3]);
+
+        assert(pn_req[0] != MPI_REQUEST_NULL);
+        assert(pn_req[1] != MPI_REQUEST_NULL);
+        assert(pn_req[2] != MPI_REQUEST_NULL);
+        assert(pn_req[3] != MPI_REQUEST_NULL);
+
+        MPI_Waitall(4, pn_req, MPI_STATUSES_IGNORE);
+
+        MPI_Win_unlock_all(window);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Wait outside of an epoch */
+    {
+        MPI_Request pn_req[4];
+        int val[4], res;
+        const int target = 0;
+
+        MPI_Win_lock_all(0, window);
+
+        MPI_Rget_accumulate(&val[0], 1, MPI_INT, &res, 1, MPI_INT, target, 0, 1, MPI_INT, MPI_REPLACE, window, &pn_req[0]);
+        MPI_Rget(&val[1], 1, MPI_INT, target, 1, 1, MPI_INT, window, &pn_req[1]);
+        MPI_Rput(&val[2], 1, MPI_INT, target, 2, 1, MPI_INT, window, &pn_req[2]);
+        MPI_Raccumulate(&val[3], 1, MPI_INT, target, 3, 1, MPI_INT, MPI_REPLACE, window, &pn_req[3]);
+
+        assert(pn_req[0] != MPI_REQUEST_NULL);
+        assert(pn_req[1] != MPI_REQUEST_NULL);
+        assert(pn_req[2] != MPI_REQUEST_NULL);
+        assert(pn_req[3] != MPI_REQUEST_NULL);
+
+        MPI_Win_unlock_all(window);
+
+        MPI_Waitall(4, pn_req, MPI_STATUSES_IGNORE);
+    }
+
+    /* Wait in a different epoch */
+    {
+        MPI_Request pn_req[4];
+        int val[4], res;
+        const int target = 0;
+
+        MPI_Win_lock_all(0, window);
+
+        MPI_Rget_accumulate(&val[0], 1, MPI_INT, &res, 1, MPI_INT, target, 0, 1, MPI_INT, MPI_REPLACE, window, &pn_req[0]);
+        MPI_Rget(&val[1], 1, MPI_INT, target, 1, 1, MPI_INT, window, &pn_req[1]);
+        MPI_Rput(&val[2], 1, MPI_INT, target, 2, 1, MPI_INT, window, &pn_req[2]);
+        MPI_Raccumulate(&val[3], 1, MPI_INT, target, 3, 1, MPI_INT, MPI_REPLACE, window, &pn_req[3]);
+
+        assert(pn_req[0] != MPI_REQUEST_NULL);
+        assert(pn_req[1] != MPI_REQUEST_NULL);
+        assert(pn_req[2] != MPI_REQUEST_NULL);
+        assert(pn_req[3] != MPI_REQUEST_NULL);
+
+        MPI_Win_unlock_all(window);
+
+        MPI_Win_lock_all(0, window);
+        MPI_Waitall(4, pn_req, MPI_STATUSES_IGNORE);
+        MPI_Win_unlock_all(window);
+    }
+
+    /* Wait in a fence epoch */
+    {
+        MPI_Request pn_req[4];
+        int val[4], res;
+        const int target = 0;
+
+        MPI_Win_lock_all(0, window);
+
+        MPI_Rget_accumulate(&val[0], 1, MPI_INT, &res, 1, MPI_INT, target, 0, 1, MPI_INT, MPI_REPLACE, window, &pn_req[0]);
+        MPI_Rget(&val[1], 1, MPI_INT, target, 1, 1, MPI_INT, window, &pn_req[1]);
+        MPI_Rput(&val[2], 1, MPI_INT, target, 2, 1, MPI_INT, window, &pn_req[2]);
+        MPI_Raccumulate(&val[3], 1, MPI_INT, target, 3, 1, MPI_INT, MPI_REPLACE, window, &pn_req[3]);
+
+        assert(pn_req[0] != MPI_REQUEST_NULL);
+        assert(pn_req[1] != MPI_REQUEST_NULL);
+        assert(pn_req[2] != MPI_REQUEST_NULL);
+        assert(pn_req[3] != MPI_REQUEST_NULL);
+
+        MPI_Win_unlock_all(window);
+
+        MPI_Win_fence(0, window);
+        MPI_Waitall(4, pn_req, MPI_STATUSES_IGNORE);
+        MPI_Win_fence(0, window);
+    }
+
+    MPI_Win_free(&window);
+    if (buf) MPI_Free_mem(buf);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/rmanull.c b/teshsuite/smpi/mpich3-test/rma/rmanull.c
new file mode 100644 (file)
index 0000000..cb228f3
--- /dev/null
@@ -0,0 +1,231 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2010 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+
+/* Test the given operation within a Fence epoch */
+#define TEST_FENCE_OP(op_name_, fcn_call_)                              \
+    do {                                                                \
+        err = fcn_call_                                                 \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "PROC_NULL to " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+        err = MPI_Win_fence( 0, win );                                  \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Fence after " op_name_, err );     \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+
+/* Test the given operation within a passive target epoch */
+#define TEST_PT_OP(op_name_, fcn_call_)                                 \
+    do {                                                                \
+        err = MPI_Win_lock(MPI_LOCK_EXCLUSIVE, MPI_PROC_NULL, 0, win);  \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Lock before" op_name_, err );      \
+            }                                                           \
+        }                                                               \
+        err = fcn_call_                                                 \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "PROC_NULL to " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+        err = MPI_Win_unlock( MPI_PROC_NULL, win );                     \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Unlock after " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+
+/* Test the given request-based operation within a passive target epoch */
+#define TEST_REQ_OP(op_name_, req_, fcn_call_)                          \
+    do {                                                                \
+        err = MPI_Win_lock(MPI_LOCK_EXCLUSIVE, MPI_PROC_NULL, 0, win);  \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Lock before" op_name_, err );      \
+            }                                                           \
+        }                                                               \
+        err = fcn_call_                                                 \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "PROC_NULL to " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+        err = MPI_Win_unlock( MPI_PROC_NULL, win );                     \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Unlock after " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+        err = MPI_Wait( &req_, MPI_STATUS_IGNORE );                     \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Wait after " op_name_, err );      \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+/*
+static char MTEST_Descrip[] = "Test the MPI_PROC_NULL is a valid target";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int           errs = 0, err;
+    int           rank, size;
+    int           *buf, bufsize;
+    int           *result;
+    int           *rmabuf, rsize, rcount;
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Request   req;
+
+    MTest_Init( &argc, &argv );
+
+    bufsize = 256 * sizeof(int);
+    buf     = (int *)malloc( bufsize );
+    if (!buf) {
+       fprintf( stderr, "Unable to allocated %d bytes\n", bufsize );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+    result  = (int *)malloc( bufsize );
+    if (!result) {
+        fprintf( stderr, "Unable to allocated %d bytes\n", bufsize );
+        MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+    rcount   = 16;
+    rsize    = rcount * sizeof(int);
+    rmabuf   = (int *)malloc( rsize );
+    if (!rmabuf) {
+       fprintf( stderr, "Unable to allocated %d bytes\n", rsize );
+       MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+       
+    /* The following illustrates the use of the routines to 
+       run through a selection of communicators and datatypes.
+       Use subsets of these for tests that do not involve combinations 
+       of communicators, datatypes, and counts of datatypes */
+    while (MTestGetIntracommGeneral( &comm, 1, 1 )) {
+       if (comm == MPI_COMM_NULL) continue;
+       /* Determine the sender and receiver */
+       MPI_Comm_rank( comm, &rank );
+       MPI_Comm_size( comm, &size );
+       
+       MPI_Win_create( buf, bufsize, sizeof(int), MPI_INFO_NULL, comm, &win );
+       /* To improve reporting of problems about operations, we
+          change the error handler to errors return */
+       MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+
+        /** TEST OPERATIONS USING ACTIVE TARGET (FENCE) SYNCHRONIZATION **/
+        MPI_Win_fence( 0, win );
+
+        TEST_FENCE_OP("Put",
+                      MPI_Put( rmabuf, rcount, MPI_INT, MPI_PROC_NULL, 0,
+                               rcount, MPI_INT, win );
+                     );
+
+        TEST_FENCE_OP("Get",
+                      MPI_Get( rmabuf, rcount, MPI_INT, MPI_PROC_NULL, 0,
+                               rcount, MPI_INT, win );
+                     );
+        TEST_FENCE_OP("Accumulate",
+                      MPI_Accumulate( rmabuf, rcount, MPI_INT, MPI_PROC_NULL,
+                                      0, rcount, MPI_INT, MPI_SUM, win );
+                     );
+        TEST_FENCE_OP("Get accumulate",
+                      MPI_Get_accumulate( rmabuf, rcount, MPI_INT, result,
+                                          rcount, MPI_INT, MPI_PROC_NULL, 0,
+                                          rcount, MPI_INT, MPI_SUM, win );
+                     );
+        TEST_FENCE_OP("Fetch and op",
+                      MPI_Fetch_and_op( rmabuf, result, MPI_INT, MPI_PROC_NULL,
+                                        0, MPI_SUM, win );
+                     );
+        TEST_FENCE_OP("Compare and swap",
+                      MPI_Compare_and_swap( rmabuf, &rank, result, MPI_INT,
+                                            MPI_PROC_NULL, 0, win );
+                     );
+
+        /** TEST OPERATIONS USING PASSIVE TARGET SYNCHRONIZATION **/
+
+        TEST_PT_OP("Put",
+                   MPI_Put( rmabuf, rcount, MPI_INT, MPI_PROC_NULL, 0, rcount,
+                            MPI_INT, win );
+                   );
+        TEST_PT_OP("Get",
+                   MPI_Get( rmabuf, rcount, MPI_INT, MPI_PROC_NULL, 0, rcount,
+                            MPI_INT, win );
+                   );
+        TEST_PT_OP("Accumulate",
+                   MPI_Accumulate( rmabuf, rcount, MPI_INT, MPI_PROC_NULL, 0,
+                                   rcount, MPI_INT, MPI_SUM, win );
+                   );
+        TEST_PT_OP("Get accumulate",
+                   MPI_Get_accumulate( rmabuf, rcount, MPI_INT, result, rcount,
+                                       MPI_INT, MPI_PROC_NULL, 0, rcount,
+                                       MPI_INT, MPI_SUM, win );
+                   );
+        TEST_PT_OP("Fetch and op",
+                   MPI_Fetch_and_op( rmabuf, result, MPI_INT, MPI_PROC_NULL, 0,
+                                     MPI_SUM, win );
+                   );
+        TEST_PT_OP("Compare and swap",
+                   MPI_Compare_and_swap( rmabuf, &rank, result, MPI_INT,
+                                         MPI_PROC_NULL, 0, win );
+                   );
+
+        /** TEST REQUEST-BASED OPERATIONS (PASSIVE TARGET ONLY) **/
+
+        TEST_REQ_OP("Rput", req,
+                    MPI_Rput( rmabuf, rcount, MPI_INT, MPI_PROC_NULL, 0, rcount,
+                              MPI_INT, win, &req );
+                   );
+        TEST_REQ_OP("Rget", req,
+                    MPI_Rget( rmabuf, rcount, MPI_INT, MPI_PROC_NULL, 0, rcount,
+                              MPI_INT, win, &req );
+                   );
+        TEST_REQ_OP("Raccumulate", req,
+                    MPI_Raccumulate( rmabuf, rcount, MPI_INT, MPI_PROC_NULL, 0,
+                                     rcount, MPI_INT, MPI_SUM, win, &req );
+                   );
+        TEST_REQ_OP("Rget_accumulate", req,
+                    MPI_Rget_accumulate( rmabuf, rcount, MPI_INT, result,
+                                         rcount, MPI_INT, MPI_PROC_NULL, 0,
+                                         rcount, MPI_INT, MPI_SUM, win, &req );
+                   );
+
+       MPI_Win_free( &win );
+        MTestFreeComm(&comm);
+    }
+
+    free( result );
+    free( buf );
+    free( rmabuf );
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/rmazero.c b/teshsuite/smpi/mpich3-test/rma/rmazero.c
new file mode 100644 (file)
index 0000000..0ea28d7
--- /dev/null
@@ -0,0 +1,220 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2013 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+
+#define TARGET 0
+
+/* Test the given operation within a Fence epoch */
+#define TEST_FENCE_OP(op_name_, fcn_call_)                              \
+    do {                                                                \
+        err = fcn_call_                                                 \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Zero-byte op " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+        err = MPI_Win_fence( 0, win );                                  \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Fence after " op_name_, err );     \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+
+/* Test the given operation within a passive target epoch */
+#define TEST_PT_OP(op_name_, fcn_call_)                                 \
+    do {                                                                \
+        err = MPI_Win_lock(MPI_LOCK_EXCLUSIVE, TARGET, 0, win);         \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Lock before" op_name_, err );      \
+            }                                                           \
+        }                                                               \
+        err = fcn_call_                                                 \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Zero-byte op " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+        err = MPI_Win_unlock( TARGET, win );                            \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Unlock after " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+
+/* Test the given request-based operation within a passive target epoch */
+#define TEST_REQ_OP(op_name_, req_, fcn_call_)                          \
+    do {                                                                \
+        err = MPI_Win_lock(MPI_LOCK_EXCLUSIVE, TARGET, 0, win);         \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Lock before" op_name_, err );      \
+            }                                                           \
+        }                                                               \
+        err = fcn_call_                                                 \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Zero-byte op " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+        err = MPI_Win_unlock( TARGET, win );                            \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Unlock after " op_name_, err );    \
+            }                                                           \
+        }                                                               \
+        err = MPI_Wait( &req_, MPI_STATUS_IGNORE );                     \
+        if (err) {                                                      \
+            errs++;                                                     \
+            if (errs < 10) {                                            \
+                MTestPrintErrorMsg( "Wait after " op_name_, err );      \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+/*
+static char MTEST_Descrip[] = "Test handling of zero-byte transfers";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int           errs = 0, err;
+    int           rank, size;
+    int           *buf, bufsize;
+    int           *result;
+    int           *rmabuf, rsize, rcount;
+    MPI_Comm      comm;
+    MPI_Win       win;
+    MPI_Request   req;
+
+    MTest_Init( &argc, &argv );
+
+    bufsize = 256 * sizeof(int);
+    buf     = (int *)malloc( bufsize );
+    if (!buf) {
+        fprintf( stderr, "Unable to allocated %d bytes\n", bufsize );
+        MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+    result  = (int *)malloc( bufsize );
+    if (!result) {
+        fprintf( stderr, "Unable to allocated %d bytes\n", bufsize );
+        MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+    rcount   = 16;
+    rsize    = rcount * sizeof(int);
+    rmabuf   = (int *)malloc( rsize );
+    if (!rmabuf) {
+        fprintf( stderr, "Unable to allocated %d bytes\n", rsize );
+        MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+
+    /* The following loop is used to run through a series of communicators
+     * that are subsets of MPI_COMM_WORLD, of size 1 or greater. */
+    while (MTestGetIntracommGeneral( &comm, 1, 1 )) {
+        int count = 0;
+
+        if (comm == MPI_COMM_NULL) continue;
+        /* Determine the sender and receiver */
+        MPI_Comm_rank( comm, &rank );
+        MPI_Comm_size( comm, &size );
+
+        MPI_Win_create( buf, bufsize, sizeof(int), MPI_INFO_NULL, comm, &win );
+        /* To improve reporting of problems about operations, we
+           change the error handler to errors return */
+        MPI_Win_set_errhandler( win, MPI_ERRORS_RETURN );
+
+        /** TEST OPERATIONS USING ACTIVE TARGET (FENCE) SYNCHRONIZATION **/
+        MPI_Win_fence( 0, win );
+
+        TEST_FENCE_OP("Put",
+                      MPI_Put( rmabuf, count, MPI_INT, TARGET, 0,
+                               count, MPI_INT, win );
+                     );
+
+        TEST_FENCE_OP("Get",
+                      MPI_Get( rmabuf, count, MPI_INT, TARGET, 0,
+                               count, MPI_INT, win );
+                     );
+        TEST_FENCE_OP("Accumulate",
+                      MPI_Accumulate( rmabuf, count, MPI_INT, TARGET,
+                                      0, count, MPI_INT, MPI_SUM, win );
+                     );
+        TEST_FENCE_OP("Get accumulate",
+                      MPI_Get_accumulate( rmabuf, count, MPI_INT, result,
+                                          count, MPI_INT, TARGET, 0,
+                                          count, MPI_INT, MPI_SUM, win );
+                     );
+        /* Note: It's not possible to generate a zero-byte FOP or CAS */
+
+        /** TEST OPERATIONS USING PASSIVE TARGET SYNCHRONIZATION **/
+
+        TEST_PT_OP("Put",
+                   MPI_Put( rmabuf, count, MPI_INT, TARGET, 0, count,
+                            MPI_INT, win );
+                   );
+        TEST_PT_OP("Get",
+                   MPI_Get( rmabuf, count, MPI_INT, TARGET, 0, count,
+                            MPI_INT, win );
+                   );
+        TEST_PT_OP("Accumulate",
+                   MPI_Accumulate( rmabuf, count, MPI_INT, TARGET, 0,
+                                   count, MPI_INT, MPI_SUM, win );
+                   );
+        TEST_PT_OP("Get accumulate",
+                   MPI_Get_accumulate( rmabuf, count, MPI_INT, result, count,
+                                       MPI_INT, TARGET, 0, count,
+                                       MPI_INT, MPI_SUM, win );
+                   );
+
+        /* Note: It's not possible to generate a zero-byte FOP or CAS */
+
+        /** TEST REQUEST-BASED OPERATIONS (PASSIVE TARGET ONLY) **/
+
+        TEST_REQ_OP("Rput", req,
+                    MPI_Rput( rmabuf, count, MPI_INT, TARGET, 0, count,
+                              MPI_INT, win, &req );
+                   );
+        TEST_REQ_OP("Rget", req,
+                    MPI_Rget( rmabuf, count, MPI_INT, TARGET, 0, count,
+                              MPI_INT, win, &req );
+                   );
+        TEST_REQ_OP("Raccumulate", req,
+                    MPI_Raccumulate( rmabuf, count, MPI_INT, TARGET, 0,
+                                     count, MPI_INT, MPI_SUM, win, &req );
+                   );
+        TEST_REQ_OP("Rget_accumulate", req,
+                    MPI_Rget_accumulate( rmabuf, count, MPI_INT, result,
+                                         count, MPI_INT, TARGET, 0,
+                                         count, MPI_INT, MPI_SUM, win, &req );
+                   );
+
+        MPI_Win_free( &win );
+        MTestFreeComm(&comm);
+    }
+
+    free( result );
+    free( buf );
+    free( rmabuf );
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/selfrma.c b/teshsuite/smpi/mpich3-test/rma/selfrma.c
new file mode 100644 (file)
index 0000000..ca8ae4b
--- /dev/null
@@ -0,0 +1,113 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "RMA to self";
+*/
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    int rank, size, i, j;
+    MPI_Comm      comm;
+    MPI_Win       win;
+    int           *winbuf, count;
+    int           *sbuf, scount, vcount;
+    MPI_Datatype  vectype;
+
+    MTest_Init( &argc, &argv );
+
+    comm = MPI_COMM_WORLD;
+
+    MPI_Comm_rank( comm, &rank );
+    MPI_Comm_size( comm, &size );
+
+    /* Allocate and initialize sbuf */
+    scount = 1000;
+    count  = 1000;
+    sbuf   = (int *)malloc( scount * sizeof(int) );
+    if (!sbuf) {
+       fprintf( stderr, "Could not allocate send buffer f size %d\n", 
+                scount );
+       MPI_Abort( MPI_COMM_WORLD, 0 );
+    }
+    for (i=0; i<scount; i++) sbuf[i] = i;
+
+    MPI_Alloc_mem( count*sizeof(int), MPI_INFO_NULL, &winbuf );
+
+    /* This is a simple vector type */
+    vcount = count / 4;
+    MPI_Type_vector( vcount, 1, 2, MPI_INT, &vectype );
+    MPI_Type_commit( &vectype );
+    MPI_Win_create( winbuf, count * sizeof(int), sizeof(int), MPI_INFO_NULL, 
+                   comm, &win );
+
+    /* Check with different combination of types, including non-contig on 
+       both sides */
+    
+    /* Clear winbuf */
+    memset( winbuf, 0, count*sizeof(int) );
+    MPI_Win_lock( MPI_LOCK_EXCLUSIVE, rank, 0, win );
+    MPI_Put( sbuf, 1, vectype, rank, 0, 1, vectype, win );
+    MPI_Win_unlock( rank, win );
+    /* Check results */
+    j = 0;
+    for (i=0; i<vcount; i++) {
+       if (winbuf[j] != sbuf[j]) {
+           errs ++;
+           fprintf( stderr, "VecPut: winbuf[%d] = %d, should = %d\n", 
+                    winbuf[j], j, sbuf[j] );
+       }
+       j += 2;
+    }
+
+    memset( winbuf, 0, count*sizeof(int) );
+    MPI_Win_lock( MPI_LOCK_SHARED, rank, 0, win );
+    MPI_Accumulate( sbuf, 1, vectype, rank, 0, 1, vectype, MPI_SUM, win );
+    MPI_Win_unlock( rank, win );
+    /* Check results */
+    j = 0;
+    for (i=0; i<vcount; i++) {
+       if (winbuf[j] != sbuf[j]) {
+           errs ++;
+           fprintf( stderr, "VecAcc: winbuf[%d] = %d, should = %d\n", 
+                    winbuf[j], j, sbuf[j] );
+       }
+       j += 2;
+    }
+
+    /* Now, use get to fetch back the results that we just wrote */
+    memset( sbuf, 0, count*sizeof(int) );
+    MPI_Win_lock( MPI_LOCK_SHARED, rank, 0, win );
+    MPI_Get( sbuf, 1, vectype, rank, 0, 1, vectype, win );
+    MPI_Win_unlock( rank, win );
+    /* Check results */
+    j = 0;
+    for (i=0; i<vcount; i++) {
+       if (winbuf[j] != sbuf[j]) {
+           errs ++;
+           fprintf( stderr, "VecAcc: winbuf[%d] = %d, should = %d\n", 
+                    winbuf[j], j, sbuf[j] );
+       }
+       j += 2;
+    }
+
+    MPI_Win_free( &win );
+    MPI_Free_mem( winbuf );
+    free( sbuf );
+    MPI_Type_free( &vectype );
+
+    MTest_Finalize( errs );
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/squelch.h b/teshsuite/smpi/mpich3-test/rma/squelch.h
new file mode 100644 (file)
index 0000000..2e469d3
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef SQUELCH_H_INCLUDED
+#define SQUELCH_H_INCLUDED
+
+static const int SQ_LIMIT   = 10;
+static       int SQ_COUNT   = 0;
+static       int SQ_VERBOSE = 0;
+
+#define SQUELCH(X)                              \
+  do {                                          \
+    if (SQ_COUNT < SQ_LIMIT || SQ_VERBOSE) {    \
+      SQ_COUNT++;                               \
+      X                                         \
+    }                                           \
+  } while (0)
+
+#endif
diff --git a/teshsuite/smpi/mpich3-test/rma/strided_acc_indexed.c b/teshsuite/smpi/mpich3-test/rma/strided_acc_indexed.c
new file mode 100644 (file)
index 0000000..ac54f52
--- /dev/null
@@ -0,0 +1,143 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Accumulate Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov> 
+ * Date  : December, 2010
+ *
+ * This code performs N accumulates into a 2d patch of a shared array.  The
+ * array has dimensions [X, Y] and the subarray has dimensions [SUB_X, SUB_Y]
+ * and begins at index [0, 0].  The input and output buffers are specified
+ * using an MPI indexed type.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 16
+#define YDIM 16
+#define SUB_XDIM 8
+#define SUB_YDIM 8
+#define ITERATIONS 1
+
+int main(int argc, char **argv) {
+    int itr, i, j, rank, nranks, peer, bufsize, errors;
+    double *win_buf, *src_buf;
+    MPI_Win buf_win;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &win_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf + i) = -1.0;
+        *(src_buf + i) = 1.0 + rank;
+    }
+
+    MPI_Win_create(win_buf, bufsize, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Perform ITERATIONS strided accumulate operations */
+
+    for (itr = 0; itr < ITERATIONS; itr++) {
+      MPI_Aint idx_loc[SUB_YDIM];
+      int idx_rem[SUB_YDIM];
+      int blk_len[SUB_YDIM];
+      MPI_Datatype src_type, dst_type;
+
+      for (i = 0; i < SUB_YDIM; i++) {
+        MPI_Get_address(&src_buf[i*XDIM], &idx_loc[i]);
+        idx_rem[i] = i*XDIM;
+        blk_len[i] = SUB_XDIM;
+      }
+
+#ifdef ABSOLUTE
+      MPI_Type_hindexed(SUB_YDIM, blk_len, idx_loc, MPI_DOUBLE, &src_type);
+#else
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &src_type);
+#endif
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &dst_type);
+
+      MPI_Type_commit(&src_type);
+      MPI_Type_commit(&dst_type);
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+
+#ifdef ABSOLUTE
+      MPI_Accumulate(MPI_BOTTOM, 1, src_type, peer, 0, 1, dst_type, MPI_SUM, buf_win);
+#else
+      MPI_Accumulate(src_buf, 1, src_type, peer, 0, 1, dst_type, MPI_SUM, buf_win);
+#endif
+
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Type_free(&src_type);
+      MPI_Type_free(&dst_type);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Verify that the results are correct */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0 + (1.0 + ((rank+nranks-1)%nranks)) * (ITERATIONS);
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(win_buf);
+    MPI_Free_mem(src_buf);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/strided_acc_onelock.c b/teshsuite/smpi/mpich3-test/rma/strided_acc_onelock.c
new file mode 100644 (file)
index 0000000..55ecde2
--- /dev/null
@@ -0,0 +1,85 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Accumulate Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov> 
+ * Date  : December, 2010
+ *
+ * This code performs one-sided accumulate into a 2d patch of a shared array.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 1024 
+#define YDIM 1024
+#define ITERATIONS 10
+
+int main(int argc, char **argv) {
+    int i, j, rank, nranks, peer, bufsize, errors;
+    double *buffer, *src_buf;
+    MPI_Win buf_win;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &buffer);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(buffer  + i) = 1.0 + rank;
+        *(src_buf + i) = 1.0 + rank;
+    }
+
+    MPI_Win_create(buffer, bufsize, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf_win);
+
+    peer = (rank+1) % nranks;
+
+    for (i = 0; i < ITERATIONS; i++) {
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+
+      for (j = 0; j < YDIM; j++) {
+        MPI_Accumulate(src_buf + j*XDIM, XDIM, MPI_DOUBLE, peer,
+                       j*XDIM*sizeof(double), XDIM, MPI_DOUBLE, MPI_SUM, buf_win);
+      }
+
+      MPI_Win_unlock(peer, buf_win);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    for (i = errors = 0; i < XDIM; i++) {
+      for (j = 0; j < YDIM; j++) {
+        const double actual   = *(buffer + i + j*XDIM);
+        const double expected = (1.0 + rank) + (1.0 + ((rank+nranks-1)%nranks)) * (ITERATIONS);
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(buffer);
+    MPI_Free_mem(src_buf);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/strided_acc_subarray.c b/teshsuite/smpi/mpich3-test/rma/strided_acc_subarray.c
new file mode 100644 (file)
index 0000000..c8f850c
--- /dev/null
@@ -0,0 +1,136 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Accumulate Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov> 
+ * Date  : December, 2010
+ *
+ * This code performs N accumulates into a 2d patch of a shared array.  The
+ * array has dimensions [X, Y] and the subarray has dimensions [SUB_X, SUB_Y]
+ * and begins at index [0, 0].  The input and output buffers are specified
+ * using an MPI subarray type.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 1024 
+#define YDIM 1024
+#define SUB_XDIM 512
+#define SUB_YDIM 512
+#define ITERATIONS 10
+
+int main(int argc, char **argv) {
+    int i, j, rank, nranks, peer, bufsize, errors;
+    double *win_buf, *src_buf;
+    MPI_Win buf_win;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &win_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf + i) = -1.0;
+        *(src_buf + i) = 1.0 + rank;
+    }
+
+    MPI_Win_create(win_buf, bufsize, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Perform ITERATIONS strided accumulate operations */
+
+    for (i = 0; i < ITERATIONS; i++) {
+      int ndims               = 2;
+      int src_arr_sizes[2]    = { XDIM, YDIM };
+      int src_arr_subsizes[2] = { SUB_XDIM, SUB_YDIM };
+      int src_arr_starts[2]   = {    0,    0 };
+      int dst_arr_sizes[2]    = { XDIM, YDIM };
+      int dst_arr_subsizes[2] = { SUB_XDIM, SUB_YDIM };
+      int dst_arr_starts[2]   = {    0,    0 };
+      MPI_Datatype src_type, dst_type;
+
+      MPI_Type_create_subarray(ndims, src_arr_sizes, src_arr_subsizes, src_arr_starts,
+          MPI_ORDER_C, MPI_DOUBLE, &src_type);
+
+      MPI_Type_create_subarray(ndims, dst_arr_sizes, dst_arr_subsizes, dst_arr_starts,
+          MPI_ORDER_C, MPI_DOUBLE, &dst_type);
+
+      MPI_Type_commit(&src_type);
+      MPI_Type_commit(&dst_type);
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+
+      MPI_Accumulate(src_buf, 1, src_type, peer, 0, 1, dst_type, MPI_SUM, buf_win);
+
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Type_free(&src_type);
+      MPI_Type_free(&dst_type);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Verify that the results are correct */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0 + (1.0 + ((rank+nranks-1)%nranks)) * (ITERATIONS);
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(win_buf);
+    MPI_Free_mem(src_buf);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/strided_get_indexed.c b/teshsuite/smpi/mpich3-test/rma/strided_get_indexed.c
new file mode 100644 (file)
index 0000000..3a98d29
--- /dev/null
@@ -0,0 +1,133 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Get Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov> 
+ * Date  : December, 2010
+ *
+ * This code performs N strided get operations from a 2d patch of a shared
+ * array.  The array has dimensions [X, Y] and the subarray has dimensions
+ * [SUB_X, SUB_Y] and begins at index [0, 0].  The input and output buffers are
+ * specified using an MPI indexed type.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 8
+#define YDIM 1024
+#define SUB_XDIM 8
+#define SUB_YDIM 256
+
+int main(int argc, char **argv) {
+    int i, j, rank, nranks, peer, bufsize, errors;
+    double *win_buf, *loc_buf;
+    MPI_Win buf_win;
+
+    int idx_rem[SUB_YDIM];
+    int blk_len[SUB_YDIM];
+    MPI_Datatype loc_type, rem_type;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &win_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &loc_buf);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf + i) =  1.0 + rank;
+        *(loc_buf + i) = -1.0;
+    }
+
+    MPI_Win_create(win_buf, bufsize, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Build the datatype */
+
+    for (i = 0; i < SUB_YDIM; i++) {
+      idx_rem[i] = i*XDIM;
+      blk_len[i] = SUB_XDIM;
+    }
+
+    MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &loc_type);
+    MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &rem_type);
+
+    MPI_Type_commit(&loc_type);
+    MPI_Type_commit(&rem_type);
+
+    /* Perform get operation */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+
+    MPI_Get(loc_buf, 1, loc_type, peer, 0, 1, rem_type, buf_win);
+
+    /* Use the datatype only on the remote side (must have SUB_XDIM == XDIM) */
+    /* MPI_Get(loc_buf, SUB_XDIM*SUB_YDIM, MPI_DOUBLE, peer, 0, 1, rem_type, buf_win); */
+
+    MPI_Win_unlock(peer, buf_win);
+
+    MPI_Type_free(&loc_type);
+    MPI_Type_free(&rem_type);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Verify that the results are correct */
+
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(loc_buf + i + j*XDIM);
+        const double expected = (1.0 + peer);
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(loc_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(loc_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(win_buf);
+    MPI_Free_mem(loc_buf);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/strided_getacc_indexed.c b/teshsuite/smpi/mpich3-test/rma/strided_getacc_indexed.c
new file mode 100644 (file)
index 0000000..e3293a1
--- /dev/null
@@ -0,0 +1,141 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Accumulate Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov> 
+ * Date  : December, 2010
+ *
+ * This code performs N strided put operations followed by get operations into
+ * a 2d patch of a shared array.  The array has dimensions [X, Y] and the
+ * subarray has dimensions [SUB_X, SUB_Y] and begins at index [0, 0].  The
+ * input and output buffers are specified using an MPI indexed type.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 8
+#define YDIM 1024
+#define SUB_XDIM 1
+#define SUB_YDIM 2
+#define ITERATIONS 10
+
+int main(int argc, char **argv) {
+    int i, j, rank, nranks, peer, bufsize, errors;
+    double *win_buf, *src_buf, *dst_buf;
+    MPI_Win buf_win;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &win_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &dst_buf);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf + i) = -1.0;
+        *(src_buf + i) =  1.0 + rank;
+    }
+
+    MPI_Win_create(win_buf, bufsize, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Perform ITERATIONS strided accumulate operations */
+
+    for (i = 0; i < ITERATIONS; i++) {
+      int idx_rem[SUB_YDIM];
+      int blk_len[SUB_YDIM];
+      MPI_Datatype src_type, dst_type;
+
+      for (j = 0; j < SUB_YDIM; j++) {
+        idx_rem[j] = j*XDIM;
+        blk_len[j] = SUB_XDIM;
+      }
+
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &src_type);
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &dst_type);
+
+      MPI_Type_commit(&src_type);
+      MPI_Type_commit(&dst_type);
+
+      /* PUT */
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Get_accumulate(src_buf, 1, src_type, dst_buf, 1, src_type, peer, 0,
+                          1, dst_type, MPI_REPLACE, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      /* GET */
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Get_accumulate(src_buf, 1, src_type, dst_buf, 1, src_type, peer, 0,
+                          1, dst_type, MPI_NO_OP, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Type_free(&src_type);
+      MPI_Type_free(&dst_type);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Verify that the results are correct */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = (1.0 + ((rank+nranks-1)%nranks));
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(win_buf);
+    MPI_Free_mem(src_buf);
+    MPI_Free_mem(dst_buf);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/strided_getacc_indexed_shared.c b/teshsuite/smpi/mpich3-test/rma/strided_getacc_indexed_shared.c
new file mode 100644 (file)
index 0000000..6ff4f76
--- /dev/null
@@ -0,0 +1,151 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Accumulate Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov>
+ * Date  : November, 2012
+ *
+ * This code performs N strided put operations followed by get operations into
+ * a 2d patch of a shared array.  The array has dimensions [X, Y] and the
+ * subarray has dimensions [SUB_X, SUB_Y] and begins at index [0, 0].  The
+ * input and output buffers are specified using an MPI indexed type.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 8
+#define YDIM 1024
+#define SUB_XDIM 1
+#define SUB_YDIM 2
+#define ITERATIONS 10
+
+int main(int argc, char **argv) {
+    int rank, nranks, rank_world, nranks_world;
+    int i, j, peer, bufsize, errors;
+    double *win_buf, *src_buf, *dst_buf;
+    MPI_Win buf_win;
+    MPI_Comm shr_comm;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank_world);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks_world);
+
+    MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank, MPI_INFO_NULL, &shr_comm);
+
+    MPI_Comm_rank(shr_comm, &rank);
+    MPI_Comm_size(shr_comm, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &dst_buf);
+
+    MPI_Win_allocate_shared(bufsize, 1, MPI_INFO_NULL, shr_comm, &win_buf, &buf_win);
+
+    MPI_Win_fence(0, buf_win);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf + i) = -1.0;
+        *(src_buf + i) =  1.0 + rank;
+    }
+
+    MPI_Win_fence(0, buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Perform ITERATIONS strided accumulate operations */
+
+    for (i = 0; i < ITERATIONS; i++) {
+      int idx_rem[SUB_YDIM];
+      int blk_len[SUB_YDIM];
+      MPI_Datatype src_type, dst_type;
+
+      for (j = 0; j < SUB_YDIM; j++) {
+        idx_rem[j] = j*XDIM;
+        blk_len[j] = SUB_XDIM;
+      }
+
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &src_type);
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &dst_type);
+
+      MPI_Type_commit(&src_type);
+      MPI_Type_commit(&dst_type);
+
+      /* PUT */
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Get_accumulate(src_buf, 1, src_type, dst_buf, 1, src_type, peer, 0,
+                          1, dst_type, MPI_REPLACE, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      /* GET */
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Get_accumulate(src_buf, 1, src_type, dst_buf, 1, src_type, peer, 0,
+                          1, dst_type, MPI_NO_OP, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Type_free(&src_type);
+      MPI_Type_free(&dst_type);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Verify that the results are correct */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = (1.0 + ((rank+nranks-1)%nranks));
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(src_buf);
+    MPI_Free_mem(dst_buf);
+    MPI_Comm_free(&shr_comm);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/strided_putget_indexed.c b/teshsuite/smpi/mpich3-test/rma/strided_putget_indexed.c
new file mode 100644 (file)
index 0000000..09f17ae
--- /dev/null
@@ -0,0 +1,137 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Accumulate Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov> 
+ * Date  : December, 2010
+ *
+ * This code performs N strided put operations followed by get operations into
+ * a 2d patch of a shared array.  The array has dimensions [X, Y] and the
+ * subarray has dimensions [SUB_X, SUB_Y] and begins at index [0, 0].  The
+ * input and output buffers are specified using an MPI indexed type.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 8
+#define YDIM 1024
+#define SUB_XDIM 8
+#define SUB_YDIM 255
+#define ITERATIONS 10
+
+int main(int argc, char **argv) {
+    int i, j, rank, nranks, peer, bufsize, errors;
+    double *win_buf, *src_buf, *dst_buf;
+    MPI_Win buf_win;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &win_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &dst_buf);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf + i) = -1.0;
+        *(src_buf + i) =  1.0 + rank;
+    }
+
+    MPI_Win_create(win_buf, bufsize, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Perform ITERATIONS strided accumulate operations */
+
+    for (i = 0; i < ITERATIONS; i++) {
+      int idx_rem[SUB_YDIM];
+      int blk_len[SUB_YDIM];
+      MPI_Datatype src_type, dst_type;
+
+      for (j = 0; j < SUB_YDIM; j++) {
+        idx_rem[j] = j*XDIM;
+        blk_len[j] = SUB_XDIM;
+      }
+
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &src_type);
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &dst_type);
+
+      MPI_Type_commit(&src_type);
+      MPI_Type_commit(&dst_type);
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Put(src_buf, 1, src_type, peer, 0, 1, dst_type, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Get(dst_buf, 1, src_type, peer, 0, 1, dst_type, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Type_free(&src_type);
+      MPI_Type_free(&dst_type);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Verify that the results are correct */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = (1.0 + ((rank+nranks-1)%nranks));
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(win_buf);
+    MPI_Free_mem(src_buf);
+    MPI_Free_mem(dst_buf);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/strided_putget_indexed_shared.c b/teshsuite/smpi/mpich3-test/rma/strided_putget_indexed_shared.c
new file mode 100644 (file)
index 0000000..727190b
--- /dev/null
@@ -0,0 +1,147 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+/* One-Sided MPI 2-D Strided Accumulate Test
+ *
+ * Author: James Dinan <dinan@mcs.anl.gov>
+ * Date  : November, 2012
+ *
+ * This code performs N strided put operations followed by get operations into
+ * a 2d patch of a shared array.  The array has dimensions [X, Y] and the
+ * subarray has dimensions [SUB_X, SUB_Y] and begins at index [0, 0].  The
+ * input and output buffers are specified using an MPI indexed type.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <mpi.h>
+#include "mpitest.h"
+#include "squelch.h"
+
+#define XDIM 8
+#define YDIM 1024
+#define SUB_XDIM 8
+#define SUB_YDIM 255
+#define ITERATIONS 10
+
+int main(int argc, char **argv) {
+    int rank, nranks, rank_world, nranks_world;
+    int i, j, peer, bufsize, errors;
+    double *win_buf, *src_buf, *dst_buf;
+    MPI_Win buf_win;
+    MPI_Comm shr_comm;
+
+    MTest_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank_world);
+    MPI_Comm_size(MPI_COMM_WORLD, &nranks_world);
+
+    MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank, MPI_INFO_NULL, &shr_comm);
+
+    MPI_Comm_rank(shr_comm, &rank);
+    MPI_Comm_size(shr_comm, &nranks);
+
+    bufsize = XDIM * YDIM * sizeof(double);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src_buf);
+    MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &dst_buf);
+
+    MPI_Win_allocate_shared(bufsize, 1, MPI_INFO_NULL, shr_comm, &win_buf, &buf_win);
+
+    MPI_Win_fence(0, buf_win);
+
+    for (i = 0; i < XDIM*YDIM; i++) {
+        *(win_buf + i) = -1.0;
+        *(src_buf + i) =  1.0 + rank;
+    }
+
+    MPI_Win_fence(0, buf_win);
+
+    peer = (rank+1) % nranks;
+
+    /* Perform ITERATIONS strided accumulate operations */
+
+    for (i = 0; i < ITERATIONS; i++) {
+      int idx_rem[SUB_YDIM];
+      int blk_len[SUB_YDIM];
+      MPI_Datatype src_type, dst_type;
+
+      for (j = 0; j < SUB_YDIM; j++) {
+        idx_rem[j] = j*XDIM;
+        blk_len[j] = SUB_XDIM;
+      }
+
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &src_type);
+      MPI_Type_indexed(SUB_YDIM, blk_len, idx_rem, MPI_DOUBLE, &dst_type);
+
+      MPI_Type_commit(&src_type);
+      MPI_Type_commit(&dst_type);
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Put(src_buf, 1, src_type, peer, 0, 1, dst_type, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, peer, 0, buf_win);
+      MPI_Get(dst_buf, 1, src_type, peer, 0, 1, dst_type, buf_win);
+      MPI_Win_unlock(peer, buf_win);
+
+      MPI_Type_free(&src_type);
+      MPI_Type_free(&dst_type);
+    }
+
+    MPI_Barrier(shr_comm);
+
+    /* Verify that the results are correct */
+
+    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, buf_win);
+    errors = 0;
+    for (i = 0; i < SUB_XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = (1.0 + ((rank+nranks-1)%nranks));
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = SUB_XDIM; i < XDIM; i++) {
+      for (j = 0; j < SUB_YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    for (i = 0; i < XDIM; i++) {
+      for (j = SUB_YDIM; j < YDIM; j++) {
+        const double actual   = *(win_buf + i + j*XDIM);
+        const double expected = -1.0;
+        if (fabs(actual - expected) > 1.0e-10) {
+          SQUELCH( printf("%d: Data validation failed at [%d, %d] expected=%f actual=%f\n",
+              rank, j, i, expected, actual); );
+          errors++;
+          fflush(stdout);
+        }
+      }
+    }
+    MPI_Win_unlock(rank, buf_win);
+
+    MPI_Win_free(&buf_win);
+    MPI_Free_mem(src_buf);
+    MPI_Free_mem(dst_buf);
+    MPI_Comm_free(&shr_comm);
+
+    MTest_Finalize( errors );
+    MPI_Finalize();
+    return MTestReturnValue( errors );
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/test1.c b/teshsuite/smpi/mpich3-test/rma/test1.c
new file mode 100644 (file)
index 0000000..b11995b
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests a series of puts, gets, and accumulate on 2 processes using fence */
+
+#define SIZE 100
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, A[SIZE], B[SIZE], i;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    int errs = 0;
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        if (rank == 0) {
+            for (i=0; i<SIZE; i++)
+                A[i] = B[i] = i;
+        }
+        else {
+            for (i=0; i<SIZE; i++) {
+                A[i] = (-3)*i;
+                B[i] = (-4)*i;
+            }
+        }
+        MPI_Win_create(B, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win); 
+        MPI_Win_fence(0, win); 
+        if (rank == 0) {
+            for (i=0; i<SIZE-1; i++)
+                MPI_Put(A+i, 1, MPI_INT, 1, i, 1, MPI_INT, win);
+        }        
+        else {
+            for (i=0; i<SIZE-1; i++)
+                MPI_Get(A+i, 1, MPI_INT, 0, i, 1, MPI_INT, win);
+            MPI_Accumulate(A+i, 1, MPI_INT, 0, i, 1, MPI_INT, MPI_SUM, win);
+        }
+        MPI_Win_fence(0, win); 
+        if (rank == 1) {
+            for (i=0; i<SIZE-1; i++) {
+                if (A[i] != B[i]) {
+                    SQUELCH( printf("Put/Get Error: A[i]=%d, B[i]=%d\n", A[i], B[i]); );
+                    errs++;
+                   }
+            }
+        }
+        else {
+            if (B[SIZE-1] != SIZE - 1 - 3*(SIZE-1)) {
+                SQUELCH( printf("Accumulate Error: B[SIZE-1] is %d, should be %d\n", B[SIZE-1], SIZE - 1 - 3*(SIZE-1)); );
+                errs++;
+            }
+          }
+       MPI_Win_free(&win); 
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test1_am.c b/teshsuite/smpi/mpich3-test/rma/test1_am.c
new file mode 100644 (file)
index 0000000..9ceedfd
--- /dev/null
@@ -0,0 +1,100 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests a series of puts, gets, and accumulate on 2 processes using fence */
+
+/* same as test1.c but uses alloc_mem */
+
+#define SIZE 100
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, i;
+    MPI_Comm CommDeuce;
+    int *A, *B;
+
+    MPI_Win win;
+    int errs = 0;
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        i = MPI_Alloc_mem(SIZE * sizeof(int), MPI_INFO_NULL, &A);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+        i = MPI_Alloc_mem(SIZE * sizeof(int), MPI_INFO_NULL, &B);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+        
+        if (rank == 0) {
+            for (i=0; i<SIZE; i++)
+                A[i] = B[i] = i;
+        }
+        else {
+            for (i=0; i<SIZE; i++) {
+                A[i] = (-3)*i;
+                B[i] = (-4)*i;
+            }
+        }
+
+        MPI_Win_create(B, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+
+        MPI_Win_fence(0, win); 
+        if (rank == 0) {
+            for (i=0; i<SIZE-1; i++)
+                MPI_Put(A+i, 1, MPI_INT, 1, i, 1, MPI_INT, win);
+        }        
+        else {
+            for (i=0; i<SIZE-1; i++)
+                MPI_Get(A+i, 1, MPI_INT, 0, i, 1, MPI_INT, win);
+            MPI_Accumulate(A+i, 1, MPI_INT, 0, i, 1, MPI_INT, MPI_SUM, win);
+        }
+        MPI_Win_fence(0, win); 
+        if (rank == 1) {
+            for (i=0; i<SIZE-1; i++) {
+                if (A[i] != B[i]) {
+                    SQUELCH( printf("Put/Get Error: A[i]=%d, B[i]=%d\n", A[i], B[i]); );
+                    errs++;
+              }
+            }
+        }
+        else {
+            if (B[SIZE-1] != SIZE - 1 - 3*(SIZE-1)) {
+                SQUELCH( printf("Accumulate Error: B[SIZE-1] is %d, should be %d\n", B[SIZE-1], SIZE - 1 - 3*(SIZE-1)); );
+                errs++;
+            }
+           }
+        MPI_Win_free(&win); 
+
+        MPI_Free_mem(A);
+        MPI_Free_mem(B);
+    }
+    MPI_Comm_free(&CommDeuce);
+
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test1_dt.c b/teshsuite/smpi/mpich3-test/rma/test1_dt.c
new file mode 100644 (file)
index 0000000..072c184
--- /dev/null
@@ -0,0 +1,89 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests a series of puts, gets, and accumulate on 2 processes using fence */
+/* Same as test1.c but uses derived datatypes to receive data */
+
+#define SIZE 100
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, A[SIZE], B[SIZE], i;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    MPI_Datatype contig_2ints;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+
+        if (rank == 0) {
+            for (i=0; i<SIZE; i++)
+                A[i] = B[i] = i;
+        }
+        else {
+            for (i=0; i<SIZE; i++) {
+                A[i] = (-3)*i;
+                B[i] = (-4)*i;
+            }
+        }
+
+        MPI_Type_contiguous(2, MPI_INT, &contig_2ints);
+        MPI_Type_commit(&contig_2ints);
+
+        MPI_Win_create(B, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+
+        MPI_Win_fence(0, win);
+
+        if (rank == 0) {
+            for (i=0; i<SIZE-2; i+=2)
+                MPI_Put(A+i, 2, MPI_INT, 1, i, 1, contig_2ints, win);
+        }
+        else {
+            for (i=0; i<SIZE-2; i+=2)
+                MPI_Get(A+i, 2, MPI_INT, 0, i, 1, contig_2ints, win);
+
+            MPI_Accumulate(A+SIZE-2, 2, MPI_INT, 0, SIZE-2, 1, contig_2ints, MPI_SUM, win);
+        }
+        MPI_Win_fence(0, win);
+
+        if (rank == 1) {
+            for (i=0; i<SIZE-2; i++) {
+                if (A[i] != B[i]) {
+                    SQUELCH( printf("Put/Get Error: A[i]=%d, B[i]=%d\n", A[i], B[i]); );
+                    errs++;
+                }
+            }
+        }
+        else {
+            if (B[SIZE-1] != SIZE - 1 - 3*(SIZE-1)) {
+                SQUELCH( printf("Accumulate Error: B[SIZE-1] is %d, should be %d\n", B[SIZE-1], SIZE - 1 - 3*(SIZE-1)); );
+                errs++;
+            }
+        }
+
+        MPI_Win_free(&win);
+        MPI_Type_free(&contig_2ints);
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test2.c b/teshsuite/smpi/mpich3-test/rma/test2.c
new file mode 100644 (file)
index 0000000..f4399ea
--- /dev/null
@@ -0,0 +1,82 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests put and get with post/start/complete/wait on 2 processes */
+
+#define SIZE1 100
+#define SIZE2 200
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, destrank, nprocs, A[SIZE2], B[SIZE2], i;
+    MPI_Comm CommDeuce;
+    MPI_Group comm_group, group;
+    MPI_Win win;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2)
+    {
+        MPI_Comm_group(CommDeuce, &comm_group);
+
+        if (rank == 0) {
+            for (i=0; i<SIZE2; i++) A[i] = B[i] = i;
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 1;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_start(group, 0, win);
+            for (i=0; i<SIZE1; i++)
+                MPI_Put(A+i, 1, MPI_INT, 1, i, 1, MPI_INT, win);
+            for (i=0; i<SIZE1; i++)
+                MPI_Get(B+i, 1, MPI_INT, 1, SIZE1+i, 1, MPI_INT, win);
+
+            MPI_Win_complete(win);
+
+            for (i=0; i<SIZE1; i++)
+                if (B[i] != (-4)*(i+SIZE1)) {
+                    SQUELCH( printf("Get Error: B[i] is %d, should be %d\n", B[i], (-4)*(i+SIZE1)); );
+                    errs++;
+                }
+        }
+        else if (rank == 1) {
+            for (i=0; i<SIZE2; i++) B[i] = (-4)*i;
+            MPI_Win_create(B, SIZE2*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 0;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_post(group, 0, win);
+            MPI_Win_wait(win);
+
+            for (i=0; i<SIZE1; i++) {
+                if (B[i] != i) {
+                    SQUELCH( printf("Put Error: B[i] is %d, should be %d\n", B[i], i); );
+                    errs++;
+                }
+            }
+        }
+
+        MPI_Group_free(&group);
+        MPI_Group_free(&comm_group);
+        MPI_Win_free(&win);
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize();
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test2_am.c b/teshsuite/smpi/mpich3-test/rma/test2_am.c
new file mode 100644 (file)
index 0000000..53780d5
--- /dev/null
@@ -0,0 +1,99 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests put and get with post/start/complete/wait on 2 processes */
+
+/* same as test1.c but uses alloc_mem */
+
+#define SIZE1 100
+#define SIZE2 200
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, destrank, nprocs, *A, *B, i;
+    MPI_Comm CommDeuce;
+    MPI_Group comm_group, group;
+    MPI_Win win;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2)
+    {
+
+        i = MPI_Alloc_mem(SIZE2 * sizeof(int), MPI_INFO_NULL, &A);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+        i = MPI_Alloc_mem(SIZE2 * sizeof(int), MPI_INFO_NULL, &B);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+
+        MPI_Comm_group(CommDeuce, &comm_group);
+
+        if (rank == 0) {
+            for (i=0; i<SIZE2; i++) A[i] = B[i] = i;
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 1;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_start(group, 0, win);
+            for (i=0; i<SIZE1; i++)
+                MPI_Put(A+i, 1, MPI_INT, 1, i, 1, MPI_INT, win);
+            for (i=0; i<SIZE1; i++)
+                MPI_Get(B+i, 1, MPI_INT, 1, SIZE1+i, 1, MPI_INT, win);
+
+            MPI_Win_complete(win);
+
+            for (i=0; i<SIZE1; i++)
+                if (B[i] != (-4)*(i+SIZE1)) {
+                    SQUELCH( printf("Get Error: B[i] is %d, should be %d\n", B[i], (-4)*(i+SIZE1)); );
+                    errs++;
+                }
+        }
+        else if (rank == 1) {
+            for (i=0; i<SIZE2; i++) B[i] = (-4)*i;
+            MPI_Win_create(B, SIZE2*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 0;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_post(group, 0, win);
+            MPI_Win_wait(win);
+
+            for (i=0; i<SIZE1; i++) {
+                if (B[i] != i) {
+                    SQUELCH( printf("Put Error: B[i] is %d, should be %d\n", B[i], i); );
+                    errs++;
+                }
+            }
+        }
+
+        MPI_Group_free(&group);
+        MPI_Group_free(&comm_group);
+        MPI_Win_free(&win);
+        MPI_Free_mem(A);
+        MPI_Free_mem(B);
+    }
+
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize();
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test3.c b/teshsuite/smpi/mpich3-test/rma/test3.c
new file mode 100644 (file)
index 0000000..06dd53b
--- /dev/null
@@ -0,0 +1,100 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* Tests the example in Fig 6.8, pg 142, MPI-2 standard. Process 1 has
+   a blocking MPI_Recv between the Post and Wait. Therefore, this
+   example will not run if the one-sided operations are simply
+   implemented on top of MPI_Isends and Irecvs. They either need to be
+   implemented inside the progress engine or using threads with Isends
+   and Irecvs. In MPICH-2, they are implemented in the progress engine. */
+
+#define SIZE 1048576
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, destrank, nprocs, *A, *B, i;
+    MPI_Comm CommDeuce;
+    MPI_Group comm_group, group;
+    MPI_Win win;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2)
+    {
+        A = (int *) malloc(SIZE * sizeof(int));
+        if (!A) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+        B = (int *) malloc(SIZE * sizeof(int));
+        if (!B) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+
+        MPI_Comm_group(CommDeuce, &comm_group);
+
+        if (rank == 0) {
+            for (i=0; i<SIZE; i++) {
+                A[i] = i;
+                B[i] = SIZE + i;
+            }
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 1;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_start(group, 0, win);
+            MPI_Put(A, SIZE, MPI_INT, 1, 0, SIZE, MPI_INT, win);
+            MPI_Win_complete(win);
+            MPI_Send(B, SIZE, MPI_INT, 1, 100, MPI_COMM_WORLD);
+        }
+
+        else if (rank == 1) {
+            for (i=0; i<SIZE; i++) A[i] = B[i] = (-4)*i;
+            MPI_Win_create(B, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 0;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_post(group, 0, win);
+            MPI_Recv(A, SIZE, MPI_INT, 0, 100, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+            MPI_Win_wait(win);
+
+            for (i=0; i<SIZE; i++) {
+                if (B[i] != i) {
+                    SQUELCH( printf("Rank 1: Put Error: B[i] is %d, should be %d\n", B[i], i); );
+                    errs++;
+                }
+                if (A[i] != SIZE + i) {
+                    SQUELCH( printf("Rank 1: Send/Recv Error: A[i] is %d, should be %d\n", A[i], SIZE+i); );
+                    errs++;
+                }
+            }
+        }
+
+        MPI_Group_free(&group);
+        MPI_Group_free(&comm_group);
+        MPI_Win_free(&win);
+        free(A);
+        free(B);
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test3_am.c b/teshsuite/smpi/mpich3-test/rma/test3_am.c
new file mode 100644 (file)
index 0000000..dc10c31
--- /dev/null
@@ -0,0 +1,100 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* Tests the example in Fig 6.8, pg 142, MPI-2 standard. Process 1 has
+   a blocking MPI_Recv between the Post and Wait. Therefore, this
+   example will not run if the one-sided operations are simply
+   implemented on top of MPI_Isends and Irecvs. They either need to be
+   implemented inside the progress engine or using threads with Isends
+   and Irecvs. In MPICH-2, they are implemented in the progress engine. */
+
+/* same as test3.c but uses alloc_mem */
+
+#define SIZE 1048576
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, destrank, nprocs, *A, *B, i;
+    MPI_Comm CommDeuce;
+    MPI_Group comm_group, group;
+    MPI_Win win;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        i = MPI_Alloc_mem(SIZE * sizeof(int), MPI_INFO_NULL, &A);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+        i = MPI_Alloc_mem(SIZE * sizeof(int), MPI_INFO_NULL, &B);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+
+        MPI_Comm_group(CommDeuce, &comm_group);
+
+        if (rank == 0) {
+            for (i=0; i<SIZE; i++) {
+                A[i] = i;
+                B[i] = SIZE + i;
+            }
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 1;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_start(group, 0, win);
+            MPI_Put(A, SIZE, MPI_INT, 1, 0, SIZE, MPI_INT, win);
+            MPI_Win_complete(win);
+            MPI_Send(B, SIZE, MPI_INT, 1, 100, MPI_COMM_WORLD);
+        }
+        else {  /* rank=1 */
+            for (i=0; i<SIZE; i++) A[i] = B[i] = (-4)*i;
+            MPI_Win_create(B, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 0;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_post(group, 0, win);
+            MPI_Recv(A, SIZE, MPI_INT, 0, 100, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+            MPI_Win_wait(win);
+
+            for (i=0; i<SIZE; i++) {
+                if (B[i] != i) {
+                    SQUELCH( printf("Rank 1: Put Error: B[i] is %d, should be %d\n", B[i], i); );
+                    errs++;
+                }
+                if (A[i] != SIZE + i) {
+                    SQUELCH( printf("Rank 1: Send/Recv Error: A[i] is %d, should be %d\n", A[i], SIZE+i); );
+                    errs++;
+                }
+            }
+        }
+
+        MPI_Group_free(&group);
+        MPI_Group_free(&comm_group);
+        MPI_Win_free(&win);
+        MPI_Free_mem(A);
+        MPI_Free_mem(B);
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test4.c b/teshsuite/smpi/mpich3-test/rma/test4.c
new file mode 100644 (file)
index 0000000..11ee9dd
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests passive target RMA on 2 processes. tests the lock-single_op-unlock 
+   optimization. */
+
+#define SIZE1 100
+#define SIZE2 200
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, A[SIZE2], B[SIZE2], i, j;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        if (rank == 0) {
+            for (i=0; i<SIZE2; i++) A[i] = B[i] = i;
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+
+            for (j = 0; j < 2; j++) {
+                for (i=0; i<SIZE1; i++) {
+                    MPI_Win_lock(MPI_LOCK_SHARED, 1, j == 0 ? 0 : MPI_MODE_NOCHECK, win);
+                    MPI_Put(A+i, 1, MPI_INT, 1, i, 1, MPI_INT, win);
+                    MPI_Win_unlock(1, win);
+                }
+
+                for (i=0; i<SIZE1; i++) {
+                    MPI_Win_lock(MPI_LOCK_SHARED, 1, j == 0 ? 0 : MPI_MODE_NOCHECK, win);
+                    MPI_Get(B+i, 1, MPI_INT, 1, SIZE1+i, 1, MPI_INT, win);
+                    MPI_Win_unlock(1, win);
+                }
+            }
+
+            MPI_Win_free(&win);
+
+            for (i=0; i<SIZE1; i++)
+                if (B[i] != (-4)*(i+SIZE1)) {
+                    SQUELCH( printf("Get Error: B[%d] is %d, should be %d\n", i, B[i], (-4)*(i+SIZE1)); );
+                    errs++;
+                }
+        }
+        else {  /* rank=1 */
+            for (i=0; i<SIZE2; i++) B[i] = (-4)*i;
+            MPI_Win_create(B, SIZE2*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+
+            MPI_Win_free(&win);
+
+            for (i=0; i<SIZE1; i++) {
+                if (B[i] != i) {
+                    SQUELCH( printf("Put Error: B[%d] is %d, should be %d\n", i, B[i], i); );
+                    errs++;
+                }
+            }
+        }
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test4_am.c b/teshsuite/smpi/mpich3-test/rma/test4_am.c
new file mode 100644 (file)
index 0000000..83cb3ef
--- /dev/null
@@ -0,0 +1,95 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "stdlib.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests passive target RMA on 2 processes. tests the lock-single_op-unlock 
+   optimization. */
+
+/* same as test4.c but uses alloc_mem */
+
+#define SIZE1 100
+#define SIZE2 200
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, *A, *B, i; 
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        i = MPI_Alloc_mem(SIZE2 * sizeof(int), MPI_INFO_NULL, &A);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+        i = MPI_Alloc_mem(SIZE2 * sizeof(int), MPI_INFO_NULL, &B);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+
+        if (rank == 0) {
+            for (i=0; i<SIZE2; i++) A[i] = B[i] = i;
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+
+            for (i=0; i<SIZE1; i++) {
+                MPI_Win_lock(MPI_LOCK_SHARED, 1, 0, win);
+                MPI_Put(A+i, 1, MPI_INT, 1, i, 1, MPI_INT, win);
+                MPI_Win_unlock(1, win);
+            }
+
+            for (i=0; i<SIZE1; i++) {
+                MPI_Win_lock(MPI_LOCK_SHARED, 1, 0, win);
+                MPI_Get(B+i, 1, MPI_INT, 1, SIZE1+i, 1, MPI_INT, win);
+                MPI_Win_unlock(1, win);
+            }
+
+            MPI_Win_free(&win);
+
+            for (i=0; i<SIZE1; i++)
+                if (B[i] != (-4)*(i+SIZE1)) {
+                    SQUELCH( printf("Get Error: B[%d] is %d, should be %d\n", i, B[i], (-4)*(i+SIZE1)); );
+                    errs++;
+                }
+        }
+        else {  /* rank=1 */
+            for (i=0; i<SIZE2; i++) B[i] = (-4)*i;
+            MPI_Win_create(B, SIZE2*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+
+            MPI_Win_free(&win);
+
+            for (i=0; i<SIZE1; i++) {
+                if (B[i] != i) {
+                    SQUELCH( printf("Put Error: B[%d] is %d, should be %d\n", i, B[i], i); );
+                    errs++;
+                }
+            }
+        }
+
+        MPI_Free_mem(A);
+        MPI_Free_mem(B);
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test5.c b/teshsuite/smpi/mpich3-test/rma/test5.c
new file mode 100644 (file)
index 0000000..4cc02cf
--- /dev/null
@@ -0,0 +1,74 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests a series of Gets. Run on 2 processes. */
+
+#define SIZE 2000
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, i, A[SIZE], B[SIZE];
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        if (rank == 0) {
+            for (i=0; i<SIZE; i++)
+                B[i] = 500 + i;
+            MPI_Win_create(B, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            MPI_Win_fence(0, win);
+            for (i=0; i<SIZE; i++) {
+                A[i] = i+100;
+                MPI_Get(&A[i], 1, MPI_INT, 1, i, 1, MPI_INT, win);
+            }
+            MPI_Win_fence(0, win);
+            for (i=0; i<SIZE; i++)
+                if (A[i] != 1000 + i) {
+                    SQUELCH( printf("Rank 0: A[%d] is %d, should be %d\n", i, A[i], 1000+i); );
+                    errs++;
+                }
+        }
+        if (rank == 1) {
+            for (i=0; i<SIZE; i++)
+                A[i] = 1000 + i;
+            MPI_Win_create(A, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            MPI_Win_fence(0, win);
+            for (i=0; i<SIZE; i++) {
+                B[i] = i+200;
+                MPI_Get(&B[i], 1, MPI_INT, 0, i, 1, MPI_INT, win);
+            }
+            MPI_Win_fence(0, win);
+            for (i=0; i<SIZE; i++)
+                if (B[i] != 500 + i) {
+                    SQUELCH( printf("Rank 1: B[%d] is %d, should be %d\n", i, B[i], 500+i); );
+                    errs++;
+                }
+        }
+
+        MPI_Win_free(&win);
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/test5_am.c b/teshsuite/smpi/mpich3-test/rma/test5_am.c
new file mode 100644 (file)
index 0000000..f0482d3
--- /dev/null
@@ -0,0 +1,92 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* tests a series of Gets. Run on 2 processes. */
+
+/* same as test5.c but uses alloc_mem */
+
+#define SIZE 2000
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, i, *A, *B;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        i = MPI_Alloc_mem(SIZE * sizeof(int), MPI_INFO_NULL, &A);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+        i = MPI_Alloc_mem(SIZE * sizeof(int), MPI_INFO_NULL, &B);
+        if (i) {
+            printf("Can't allocate memory in test program\n");
+            MPI_Abort(MPI_COMM_WORLD, 1);
+        }
+
+        if (rank == 0) {
+            for (i=0; i<SIZE; i++)
+                B[i] = 500 + i;
+            MPI_Win_create(B, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            MPI_Win_fence(0, win);
+            for (i=0; i<SIZE; i++) {
+                A[i] = i+100;
+                MPI_Get(&A[i], 1, MPI_INT, 1, i, 1, MPI_INT, win);
+            }
+            MPI_Win_fence(0, win);
+            for (i=0; i<SIZE; i++)
+                if (A[i] != 1000 + i) {
+                    SQUELCH( printf("Rank 0: A[%d] is %d, should be %d\n", i, A[i], 1000+i); );
+                    errs++;
+                }
+        }
+        if (rank == 1) {
+            for (i=0; i<SIZE; i++)
+                A[i] = 1000 + i;
+            MPI_Win_create(A, SIZE*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            MPI_Win_fence(0, win);
+            for (i=0; i<SIZE; i++) {
+                B[i] = i+200;
+                MPI_Get(&B[i], 1, MPI_INT, 0, i, 1, MPI_INT, win);
+            }
+            MPI_Win_fence(0, win);
+            for (i=0; i<SIZE; i++)
+                if (B[i] != 500 + i) {
+                    SQUELCH( printf("Rank 1: B[%d] is %d, should be %d\n", i, B[i], 500+i); );
+                    errs++;
+                }
+        }
+
+        MPI_Win_free(&win);
+
+        MPI_Free_mem(A);
+        MPI_Free_mem(B);
+
+    }
+
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/testlist b/teshsuite/smpi/mpich3-test/rma/testlist
new file mode 100644 (file)
index 0000000..da9dcec
--- /dev/null
@@ -0,0 +1,122 @@
+#Needs Win set name, win_get_name needed
+#winname 2
+allocmem 2
+putfence1 4
+putfidx 4
+getfence1 4
+accfence1 4
+#Needs lock, unlock
+#adlb_mimic1 3
+accfence2 4
+#Needs post
+#putpscw1 4
+#accpscw1 4
+#Needs get_group
+#getgroup 4
+transpose1 2
+transpose2 2
+#Needs post/start
+#transpose3 2
+#Needs lock/unlock
+#transpose5 2
+transpose6 1
+transpose7 2
+test1 2
+#Needs post/start
+#test2 2
+#test3 2
+#Needs lock, unlock
+#test4 2
+test5 2
+#Needs lock, unlock
+#lockcontention 3
+#lockcontention2 4
+#lockcontention2 8
+#lockcontention3 8
+#lockopts 2
+#transpose4 2
+#fetchandadd 7
+#fetchandadd_tree 7
+#Needs start, complete
+#wintest 2
+#Needs lock, unlock
+#contig_displ 1
+test1_am 2
+#test2_am 2
+#test3_am 2
+#test4_am 2
+test5_am 2
+#fetchandadd_am 7
+#fetchandadd_tree_am 7
+accfence2_am 4
+test1_dt 2 timeLimit=30
+#Needs post/start
+#nullpscw 7
+#Needs win_attr
+#attrorderwin 1
+#Needs MPI_Win_call_errhandler
+#wincall 2
+#Needs win_attr
+#baseattrwin 1
+#Needs MPI_Win_create_keyval
+#fkeyvalwin 1
+#Needs lock, unlock
+#selfrma 1
+#mixedsync 4
+epochtest 4
+#Needs lock, unlock
+#locknull 2
+#Needs MPI_Rput, rget, racumulate,  MPI_Fetch_and_op, MPI_Compare_and_swap
+#rmanull 2
+#rmazero 2
+#Needs lock, unlock
+#strided_acc_indexed 2
+#strided_acc_onelock 2
+#strided_acc_subarray 2
+#strided_get_indexed 2
+#strided_putget_indexed 4
+#strided_putget_indexed_shared 4 mpiversion=3.0
+#strided_getacc_indexed 4 mpiversion=3.0
+#strided_getacc_indexed_shared 4 mpiversion=3.0
+window_creation 2
+#Needs lock, unlock
+#contention_put 4
+#contention_putget 4
+#put_base 2
+#put_bottom 2
+#win_flavors 4 mpiversion=3.0
+#manyrma2 2 timeLimit=500
+#win_shared 4 mpiversion=3.0
+#win_shared_noncontig 4 mpiversion=3.0
+#win_shared_noncontig_put 4 mpiversion=3.0
+#win_dynamic_acc 4 mpiversion=3.0
+#get_acc_local 1 mpiversion=3.0
+#linked_list 4 mpiversion=3.0
+#linked_list_fop 4 mpiversion=3.0
+#compare_and_swap 4 mpiversion=3.0
+#fetch_and_op_char 4 mpiversion=3.0
+#fetch_and_op_short 4 mpiversion=3.0
+#fetch_and_op_int 4 mpiversion=3.0
+#fetch_and_op_long 4 mpiversion=3.0
+#fetch_and_op_double 4 mpiversion=3.0
+#fetch_and_op_long_double 4 mpiversion=3.0
+#get_accumulate_double 4 mpiversion=3.0
+#get_accumulate_double_derived 4 mpiversion=3.0
+#get_accumulate_int 4 mpiversion=3.0
+#get_accumulate_int_derived 4 mpiversion=3.0
+#get_accumulate_long 4 mpiversion=3.0
+#get_accumulate_long_derived 4 mpiversion=3.0
+#get_accumulate_short 4 mpiversion=3.0
+#get_accumulate_short_derived 4 mpiversion=3.0
+#flush 4 mpiversion=3.0
+#reqops 4 mpiversion=3.0
+#req_example 4 mpiversion=3.0
+#win_info 4 mpiversion=3.0
+#linked_list_lockall 4 mpiversion=3.0
+#pscw_ordering 4 mpiversion=3.0
+#linked_list_bench_lock_all 4 mpiversion=3.0
+#linked_list_bench_lock_excl 4 mpiversion=3.0
+#linked_list_bench_lock_shr 4 mpiversion=3.0
+#linked_list_bench_lock_shr_nocheck 4 mpiversion=3.0
+#mutex_bench 4 mpiversion=3.0
+#mutex_bench_shared 4 mpiversion=3.0
diff --git a/teshsuite/smpi/mpich3-test/rma/transpose1.c b/teshsuite/smpi/mpich3-test/rma/transpose1.c
new file mode 100644 (file)
index 0000000..908ecc0
--- /dev/null
@@ -0,0 +1,109 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include <stdlib.h>
+#include "mpitest.h"
+
+/* transposes a matrix using put, fence, and derived datatypes. Uses
+   vector and hvector (Example 3.32 from MPI 1.1 Standard). Run on
+   2 processes */
+
+#define NROWS 1000
+#define NCOLS 1000
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, **A, *A_data, i, j;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    MPI_Datatype column, xpose;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        A_data = (int *) malloc(NROWS * NCOLS * sizeof(int));
+        A = (int **) malloc(NROWS * sizeof(int *));
+
+        A[0] = A_data;
+        for (i=1; i<NROWS; i++)
+            A[i] = A[i-1] + NCOLS;
+
+        if (rank == 0)
+        {
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = i*NCOLS + j;
+
+            /* create datatype for one column */
+            MPI_Type_vector(NROWS, 1, NCOLS, MPI_INT, &column);
+            /* create datatype for matrix in column-major order */
+            MPI_Type_hvector(NCOLS, 1, sizeof(int), column, &xpose);
+            MPI_Type_commit(&xpose);
+
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+
+            MPI_Win_fence(0, win);
+
+            MPI_Put(&A[0][0], NROWS*NCOLS, MPI_INT, 1, 0, 1, xpose, win);
+
+            MPI_Type_free(&column);
+            MPI_Type_free(&xpose);
+
+            MPI_Win_fence(0, win);
+        }
+        else if (rank == 1)
+        {
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = -1;
+            MPI_Win_create(&A[0][0], NROWS*NCOLS*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            MPI_Win_fence(0, win);
+
+            MPI_Win_fence(0, win);
+
+            for (j=0; j<NCOLS; j++)
+            {
+                for (i=0; i<NROWS; i++)
+                {
+                    if (A[j][i] != i*NCOLS + j)
+                    {
+                        if (errs < 50)
+                        {
+                            printf("Error: A[%d][%d]=%d should be %d\n", j, i,
+                                   A[j][i], i*NCOLS + j);
+                        }
+                        errs++;
+                    }
+                }
+            }
+            if (errs >= 50)
+            {
+                printf("Total number of errors: %d\n", errs);
+            }
+        }
+
+        MPI_Win_free(&win);
+
+        free(A_data);
+        free(A);
+
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/transpose2.c b/teshsuite/smpi/mpich3-test/rma/transpose2.c
new file mode 100644 (file)
index 0000000..bfb30c4
--- /dev/null
@@ -0,0 +1,107 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+
+/* transposes a matrix using put, fence, and derived
+   datatypes. Uses vector and struct (Example 3.33 from MPI 1.1
+   Standard). We could use vector and type_create_resized instead. Run
+   on 2 processes */ 
+
+#define NROWS 100
+#define NCOLS 100
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, A[NROWS][NCOLS], i, j, blocklen[2];
+    MPI_Comm CommDeuce;
+    MPI_Aint disp[2];
+    MPI_Win win;
+    MPI_Datatype column, column1, type[2];
+    int errs=0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        if (rank == 0)
+        {
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = i*NCOLS + j;
+
+            /* create datatype for one column */
+            MPI_Type_vector(NROWS, 1, NCOLS, MPI_INT, &column);
+
+            /* create datatype for one column, with the extent of one
+           integer. we could use type_create_resized instead. */
+            disp[0] = 0;
+            disp[1] = sizeof(int);
+            type[0]  = column;
+            type[1]  = MPI_UB;
+            blocklen[0]  = 1;
+            blocklen[1]  = 1;
+            MPI_Type_struct(2, blocklen, disp, type, &column1);
+            MPI_Type_commit(&column1);
+
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+
+            MPI_Win_fence(0, win);
+
+            MPI_Put(A, NROWS*NCOLS, MPI_INT, 1, 0, NCOLS, column1, win);
+
+            MPI_Type_free(&column);
+            MPI_Type_free(&column1);
+
+            MPI_Win_fence(0, win);
+        }
+        else
+        { /* rank=1 */
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = -1;
+            MPI_Win_create(A, NROWS*NCOLS*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            MPI_Win_fence(0, win);
+
+            MPI_Win_fence(0, win);
+
+            for (j=0; j<NCOLS; j++)
+            {
+                for (i=0; i<NROWS; i++)
+                {
+                    if (A[j][i] != i*NCOLS + j)
+                    {
+                        if (errs < 50)
+                        {
+                            printf("Error: A[%d][%d]=%d should be %d\n", j, i,
+                                   A[j][i], i*NCOLS + j);
+                        }
+                        errs++;
+                    }
+                }
+            }
+            if (errs >= 50)
+            {
+                printf("Total number of errors: %d\n", errs);
+            }
+        }
+        MPI_Win_free(&win);
+    }
+
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/transpose3.c b/teshsuite/smpi/mpich3-test/rma/transpose3.c
new file mode 100644 (file)
index 0000000..86ef3d5
--- /dev/null
@@ -0,0 +1,107 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+#include "squelch.h"
+
+/* transposes a matrix using post/start/complete/wait and derived
+   datatypes. Uses  vector and hvector (Example 3.32 from MPI 1.1
+   Standard). Run on 2 processes */
+
+#define NROWS 100
+#define NCOLS 100
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, A[NROWS][NCOLS], i, j, destrank;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    MPI_Datatype column, xpose;
+    MPI_Group comm_group, group;
+    int errs=0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2)
+    {
+        MPI_Comm_group(CommDeuce, &comm_group);
+
+        if (rank == 0)
+        {
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = i*NCOLS + j;
+
+            /* create datatype for one column */
+            MPI_Type_vector(NROWS, 1, NCOLS, MPI_INT, &column);
+            /* create datatype for matrix in column-major order */
+            MPI_Type_hvector(NCOLS, 1, sizeof(int), column, &xpose);
+            MPI_Type_commit(&xpose);
+
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+
+            destrank = 1;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_start(group, 0, win);
+
+            MPI_Put(A, NROWS*NCOLS, MPI_INT, 1, 0, 1, xpose, win);
+
+            MPI_Type_free(&column);
+            MPI_Type_free(&xpose);
+
+            MPI_Win_complete(win);
+        }
+        else
+        { /* rank=1 */
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = -1;
+            MPI_Win_create(A, NROWS*NCOLS*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 0;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_post(group, 0, win);
+            MPI_Win_wait(win);
+
+            for (j=0; j<NCOLS; j++)
+            {
+                for (i=0; i<NROWS; i++)
+                {
+                    if (A[j][i] != i*NCOLS + j)
+                    {
+                        if (errs < 50)
+                        {
+                            SQUELCH( printf("Error: A[%d][%d]=%d should be %d\n", j, i,
+                                            A[j][i], i*NCOLS + j); );
+                        }
+                        errs++;
+                    }
+                }
+            }
+            if (errs >= 50)
+            {
+                printf("Total number of errors: %d\n", errs);
+            }
+        }
+
+        MPI_Group_free(&group);
+        MPI_Group_free(&comm_group);
+        MPI_Win_free(&win);
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/transpose4.c b/teshsuite/smpi/mpich3-test/rma/transpose4.c
new file mode 100644 (file)
index 0000000..6e81c43
--- /dev/null
@@ -0,0 +1,84 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+
+/* transposes a matrix using passive target RMA and derived
+   datatypes. Uses  vector and hvector (Example 3.32 from MPI 1.1
+   Standard). Run on 2 processes. */
+
+#define NROWS 100
+#define NCOLS 100
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, A[NROWS][NCOLS], i, j;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    MPI_Datatype column, xpose;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2)
+    {
+        if (rank == 0) {
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = i*NCOLS + j;
+
+            /* create datatype for one column */
+            MPI_Type_vector(NROWS, 1, NCOLS, MPI_INT, &column);
+            /* create datatype for matrix in column-major order */
+            MPI_Type_hvector(NCOLS, 1, sizeof(int), column, &xpose);
+            MPI_Type_commit(&xpose);
+
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+
+            MPI_Win_lock(MPI_LOCK_SHARED, 1, 0, win);
+
+            MPI_Put(A, NROWS*NCOLS, MPI_INT, 1, 0, 1, xpose, win);
+
+            MPI_Type_free(&column);
+            MPI_Type_free(&xpose);
+
+            MPI_Win_unlock(1, win);
+            MPI_Win_free(&win);
+        }
+        else
+        { /* rank=1 */
+            for (i=0; i<NROWS; i++) 
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = -1;
+            MPI_Win_create(A, NROWS*NCOLS*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+
+            MPI_Win_free(&win);
+
+            for (j=0; j<NCOLS; j++)
+                for (i=0; i<NROWS; i++)
+                    if (A[j][i] != i*NCOLS + j) {
+                        printf("Error: A[%d][%d]=%d should be %d\n", j, i,
+                               A[j][i], i*NCOLS + j);
+                        errs++;
+                    }
+        }
+    }
+
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/transpose5.c b/teshsuite/smpi/mpich3-test/rma/transpose5.c
new file mode 100644 (file)
index 0000000..2ae63bd
--- /dev/null
@@ -0,0 +1,111 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include <stdlib.h>
+#include "mpitest.h"
+
+/* This does a transpose-cum-accumulate operation. Uses  vector and
+   hvector datatypes (Example 3.32 from MPI 1.1 Standard). Run on 2
+   processes */ 
+
+#define NROWS 1000
+#define NCOLS 1000
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, **A, *A_data, i, j;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    MPI_Datatype column, xpose;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2)
+    {
+        A_data = (int *) malloc(NROWS * NCOLS * sizeof(int));
+        A = (int **) malloc(NROWS * sizeof(int *));
+
+        A[0] = A_data;
+        for (i=1; i<NROWS; i++)
+            A[i] = A[i-1] + NCOLS;
+
+        if (rank == 0)
+        {
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = i*NCOLS + j;
+
+            /* create datatype for one column */
+            MPI_Type_vector(NROWS, 1, NCOLS, MPI_INT, &column);
+            /* create datatype for matrix in column-major order */
+            MPI_Type_hvector(NCOLS, 1, sizeof(int), column, &xpose);
+            MPI_Type_commit(&xpose);
+
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+
+            MPI_Win_fence(0, win);
+
+            MPI_Accumulate(&A[0][0], NROWS*NCOLS, MPI_INT, 1, 0, 1, xpose, MPI_SUM, win);
+
+            MPI_Type_free(&column);
+            MPI_Type_free(&xpose);
+
+            MPI_Win_fence(0, win);
+        }
+        else
+        { /* rank=1 */
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = i*NCOLS + j;
+            MPI_Win_create(&A[0][0], NROWS*NCOLS*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            MPI_Win_fence(0, win);
+
+            MPI_Win_fence(0, win);
+
+            for (j=0; j<NCOLS; j++)
+            {
+                for (i=0; i<NROWS; i++)
+                {
+                    if (A[j][i] != i*NCOLS + j + j*NCOLS + i)
+                    {
+                        if (errs < 50)
+                        {
+                            printf("Error: A[%d][%d]=%d should be %d\n", j, i,
+                                   A[j][i], i*NCOLS + j + j*NCOLS + i);
+                        }
+                        errs++;
+                    }
+                }
+            }
+            if (errs >= 50)
+            {
+                printf("Total number of errors: %d\n", errs);
+            }
+        }
+
+        MPI_Win_free(&win);
+
+        free(A_data);
+        free(A);
+
+    }
+
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/transpose6.c b/teshsuite/smpi/mpich3-test/rma/transpose6.c
new file mode 100644 (file)
index 0000000..09471da
--- /dev/null
@@ -0,0 +1,76 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+
+/* This does a local transpose-cum-accumulate operation. Uses 
+   vector and hvector datatypes (Example 3.32 from MPI 1.1
+   Standard). Run on 1 process. */
+
+#define NROWS 100
+#define NCOLS 100
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, A[NROWS][NCOLS], B[NROWS][NCOLS], i, j;
+    MPI_Win win;
+    MPI_Datatype column, xpose;
+    int errs = 0;
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+
+    if (rank==0)
+    {
+        for (i=0; i<NROWS; i++)
+            for (j=0; j<NCOLS; j++)
+                A[i][j] = B[i][j] = i*NCOLS + j;
+        
+        /* create datatype for one column */
+        MPI_Type_vector(NROWS, 1, NCOLS, MPI_INT, &column);
+        /* create datatype for matrix in column-major order */
+        MPI_Type_hvector(NCOLS, 1, sizeof(int), column, &xpose);
+        MPI_Type_commit(&xpose);
+        
+        MPI_Win_create(B, NROWS*NCOLS*sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_SELF, &win); 
+        
+        MPI_Win_fence(0, win); 
+        
+        MPI_Accumulate(A, NROWS*NCOLS, MPI_INT, 0, 0, 1, xpose, MPI_SUM, win);
+        
+        MPI_Type_free(&column);
+        MPI_Type_free(&xpose);
+        
+        MPI_Win_fence(0, win); 
+        
+        for (j=0; j<NCOLS; j++)
+        {
+            for (i=0; i<NROWS; i++)
+          {
+                if (B[j][i] != i*NCOLS + j + j*NCOLS + i)
+              {
+               if (errs < 20)
+               {
+                   printf("Error: B[%d][%d]=%d should be %d\n", j, i,
+                       B[j][i], i*NCOLS + j + j*NCOLS + i);
+               }
+                    errs++;
+                }
+          }
+        }
+        if (errs >= 20)
+        {
+          printf("Total number of errors: %d\n", errs);
+        }
+        MPI_Win_free(&win); 
+    }
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/transpose7.c b/teshsuite/smpi/mpich3-test/rma/transpose7.c
new file mode 100644 (file)
index 0000000..d78b2dd
--- /dev/null
@@ -0,0 +1,105 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+
+/* This does a transpose with a get operation, fence, and derived
+   datatypes. Uses vector and hvector (Example 3.32 from MPI 1.1
+   Standard). Run on 2 processes */
+
+#define NROWS 1000
+#define NCOLS 1000
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, nprocs, **A, *A_data, i, j;
+    MPI_Comm CommDeuce;
+    MPI_Win win;
+    MPI_Datatype column, xpose;
+    int errs = 0;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2)
+    {
+        A_data = (int *) malloc(NROWS * NCOLS * sizeof(int));
+        A = (int **) malloc(NROWS * sizeof(int *));
+
+        A[0] = A_data;
+        for (i=1; i<NROWS; i++)
+            A[i] = A[i-1] + NCOLS;
+
+        if (rank == 0)
+        {
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = -1;
+
+            /* create datatype for one column */
+            MPI_Type_vector(NROWS, 1, NCOLS, MPI_INT, &column);
+            /* create datatype for matrix in column-major order */
+            MPI_Type_hvector(NCOLS, 1, sizeof(int), column, &xpose);
+            MPI_Type_commit(&xpose);
+
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+
+            MPI_Win_fence(0, win);
+
+            MPI_Get(&A[0][0], NROWS*NCOLS, MPI_INT, 1, 0, 1, xpose, win);
+
+            MPI_Type_free(&column);
+            MPI_Type_free(&xpose);
+
+            MPI_Win_fence(0, win);
+
+            for (j=0; j<NCOLS; j++)
+            {
+                for (i=0; i<NROWS; i++)
+                {
+                    if (A[j][i] != i*NCOLS + j)
+                    {
+                        if (errs < 50)
+                        {
+                            printf("Error: A[%d][%d]=%d should be %d\n", j, i,
+                                   A[j][i], i*NCOLS + j);
+                        }
+                        errs++;
+                    }
+                }
+            }
+            if (errs >= 50)
+            {
+                printf("Total number of errors: %d\n", errs);
+            }
+        }
+        else
+        {
+            for (i=0; i<NROWS; i++)
+                for (j=0; j<NCOLS; j++)
+                    A[i][j] = i*NCOLS + j;
+
+            MPI_Win_create(&A[0][0], NROWS*NCOLS*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            MPI_Win_fence(0, win);
+            MPI_Win_fence(0, win);
+        }
+        MPI_Win_free(&win);
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize(); 
+    return 0; 
+} 
diff --git a/teshsuite/smpi/mpich3-test/rma/win_dynamic_acc.c b/teshsuite/smpi/mpich3-test/rma/win_dynamic_acc.c
new file mode 100644 (file)
index 0000000..ebb0a35
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <mpi.h>
+#include "mpitest.h"
+
+#define ITER 100
+
+const int verbose = 0;
+
+int main(int argc, char **argv) {
+    int       i, j, rank, nproc;
+    int       errors = 0, all_errors = 0;
+    int       val = 0, one = 1;
+    MPI_Aint *val_ptrs;
+    MPI_Win   dyn_win;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    val_ptrs = malloc(nproc * sizeof(MPI_Aint));
+    MPI_Get_address(&val, &val_ptrs[rank]);
+
+    MPI_Allgather(MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, val_ptrs, 1, MPI_AINT,
+                  MPI_COMM_WORLD);
+
+    MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &dyn_win);
+    MPI_Win_attach(dyn_win, &one, sizeof(int));
+
+    for (i = 0; i < ITER; i++) {
+            MPI_Win_fence(MPI_MODE_NOPRECEDE, dyn_win);
+            MPI_Accumulate(&one, 1, MPI_INT, i%nproc, val_ptrs[i%nproc], 1, MPI_INT, MPI_SUM, dyn_win);
+            MPI_Win_fence(MPI_MODE_NOSUCCEED, dyn_win);
+    }
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Read and verify my data */
+    if ( val != ITER ) {
+        errors++;
+        printf("%d -- Got %d, expected %d\n", rank, val, ITER);
+    }
+
+    MPI_Win_detach(dyn_win, &one);
+    MPI_Win_free(&dyn_win);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    free(val_ptrs);
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/win_flavors.c b/teshsuite/smpi/mpich3-test/rma/win_flavors.c
new file mode 100644 (file)
index 0000000..c5179c4
--- /dev/null
@@ -0,0 +1,122 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include <mpi.h>
+#include <stdio.h>
+#include "mpitest.h"
+
+#define ELEM_SIZE 8
+
+int main( int argc, char *argv[] )
+{
+    int     rank;
+    int     errors = 0, all_errors = 0;
+    int    *flavor, *model, flag;
+    void   *buf;
+    MPI_Win window;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+    /** Create using MPI_Win_create() **/
+
+    if (rank > 0)
+      MPI_Alloc_mem(rank*ELEM_SIZE, MPI_INFO_NULL, &buf);
+    else
+      buf = NULL;
+
+    MPI_Win_create(buf, rank*ELEM_SIZE, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &window);
+    MPI_Win_get_attr(window, MPI_WIN_CREATE_FLAVOR, &flavor, &flag);
+
+    if (!flag) {
+      printf("%d: MPI_Win_create - Error, no flavor\n", rank);
+      errors++;
+    } else if (*flavor != MPI_WIN_FLAVOR_CREATE) {
+      printf("%d: MPI_Win_create - Error, bad flavor (%d)\n", rank, *flavor);
+      errors++;
+    }
+
+    MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
+
+    if (!flag) {
+      printf("%d: MPI_Win_create - Error, no model\n", rank);
+      errors++;
+    } else if ( ! (*model == MPI_WIN_SEPARATE || *model == MPI_WIN_UNIFIED) ) {
+      printf("%d: MPI_Win_create - Error, bad model (%d)\n", rank, *model);
+      errors++;
+    }
+
+    MPI_Win_free(&window);
+
+    if (buf)
+      MPI_Free_mem(buf);
+
+    /** Create using MPI_Win_allocate() **/
+
+    MPI_Win_allocate(rank*ELEM_SIZE, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &buf, &window);
+
+    if (rank > 0 && buf == NULL) {
+      printf("%d: MPI_Win_allocate - Error, bad base pointer\n", rank);
+      errors++;
+    }
+
+    MPI_Win_get_attr(window, MPI_WIN_CREATE_FLAVOR, &flavor, &flag);
+
+    if (!flag) {
+      printf("%d: MPI_Win_allocate - Error, no flavor\n", rank);
+      errors++;
+    } else if (*flavor != MPI_WIN_FLAVOR_ALLOCATE) {
+      printf("%d: MPI_Win_allocate - Error, bad flavor (%d)\n", rank, *flavor);
+      errors++;
+    }
+
+    MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
+
+    if (!flag) {
+      printf("%d: MPI_Win_allocate - Error, no model\n", rank);
+      errors++;
+    } else if (*model != MPI_WIN_SEPARATE && *model != MPI_WIN_UNIFIED) {
+      printf("%d: MPI_Win_allocate - Error, bad model (%d)\n", rank, *model);
+      errors++;
+    }
+
+    MPI_Win_free(&window);
+
+    /** Create using MPI_Win_create_dynamic() **/
+
+    MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &window);
+
+    MPI_Win_get_attr(window, MPI_WIN_CREATE_FLAVOR, &flavor, &flag);
+
+    if (!flag) {
+      printf("%d: MPI_Win_create_dynamic - Error, no flavor\n", rank);
+      errors++;
+    } else if (*flavor != MPI_WIN_FLAVOR_DYNAMIC) {
+      printf("%d: MPI_Win_create_dynamic - Error, bad flavor (%d)\n", rank, *flavor);
+      errors++;
+    }
+
+    MPI_Win_get_attr(window, MPI_WIN_MODEL, &model, &flag);
+
+    if (!flag) {
+      printf("%d: MPI_Win_create_dynamic - Error, no model\n", rank);
+      errors++;
+    } else if (*model != MPI_WIN_SEPARATE && *model != MPI_WIN_UNIFIED) {
+      printf("%d: MPI_Win_create_dynamic - Error, bad model (%d)\n", rank, *model);
+      errors++;
+    }
+
+    MPI_Win_free(&window);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/win_info.c b/teshsuite/smpi/mpich3-test/rma/win_info.c
new file mode 100644 (file)
index 0000000..44286a9
--- /dev/null
@@ -0,0 +1,72 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <mpi.h>
+#include "mpitest.h"
+
+#define VERBOSE 0
+
+int main(int argc, char **argv) {
+    int      i, j, rank, nproc;
+    MPI_Info info_in, info_out;
+    int      errors = 0, all_errors = 0;
+    MPI_Win  win;
+    void    *base;
+    char     invalid_key[] = "invalid_test_key";
+    char     buf[MPI_MAX_INFO_VAL];
+    int      flag;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Info_create(&info_in);
+    MPI_Info_set(info_in, invalid_key, "true");
+
+    MPI_Win_allocate(sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &base, &win);
+
+    MPI_Win_set_info(win, info_in);
+    MPI_Win_get_info(win, &info_out);
+
+    MPI_Info_get(info_out, invalid_key, MPI_MAX_INFO_VAL, buf, &flag);
+#ifndef USE_STRICT_MPI
+    /* Check if our invalid key was ignored.  Note, this check's MPICH's
+     * behavior, but this behavior may not be required for a standard
+     * conforming MPI implementation. */
+    if (flag) {
+        printf("%d: %s was not ignored\n", rank, invalid_key);
+        errors++;
+    }
+#endif
+
+    MPI_Info_get(info_out, "no_locks", MPI_MAX_INFO_VAL, buf, &flag);
+    if (flag && VERBOSE) printf("%d: no_locks = %s\n", rank, buf);
+
+    MPI_Info_get(info_out, "accumulate_ordering", MPI_MAX_INFO_VAL, buf, &flag);
+    if (flag && VERBOSE) printf("%d: accumulate_ordering = %s\n", rank, buf);
+
+    MPI_Info_get(info_out, "accumulate_ops", MPI_MAX_INFO_VAL, buf, &flag);
+    if (flag && VERBOSE) printf("%d: accumulate_ops = %s\n", rank, buf);
+
+    MPI_Info_get(info_out, "same_size", MPI_MAX_INFO_VAL, buf, &flag);
+    if (flag && VERBOSE) printf("%d: same_size = %s\n", rank, buf);
+
+    MPI_Info_free(&info_in);
+    MPI_Info_free(&info_out);
+    MPI_Win_free(&win);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/win_shared.c b/teshsuite/smpi/mpich3-test/rma/win_shared.c
new file mode 100644 (file)
index 0000000..b4e1f6c
--- /dev/null
@@ -0,0 +1,88 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <mpi.h>
+#include "mpitest.h"
+
+#define ELEM_PER_PROC 10000
+
+const int verbose = 0;
+
+int main(int argc, char **argv) {
+    int      i, j, rank, nproc;
+    int      shm_rank, shm_nproc;
+    MPI_Aint size;
+    int      errors = 0, all_errors = 0;
+    int     *base, *my_base;
+    int      disp_unit;
+    MPI_Win  shm_win;
+    MPI_Comm shm_comm;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank, MPI_INFO_NULL, &shm_comm);
+
+    MPI_Comm_rank(shm_comm, &shm_rank);
+    MPI_Comm_size(shm_comm, &shm_nproc);
+
+    /* Allocate ELEM_PER_PROC integers for each process */
+    MPI_Win_allocate_shared(sizeof(int)*ELEM_PER_PROC, sizeof(int), MPI_INFO_NULL, 
+                             shm_comm, &my_base, &shm_win);
+
+    /* Locate absolute base */
+    MPI_Win_shared_query(shm_win, MPI_PROC_NULL, &size, &disp_unit, &base); 
+
+    if (verbose) printf("%d -- size = %d baseptr = %p my_baseptr = %p\n", shm_rank, 
+                        (int) size, (void*) base, (void*) my_base);
+
+    assert(size == ELEM_PER_PROC * sizeof(int));
+    if (shm_rank == 0)
+        assert(base == my_base);
+    else
+        assert(base != my_base);
+
+    MPI_Win_lock_all(MPI_MODE_NOCHECK, shm_win);
+
+    /* Write to all my data */
+    for (i = 0; i < ELEM_PER_PROC; i++) {
+        my_base[i] = i;
+    }
+
+    MPI_Win_sync(shm_win);
+    MPI_Barrier(shm_comm);
+    MPI_Win_sync(shm_win);
+
+    /* Read and verify everyone's data */
+    for (i = 0; i < shm_nproc; i++) {
+        for (j = 0; j < ELEM_PER_PROC; j++) {
+            if ( base[i*ELEM_PER_PROC + j] != j ) {
+                errors++;
+                printf("%d -- Got %d at rank %d index %d, expected %d\n", shm_rank,
+                       base[i*ELEM_PER_PROC + j], i, j, j);
+            }
+        }
+    }
+
+    MPI_Win_unlock_all(shm_win);
+    MPI_Win_free(&shm_win);
+    MPI_Comm_free(&shm_comm);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/win_shared_noncontig.c b/teshsuite/smpi/mpich3-test/rma/win_shared_noncontig.c
new file mode 100644 (file)
index 0000000..a6ab73b
--- /dev/null
@@ -0,0 +1,87 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <mpi.h>
+#include "mpitest.h"
+
+#define ELEM_PER_PROC 10000
+
+const int verbose = 0;
+
+int main(int argc, char **argv) {
+    int      i, j, rank, nproc;
+    int      shm_rank, shm_nproc;
+    MPI_Info alloc_shared_info;
+    int      errors = 0, all_errors = 0;
+    int      disp_unit;
+    int     *my_base;
+    MPI_Win  shm_win;
+    MPI_Comm shm_comm;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Info_create(&alloc_shared_info);
+    MPI_Info_set(alloc_shared_info, "alloc_shared_noncontig", "true");
+
+    MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank, MPI_INFO_NULL, &shm_comm);
+
+    MPI_Comm_rank(shm_comm, &shm_rank);
+    MPI_Comm_size(shm_comm, &shm_nproc);
+
+    /* Allocate ELEM_PER_PROC integers for each process */
+    MPI_Win_allocate_shared(sizeof(int)*ELEM_PER_PROC, sizeof(int), alloc_shared_info, 
+                             shm_comm, &my_base, &shm_win);
+
+    MPI_Win_lock_all(MPI_MODE_NOCHECK, shm_win);
+
+    /* Write to all my data */
+    for (i = 0; i < ELEM_PER_PROC; i++) {
+        my_base[i] = i;
+    }
+
+    MPI_Win_sync(shm_win);
+    MPI_Barrier(shm_comm);
+    MPI_Win_sync(shm_win);
+
+    /* Read and verify everyone's data */
+    for (i = 0; i < shm_nproc; i++) {
+        int      *base;
+        MPI_Aint  size;
+
+        MPI_Win_shared_query(shm_win, i, &size, &disp_unit, &base);
+        assert(size == ELEM_PER_PROC * sizeof(int));
+
+        for (j = 0; j < ELEM_PER_PROC; j++) {
+            if ( base[j] != j ) {
+                errors++;
+                printf("%d -- Got %d at rank %d index %d, expected %d\n", shm_rank, 
+                       base[j], i, j, j);
+            }
+        }
+    }
+
+    MPI_Win_unlock_all(shm_win);
+    MPI_Win_free(&shm_win);
+    MPI_Comm_free(&shm_comm);
+
+    MPI_Info_free(&alloc_shared_info);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/win_shared_noncontig_put.c b/teshsuite/smpi/mpich3-test/rma/win_shared_noncontig_put.c
new file mode 100644 (file)
index 0000000..60409a8
--- /dev/null
@@ -0,0 +1,94 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2012 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <mpi.h>
+#include "mpitest.h"
+
+#define ELEM_PER_PROC 10000
+
+const int verbose = 0;
+
+int main(int argc, char **argv) {
+    int      i, j, rank, nproc;
+    int      shm_rank, shm_nproc;
+    MPI_Info alloc_shared_info;
+    int      errors = 0, all_errors = 0;
+    int      disp_unit;
+    int     *my_base, my_size;
+    MPI_Win  shm_win;
+    MPI_Comm shm_comm;
+
+    MPI_Init(&argc, &argv);
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+    MPI_Info_create(&alloc_shared_info);
+    MPI_Info_set(alloc_shared_info, "alloc_shared_noncontig", "true");
+
+    MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank, MPI_INFO_NULL, &shm_comm);
+
+    MPI_Comm_rank(shm_comm, &shm_rank);
+    MPI_Comm_size(shm_comm, &shm_nproc);
+
+    /* Allocate ELEM_PER_PROC integers on each even rank process */
+    my_size = (shm_rank % 2 == 0) ? sizeof(int)*ELEM_PER_PROC : 0;
+    MPI_Win_allocate_shared(my_size, sizeof(int), alloc_shared_info,
+                             shm_comm, &my_base, &shm_win);
+
+    for (i = 0; i < ELEM_PER_PROC; i++) {
+            MPI_Win_fence(MPI_MODE_NOPRECEDE, shm_win);
+            if (shm_rank % 2 == 0) {
+                MPI_Put(&i, 1, MPI_INT, 
+                        (shm_rank + 2 > shm_nproc) ? 0 : (shm_rank+2) % shm_nproc,
+                        i, 1, MPI_INT, shm_win);
+            }
+            MPI_Win_fence(MPI_MODE_NOSUCCEED, shm_win);
+    }
+
+    MPI_Barrier(shm_comm);
+
+    /* Read and verify everyone's data */
+    for (i = 0; i < shm_nproc; i++) {
+        int      *base;
+        MPI_Aint  size;
+
+        MPI_Win_shared_query(shm_win, i, &size, &disp_unit, &base);
+
+        if (i % 2 == 0) {
+            assert(size == ELEM_PER_PROC * sizeof(int));
+
+            for (j = 0; j < ELEM_PER_PROC; j++) {
+                if ( base[j] != j ) {
+                    errors++;
+                    printf("%d -- Got %d at rank %d index %d, expected %d\n", shm_rank,
+                           base[j], i, j, j);
+                }
+            }
+        } else {
+            assert(size == 0);
+            assert(base == NULL);
+        }
+    }
+
+    MPI_Win_free(&shm_win);
+    MPI_Comm_free(&shm_comm);
+
+    MPI_Info_free(&alloc_shared_info);
+
+    MPI_Reduce(&errors, &all_errors, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
+
+    if (rank == 0 && all_errors == 0)
+        printf(" No Errors\n");
+
+    MPI_Finalize();
+
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/wincall.c b/teshsuite/smpi/mpich3-test/rma/wincall.c
new file mode 100644 (file)
index 0000000..c29b796
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+/*
+static char MTEST_Descrip[] = "Test win_call_errhandler";
+*/
+
+static int calls = 0;
+static int errs = 0;
+static MPI_Win mywin;
+void eh( MPI_Win *win, int *err, ... );
+void eh( MPI_Win *win, int *err, ... )
+{
+    if (*err != MPI_ERR_OTHER) {
+       errs++;
+       printf( "Unexpected error code\n" );
+    }
+    if (*win != mywin) {
+       errs++;
+       printf( "Unexpected window\n" );
+    }
+    calls++;
+    return;
+}
+int main( int argc, char *argv[] )
+{
+    int buf[2];
+    MPI_Win        win;
+    MPI_Errhandler newerr;
+    int            i;
+
+    MTest_Init( &argc, &argv );
+
+    /* Run this test multiple times to expose storage leaks (we found a leak
+       of error handlers with this test) */
+    for (i=0;i<1000; i++)  {
+       calls = 0;
+       
+       MPI_Win_create( buf, 2*sizeof(int), sizeof(int), 
+                       MPI_INFO_NULL, MPI_COMM_WORLD, &win );
+       mywin = win;
+       
+       MPI_Win_create_errhandler( eh, &newerr );
+       
+       MPI_Win_set_errhandler( win, newerr );
+       MPI_Win_call_errhandler( win, MPI_ERR_OTHER );
+       MPI_Errhandler_free( &newerr );
+       if (calls != 1) {
+           errs++;
+           printf( "Error handler not called\n" );
+       }
+       MPI_Win_free( &win );
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/window_creation.c b/teshsuite/smpi/mpich3-test/rma/window_creation.c
new file mode 100644 (file)
index 0000000..a805350
--- /dev/null
@@ -0,0 +1,53 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpi.h>
+
+#define DATA_NELTS  1000
+#define NUM_WIN     1000
+#define DATA_SZ     (DATA_NELTS*sizeof(int))
+
+static int verbose = 0;
+
+int main(int argc, char ** argv) {
+  int      rank, nproc, i;
+  void    *base_ptrs[NUM_WIN];
+  MPI_Win  windows[NUM_WIN];
+
+  MPI_Init(&argc, &argv);
+
+  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+  MPI_Comm_size(MPI_COMM_WORLD, &nproc);
+
+  if (rank == 0) if (verbose) printf("Starting MPI window creation test with %d processes\n", nproc);
+
+  /* Perform a pile of window creations */
+  for (i = 0; i < NUM_WIN; i++) {
+    if (rank == 0) if (verbose) printf(" + Creating window %d\n", i);
+
+    MPI_Alloc_mem(DATA_SZ, MPI_INFO_NULL, &base_ptrs[i]);
+    MPI_Win_create(base_ptrs[i], DATA_SZ, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &windows[i]);
+  }
+
+  MPI_Barrier(MPI_COMM_WORLD);
+
+  /* Free all the windows */
+  for (i = 0; i < NUM_WIN; i++) {
+    if (rank == 0) if (verbose) printf(" + Freeing window %d\n", i);
+
+    MPI_Win_free(&windows[i]);
+    MPI_Free_mem(base_ptrs[i]);
+  }
+
+  if (rank == 0) printf(" No Errors\n");
+
+  MPI_Finalize();
+
+  return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/winname.c b/teshsuite/smpi/mpich3-test/rma/winname.c
new file mode 100644 (file)
index 0000000..290f26e
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitestconf.h"
+#include "mpitest.h"
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    MPI_Win win;
+    int cnt, namelen;
+    char name[MPI_MAX_OBJECT_NAME], nameout[MPI_MAX_OBJECT_NAME];
+
+    MTest_Init( &argc, &argv );
+
+    cnt = 0;
+    while (MTestGetWin( &win, 1 )) {
+       if (win == MPI_WIN_NULL) continue;
+    
+       sprintf( name, "win-%d", cnt );
+       cnt++;
+       MPI_Win_set_name( win, name );
+       nameout[0] = 0;
+       MPI_Win_get_name( win, nameout, &namelen );
+       if (strcmp( name, nameout )) {
+           errs++;
+           printf( "Unexpected name, was %s but should be %s\n",
+                   nameout, name );
+       }
+
+       MTestFreeWin( &win );
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+}
diff --git a/teshsuite/smpi/mpich3-test/rma/wintest.c b/teshsuite/smpi/mpich3-test/rma/wintest.c
new file mode 100644 (file)
index 0000000..a8a784c
--- /dev/null
@@ -0,0 +1,83 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2001 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h" 
+#include "stdio.h"
+#include "mpitest.h"
+
+/* tests put and get with post/start/complete/test on 2 processes */
+/* Same as test2.c, but uses win_test instead of win_wait */
+
+#define SIZE1 10
+#define SIZE2 20
+
+int main(int argc, char *argv[]) 
+{ 
+    int rank, destrank, nprocs, A[SIZE2], B[SIZE2], i;
+    MPI_Comm CommDeuce;
+    MPI_Group comm_group, group;
+    MPI_Win win;
+    int errs = 0, flag;
+
+    MTest_Init(&argc,&argv); 
+    MPI_Comm_size(MPI_COMM_WORLD,&nprocs); 
+    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
+
+    if (nprocs < 2) {
+        printf("Run this program with 2 or more processes\n");
+        MPI_Abort(MPI_COMM_WORLD, 1);
+    }
+
+    MPI_Comm_split(MPI_COMM_WORLD, (rank < 2), rank, &CommDeuce);
+
+    if (rank < 2) {
+        MPI_Comm_group(CommDeuce, &comm_group);
+
+        if (rank == 0) {
+            for (i=0; i<SIZE2; i++) A[i] = B[i] = i;
+            MPI_Win_create(NULL, 0, 1, MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 1;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_start(group, 0, win);
+            for (i=0; i<SIZE1; i++)
+                MPI_Put(A+i, 1, MPI_INT, 1, i, 1, MPI_INT, win); 
+            for (i=0; i<SIZE1; i++)
+                MPI_Get(B+i, 1, MPI_INT, 1, SIZE1+i, 1, MPI_INT, win);
+
+            MPI_Win_complete(win);
+
+            for (i=0; i<SIZE1; i++) 
+                if (B[i] != (-4)*(i+SIZE1)) {
+                    printf("Get Error: B[i] is %d, should be %d\n", B[i], (-4)*(i+SIZE1));
+                    errs++;
+                }
+        }
+        else {  /* rank=1 */
+            for (i=0; i<SIZE2; i++) B[i] = (-4)*i;
+            MPI_Win_create(B, SIZE2*sizeof(int), sizeof(int), MPI_INFO_NULL, CommDeuce, &win);
+            destrank = 0;
+            MPI_Group_incl(comm_group, 1, &destrank, &group);
+            MPI_Win_post(group, 0, win);
+            flag = 0;
+            while (!flag)
+                MPI_Win_test(win, &flag);
+
+            for (i=0; i<SIZE1; i++) {
+                if (B[i] != i) {
+                    printf("Put Error: B[i] is %d, should be %d\n", B[i], i);
+                    errs++;
+                }
+            }
+        }
+
+        MPI_Group_free(&group);
+        MPI_Group_free(&comm_group);
+        MPI_Win_free(&win); 
+    }
+    MPI_Comm_free(&CommDeuce);
+    MTest_Finalize(errs);
+    MPI_Finalize();
+    return 0; 
+} 
index 900c919..aef3b2c 100644 (file)
@@ -6,6 +6,7 @@ coll
 comm
 datatype
 #errhan
+rma
 group
 #info
 init
index a7e1547..f1f3c9a 100644 (file)
@@ -21,6 +21,8 @@ set(tesh_files
   ${tesh_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/pt2pt.tesh
   ${CMAKE_CURRENT_SOURCE_DIR}/TI_output.tesh
+  ${CMAKE_CURRENT_SOURCE_DIR}/broken_hostfiles.tesh
+
   PARENT_SCOPE
   )
 set(xml_files
@@ -39,6 +41,7 @@ set(bin_files
   )
 set(txt_files
   ${txt_files}
+  ${CMAKE_CURRENT_SOURCE_DIR}/empty-hostfile.txt
 
   PARENT_SCOPE
   )
diff --git a/teshsuite/smpi/pingpong/broken_hostfiles.tesh b/teshsuite/smpi/pingpong/broken_hostfiles.tesh
new file mode 100644 (file)
index 0000000..8783040
--- /dev/null
@@ -0,0 +1,8 @@
+! setenv LD_LIBRARY_PATH=../../lib
+! expect return 1
+$ ${bindir:=.}/../../../bin/smpirun -hostfile empty-hostfile.txt          -platform ../../../examples/msg/small_platform.xml -np 4 ${bindir:=.}/pingpong -q --log=smpi_kernel.thres:warning
+> [smpirun] ** error: the hostfile 'empty-hostfile.txt' is empty. Aborting.
+
+! expect return 1
+$ ${bindir:=.}/../../../bin/smpirun -hostfile hostfile-does-not-exist.txt -platform ../../../examples/msg/small_platform.xml -np 4 ${bindir:=.}/pingpong -q --log=smpi_kernel.thres:warning
+> [smpirun] ** error: the file 'hostfile-does-not-exist.txt' does not exist. Aborting.
diff --git a/teshsuite/smpi/pingpong/empty-hostfile.txt b/teshsuite/smpi/pingpong/empty-hostfile.txt
new file mode 100644 (file)
index 0000000..e69de29
index 7c4fe73..2a1f6f0 100644 (file)
@@ -80,7 +80,7 @@ void test(char *graph_file)
     buf = xbt_new0(char, n * 20);
     for (i = 0; i < n; i++) {
       for (j = 0; j < n; j++) {
-        sprintf(buf + strlen(buf), "%e\t", adj[i * n + j]);
+        sprintf(buf + strlen(buf), "%6.3f\t", adj[i * n + j]);
       }
       XBT_INFO("%s", buf);
       buf[0] = '\000';
index fac3204..18798bc 100644 (file)
@@ -4,14 +4,14 @@ $ $SG_TEST_EXENV ${bindir:=.}/graphxml_usage graph.xml
 > [0.000000] [test/INFO] ---- Testing XML export. Exporting to testgraph.xml ----
 > [0.000000] [test/INFO] ---- Testing GraphViz export. Exporting to testgraph.dot ----
 > [0.000000] [test/INFO] ---- Dumping Edge lengths ----
-> [0.000000] [test/INFO] 0.000000e+00  4.100000e-01    -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   
-> [0.000000] [test/INFO] -1.000000e+00 0.000000e+00    5.100000e-01    -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   
-> [0.000000] [test/INFO] -1.000000e+00 -1.000000e+00   0.000000e+00    5.000000e-01    -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   
-> [0.000000] [test/INFO] -1.000000e+00 -1.000000e+00   -1.000000e+00   0.000000e+00    -1.000000e+00   3.800000e-01    -1.000000e+00   -1.000000e+00   
-> [0.000000] [test/INFO] -1.000000e+00 -1.000000e+00   -1.000000e+00   3.600000e-01    0.000000e+00    -1.000000e+00   -1.000000e+00   -1.000000e+00   
-> [0.000000] [test/INFO] -1.000000e+00 -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   0.000000e+00    -1.000000e+00   -1.000000e+00   
-> [0.000000] [test/INFO] -1.000000e+00 -1.000000e+00   -1.000000e+00   -1.000000e+00   3.800000e-01    -1.000000e+00   0.000000e+00    -1.000000e+00   
-> [0.000000] [test/INFO] -1.000000e+00 -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   -1.000000e+00   0.000000e+00    
+> [0.000000] [test/INFO]  0.000         0.410  -1.000  -1.000  -1.000  -1.000  -1.000  -1.000  
+> [0.000000] [test/INFO] -1.000         0.000   0.510  -1.000  -1.000  -1.000  -1.000  -1.000  
+> [0.000000] [test/INFO] -1.000        -1.000   0.000   0.500  -1.000  -1.000  -1.000  -1.000  
+> [0.000000] [test/INFO] -1.000        -1.000  -1.000   0.000  -1.000   0.380  -1.000  -1.000  
+> [0.000000] [test/INFO] -1.000        -1.000  -1.000   0.360   0.000  -1.000  -1.000  -1.000  
+> [0.000000] [test/INFO] -1.000        -1.000  -1.000  -1.000  -1.000   0.000  -1.000  -1.000  
+> [0.000000] [test/INFO] -1.000        -1.000  -1.000  -1.000   0.380  -1.000   0.000  -1.000  
+> [0.000000] [test/INFO] -1.000        -1.000  -1.000  -1.000  -1.000  -1.000  -1.000   0.000  
 > [0.000000] [test/INFO] ---- Testing Shortest Paths ----
 > [0.000000] [test/INFO] A     B       B       B       B       
 > [0.000000] [test/INFO] B     C       C       C       
index 7bd1431..c200c49 100755 (executable)
@@ -36,16 +36,16 @@ class SimJar(object):
        if len(path)==3 and path[0] == 'NATIVE':
          platform, arch = path[1:3]
        elif z.filename=='META-INF/MANIFEST.MF':
-          zf.read('META-INF/MANIFEST.MF')      
+          zf.read('META-INF/MANIFEST.MF')
           git_version = re.findall(r"Implementation-Version: \"(.*?)\"", zf.read('META-INF/MANIFEST.MF'))
-      
-      assert platform is not None and git_version is not None, "Jar file not valid"
+
+      assert platform is not None and git_version is not None, "Jar file not valid (%s, %s)"%(platform, git_version)
       print "Adding: %s %s"%(platform, arch)
       if self.git_version is None:
        self.git_version = git_version
       elif self.git_version != git_version:
        print "WARNING: Assembling jar of various commits (%s vs %s)"%(self.git_version, git_version)
-      
+
       for info in zf.infolist():
         if info.filename not in self.done:
           self.done.add(info.filename)
index 5688054..89e50a9 100644 (file)
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-if(WIN32)
+if(1)
 #  add_custom_target(tesh ALL
 #    DEPENDS ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/tesh.pl
 #    COMMENT "Install ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/tesh.pl"
@@ -9,7 +9,7 @@ if(WIN32)
     configure_file("${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/tesh.pl"
   "${CMAKE_BINARY_DIR}/bin/tesh" @ONLY IMMEDIATE)
 
-    file(COPY        ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/Diff.pm 
+    file(COPY        ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/Diff.pm
          DESTINATION ${CMAKE_BINARY_DIR}/bin
          FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
                           GROUP_EXECUTE GROUP_READ)